summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2019-03-27 11:28:55 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2019-03-27 11:28:55 +0100
commit9a9b02f9dd6fd56c6ca5610c3414964423b3c863 (patch)
tree3c933f1903d9ab52590a2b97729d27bd851ea3c3 /src
parente3e195a09cdf86c5cb7a395a9740de1b0109fbfd (diff)
Don't change the focus widget after showing transient scale factor window
Diffstat (limited to 'src')
-rw-r--r--src/Fl_Screen_Driver.cxx22
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