diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2019-03-19 08:29:30 -0700 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2019-03-19 08:29:30 -0700 |
commit | 21110444c1efd7470359bf2654eefeef3a2327a3 (patch) | |
tree | 6a6ef99c0326ef66f708389cb21dad7334e62ed4 /libs/gtkmm2ext | |
parent | a3986f703d5d1790d802095eedbaec5126af5a91 (diff) |
use a new unhandled (thus far) exception rather than ::abort() when an action is undefined
Diffstat (limited to 'libs/gtkmm2ext')
-rw-r--r-- | libs/gtkmm2ext/actions.cc | 24 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/actions.h | 9 |
2 files changed, 28 insertions, 5 deletions
diff --git a/libs/gtkmm2ext/actions.cc b/libs/gtkmm2ext/actions.cc index da5aa80fe7..700db236d1 100644 --- a/libs/gtkmm2ext/actions.cc +++ b/libs/gtkmm2ext/actions.cc @@ -70,6 +70,20 @@ typedef std::vector<ActionState> ActionStates; static ActionStates action_states_to_restore; static bool actions_disabled = false; + +ActionManager::MissingActionException::MissingActionException (std::string const & str) + : missing_action_name (str) +{ + std::cerr << "MAE: " << str << std::endl; +} + +const char * +ActionManager::MissingActionException::what () const throw () +{ + /* XXX memory leak */ + return strdup (string_compose ("missing action: %1", missing_action_name).c_str()); +} + void ActionManager::init () { @@ -195,7 +209,7 @@ ActionManager::set_toggleaction_state (const string& n, bool s) if (last_slash == 0) { fatal << string_compose ("programmer error: %1 %2", "illegal toggle action name", name) << endmsg; - abort(); /*NOTREACHED*/ + throw MissingActionException (n); return; } @@ -254,7 +268,7 @@ ActionManager::get_action (const string& name, bool or_die) } if (or_die) { - ::abort (); + throw MissingActionException (name); } cerr << "Failed to find action: [" << name << ']' << endl; @@ -299,7 +313,7 @@ ActionManager::get_action (char const * group_name, char const * action_name, bo } if (or_die) { - ::abort (); + throw MissingActionException (string_compose ("%1/%2", group_name, action_name)); } cerr << "Failed to find action (2): [" << fullpath << ']' << endl; @@ -317,7 +331,7 @@ ActionManager::get_toggle_action (char const * group_name, char const * action_n } if (or_die) { - ::abort (); + throw MissingActionException (string_compose ("%1/%2", group_name, action_name)); } return RefPtr<ToggleAction>(); @@ -333,7 +347,7 @@ ActionManager::get_radio_action (char const * group_name, char const * action_na } if (or_die) { - ::abort (); + throw MissingActionException (string_compose ("%1/%2", group_name, action_name)); } return RefPtr<RadioAction>(); diff --git a/libs/gtkmm2ext/gtkmm2ext/actions.h b/libs/gtkmm2ext/gtkmm2ext/actions.h index 780c846d58..8eae2eeb6b 100644 --- a/libs/gtkmm2ext/gtkmm2ext/actions.h +++ b/libs/gtkmm2ext/gtkmm2ext/actions.h @@ -21,6 +21,7 @@ #define __libgtkmm2ext_actions_h__ #include <vector> +#include <exception> #include <gtkmm/action.h> #include <gtkmm/radioaction.h> @@ -51,6 +52,14 @@ namespace ActionManager { * */ + class LIBGTKMM2EXT_API MissingActionException : public std::exception { + public: + MissingActionException (std::string const & str); + const char *what() const throw(); + private: + std::string missing_action_name; + }; + LIBGTKMM2EXT_API extern void init (); LIBGTKMM2EXT_API extern std::string unbound_string; /* the key string returned if an action is not bound */ |