From 543f00131c58125cb59c8756c59a4a7498dd77d2 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Sat, 31 Oct 2020 15:27:22 +0000 Subject: [PATCH] action: add "ShowMenu" option Parse the following in rc.xml: root-menu --- docs/labwc-actions.5.md | 6 +++++- src/action.c | 24 ++++++++++++++++++++---- src/config/rcxml.c | 2 ++ src/cursor.c | 5 +---- 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/docs/labwc-actions.5.md b/docs/labwc-actions.5.md index 058d43d7..5c3d792d 100644 --- a/docs/labwc-actions.5.md +++ b/docs/labwc-actions.5.md @@ -1,6 +1,6 @@ % labwc-actions(5) % Johan Malm -% 31 Aug, 2020 +% 31 Oct, 2020 # NAME @@ -35,6 +35,10 @@ of tags specific to each action as defined below. : Re-load configuration and theme files +`ShowMenu` + +: Show menu specified by `` option. Valid menu is "root-menu" + # SEE ALSO labwc(1), labwc-config(5), labwc-theme(5) diff --git a/src/action.c b/src/action.c index 098ee6cc..b1c8cc3b 100644 --- a/src/action.c +++ b/src/action.c @@ -3,23 +3,39 @@ #include "common/log.h" #include "common/spawn.h" #include "labwc.h" +#include "menu/menu.h" + +static void +show_menu(struct server *server, const char *menu) +{ + if (!menu) { + return; + } + if (!strcasecmp(menu, "root-menu")) { + server->input_mode = LAB_INPUT_STATE_MENU; + menu_move(server->rootmenu, server->seat.cursor->x, + server->seat.cursor->y); + } +} void action(struct server *server, const char *action, const char *command) { if (!action) return; - if (!strcasecmp(action, "Exit")) { - wl_display_terminate(server->wl_display); + if (!strcasecmp(action, "Debug")) { + /* nothing */ } else if (!strcasecmp(action, "Execute")) { spawn_async_no_shell(command); + } else if (!strcasecmp(action, "Exit")) { + wl_display_terminate(server->wl_display); } else if (!strcasecmp(action, "NextWindow")) { server->cycle_view = desktop_cycle_view(server, server->cycle_view); } else if (!strcasecmp(action, "Reconfigure")) { spawn_async_no_shell("killall -SIGHUP labwc"); - } else if (!strcasecmp(action, "Debug")) { - dbg_show_views(server); + } else if (!strcasecmp(action, "ShowMenu")) { + show_menu(server, command); } else { warn("action (%s) not supported", action); } diff --git a/src/config/rcxml.c b/src/config/rcxml.c index 5aab7d92..a93acaf0 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -56,6 +56,8 @@ fill_keybind(char *nodename, char *content) current_keybind->action = strdup(content); } else if (!strcmp(nodename, "command.action")) { current_keybind->command = strdup(content); + } else if (!strcmp(nodename, "menu.action")) { + current_keybind->command = strdup(content); } } diff --git a/src/cursor.c b/src/cursor.c index 67d3d1b8..abfdc11d 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -267,13 +267,10 @@ cursor_button(struct wl_listener *listener, void *data) /* handle _press_ on desktop */ if (!view) { /* launch root-menu */ - server->input_mode = LAB_INPUT_STATE_MENU; - menu_move(server->rootmenu, server->seat.cursor->x, - server->seat.cursor->y); + action(server, "ShowMenu", "root-menu"); return; } - /* Handle _press_ on view */ desktop_focus_view(&server->seat, view); switch (view_area) { -- 2.52.0