]> git.mdlowis.com Git - proto/labwc.git/commitdiff
foreign: handle minimize request
authorJohan Malm <jgm323@gmail.com>
Thu, 5 Aug 2021 12:00:34 +0000 (13:00 +0100)
committerJohan Malm <jgm323@gmail.com>
Thu, 5 Aug 2021 12:00:34 +0000 (13:00 +0100)
include/labwc.h
src/cursor.c
src/desktop.c
src/foreign.c
src/view.c

index 580fe0ffd8a22af64d9a7d05a8b2440250dcae04..bf33ff3afb2ff1c5393dc1a0a2257ce5afcb808f 100644 (file)
@@ -225,6 +225,7 @@ struct view {
 
        struct wlr_foreign_toplevel_handle_v1 *toplevel_handle;
        struct wl_listener toplevel_handle_request_maximize;
+       struct wl_listener toplevel_handle_request_minimize;
 
        struct wl_listener map;
        struct wl_listener unmap;
@@ -296,8 +297,7 @@ void subsurface_create(struct view *view, struct wlr_subsurface *wlr_subsurface)
 
 void view_move_resize(struct view *view, struct wlr_box geo);
 void view_move(struct view *view, double x, double y);
-void view_minimize(struct view *view);
-void view_unminimize(struct view *view);
+void view_minimize(struct view *view, bool minimized);
 /* view_wlr_output - return the output that a view is mostly on */
 struct wlr_output *view_wlr_output(struct view *view);
 void view_center(struct view *view);
index 99772b7699fb6eabcd280fefb0f8888fb7150db1..fe50d19acb4e148baa56572303dc0e0f4ce1fe40 100644 (file)
@@ -337,7 +337,7 @@ cursor_button(struct wl_listener *listener, void *data)
                view->impl->close(view);
                break;
        case LAB_SSD_BUTTON_ICONIFY:
-               view_minimize(view);
+               view_minimize(view, true);
                break;
        case LAB_SSD_PART_TITLE:
                interactive_begin(view, LAB_INPUT_STATE_MOVE, 0);
index 1b0e3b7f3fe5dee0e16b9b21c319dd6289678270..a727bb4c7373e989f995fdf52ec123570400772c 100644 (file)
@@ -98,7 +98,7 @@ desktop_focus_view(struct seat *seat, struct view *view)
        }
        if (view->minimized) {
                /* this will unmap and then focus */
-               view_unminimize(view);
+               view_minimize(view, false);
                return;
        } else if (view->mapped) {
                struct wlr_surface *prev_surface;
index 2f8934fe55dac7bbd2e729d87c39d6f96e3d64e0..82eb28e852e43eac3eee7289765e9a264c50ed57 100644 (file)
@@ -1,12 +1,20 @@
 #include "labwc.h"
 
+static void
+handle_toplevel_handle_request_minimize(struct wl_listener *listener, void *data)
+{
+       struct view *view = wl_container_of(listener, view,
+               toplevel_handle_request_minimize);
+       struct wlr_foreign_toplevel_handle_v1_minimized_event *event = data;
+       view_minimize(view, event->minimized);
+}
+
 static void
 handle_toplevel_handle_request_maximize(struct wl_listener *listener, void *data)
 {
        struct view *view = wl_container_of(listener, view,
                toplevel_handle_request_maximize);
        struct wlr_foreign_toplevel_handle_v1_maximized_event *event = data;
-       printf("max=%d\n", event->maximized);
        view_maximize(view, event->maximized);
 }
 
@@ -23,4 +31,8 @@ foreign_toplevel_handle_create(struct view *view)
                handle_toplevel_handle_request_maximize;
        wl_signal_add(&view->toplevel_handle->events.request_maximize,
                &view->toplevel_handle_request_maximize);
+       view->toplevel_handle_request_minimize.notify =
+               handle_toplevel_handle_request_minimize;
+       wl_signal_add(&view->toplevel_handle->events.request_minimize,
+               &view->toplevel_handle_request_minimize);
 }
index a076a31098a36ea7f11aa5b8a6b5cb9f0a26b6cc..0b71c7434ac6c4b4472b11bc4fcea15e08b7c923 100644 (file)
@@ -16,23 +16,21 @@ view_move(struct view *view, double x, double y)
 }
 
 void
-view_minimize(struct view *view)
+view_minimize(struct view *view, bool minimized)
 {
-       if (view->minimized == true) {
+       if (view->minimized == minimized) {
                return;
        }
-       view->minimized = true;
-       view->impl->unmap(view);
-}
-
-void
-view_unminimize(struct view *view)
-{
-       if (view->minimized == false) {
-               return;
+       if (view->toplevel_handle) {
+               wlr_foreign_toplevel_handle_v1_set_minimized(view->toplevel_handle,
+                       minimized);
+       }
+       view->minimized = minimized;
+       if (minimized) {
+               view->impl->unmap(view);
+       } else {
+               view->impl->map(view);
        }
-       view->minimized = false;
-       view->impl->map(view);
 }
 
 /* view_wlr_output - return the output that a view is mostly on */