From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Sat, 10 Dec 2022 14:28:25 +0000 (+0100) Subject: src/action.c: Provide generic parsing of XML action arguments X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=7cc80b7a99e58d03cf2004152bd7f651d4c8eb88;p=proto%2Flabwc.git src/action.c: Provide generic parsing of XML action arguments .. and use it within src/config/rcxml.c and src/menu/menu.c. This fixes being unable to use the `direction` argument in menu entries. Reported-by: mahk via IRC --- diff --git a/include/action.h b/include/action.h index ab9741ab..326f96d5 100644 --- a/include/action.h +++ b/include/action.h @@ -20,6 +20,8 @@ struct action { struct action *action_create(const char *action_name); void action_arg_add_str(struct action *action, char *key, const char *value); +void action_arg_from_xml_node(struct action *action, char *nodename, char *content); + void actions_run(struct view *activator, struct server *server, struct wl_list *actions, uint32_t resize_edges); void action_list_free(struct wl_list *action_list); diff --git a/src/action.c b/src/action.c index c1dacb6e..622f9731 100644 --- a/src/action.c +++ b/src/action.c @@ -88,6 +88,32 @@ const char *action_names[] = { NULL }; +void +action_arg_from_xml_node(struct action *action, char *nodename, char *content) +{ + assert(action); + if (!strcmp(nodename, "command.action")) { + /* Execute */ + action_arg_add_str(action, NULL, content); + } else if (!strcmp(nodename, "execute.action")) { + /* + * foo + * is deprecated, but we support it anyway for backward + * compatibility with old openbox-menu generators + */ + action_arg_add_str(action, NULL, content); + } else if (!strcmp(nodename, "direction.action")) { + /* MoveToEdge, SnapToEdge */ + action_arg_add_str(action, NULL, content); + } else if (!strcmp(nodename, "menu.action")) { + /* ShowMenu */ + action_arg_add_str(action, NULL, content); + } else if (!strcmp(nodename, "to.action")) { + /* GoToDesktop, SendToDesktop */ + action_arg_add_str(action, NULL, content); + } +} + static char * action_str_from_arg(struct action_arg *arg) { diff --git a/src/config/rcxml.c b/src/config/rcxml.c index 0278bbb8..0821b46d 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -46,24 +46,6 @@ enum font_place { static void load_default_key_bindings(void); static void load_default_mouse_bindings(void); -static void -fill_common(char *nodename, char *content, struct action *action) -{ - if (!strcmp(nodename, "command.action")) { - /* Execute */ - action_arg_add_str(action, NULL, content); - } else if (!strcmp(nodename, "direction.action")) { - /* MoveToEdge, SnapToEdge */ - action_arg_add_str(action, NULL, content); - } else if (!strcmp(nodename, "menu.action")) { - /* ShowMenu */ - action_arg_add_str(action, NULL, content); - } else if (!strcmp(nodename, "to.action")) { - /* GoToDesktop, SendToDesktop */ - action_arg_add_str(action, NULL, content); - } -} - static void fill_keybind(char *nodename, char *content) { @@ -93,7 +75,7 @@ fill_keybind(char *nodename, char *content) wlr_log(WLR_ERROR, "expect element first. " "nodename: '%s' content: '%s'", nodename, content); } else { - fill_common(nodename, content, current_keybind_action); + action_arg_from_xml_node(current_keybind_action, nodename, content); } } @@ -146,7 +128,7 @@ fill_mousebind(char *nodename, char *content) wlr_log(WLR_ERROR, "expect element first. " "nodename: '%s' content: '%s'", nodename, content); } else { - fill_common(nodename, content, current_mousebind_action); + action_arg_from_xml_node(current_mousebind_action, nodename, content); } } diff --git a/src/menu/menu.c b/src/menu/menu.c index 30661910..93f578d4 100644 --- a/src/menu/menu.c +++ b/src/menu/menu.c @@ -283,19 +283,8 @@ fill_item(char *nodename, char *content) } else if (!current_item_action) { wlr_log(WLR_ERROR, "expect element first. " "nodename: '%s' content: '%s'", nodename, content); - } else if (!strcmp(nodename, "command.action")) { - /* Execute */ - action_arg_add_str(current_item_action, NULL, content); - } else if (!strcmp(nodename, "execute.action")) { - /* - * foo - * is deprecated, but we support it anyway for backward - * compatibility with old openbox-menu generators - */ - action_arg_add_str(current_item_action, NULL, content); - } else if (!strcmp(nodename, "to.action")) { - /* GoToDesktop, SendToDesktop */ - action_arg_add_str(current_item_action, NULL, content); + } else { + action_arg_from_xml_node(current_item_action, nodename, content); } }