Separate set_toggleaction_state () API
authorRobin Gareus <robin@gareus.org>
Wed, 9 Aug 2017 11:33:22 +0000 (13:33 +0200)
committerRobin Gareus <robin@gareus.org>
Wed, 9 Aug 2017 14:29:24 +0000 (16:29 +0200)
Prepare for a method consistent with access_action():
* separate group + action names
* no action string parsing overhead.
* no fatal, abort () call for invalid actions

libs/gtkmm2ext/actions.cc
libs/gtkmm2ext/gtkmm2ext/actions.h

index 840c9dc4a29012285b62468f8907b813e5f9163a..76c6ba043b7e6b212315416a145fcaf19d0b68be 100644 (file)
@@ -220,19 +220,19 @@ ActionManager::set_sensitive (vector<RefPtr<Action> >& actions, bool state)
 }
 
 void
-ActionManager::check_toggleaction (string n)
+ActionManager::check_toggleaction (const string& n)
 {
        set_toggleaction_state (n, true);
 }
 
 void
-ActionManager::uncheck_toggleaction (string n)
+ActionManager::uncheck_toggleaction (const string& n)
 {
        set_toggleaction_state (n, false);
 }
 
 void
-ActionManager::set_toggleaction_state (string n, bool s)
+ActionManager::set_toggleaction_state (const string& n, bool s)
 {
        char const * name = n.c_str ();
 
@@ -252,16 +252,25 @@ ActionManager::set_toggleaction_state (string n, bool s)
        group_name[len] = '\0';
 
        const char* action_name = last_slash + 1;
+       if (!set_toggleaction_state (group_name, action_name, s)) {
+               error << string_compose (_("Unknown action name: %1/%2"), group_name, action_name) << endmsg;
+       }
 
+       delete [] group_name;
+}
+
+bool
+ActionManager::set_toggleaction_state (const char* group_name, const char* action_name, bool s)
+{
        RefPtr<Action> act = get_action (group_name, action_name);
        if (act) {
                RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
-               tact->set_active (s);
-       } else {
-               error << string_compose (_("Unknown action name: %1"),  name) << endmsg;
+               if (tact) {
+                       tact->set_active (s);
+                       return true;
+               }
        }
-
-       delete [] group_name;
+       return false;
 }
 
 void
index 88b9628273ae948863fb6e33a4e2f410a43603f2..2d1c979ed1ba3ae61353fa9b0174879ad214f0b2 100644 (file)
@@ -49,14 +49,14 @@ namespace ActionManager {
        LIBGTKMM2EXT_API extern void do_action (const char* group, const char* name);
        LIBGTKMM2EXT_API extern void set_toggle_action (const char* group, const char* name, bool);
 
-       LIBGTKMM2EXT_API extern void check_toggleaction (std::string);
-       LIBGTKMM2EXT_API extern void uncheck_toggleaction (std::string);
-       LIBGTKMM2EXT_API extern void set_toggleaction_state (std::string, bool);
-
-
-        LIBGTKMM2EXT_API extern void save_action_states ();
-        LIBGTKMM2EXT_API extern void enable_active_actions ();
-        LIBGTKMM2EXT_API extern void disable_active_actions ();
+       LIBGTKMM2EXT_API extern void check_toggleaction (const std::string&);
+       LIBGTKMM2EXT_API extern void uncheck_toggleaction (const std::string&);
+       LIBGTKMM2EXT_API extern void set_toggleaction_state (const std::string&, bool);
+       LIBGTKMM2EXT_API extern bool set_toggleaction_state (const char*, const char*, bool);
+
+       LIBGTKMM2EXT_API extern void save_action_states ();
+       LIBGTKMM2EXT_API extern void enable_active_actions ();
+       LIBGTKMM2EXT_API extern void disable_active_actions ();
 };
 
 #endif /* __libgtkmm2ext_actions_h__ */