]> git.mdlowis.com Git - proto/labwc.git/commitdiff
Implement foreign toplevel close
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Thu, 23 Dec 2021 11:24:24 +0000 (12:24 +0100)
committerARDiDo <90479315+ARDiDo@users.noreply.github.com>
Thu, 23 Dec 2021 14:29:08 +0000 (09:29 -0500)
include/labwc.h
src/action.c
src/foreign.c
src/view.c

index d649e09e6d02aa2ce25dd180308cdec4cb3306ed..345ff878ff9dfa2ba6945d3487197850b22e17eb 100644 (file)
@@ -268,6 +268,7 @@ struct view {
        struct wl_listener toplevel_handle_request_minimize;
        struct wl_listener toplevel_handle_request_fullscreen;
        struct wl_listener toplevel_handle_request_activate;
+       struct wl_listener toplevel_handle_request_close;
 
        struct wl_listener map;
        struct wl_listener unmap;
@@ -353,6 +354,7 @@ void view_child_finish(struct view_child *child);
 void view_subsurface_create(struct view *view, struct wlr_subsurface *wlr_subsurface);
 
 void view_set_activated(struct view *view, bool activated);
+void view_close(struct view *view);
 struct border view_border(struct view *view);
 void view_move_resize(struct view *view, struct wlr_box geo);
 void view_move(struct view *view, double x, double y);
index 44fdba68e898d3c270bbfb2a0a3903cbe2d6155f..c29cc83dcbc7ef09f324b3a0da2ce26d622fb81c 100644 (file)
@@ -33,7 +33,7 @@ action(struct view *activator, struct server *server, const char *action, const
        if (!strcasecmp(action, "Close")) {
                struct view *view = activator_or_focused_view(activator, server);
                if (view) {
-                       view->impl->close(view);
+                       view_close(view);
                }
        } else if (!strcasecmp(action, "Debug")) {
                /* nothing */
index c61df26dbca92753651b4ade75d55167cb8529ec..38df561613d88c70675cb0fd28a5e2c480ea4e48 100644 (file)
@@ -39,6 +39,14 @@ handle_toplevel_handle_request_activate(struct wl_listener *listener, void *data
        desktop_move_to_front(view);
 }
 
+static void
+handle_toplevel_handle_request_close(struct wl_listener *listener, void *data)
+{
+       struct view *view = wl_container_of(listener, view,
+               toplevel_handle_request_close);
+       view_close(view);
+}
+
 void
 foreign_toplevel_handle_create(struct view *view)
 {
@@ -78,5 +86,11 @@ foreign_toplevel_handle_create(struct view *view)
                handle_toplevel_handle_request_activate;
        wl_signal_add(&view->toplevel_handle->events.request_activate,
                &view->toplevel_handle_request_activate);
-       /* TODO: hook up remaining signals (close, destroy) */
+
+       view->toplevel_handle_request_close.notify =
+               handle_toplevel_handle_request_close;
+       wl_signal_add(&view->toplevel_handle->events.request_close,
+               &view->toplevel_handle_request_close);
+
+       /* TODO: hook up remaining signals (destroy) */
 }
index ff36b6cbf8ebbcf39d934cb5a2442dbe20f20ea1..eeb3156d0598cc0f4985a1fba1ec5e8ce80f38ef 100644 (file)
@@ -16,6 +16,14 @@ view_set_activated(struct view *view, bool activated)
        }
 }
 
+void
+view_close(struct view *view)
+{
+       if (view->impl->close) {
+               view->impl->close(view);
+       }
+}
+
 void
 view_move_resize(struct view *view, struct wlr_box geo)
 {