X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin3_src%2FWM%2Fwm_hotkeys.c;fp=Usermode%2FApplications%2Faxwin3_src%2FWM%2Fwm_hotkeys.c;h=c8eab69791cff3760b9f94bfd3cbdea0aa56fd02;hb=9c435c78b45c6b62a8182334e44d87b4a6a198f7;hp=3fbe4f762342fdac0b3f57473bf38f993488e5ce;hpb=93a6bfbef3c85c3449826d1fbdc9aa08faa1dc20;p=tpg%2Facess2.git diff --git a/Usermode/Applications/axwin3_src/WM/wm_hotkeys.c b/Usermode/Applications/axwin3_src/WM/wm_hotkeys.c index 3fbe4f76..c8eab697 100644 --- a/Usermode/Applications/axwin3_src/WM/wm_hotkeys.c +++ b/Usermode/Applications/axwin3_src/WM/wm_hotkeys.c @@ -40,6 +40,11 @@ void WM_Hotkey_Register(int nKeys, uint32_t *Keys, const char *ActionName) h->Target = (void*)( h->Keys + nKeys ); strcpy((char*)h->Target, ActionName); memcpy(h->Keys, Keys, nKeys * sizeof(uint32_t)); + + h->Next = NULL; + if( gpWM_Hotkeys ) + gpWM_Hotkeys->Next = h; + gpWM_Hotkeys = h; } void WM_Hotkey_RegisterAction(const char *ActionName, tWindow *Target, uint16_t Index) @@ -82,6 +87,8 @@ void WM_Hotkey_KeyUp(uint32_t Scancode) { _UnsetKey(Scancode); + // Ensure that hotkeys are triggered on the longest sequence + // (so Win-Shift-R doesn't trigger Win-R if shift is released) if( !gbWM_HasBeenKeyDown ) return ; @@ -94,7 +101,8 @@ void WM_Hotkey_KeyUp(uint32_t Scancode) if( _IsKeySet(hk->Keys[i]) ) continue ; break; } - if( i == hk->nKeys ) + _SysDebug("%i/%i satisfied for %s", i, hk->nKeys, hk->Target); + if( i != hk->nKeys ) continue ; // Fire shortcut @@ -108,6 +116,7 @@ void WM_Hotkey_KeyUp(uint32_t Scancode) void WM_Hotkey_FireEvent(const char *Target) { + _SysDebug("WM_Hotkey_FireEvent: (%s)", Target); // - Internal events (Alt-Tab, Close, Maximize, etc...) // TODO: Internal event handling @@ -133,11 +142,13 @@ void WM_Hotkey_FireEvent(const char *Target) static void _SetKey(uint32_t sc) { + _SysDebug("_SetKey: (%x)", sc); if( sc >= MAX_STATE_SCANCODE ) return; gWM_KeyStates[sc/8] |= 1 << (sc % 8); } static void _UnsetKey(uint32_t sc) { + _SysDebug("_UnsetKey: (%x)", sc); if( sc >= MAX_STATE_SCANCODE ) return; gWM_KeyStates[sc/8] &= ~(1 << (sc % 8)); }