diff --git a/src/bindkey.h b/src/bindkey.h index 06af358f9..b4561a2f8 100644 --- a/src/bindkey.h +++ b/src/bindkey.h @@ -98,10 +98,10 @@ #define defgKeySysCollapseTaskBar 'h', kfAlt+kfCtrl, "Alt+Ctrl+h" #ifdef CFGDEF -#define DEF_WMKEY(k) WMKey k = { def##k, true } +#define DEF_WMKEY(k) WMKey k( def##k ) #else -#define DEF_WMKEY(k) extern WMKey k +#define DEF_WMKEY(k) extern WMKey k #define IS_WMKEY(k,m,b) b.eq(k,m) #define KEY_NAME(k) k.name #endif diff --git a/src/wmkey.h b/src/wmkey.h index e084eb9cf..f85108614 100644 --- a/src/wmkey.h +++ b/src/wmkey.h @@ -7,6 +7,11 @@ struct WMKey { const char* name; bool initial; + WMKey() : key(NoSymbol), mod(0), name(""), initial(true) { } + WMKey(char* s) : key(NoSymbol), mod(0), name(s), initial(false) { parse(); } + WMKey(KeySym k, unsigned m, const char* s) : + key(k), mod(m), name(s), initial(true) { } + bool eq(KeySym k, unsigned m) const { return key == k && mod == m; } bool operator==(const WMKey& o) const { return eq(o.key, o.mod); } bool operator!=(const WMKey& o) const { return !eq(o.key, o.mod); } diff --git a/src/wmmenu.cc b/src/wmmenu.cc index c193b0f12..1153a35e5 100644 --- a/src/wmmenu.cc +++ b/src/wmmenu.cc @@ -121,7 +121,11 @@ char* MenuLoader::parseKey(char *word, char *p) command.cstr(), args); - if (prog) new KProgram(key, prog, switchkey); + if (prog) { + KProgram* kp = new KProgram(key, prog, switchkey); + if (kp) + keyProgs += kp; + } return p; } diff --git a/src/wmprog.cc b/src/wmprog.cc index d9f0c7563..da44fe16a 100644 --- a/src/wmprog.cc +++ b/src/wmprog.cc @@ -93,16 +93,11 @@ DProgram *DProgram::newProgram( KProgramArrayType keyProgs; KProgram::KProgram(const char *key, DProgram *prog, bool bIsDynSwitchMenuProg) : + wm(newstr(key)), bIsDynSwitchMenu(bIsDynSwitchMenuProg), fProg(prog), pSwitchWindow(nullptr) { - wm.name = newstr(key); - wm.initial = false; - wm.key = NoSymbol; - wm.mod = 0; - wm.parse(); - keyProgs += this; } KProgram::~KProgram() {