From: tokyo4j Date: Mon, 16 Sep 2024 15:32:02 +0000 (+0900) Subject: xdg: handle show_window_menu requests X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=80e7b64a415f468cf66a12f8f47db6b465d7b416;p=proto%2Flabwc.git xdg: handle show_window_menu requests --- diff --git a/include/view.h b/include/view.h index 3464b4e9..9ab4a115 100644 --- a/include/view.h +++ b/include/view.h @@ -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; }; diff --git a/src/xdg.c b/src/xdg.c index aefc0a33..28812163 100644 --- 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);