summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gfx_type.h4
-rw-r--r--src/hotkeys.cpp1
-rw-r--r--src/hotkeys.h9
3 files changed, 9 insertions, 5 deletions
diff --git a/src/gfx_type.h b/src/gfx_type.h
index 87b984981..8c4bf918f 100644
--- a/src/gfx_type.h
+++ b/src/gfx_type.h
@@ -32,7 +32,9 @@ enum WindowKeyCodes {
WKC_ALT = 0x2000,
WKC_META = 0x1000,
- WKC_SPECIAL_KEYS = WKC_SHIFT | WKC_CTRL | WKC_ALT | WKC_META,
+ WKC_GLOBAL_HOTKEY = 0x0800, ///< Fake keycode bit to indicate global hotkeys
+
+ WKC_SPECIAL_KEYS = WKC_SHIFT | WKC_CTRL | WKC_ALT | WKC_META | WKC_GLOBAL_HOTKEY,
/* Special ones */
WKC_NONE = 0,
diff --git a/src/hotkeys.cpp b/src/hotkeys.cpp
index baafb0940..41a809bb9 100644
--- a/src/hotkeys.cpp
+++ b/src/hotkeys.cpp
@@ -30,6 +30,7 @@ static const KeycodeNames _keycode_to_name[] = {
{"CTRL", WKC_CTRL},
{"ALT", WKC_ALT},
{"META", WKC_META},
+ {"GLOBAL", WKC_GLOBAL_HOTKEY},
{"ESC", WKC_ESC},
{"DEL", WKC_DELETE},
{"RETURN", WKC_RETURN},
diff --git a/src/hotkeys.h b/src/hotkeys.h
index b8b1e0984..e63cc573f 100644
--- a/src/hotkeys.h
+++ b/src/hotkeys.h
@@ -52,7 +52,7 @@ struct Hotkey {
} else {
this->callback = new CallbackWrapper(callback);
}
- if (default_keycode != 0) *this->keycodes.Append() = default_keycode;
+ if (default_keycode != 0) this->AddKeycode(default_keycode);
}
/**
@@ -74,7 +74,7 @@ struct Hotkey {
const uint16 *keycode = default_keycodes;
while (*keycode != 0) {
- this->keycodes.Include(*keycode);
+ this->AddKeycode(*keycode);
keycode++;
}
}
@@ -107,13 +107,14 @@ struct Hotkey {
* @param list The list with hotkeys to check
* @param keycode The keycode that was pressed
* @param w The window-pointer to give to the callback function (if any).
+ * @param global_only Limit the search to hotkeys defined as 'global'.
* @return The number of the matching hotkey or -1.
*/
template<class T>
-int CheckHotkeyMatch(Hotkey<T> *list, uint16 keycode, T *w)
+int CheckHotkeyMatch(Hotkey<T> *list, uint16 keycode, T *w, bool global_only = false)
{
while (list->num != -1) {
- if (list->keycodes.Contains(keycode)) {
+ if (list->keycodes.Contains(keycode | WKC_GLOBAL_HOTKEY) || (!global_only && list->keycodes.Contains(keycode))) {
if (list->callback != NULL) (w->*(list->callback->callback))(-1);
return list->num;
}