#BUGFIX by ab
class: WinWorkstation
changed:
#registerHotKeyForWindow:withId:modifiers:virtualKeyCode:
#unregisterHotKeyForWindow:withId:
Change back to post event. Otherwise notSameThread error is caused.
But fix the problem with registration of multible hot keys. Change from
static structure to dynamic allocated structures for each hot key. Allocated memory
will (have to) be deleted in the event handler of the thread.
--- a/WinWorkstation.st Tue Jun 12 16:26:49 2018 +0200
+++ b/WinWorkstation.st Tue Jun 12 17:24:05 2018 +0200
@@ -12936,7 +12936,7 @@
"Defines a system-wide hot key."
%{ /* NOCONTEXT */
- static registerHotKeyInfo rhki;
+ registerHotKeyInfo * rhki = NULL;
HWND hWnd = NULL;
if (__isExternalAddress(aDrawableId)) {
@@ -12949,21 +12949,18 @@
RETURN (false);
}
- if (!RegisterHotKey(hWnd,__intVal(anId),__intVal(aModifier),__intVal(aVirtualKeyCode))){
- console_fprintf(stderr, "WinWorkstation [error]: RegisterHotKey failed: err=%d\n", GetLastError() );
+ rhki = (registerHotKeyInfo *) malloc(sizeof(registerHotKeyInfo));
+
+ rhki->hwnd = hWnd;
+ rhki->hotKeyId = __intVal(anId);
+ rhki->modifier = __intVal(aModifier);
+ rhki->virtualKey = __intVal(aVirtualKeyCode);
+
+ if (PostThreadMessage(_dispatchThreadId, WM_THREAD_REGISTERHOTKEY, 0, (INT)rhki) == FALSE) {
+ console_fprintf(stderr, "WinWorkstation [error]: oops - PostThreadMessage(%x) failed in registerHotKeyForWindow: err=%d\n",
+ _dispatchThreadId, GetLastError() );
RETURN (false);
}
-
- //rhki.hwnd = hWnd;
- //rhki.hotKeyId = __intVal(anId);
- //rhki.modifier = __intVal(aModifier);
- //rhki.virtualKey = __intVal(aVirtualKeyCode);
-
- //if (PostThreadMessage(_dispatchThreadId, WM_THREAD_REGISTERHOTKEY, 0, (INT)(&rhki)) == FALSE) {
- // console_fprintf(stderr, "WinWorkstation [error]: oops - PostThreadMessage(%x) failed in registerHotKeyForWindow: err=%d\n",
- // _dispatchThreadId, GetLastError() );
- // RETURN (false);
- //}
%}.
^ true
!
@@ -12998,7 +12995,7 @@
"Defines a system-wide hot key."
%{ /* NOCONTEXT */
- static registerHotKeyInfo rhki;
+ registerHotKeyInfo * rhki = NULL;
HWND hWnd = NULL;
if (__isExternalAddress(aDrawableId)) {
@@ -13011,20 +13008,18 @@
RETURN (false);
}
- if (!UnregisterHotKey(hWnd,__intVal(anId))){
- console_fprintf(stderr, "WinWorkstation [error]: UnegisterHotKey failed: err=%d\n", GetLastError() );
+ rhki = (registerHotKeyInfo *) malloc(sizeof(registerHotKeyInfo));
+
+ rhki->hwnd = hWnd;
+ rhki->hotKeyId = __intVal(anId);
+ rhki->modifier = 0;
+ rhki->virtualKey = 0;
+
+ if (PostThreadMessage(_dispatchThreadId, WM_THREAD_UNREGISTERHOTKEY, 0, (INT)rhki) == FALSE) {
+ console_fprintf(stderr, "WinWorkstation [error]: oops - PostThreadMessage(%x) failed in unregisterHotKeyForWindow: err=%d\n",
+ _dispatchThreadId, GetLastError() );
RETURN (false);
}
- //rhki.hwnd = hWnd;
- //rhki.hotKeyId = __intVal(anId);
- //rhki.modifier = 0;
- //rhki.virtualKey = 0;
-
- //if (PostThreadMessage(_dispatchThreadId, WM_THREAD_UNREGISTERHOTKEY, 0, (INT)(&rhki)) == FALSE) {
- // console_fprintf(stderr, "WinWorkstation [error]: oops - PostThreadMessage(%x) failed in unregisterHotKeyForWindow: err=%d\n",
- // _dispatchThreadId, GetLastError() );
- // RETURN (false);
- //}
%}.
^ true
! !