summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-05-16 11:25:28 +0200
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-05-16 11:25:28 +0200
commit5747c3eed929f00717c65a0e23986e9a22d42541 (patch)
tree6535aaf08e3bcd163893c79c42001c730f457e1a
parent6efdcb1e6fa19660de090f04ad50a5402403a947 (diff)
Fix Fl_Wayland_Window_Driver::take_focus() required for recent Wayland versions.
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index 4dddcd146..e3353298c 100644
--- a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
@@ -144,6 +144,9 @@ void Fl_Wayland_Window_Driver::take_focus()
{
Window w = fl_xid(pWindow);
if (w) {
+ Fl_Widget *old_focus = Fl::focus();
+ // necessary for recent Wayland versions; may change focus
+ wl_display_dispatch(Fl_Wayland_Screen_Driver::wl_display);
Fl_Window *old_first = Fl::first_window();
Window first_xid = (old_first ? fl_xid(old_first->top_window()) : NULL);
if (first_xid && first_xid != w && xdg_toplevel()) {
@@ -156,6 +159,11 @@ void Fl_Wayland_Window_Driver::take_focus()
}
// this sets the first window
fl_find(w);
+ if (old_focus && Fl::focus() != old_focus) { // reset focus as at function entry
+ extern Fl_Window *fl_xfocus;
+ fl_xfocus = old_focus->top_window();
+ Fl::focus(old_focus);
+ }
}
}