diff options
Diffstat (limited to 'plugins/BasicHistory/src/HotkeyHelper.cpp')
-rw-r--r-- | plugins/BasicHistory/src/HotkeyHelper.cpp | 141 |
1 files changed, 63 insertions, 78 deletions
diff --git a/plugins/BasicHistory/src/HotkeyHelper.cpp b/plugins/BasicHistory/src/HotkeyHelper.cpp index 29f916ea3c..89db08013e 100644 --- a/plugins/BasicHistory/src/HotkeyHelper.cpp +++ b/plugins/BasicHistory/src/HotkeyHelper.cpp @@ -21,91 +21,76 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "resource.h"
#include "Options.h"
-LRESULT CALLBACK HotkeySubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
-
-void RegisterHotkeyControl(HWND control)
-{
- WNDPROC oldProc = (WNDPROC)SetWindowLongPtr(control, GWLP_WNDPROC, (LONG_PTR) HotkeySubclassProc);
- SetWindowLongPtr(control, GWLP_USERDATA, (LONG_PTR) oldProc);
-}
-
-void UnregisterHotkeyControl(HWND control)
-{
- WNDPROC oldProc = (WNDPROC)GetWindowLongPtr(control, GWLP_USERDATA);
- if(oldProc != NULL)
- {
- SetWindowLongPtr(control, GWLP_WNDPROC, (LONG_PTR) oldProc);
- SetWindowLongPtr(control, GWLP_USERDATA, NULL);
- }
-}
-
static bool isPresed = false;
-LRESULT CALLBACK HotkeySubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+static LRESULT CALLBACK HotkeySubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- WNDPROC oldProc = (WNDPROC)GetWindowLongPtr(hwnd, GWLP_USERDATA);
-
switch (msg) {
- case WM_NCPAINT:
- if(Options::instance->noFindBorder && GetDlgCtrlID(hwnd) == IDC_FIND_TEXT)
- return 0;
- break;
- case WM_CHAR:
- case WM_SYSCHAR:
- case WM_UNICHAR:
- case WM_DEADCHAR:
- case WM_SYSDEADCHAR:
- if(isPresed)
- return 0;
- break;
- case WM_KEYUP:
- case WM_SYSKEYUP:
- if(isPresed)
+ case WM_NCPAINT:
+ if(Options::instance->noFindBorder && GetDlgCtrlID(hwnd) == IDC_FIND_TEXT)
+ return 0;
+ break;
+ case WM_CHAR:
+ case WM_SYSCHAR:
+ case WM_UNICHAR:
+ case WM_DEADCHAR:
+ case WM_SYSDEADCHAR:
+ if(isPresed)
+ return 0;
+ break;
+ case WM_KEYUP:
+ case WM_SYSKEYUP:
+ if(isPresed)
+ {
+ isPresed = false;
+ return 0;
+ }
+ break;
+ case WM_KEYDOWN:
+ case WM_SYSKEYDOWN:
+ {
+ isPresed = false;
+ HWND hwndParent = GetParent(hwnd);
+ MSGFILTER filter;
+ filter.msg = msg;
+ filter.lParam = lParam;
+ filter.wParam = wParam;
+ filter.nmhdr.hwndFrom = hwnd;
+ filter.nmhdr.code = EN_MSGFILTER;
+ filter.nmhdr.idFrom = GetDlgCtrlID(hwnd);
+ if(SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter))
{
- isPresed = false;
+ isPresed = true;
return 0;
}
- break;
- case WM_KEYDOWN:
- case WM_SYSKEYDOWN:
- {
- isPresed = false;
- HWND hwndParent = GetParent(hwnd);
- MSGFILTER filter;
- filter.msg = msg;
- filter.lParam = lParam;
- filter.wParam = wParam;
- filter.nmhdr.hwndFrom = hwnd;
- filter.nmhdr.code = EN_MSGFILTER;
- filter.nmhdr.idFrom = GetDlgCtrlID(hwnd);
- if(SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter))
- {
- isPresed = true;
- return 0;
- }
- LRESULT res = CallWindowProc(oldProc, hwnd, msg, wParam, lParam);
- filter.nmhdr.code = CLN_MYSELCHANGED;
- SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter);
- return res;
- }
- break;
- case WM_LBUTTONDOWN:
- {
- HWND hwndParent = GetParent(hwnd);
- MSGFILTER filter;
- filter.msg = msg;
- filter.lParam = lParam;
- filter.wParam = wParam;
- filter.nmhdr.hwndFrom = hwnd;
- filter.nmhdr.code = CLN_MYSELCHANGED;
- filter.nmhdr.idFrom = GetDlgCtrlID(hwnd);
+ LRESULT res = mir_callNextSubclass(hwnd, HotkeySubclassProc, msg, wParam, lParam);
+ filter.nmhdr.code = CLN_MYSELCHANGED;
+ SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter);
+ return res;
+ }
+ break;
+ case WM_LBUTTONDOWN:
+ {
+ HWND hwndParent = GetParent(hwnd);
+ MSGFILTER filter;
+ filter.msg = msg;
+ filter.lParam = lParam;
+ filter.wParam = wParam;
+ filter.nmhdr.hwndFrom = hwnd;
+ filter.nmhdr.code = CLN_MYSELCHANGED;
+ filter.nmhdr.idFrom = GetDlgCtrlID(hwnd);
- LRESULT res = CallWindowProc(oldProc, hwnd, msg, wParam, lParam);
- SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter);
- return res;
- }
- break;
+ LRESULT res = mir_callNextSubclass(hwnd, HotkeySubclassProc, msg, wParam, lParam);
+ SendMessage(hwndParent, WM_NOTIFY, NULL, (LPARAM)&filter);
+ return res;
+ }
+ break;
}
- return CallWindowProc(oldProc, hwnd, msg, wParam, lParam);
-}
\ No newline at end of file + return mir_callNextSubclass(hwnd, HotkeySubclassProc, msg, wParam, lParam);
+}
+
+void RegisterHotkeyControl(HWND control)
+{
+ mir_subclassWindow(control, HotkeySubclassProc);
+}
|