X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Factions.cc;h=118719508b85174570a0900f160ef13b312364bd;hb=b0239459c3486c9f5b4913b6071245265e6a19a2;hp=35ddbb80976c8a962d35ea11ac233cbbc6a48c6a;hpb=843f9726ab6fd99fe3a2f285e6c85bd2880a275f;p=chaz%2Fopenbox diff --git a/util/epist/actions.cc b/util/epist/actions.cc index 35ddbb80..11871950 100644 --- a/util/epist/actions.cc +++ b/util/epist/actions.cc @@ -22,14 +22,36 @@ #include "actions.hh" -Action::Action(enum ActionType type, KeyCode keycode, unsigned int modifierMask, - int num) - : _type(type), _keycode(keycode), - _modifierMask(modifierMask), _numberParam(num) -{ } - Action::Action(enum ActionType type, KeyCode keycode, unsigned int modifierMask, const std::string &str) - : _type(type), _keycode(keycode), - _modifierMask(modifierMask), _stringParam(str) -{ } + : _type(type), _keycode(keycode), _modifierMask(modifierMask) +{ + // These are the action types that take string arguments. This + // should probably be moved to a static member + ActionType str_types[] = { + execute, + nextWindowOfClass, + prevWindowOfClass, + nextWindowOfClassOnAllWorkspaces, + prevWindowOfClassOnAllWorkspaces, + noaction + }; + + for (int i = 0; str_types[i] != noaction; ++i) { + if (type == str_types[i]) { + // the first and last characters of the string are quotes, and we need to + // get rid of them + assert(str.size() >= 2); + assert(str[0] == '"'); + assert(str[str.size() - 1] == '"'); + + _stringParam = str.substr(1, str.size() - 2); + return; + } + } + + _numberParam = atoi( str.c_str() ); + + if (type == changeWorkspace) // workspace 1 to the user is workspace 0 to us + _numberParam--; +}