diff options
| author | Matthias Melcher <github@matthiasm.com> | 2024-01-14 01:42:05 +0100 |
|---|---|---|
| committer | Matthias Melcher <github@matthiasm.com> | 2024-01-14 01:42:05 +0100 |
| commit | 5c90938aa3aa6dcb6f941e8f07937ae1d8951c17 (patch) | |
| tree | 8682dfc4e8eab895c34e70652a9392e91247f664 /src | |
| parent | be1c96b98ac71bd71aeb08066ef22ee57171da4c (diff) | |
#887: Fixes FLTK file chooser not releasing preview image.
...when hidden
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_File_Chooser.cxx | 20 | ||||
| -rw-r--r-- | src/Fl_File_Chooser.fl | 28 | ||||
| -rw-r--r-- | src/Fl_File_Chooser2.cxx | 8 |
3 files changed, 27 insertions, 29 deletions
diff --git a/src/Fl_File_Chooser.cxx b/src/Fl_File_Chooser.cxx index e726a50da..aa74ffbb9 100644 --- a/src/Fl_File_Chooser.cxx +++ b/src/Fl_File_Chooser.cxx @@ -1,7 +1,7 @@ // // Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2021 by Bill Spitzak and others. +// Copyright 1998-2024 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -29,8 +29,7 @@ void Fl_File_Chooser::cb_window_i(Fl_Double_Window*, void*) { fileName->value(""); fileList->deselect(); - Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this); - window->hide(); + hide(); } void Fl_File_Chooser::cb_window(Fl_Double_Window* o, void* v) { ((Fl_File_Chooser*)(o->user_data()))->cb_window_i(o,v); @@ -105,7 +104,7 @@ void Fl_File_Chooser::cb_fileName(Fl_File_Input* o, void* v) { } void Fl_File_Chooser::cb_okButton_i(Fl_Return_Button*, void*) { - window->hide(); + hide(); // Do any callback that is registered... if (callback_) @@ -118,8 +117,7 @@ void Fl_File_Chooser::cb_okButton(Fl_Return_Button* o, void* v) { void Fl_File_Chooser::cb_cancelButton_i(Fl_Button*, void*) { fileName->value(""); fileList->deselect(); - Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this); - window->hide(); + hide(); } void Fl_File_Chooser::cb_cancelButton(Fl_Button* o, void* v) { ((Fl_File_Chooser*)(o->parent()->parent()->parent()->user_data()))->cb_cancelButton_i(o,v); @@ -222,19 +220,19 @@ Fl_File_Chooser::Fl_File_Chooser(const char *pathname, const char *pattern, int } // Fl_Tile* o { Fl_Group* o = new Fl_Group(10, 275, 470, 95); { Fl_Group* o = new Fl_Group(10, 275, 470, 20); - { previewButton = new Fl_Check_Button(10, 275, 73, 20, "Preview"); + { previewButton = new Fl_Check_Button(10, 275, 105, 20, "Preview"); previewButton->shortcut(0x80070); previewButton->down_box(FL_DOWN_BOX); previewButton->value(1); previewButton->callback((Fl_Callback*)cb_previewButton); previewButton->label(preview_label); } // Fl_Check_Button* previewButton - { showHiddenButton = new Fl_Check_Button(115, 275, 165, 20, "Show hidden files"); + { showHiddenButton = new Fl_Check_Button(115, 275, 140, 20, "Show hidden files"); showHiddenButton->down_box(FL_DOWN_BOX); showHiddenButton->callback((Fl_Callback*)cb_showHiddenButton); showHiddenButton->label(hidden_label); } // Fl_Check_Button* showHiddenButton - { Fl_Box* o = new Fl_Box(115, 275, 365, 20); + { Fl_Box* o = new Fl_Box(255, 275, 225, 20); Fl_Group::current()->resizable(o); } // Fl_Box* o o->end(); @@ -364,10 +362,6 @@ void Fl_File_Chooser::filter_value(int f) { showChoiceCB(); } -void Fl_File_Chooser::hide() { - window->hide(); -} - void Fl_File_Chooser::iconsize(uchar s) { fileList->iconsize(s); } diff --git a/src/Fl_File_Chooser.fl b/src/Fl_File_Chooser.fl index 0d5e7db0f..caa695ce8 100644 --- a/src/Fl_File_Chooser.fl +++ b/src/Fl_File_Chooser.fl @@ -5,7 +5,7 @@ code_name {.cxx} comment {// // Fl_File_Chooser dialog for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2021 by Bill Spitzak and others. +// Copyright 1998-2024 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -76,7 +76,7 @@ Determines the type of file chooser presented to the user. } decl {void update_preview();} {private local } - Function {Fl_File_Chooser(const char *pathname, const char *pattern, int type_val, const char *title)} {open selected + Function {Fl_File_Chooser(const char *pathname, const char *pattern, int type_val, const char *title)} {open } { code {if (!prefs_) { prefs_ = new Fl_Preferences(Fl_Preferences::CORE_USER, "fltk.org", "filechooser"); @@ -86,10 +86,9 @@ Determines the type of file chooser presented to the user. label {Choose File} callback {fileName->value(""); fileList->deselect(); -Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this); -window->hide();} open - private xywh {0 0 490 380} type Double hide resizable - code0 {if (title) window->label(title);} modal +hide();} open selected + private xywh {467 276 490 380} type Double resizable + code0 {if (title) window->label(title);} modal visible } { Fl_Group {} {open private xywh {10 10 470 25} @@ -140,17 +139,17 @@ window->hide();} open Fl_Check_Button previewButton { label Preview callback {preview(previewButton->value());} - xywh {10 275 73 20} down_box DOWN_BOX shortcut 0x80070 value 1 + xywh {10 275 105 20} down_box DOWN_BOX shortcut 0x80070 value 1 code0 {previewButton->label(preview_label);} } Fl_Check_Button showHiddenButton { label {Show hidden files} callback {showHidden(showHiddenButton->value());} - xywh {115 275 165 20} down_box DOWN_BOX + xywh {115 275 140 20} down_box DOWN_BOX code0 {showHiddenButton->label(hidden_label);} } Fl_Box {} { - private xywh {115 275 365 20} resizable + private xywh {255 275 225 20} resizable } } Fl_File_Input fileName { @@ -168,7 +167,7 @@ window->hide();} open } { Fl_Return_Button okButton { label OK - callback {window->hide(); + callback {hide(); // Do any callback that is registered... if (callback_) @@ -181,8 +180,7 @@ if (callback_) label Cancel callback {fileName->value(""); fileList->deselect(); -Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this); -window->hide();} +hide();} private xywh {408 345 72 25} code0 {o->label(fl_cancel);} } @@ -298,10 +296,6 @@ data_ = d;} {} code {showChoice->value(f); showChoiceCB();} {} } - Function {hide()} {return_type void - } { - code {window->hide();} {} - } Function {iconsize(uchar s)} {return_type void } { code {fileList->iconsize(s);} {} @@ -345,6 +339,8 @@ okButton->parent()->init_sizes();} {} } decl {void show();} {public local } + decl {void hide();} {public local + } Function {shown()} {return_type int } { code {return window->shown();} {} diff --git a/src/Fl_File_Chooser2.cxx b/src/Fl_File_Chooser2.cxx index 94aed5f79..56cce9950 100644 --- a/src/Fl_File_Chooser2.cxx +++ b/src/Fl_File_Chooser2.cxx @@ -1551,6 +1551,14 @@ void Fl_File_Chooser::show() if (!Fl::system_driver()->dot_file_hidden()) showHiddenButton->hide(); } +void Fl_File_Chooser::hide() { + Fl::remove_timeout((Fl_Timeout_Handler)previewCB, this); + Fl_Shared_Image *oldimage = (Fl_Shared_Image*)previewBox->image(); + if (oldimage) oldimage->release(); + previewBox->image(NULL); + window->hide(); +} + void Fl_File_Chooser::showHidden(int value) { if (value) { |
