diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2019-03-27 17:16:25 +0100 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2019-03-27 17:16:25 +0100 |
| commit | 9e18662d86993b99b716bd3d415ea64e6c7f5c67 (patch) | |
| tree | 28e23d1c483e0f88b0a10bf272a00067a411938c /src | |
| parent | 0a7fb9f7b3a7e94346336725421293343746f254 (diff) | |
Use Fl_Widget_Tracker to check for existence of the putative focus widget
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Screen_Driver.cxx | 24 |
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 } |
