From 4012f85eec50f9e0c7af17d4ba13852a87a02590 Mon Sep 17 00:00:00 2001 From: yexo Date: Sat, 3 Jul 2010 20:14:56 +0000 Subject: [PATCH] (svn r20067) -Add: special modifier (GLOBAL) to mark hotkeys as global hotkeys --- src/gfx_type.h | 4 +++- src/hotkeys.cpp | 1 + src/hotkeys.h | 9 +++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/gfx_type.h b/src/gfx_type.h index 87b9849817..8c4bf918fe 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 baafb09408..41a809bb96 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 b8b1e0984f..e63cc573fa 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 -int CheckHotkeyMatch(Hotkey *list, uint16 keycode, T *w) +int CheckHotkeyMatch(Hotkey *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; }