action: add "ShowMenu" option

Parse the following in rc.xml:

<keyboard>
  <keybind key="">
    <action name="ShowMenu">
      <menu>root-menu</menu>
    </action>
  </keybind>
</keyboard>
This commit is contained in:
Johan Malm 2020-10-31 15:27:22 +00:00
parent a26fd5a75b
commit 543f00131c
4 changed files with 28 additions and 9 deletions

View file

@ -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 `<menu>` option. Valid menu is "root-menu"
# SEE ALSO
labwc(1), labwc-config(5), labwc-theme(5)

View file

@ -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);
}

View file

@ -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);
}
}

View file

@ -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) {