diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2019-03-27 11:28:55 +0100 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2019-03-27 11:28:55 +0100 |
| commit | 9a9b02f9dd6fd56c6ca5610c3414964423b3c863 (patch) | |
| tree | 3c933f1903d9ab52590a2b97729d27bd851ea3c3 /src | |
| parent | e3e195a09cdf86c5cb7a395a9740de1b0109fbfd (diff) | |
Don't change the focus widget after showing transient scale factor window
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Screen_Driver.cxx | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/Fl_Screen_Driver.cxx b/src/Fl_Screen_Driver.cxx index 71f878096..c5a118e30 100644 --- a/src/Fl_Screen_Driver.cxx +++ b/src/Fl_Screen_Driver.cxx @@ -328,10 +328,16 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f) delete[] win_array; } -static void del_transient_window(void *data) { - Fl_Window *win = (Fl_Window*)data; - delete (Fl_Image*)win->shape(); - Fl::delete_widget(win); +typedef struct { + Fl_Window *win; + Fl_Widget *widget; +} win_and_widget; + +static void del_transient_window(win_and_widget *data) { + delete (Fl_Image*)data->win->shape(); + Fl::delete_widget(data->win); + if (data->widget) Fl::focus(data->widget); + delete data; } void Fl_Screen_Driver::transient_scale_display(float f, int nscreen) @@ -374,8 +380,14 @@ void Fl_Screen_Driver::transient_scale_display(float f, int nscreen) win->set_non_modal(); Fl_Window_Driver::driver(win)->screen_num(nscreen); Fl_Window_Driver::driver(win)->force_position(1); + win_and_widget *data = new win_and_widget; + data->win = win; + data->widget = Fl::focus(); + if (data->widget->top_window()->user_data() == &transient_scale_display) { + data->widget = 0; + } win->show(); - Fl::add_timeout(1, del_transient_window, win); // delete after 1 sec + Fl::add_timeout(1, (Fl_Timeout_Handler)del_transient_window, data); // delete after 1 sec } // respond to Ctrl-'+' and Ctrl-'-' and Ctrl-'0' (Ctrl-'=' is same as Ctrl-'+') by rescaling all windows |
