/* Events unique to xdg-toplevel views */
struct wl_listener set_app_id;
+ struct wl_listener request_show_window_menu;
struct wl_listener new_popup;
};
#include "common/mem.h"
#include "decorations.h"
#include "labwc.h"
+#include "menu/menu.h"
#include "node.h"
#include "snap-constraints.h"
#include "view.h"
&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)
{
/* 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);