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