diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2023-10-19 08:27:46 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2023-10-19 08:27:59 +0200 |
| commit | c1d9376934182201f45db2bf6941ae4f766a2918 (patch) | |
| tree | 976fc6b68443e1faf1fae2691be3c1870f9d7a01 | |
| parent | 56af338cfde02e74f236f55dc72631c3b8d8008c (diff) | |
Fix for "Keyboard sometimes stops working after Ctrl/+ or Ctrl/-" (#794)
| -rw-r--r-- | src/Fl_Screen_Driver.cxx | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/Fl_Screen_Driver.cxx b/src/Fl_Screen_Driver.cxx index ad3143e17..a98577e19 100644 --- a/src/Fl_Screen_Driver.cxx +++ b/src/Fl_Screen_Driver.cxx @@ -447,6 +447,9 @@ void Fl_Screen_Driver::transient_scale_display(float f, int nscreen) 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 + win->wait_for_expose(); + Fl::flush(); + Fl::check(); } // respond to Ctrl-'+' and Ctrl-'-' and Ctrl-'0' (Ctrl-'=' is same as Ctrl-'+') by rescaling all windows @@ -496,9 +499,14 @@ int Fl_Screen_Driver::scale_handler(int event) f = scaling_values[i]; } if (f == old_f) return 1; - screen_dr->rescale_all_windows_from_screen(screen, f*initial_scale); - Fl_Screen_Driver::transient_scale_display(f, screen); - Fl::handle(FL_ZOOM_EVENT, NULL); + static bool in_use = false; + if (!in_use) { // avoid recursive use (see issue #794) + in_use = true; + screen_dr->rescale_all_windows_from_screen(screen, f * initial_scale); + Fl_Screen_Driver::transient_scale_display(f, screen); + Fl::handle(FL_ZOOM_EVENT, NULL); + in_use = false; + } return 1; } return 0; |
