]> git.mdlowis.com Git - proto/labwc.git/commitdiff
src/action.c: Provide generic parsing of XML action arguments
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Sat, 10 Dec 2022 14:28:25 +0000 (15:28 +0100)
committerJohan Malm <johanmalm@users.noreply.github.com>
Sat, 10 Dec 2022 19:55:53 +0000 (19:55 +0000)
.. 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
include/action.h
src/action.c
src/config/rcxml.c
src/menu/menu.c

index ab9741ab2eb48dd67c7e21ff25c4d7e3d3a00380..326f96d5e5babbd5d00923d67973f3267a7f3c2e 100644 (file)
@@ -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);
index c1dacb6e92992d01a5fc636fd4010f49fd432c54..622f97310593304608285a8617e4495036f86e1b 100644 (file)
@@ -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")) {
+               /*
+                * <action name="Execute"><execute>foo</execute></action>
+                * 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)
 {
index 0278bbb8585d89b8eee2e13c1fff4b34cd9aa33a..0821b46dd3497ab8f177aec6723e72e2d18f44ac 100644 (file)
@@ -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 <action name=\"\"> 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 <action name=\"\"> 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);
        }
 }
 
index 306619106f62e6f9729319dfdbb78b42fbff311b..93f578d41ac2981c9df66aa51792241576f28fec 100644 (file)
@@ -283,19 +283,8 @@ fill_item(char *nodename, char *content)
        } else if (!current_item_action) {
                wlr_log(WLR_ERROR, "expect <action name=\"\"> 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")) {
-               /*
-                * <action name="Execute"><execute>foo</execute></action>
-                * 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);
        }
 }