diff options
Diffstat (limited to 'libs/gtkmm2ext/actions.cc')
-rw-r--r-- | libs/gtkmm2ext/actions.cc | 26 |
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); } |