summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Enumerations.H5
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx12
2 files changed, 9 insertions, 8 deletions
diff --git a/FL/Enumerations.H b/FL/Enumerations.H
index 5a39c2a92..404a3d91e 100644
--- a/FL/Enumerations.H
+++ b/FL/Enumerations.H
@@ -256,9 +256,8 @@ enum Fl_Event { // events
/** This widget is no longer visible, due to Fl_Widget::hide() being
called on it or one of its parents, or due to a parent window being
- minimized (under Wayland, minimized toplevel windows don't receive
- the FL_HIDE event, except if minimized programmatically calling
- Fl_Window::iconize()).
+ minimized (old Wayland versions may not send the FL_HIDE
+ event to minimized toplevel windows).
Fl_Widget::visible() may still be true after this, but the
widget is visible only if visible() is true for it and all its
parents (use Fl_Widget::visible_r() to check this).
diff --git a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index ba961020d..6e3deeaa0 100644
--- a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
@@ -581,7 +581,9 @@ void Fl_Wayland_Window_Driver::iconize() {
struct wld_window *wl_win = (struct wld_window*)ip->xid;
if (wl_win->kind == DECORATED) {
libdecor_frame_set_minimized(wl_win->frame);
- Fl::handle(FL_HIDE, pWindow);
+ if (xdg_toplevel_get_version(xdg_toplevel()) < 6) {
+ Fl::handle(FL_HIDE, pWindow);
+ }
}
else if (wl_win->kind == UNFRAMED && wl_win->xdg_toplevel) xdg_toplevel_set_minimized(wl_win->xdg_toplevel);
}
@@ -961,10 +963,6 @@ static void handle_configure(struct libdecor_frame *frame,
if (is_2nd_run) driver->wait_for_expose_value = 0;
//fprintf(stderr, "handle_configure fl_win=%p size:%dx%d state=%x wait_for_expose_value=%d is_2nd_run=%d\n", window->fl_win, width,height,window_state,driver->wait_for_expose_value, is_2nd_run);
-/* We would like to do FL_HIDE when window is minimized but :
- "There is no way to know if the surface is currently minimized, nor is there any way to
- unset minimization on this surface. If you are looking to throttle redrawing when minimized,
- please instead use the wl_surface.frame event" */
if (window_state & LIBDECOR_WINDOW_STATE_ACTIVE) {
if (Fl_Wayland_Screen_Driver::compositor == Fl_Wayland_Screen_Driver::WESTON) {
// After click on titlebar, weston calls wl_keyboard_enter() for a
@@ -974,7 +972,11 @@ static void handle_configure(struct libdecor_frame *frame,
if (!window->fl_win->border()) libdecor_frame_set_visibility(window->frame, false);
else if (!libdecor_frame_is_visible(window->frame)) {
libdecor_frame_set_visibility(window->frame, true);
+ } else if (!window->fl_win->visible()) {
+ Fl::handle(FL_SHOW, window->fl_win); // useful when un-minimizing
}
+ } else if (window_state & LIBDECOR_WINDOW_STATE_SUSPENDED) { // window is minimized
+ Fl::handle(FL_HIDE, window->fl_win);
}
if (window->fl_win->border())