]> git.mdlowis.com Git - proto/labwc.git/commitdiff
xdg: handle show_window_menu requests
authortokyo4j <hrak1529@gmail.com>
Mon, 16 Sep 2024 15:32:02 +0000 (00:32 +0900)
committerJohan Malm <johanmalm@users.noreply.github.com>
Sat, 21 Sep 2024 17:34:17 +0000 (18:34 +0100)
include/view.h
src/xdg.c

index 3464b4e96ba94959e2f88a6d33b895e271081113..9ab4a11598738bb8c4ac77314c1e5fa14d3cccc9 100644 (file)
@@ -288,6 +288,7 @@ struct xdg_toplevel_view {
 
        /* Events unique to xdg-toplevel views */
        struct wl_listener set_app_id;
+       struct wl_listener request_show_window_menu;
        struct wl_listener new_popup;
 };
 
index aefc0a336d6663134a191df40b07367cae944835..2881216348bae5ad0a1d1d85557b4618efe6f0ed 100644 (file)
--- a/src/xdg.c
+++ b/src/xdg.c
@@ -7,6 +7,7 @@
 #include "common/mem.h"
 #include "decorations.h"
 #include "labwc.h"
+#include "menu/menu.h"
 #include "node.h"
 #include "snap-constraints.h"
 #include "view.h"
@@ -375,6 +376,18 @@ handle_request_fullscreen(struct wl_listener *listener, void *data)
                &xdg_toplevel_from_view(view)->requested);
 }
 
+static void
+handle_request_show_window_menu(struct wl_listener *listener, void *data)
+{
+       struct xdg_toplevel_view *xdg_toplevel_view = wl_container_of(
+               listener, xdg_toplevel_view, request_show_window_menu);
+       struct server *server = xdg_toplevel_view->base.server;
+       struct menu *menu = menu_get_by_id(server, "client-menu");
+       assert(menu);
+       struct wlr_cursor *cursor = server->seat.cursor;
+       menu_open_root(menu, cursor->x, cursor->y);
+}
+
 static void
 handle_set_title(struct wl_listener *listener, void *data)
 {
@@ -906,6 +919,7 @@ xdg_toplevel_new(struct wl_listener *listener, void *data)
 
        /* Events specific to XDG toplevel views */
        CONNECT_SIGNAL(toplevel, xdg_toplevel_view, set_app_id);
+       CONNECT_SIGNAL(toplevel, xdg_toplevel_view, request_show_window_menu);
        CONNECT_SIGNAL(xdg_surface, xdg_toplevel_view, new_popup);
 
        wl_list_insert(&server->views, &view->link);