summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2019-03-27 17:16:25 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2019-03-27 17:16:25 +0100
commit9e18662d86993b99b716bd3d415ea64e6c7f5c67 (patch)
tree28e23d1c483e0f88b0a10bf272a00067a411938c
parent0a7fb9f7b3a7e94346336725421293343746f254 (diff)
Use Fl_Widget_Tracker to check for existence of the putative focus widget
-rw-r--r--src/Fl_Screen_Driver.cxx24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/Fl_Screen_Driver.cxx b/src/Fl_Screen_Driver.cxx
index 187165b0a..fe6b88d85 100644
--- a/src/Fl_Screen_Driver.cxx
+++ b/src/Fl_Screen_Driver.cxx
@@ -326,15 +326,18 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f)
delete[] win_array;
}
-typedef struct {
+struct WinAndTracker {
Fl_Window *win;
- Fl_Widget *widget;
-} WinAndWidget;
+ Fl_Widget_Tracker *tracker;
+};
-static void del_transient_window(WinAndWidget *data) {
+static void del_transient_window(WinAndTracker *data) {
delete (Fl_Image*)data->win->shape();
Fl::delete_widget(data->win);
- if (data->widget) Fl::focus(data->widget);
+ if (data->tracker) {
+ if (data->tracker->exists()) Fl::focus(data->tracker->widget());
+ delete data->tracker;
+ }
delete data;
}
@@ -378,15 +381,10 @@ 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);
- WinAndWidget *data = new WinAndWidget;
+ WinAndTracker *data = new WinAndTracker;
data->win = win;
- data->widget = Fl::focus();
- if (data->widget) {
- Fl_Window *top = data->widget->top_window();
- if (!top || top->user_data() == &transient_scale_display) {
- data->widget = 0;
- }
- }
+ Fl_Widget *widget = Fl::focus();
+ data->tracker = (widget ? new Fl_Widget_Tracker(widget) : NULL);
win->show();
Fl::add_timeout(1, (Fl_Timeout_Handler)del_transient_window, data); // delete after 1 sec
}