|
|
commit 2c52ebe210d75135db54fe878d8649396640cb1c
Author: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
AuthorDate: Mon May 16 16:34:59 2022 +0200
Commit: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
CommitDate: Mon May 16 16:34:59 2022 +0200
Improve Fl_Wayland_Window_Driver::wait_for_expose().
src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index e335329..feadb20 100644
--- src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
@@ -145,8 +145,6 @@ 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()) {
@@ -159,11 +157,6 @@ 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);
- }
}
}
@@ -830,8 +823,8 @@ static void handle_configure(struct libdecor_frame *frame,
void Fl_Wayland_Window_Driver::wait_for_expose()
{
Fl_Window_Driver::wait_for_expose();
+ Window xid = fl_xid(pWindow);
if (pWindow->fullscreen_active()) {
- Window xid = fl_xid(pWindow);
if (xid->kind == DECORATED) {
while (!(xid->state & LIBDECOR_WINDOW_STATE_FULLSCREEN) || !(xid->state & LIBDECOR_WINDOW_STATE_ACTIVE)) {
wl_display_dispatch(Fl_Wayland_Screen_Driver::wl_display);
@@ -839,6 +832,10 @@ void Fl_Wayland_Window_Driver::wait_for_expose()
} else if (xid->kind == UNFRAMED) {
wl_display_roundtrip(Fl_Wayland_Screen_Driver::wl_display);
}
+ } else if (xid->kind == DECORATED) {
+ while (!(xid->state & LIBDECOR_WINDOW_STATE_ACTIVE)) {
+ wl_display_dispatch(Fl_Wayland_Screen_Driver::wl_display);
+ }
}
}
[ Direct Link to Message ] | |
|
| |