summaryrefslogtreecommitdiff
path: root/libs/gtkmm2ext/actions.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/gtkmm2ext/actions.cc')
-rw-r--r--libs/gtkmm2ext/actions.cc26
1 files changed, 16 insertions, 10 deletions
diff --git a/libs/gtkmm2ext/actions.cc b/libs/gtkmm2ext/actions.cc
index 3fc9def399..74533f96a4 100644
--- a/libs/gtkmm2ext/actions.cc
+++ b/libs/gtkmm2ext/actions.cc
@@ -250,23 +250,29 @@ ActionManager::get_action (const char* path)
return RefPtr<Action>();
}
- char copy[strlen(path)+1];
-
- if (*path == '/') {
- const char* cslash = strchr (path, '/');
- if (!cslash) {
- return RefPtr<Action> ();
- }
- strcpy (copy, cslash+1);
- } else {
- strcpy (copy, path);
+ /* Skip <Actions>/ in path */
+
+ int len = strlen (path);
+
+ if (len < 3) {
+ /* shortest possible path: "a/b" */
+ return RefPtr<Action>();
}
+ if (len > 10 && !strncmp (path, "<Actions>/", 10 )) {
+ path = path+10;
+ } else if (path[0] == '/') {
+ path++;
+ }
+
+ char copy[len+1];
+ strcpy (copy, path);
char* slash = strchr (copy, '/');
if (!slash) {
return RefPtr<Action> ();
}
*slash = '\0';
+
return get_action (copy, ++slash);
}