config/rcxml: Allow multiple <action>s inside of a <mousebind>

Issue arises when using the default config from docs/rc.xml.all.
Without this patch only the last action defined inside a <mousebind>
will have an effect.

Without a config or when defining the same <mousebind> multiple times
with each containing only a single <action> the issue does not exist.
This commit is contained in:
Consolatis 2021-12-23 05:37:57 +01:00 committed by ARDiDo
parent 80f012602f
commit fa18f347e5
3 changed files with 21 additions and 0 deletions

View file

@ -34,5 +34,6 @@ struct mousebind {
enum mouse_event mousebind_event_from_str(const char *str);
uint32_t mousebind_button_from_str(const char *str, uint32_t *modifiers);
struct mousebind *mousebind_create(const char *context);
struct mousebind *mousebind_create_from(struct mousebind *from, const char *context);
#endif /* __LABWC_MOUSEBIND_H */

View file

@ -92,3 +92,17 @@ mousebind_create(const char *context)
}
return m;
}
struct mousebind *
mousebind_create_from(struct mousebind *from, const char *context)
{
if (!from) {
wlr_log(WLR_ERROR, "invalid mousebind instance specified");
return NULL;
}
struct mousebind *m = mousebind_create(context);
m->button = from->button;
m->modifiers = from->modifiers;
m->mouse_event = from->mouse_event;
return m;
}

View file

@ -75,6 +75,8 @@ fill_mousebind(char *nodename, char *content)
/*
* Example of what we are parsing:
* <mousebind button="Left" action="DoubleClick">
* <action name="Focus"/>
* <action name="Raise"/>
* <action name="ToggleMaximize"/>
* </mousebind>
*/
@ -97,6 +99,10 @@ fill_mousebind(char *nodename, char *content)
current_mousebind->mouse_event =
mousebind_event_from_str(content);
} else if (!strcmp(nodename, "name.action")) {
if (current_mousebind->action) {
current_mousebind = mousebind_create_from(current_mousebind,
current_mouse_context);
}
current_mousebind->action = strdup(content);
} else if (!strcmp(nodename, "command.action")) {
current_mousebind->command = strdup(content);