Author: rharabien Date: Sun Oct 9 20:41:09 2011 New Revision: 54066
URL: http://svn.reactos.org/svn/reactos?rev=54066&view=rev Log: [WIN32K] - Formatting... No code change.
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/accelerator.c trunk/reactos/subsystems/win32/win32k/ntuser/hotkey.c
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/accelerator.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/accelerator.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/accelerator.c [iso-8859-1] Sun Oct 9 20:41:09 2011 @@ -20,157 +20,157 @@
PACCELERATOR_TABLE FASTCALL UserGetAccelObject(HACCEL hAccel) { - PACCELERATOR_TABLE Accel; - - if (!hAccel) - { - EngSetLastError(ERROR_INVALID_ACCEL_HANDLE); - return NULL; - } - - Accel= UserGetObject(gHandleTable, hAccel, otAccel); - if (!Accel) - { - EngSetLastError(ERROR_INVALID_ACCEL_HANDLE); - return NULL; - } - - return Accel; + PACCELERATOR_TABLE Accel; + + if (!hAccel) + { + EngSetLastError(ERROR_INVALID_ACCEL_HANDLE); + return NULL; + } + + Accel = UserGetObject(gHandleTable, hAccel, otAccel); + if (!Accel) + { + EngSetLastError(ERROR_INVALID_ACCEL_HANDLE); + return NULL; + } + + return Accel; }
static BOOLEAN FASTCALL co_IntTranslateAccelerator( - PWND Window, - CONST MSG *pMsg, - CONST ACCEL *pAccel) -{ - BOOL bFound = FALSE; - UINT Mask = 0, nPos; - HWND hWnd; - HMENU hMenu, hSubMenu; - PMENU_OBJECT MenuObject, SubMenu; - PMENU_ITEM MenuItem; - - ASSERT_REFS_CO(Window); - - hWnd = Window->head.h; - - TRACE("IntTranslateAccelerator(hwnd %x, message %x, wParam %x, lParam %x, fVirt %d, key %x, cmd %x)\n", - hWnd, pMsg->message, pMsg->wParam, pMsg->lParam, pAccel->fVirt, pAccel->key, pAccel->cmd); - - if (UserGetKeyState(VK_CONTROL) & 0x8000) Mask |= FCONTROL; - if (UserGetKeyState(VK_MENU) & 0x8000) Mask |= FALT; // FIXME: VK_LMENU (msg winetest!) - if (UserGetKeyState(VK_SHIFT) & 0x8000) Mask |= FSHIFT; - TRACE("Mask 0x%x\n", Mask); - - if (pAccel->fVirt & FVIRTKEY) - { - /* This is a virtual key. Process WM_(SYS)KEYDOWN messages. */ - if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN) - { - /* Check virtual key and SHIFT, CTRL, LALT state */ - if (pMsg->wParam == pAccel->key && Mask == (pAccel->fVirt & (FSHIFT | FCONTROL | FALT))) - { - bFound = TRUE; - } - } - } - else - { - /* This is a char code. Process WM_(SYS)CHAR messages. */ - if (pMsg->message == WM_CHAR || pMsg->message == WM_SYSCHAR) - { - /* Check char code and LALT state only */ - if (pMsg->wParam == pAccel->key && (Mask & FALT) == (pAccel->fVirt & FALT)) - { - bFound = TRUE; - } - } - } - - if (!bFound) - { - /* Don't translate this msg */ - TRACE("IntTranslateAccelerator returns FALSE\n"); - return FALSE; - } - - /* Check if accelerator is associated with menu command */ - hMenu = (Window->style & WS_CHILD) ? 0 : (HMENU)Window->IDMenu; - hSubMenu = NULL; - MenuObject = IntGetMenuObject(hMenu); - if (MenuObject) - { - nPos = IntGetMenuItemByFlag(MenuObject, - pAccel->cmd, - MF_BYCOMMAND, - &SubMenu, - &MenuItem, - NULL); - if (nPos != (UINT)-1) - hSubMenu = SubMenu->head.h; - else - hMenu = NULL; - } - if (!hMenu) - { - /* Check system menu now */ - hMenu = Window->SystemMenu; - hSubMenu = hMenu; /* system menu is a popup menu */ - MenuObject = IntGetMenuObject(hMenu); - if (MenuObject) - { - nPos = IntGetMenuItemByFlag(MenuObject, - pAccel->cmd, - MF_BYCOMMAND, - &SubMenu, - &MenuItem, - NULL); - if (nPos != (UINT)-1) - hSubMenu = SubMenu->head.h; - else - hMenu = NULL; - } - } - - /* If this is a menu item, there is no capturing enabled and - window is not disabled, send WM_INITMENU */ - if (hMenu && !IntGetCaptureWindow()) - { - co_IntSendMessage(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L); - if (hSubMenu) - { - nPos = IntFindSubMenu(&hMenu, hSubMenu); - TRACE("hSysMenu = %p, hSubMenu = %p, nPos = %d\n", hMenu, hSubMenu, nPos); - co_IntSendMessage(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, TRUE)); - } - } - - /* Don't send any message if: - - window is disabled - - menu item is disabled - - this is window menu and window is minimized */ - if (!(Window->style & WS_DISABLED) && - !(hMenu && IntGetMenuState(hMenu, pAccel->cmd, MF_BYCOMMAND) & (MF_DISABLED|MF_GRAYED)) && - !(hMenu && hMenu == (HMENU)Window->IDMenu && (Window->style & WS_MINIMIZED))) - { - /* If this is system menu item, send WM_SYSCOMMAND, otherwise send WM_COMMAND */ - if (hMenu && hMenu == Window->SystemMenu) - { - TRACE("Sending WM_SYSCOMMAND, wParam=%0x\n", pAccel->cmd); - co_IntSendMessage(hWnd, WM_SYSCOMMAND, pAccel->cmd, 0x00010000L); - } - else - { - TRACE("Sending WM_COMMAND, wParam=%0x\n", 0x10000 | pAccel->cmd); - co_IntSendMessage(hWnd, WM_COMMAND, 0x10000 | pAccel->cmd, 0L); - } - } - - TRACE("IntTranslateAccelerator returns TRUE\n"); - return TRUE; + PWND Window, + CONST MSG *pMsg, + CONST ACCEL *pAccel) +{ + BOOL bFound = FALSE; + UINT Mask = 0, nPos; + HWND hWnd; + HMENU hMenu, hSubMenu; + PMENU_OBJECT MenuObject, SubMenu; + PMENU_ITEM MenuItem; + + ASSERT_REFS_CO(Window); + + hWnd = Window->head.h; + + TRACE("IntTranslateAccelerator(hwnd %x, message %x, wParam %x, lParam %x, fVirt %d, key %x, cmd %x)\n", + hWnd, pMsg->message, pMsg->wParam, pMsg->lParam, pAccel->fVirt, pAccel->key, pAccel->cmd); + + if (UserGetKeyState(VK_CONTROL) & 0x8000) Mask |= FCONTROL; + if (UserGetKeyState(VK_MENU) & 0x8000) Mask |= FALT; // FIXME: VK_LMENU (msg winetest!) + if (UserGetKeyState(VK_SHIFT) & 0x8000) Mask |= FSHIFT; + TRACE("Mask 0x%x\n", Mask); + + if (pAccel->fVirt & FVIRTKEY) + { + /* This is a virtual key. Process WM_(SYS)KEYDOWN messages. */ + if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN) + { + /* Check virtual key and SHIFT, CTRL, LALT state */ + if (pMsg->wParam == pAccel->key && Mask == (pAccel->fVirt & (FSHIFT | FCONTROL | FALT))) + { + bFound = TRUE; + } + } + } + else + { + /* This is a char code. Process WM_(SYS)CHAR messages. */ + if (pMsg->message == WM_CHAR || pMsg->message == WM_SYSCHAR) + { + /* Check char code and LALT state only */ + if (pMsg->wParam == pAccel->key && (Mask & FALT) == (pAccel->fVirt & FALT)) + { + bFound = TRUE; + } + } + } + + if (!bFound) + { + /* Don't translate this msg */ + TRACE("IntTranslateAccelerator returns FALSE\n"); + return FALSE; + } + + /* Check if accelerator is associated with menu command */ + hMenu = (Window->style & WS_CHILD) ? 0 : (HMENU)Window->IDMenu; + hSubMenu = NULL; + MenuObject = IntGetMenuObject(hMenu); + if (MenuObject) + { + nPos = IntGetMenuItemByFlag(MenuObject, + pAccel->cmd, + MF_BYCOMMAND, + &SubMenu, + &MenuItem, + NULL); + if (nPos != (UINT) - 1) + hSubMenu = SubMenu->head.h; + else + hMenu = NULL; + } + if (!hMenu) + { + /* Check system menu now */ + hMenu = Window->SystemMenu; + hSubMenu = hMenu; /* system menu is a popup menu */ + MenuObject = IntGetMenuObject(hMenu); + if (MenuObject) + { + nPos = IntGetMenuItemByFlag(MenuObject, + pAccel->cmd, + MF_BYCOMMAND, + &SubMenu, + &MenuItem, + NULL); + if (nPos != (UINT) - 1) + hSubMenu = SubMenu->head.h; + else + hMenu = NULL; + } + } + + /* If this is a menu item, there is no capturing enabled and + window is not disabled, send WM_INITMENU */ + if (hMenu && !IntGetCaptureWindow()) + { + co_IntSendMessage(hWnd, WM_INITMENU, (WPARAM)hMenu, 0L); + if (hSubMenu) + { + nPos = IntFindSubMenu(&hMenu, hSubMenu); + TRACE("hSysMenu = %p, hSubMenu = %p, nPos = %d\n", hMenu, hSubMenu, nPos); + co_IntSendMessage(hWnd, WM_INITMENUPOPUP, (WPARAM)hSubMenu, MAKELPARAM(nPos, TRUE)); + } + } + + /* Don't send any message if: + - window is disabled + - menu item is disabled + - this is window menu and window is minimized */ + if (!(Window->style & WS_DISABLED) && + !(hMenu && IntGetMenuState(hMenu, pAccel->cmd, MF_BYCOMMAND) & (MF_DISABLED | MF_GRAYED)) && + !(hMenu && hMenu == (HMENU)Window->IDMenu && (Window->style & WS_MINIMIZED))) + { + /* If this is system menu item, send WM_SYSCOMMAND, otherwise send WM_COMMAND */ + if (hMenu && hMenu == Window->SystemMenu) + { + TRACE("Sending WM_SYSCOMMAND, wParam=%0x\n", pAccel->cmd); + co_IntSendMessage(hWnd, WM_SYSCOMMAND, pAccel->cmd, 0x00010000L); + } + else + { + TRACE("Sending WM_COMMAND, wParam=%0x\n", 0x10000 | pAccel->cmd); + co_IntSendMessage(hWnd, WM_COMMAND, 0x10000 | pAccel->cmd, 0L); + } + } + + TRACE("IntTranslateAccelerator returns TRUE\n"); + return TRUE; }
@@ -180,267 +180,267 @@ int APIENTRY NtUserCopyAcceleratorTable( - HACCEL hAccel, - LPACCEL Entries, - int EntriesCount) -{ - PACCELERATOR_TABLE Accel; - int Ret; - DECLARE_RETURN(int); - - TRACE("Enter NtUserCopyAcceleratorTable\n"); - UserEnterShared(); - - Accel = UserGetAccelObject(hAccel); - if (!Accel) - { - RETURN(0); - } - - /* If Entries is NULL return table size */ - if (!Entries) - { - RETURN(Accel->Count); - } - - /* Don't overrun */ - if (Accel->Count < EntriesCount) - EntriesCount = Accel->Count; - - Ret = 0; - - _SEH2_TRY - { - ProbeForWrite(Entries, EntriesCount*sizeof(Entries[0]), 4); - - for (Ret = 0; Ret < EntriesCount; Ret++) - { - Entries[Ret].fVirt = Accel->Table[Ret].fVirt; - Entries[Ret].key = Accel->Table[Ret].key; - Entries[Ret].cmd = Accel->Table[Ret].cmd; - } - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - SetLastNtError(_SEH2_GetExceptionCode()); - Ret = 0; - } - _SEH2_END; - - RETURN(Ret); + HACCEL hAccel, + LPACCEL Entries, + int EntriesCount) +{ + PACCELERATOR_TABLE Accel; + int Ret; + DECLARE_RETURN(int); + + TRACE("Enter NtUserCopyAcceleratorTable\n"); + UserEnterShared(); + + Accel = UserGetAccelObject(hAccel); + if (!Accel) + { + RETURN(0); + } + + /* If Entries is NULL return table size */ + if (!Entries) + { + RETURN(Accel->Count); + } + + /* Don't overrun */ + if (Accel->Count < EntriesCount) + EntriesCount = Accel->Count; + + Ret = 0; + + _SEH2_TRY + { + ProbeForWrite(Entries, EntriesCount*sizeof(Entries[0]), 4); + + for (Ret = 0; Ret < EntriesCount; Ret++) + { + Entries[Ret].fVirt = Accel->Table[Ret].fVirt; + Entries[Ret].key = Accel->Table[Ret].key; + Entries[Ret].cmd = Accel->Table[Ret].cmd; + } + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + SetLastNtError(_SEH2_GetExceptionCode()); + Ret = 0; + } + _SEH2_END; + + RETURN(Ret);
CLEANUP: - TRACE("Leave NtUserCopyAcceleratorTable, ret=%i\n", _ret_); - UserLeave(); - END_CLEANUP; + TRACE("Leave NtUserCopyAcceleratorTable, ret=%i\n", _ret_); + UserLeave(); + END_CLEANUP; }
HACCEL APIENTRY NtUserCreateAcceleratorTable( - LPACCEL Entries, - SIZE_T EntriesCount) -{ - PACCELERATOR_TABLE Accel; - HACCEL hAccel; - INT Index; - NTSTATUS Status = STATUS_SUCCESS; - DECLARE_RETURN(HACCEL); - - TRACE("Enter NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d)\n", + LPACCEL Entries, + SIZE_T EntriesCount) +{ + PACCELERATOR_TABLE Accel; + HACCEL hAccel; + INT Index; + NTSTATUS Status = STATUS_SUCCESS; + DECLARE_RETURN(HACCEL); + + TRACE("Enter NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d)\n", Entries, EntriesCount); - UserEnterExclusive(); - - if (!Entries || EntriesCount <= 0) - { - SetLastNtError(STATUS_INVALID_PARAMETER); - RETURN( (HACCEL) NULL ); - } - - Accel = UserCreateObject(gHandleTable, NULL, (PHANDLE)&hAccel, otAccel, sizeof(ACCELERATOR_TABLE)); - - if (Accel == NULL) - { - SetLastNtError(STATUS_NO_MEMORY); - RETURN( (HACCEL) NULL ); - } - - Accel->Count = EntriesCount; - Accel->Table = ExAllocatePoolWithTag(PagedPool, EntriesCount * sizeof(ACCEL), USERTAG_ACCEL); - if (Accel->Table == NULL) - { - UserDereferenceObject(Accel); - UserDeleteObject(hAccel, otAccel); - SetLastNtError(STATUS_NO_MEMORY); - RETURN( (HACCEL) NULL); - } - - _SEH2_TRY - { - ProbeForRead(Entries, EntriesCount * sizeof(ACCEL), 4); - - for (Index = 0; Index < EntriesCount; Index++) - { - Accel->Table[Index].fVirt = Entries[Index].fVirt & FVIRT_MASK; - if(Accel->Table[Index].fVirt & FVIRTKEY) - { - Accel->Table[Index].key = Entries[Index].key; - } - else - { - RtlMultiByteToUnicodeN(&Accel->Table[Index].key, - sizeof(WCHAR), - NULL, - (PCSTR)&Entries[Index].key, - sizeof(CHAR)); - } - - Accel->Table[Index].cmd = Entries[Index].cmd; - } - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END; - - if (!NT_SUCCESS(Status)) - { - ExFreePoolWithTag(Accel->Table, USERTAG_ACCEL); - UserDereferenceObject(Accel); - UserDeleteObject(hAccel, otAccel); - SetLastNtError(Status); - RETURN( (HACCEL) NULL); - } - - /* FIXME: Save HandleTable in a list somewhere so we can clean it up again */ - - RETURN(hAccel); + UserEnterExclusive(); + + if (!Entries || EntriesCount <= 0) + { + SetLastNtError(STATUS_INVALID_PARAMETER); + RETURN( (HACCEL) NULL ); + } + + Accel = UserCreateObject(gHandleTable, NULL, (PHANDLE)&hAccel, otAccel, sizeof(ACCELERATOR_TABLE)); + + if (Accel == NULL) + { + SetLastNtError(STATUS_NO_MEMORY); + RETURN( (HACCEL) NULL ); + } + + Accel->Count = EntriesCount; + Accel->Table = ExAllocatePoolWithTag(PagedPool, EntriesCount * sizeof(ACCEL), USERTAG_ACCEL); + if (Accel->Table == NULL) + { + UserDereferenceObject(Accel); + UserDeleteObject(hAccel, otAccel); + SetLastNtError(STATUS_NO_MEMORY); + RETURN( (HACCEL) NULL); + } + + _SEH2_TRY + { + ProbeForRead(Entries, EntriesCount * sizeof(ACCEL), 4); + + for (Index = 0; Index < EntriesCount; Index++) + { + Accel->Table[Index].fVirt = Entries[Index].fVirt & FVIRT_MASK; + if(Accel->Table[Index].fVirt & FVIRTKEY) + { + Accel->Table[Index].key = Entries[Index].key; + } + else + { + RtlMultiByteToUnicodeN(&Accel->Table[Index].key, + sizeof(WCHAR), + NULL, + (PCSTR)&Entries[Index].key, + sizeof(CHAR)); + } + + Accel->Table[Index].cmd = Entries[Index].cmd; + } + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; + + if (!NT_SUCCESS(Status)) + { + ExFreePoolWithTag(Accel->Table, USERTAG_ACCEL); + UserDereferenceObject(Accel); + UserDeleteObject(hAccel, otAccel); + SetLastNtError(Status); + RETURN( (HACCEL) NULL); + } + + /* FIXME: Save HandleTable in a list somewhere so we can clean it up again */ + + RETURN(hAccel);
CLEANUP: - TRACE("Leave NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d) = %x\n", + TRACE("Leave NtUserCreateAcceleratorTable(Entries %p, EntriesCount %d) = %x\n", Entries, EntriesCount, _ret_); - UserLeave(); - END_CLEANUP; + UserLeave(); + END_CLEANUP; }
BOOLEAN APIENTRY NtUserDestroyAcceleratorTable( - HACCEL hAccel) -{ - PACCELERATOR_TABLE Accel; - DECLARE_RETURN(BOOLEAN); - - /* FIXME: If the handle table is from a call to LoadAcceleratorTable, decrement it's - usage count (and return TRUE). - FIXME: Destroy only tables created using CreateAcceleratorTable. - */ - - TRACE("NtUserDestroyAcceleratorTable(Table %x)\n", hAccel); - UserEnterExclusive(); - - if (!(Accel = UserGetAccelObject(hAccel))) - { - RETURN( FALSE); - } - - if (Accel->Table != NULL) - { - ExFreePoolWithTag(Accel->Table, USERTAG_ACCEL); - Accel->Table = NULL; - } - - UserDeleteObject(hAccel, otAccel); - - RETURN( TRUE); + HACCEL hAccel) +{ + PACCELERATOR_TABLE Accel; + DECLARE_RETURN(BOOLEAN); + + /* FIXME: If the handle table is from a call to LoadAcceleratorTable, decrement it's + usage count (and return TRUE). + FIXME: Destroy only tables created using CreateAcceleratorTable. + */ + + TRACE("NtUserDestroyAcceleratorTable(Table %x)\n", hAccel); + UserEnterExclusive(); + + if (!(Accel = UserGetAccelObject(hAccel))) + { + RETURN( FALSE); + } + + if (Accel->Table != NULL) + { + ExFreePoolWithTag(Accel->Table, USERTAG_ACCEL); + Accel->Table = NULL; + } + + UserDeleteObject(hAccel, otAccel); + + RETURN( TRUE);
CLEANUP: - TRACE("Leave NtUserDestroyAcceleratorTable(Table %x) = %i\n", hAccel,_ret_); - UserLeave(); - END_CLEANUP; + TRACE("Leave NtUserDestroyAcceleratorTable(Table %x) = %i\n", hAccel, _ret_); + UserLeave(); + END_CLEANUP; }
int APIENTRY NtUserTranslateAccelerator( - HWND hWnd, - HACCEL hAccel, - LPMSG pUnsafeMessage) -{ - PWND Window = NULL; - PACCELERATOR_TABLE Accel = NULL; - ULONG i; - MSG Message; - USER_REFERENCE_ENTRY AccelRef, WindowRef; - DECLARE_RETURN(int); - - TRACE("NtUserTranslateAccelerator(hWnd %x, Table %x, Message %p)\n", + HWND hWnd, + HACCEL hAccel, + LPMSG pUnsafeMessage) +{ + PWND Window = NULL; + PACCELERATOR_TABLE Accel = NULL; + ULONG i; + MSG Message; + USER_REFERENCE_ENTRY AccelRef, WindowRef; + DECLARE_RETURN(int); + + TRACE("NtUserTranslateAccelerator(hWnd %x, Table %x, Message %p)\n", hWnd, hAccel, pUnsafeMessage); - UserEnterShared(); - - if (hWnd == NULL) - { - RETURN( 0); - } - - _SEH2_TRY - { - ProbeForRead(pUnsafeMessage, sizeof(MSG), 4); - RtlCopyMemory(&Message, pUnsafeMessage, sizeof(MSG)); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - SetLastNtError(_SEH2_GetExceptionCode()); - _SEH2_YIELD(RETURN( 0)); - } - _SEH2_END; - - if ((Message.message != WM_KEYDOWN) && - (Message.message != WM_SYSKEYDOWN) && - (Message.message != WM_SYSCHAR) && - (Message.message != WM_CHAR)) - { - RETURN( 0); - } - - Accel = UserGetAccelObject(hAccel); - if (!Accel) - { - RETURN( 0); - } - - UserRefObjectCo(Accel, &AccelRef); - - Window = UserGetWindowObject(hWnd); - if (!Window) - { - RETURN( 0); - } - - UserRefObjectCo(Window, &WindowRef); - - /* FIXME: Associate AcceleratorTable with the current thread */ - - for (i = 0; i < Accel->Count; i++) - { - if (co_IntTranslateAccelerator(Window, &Message, &Accel->Table[i])) - { - RETURN( 1); - } - - /* Undocumented feature... */ - if (Accel->Table[i].fVirt & FVIRT_TBL_END) - break; - } - - RETURN( 0); + UserEnterShared(); + + if (hWnd == NULL) + { + RETURN( 0); + } + + _SEH2_TRY + { + ProbeForRead(pUnsafeMessage, sizeof(MSG), 4); + RtlCopyMemory(&Message, pUnsafeMessage, sizeof(MSG)); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + SetLastNtError(_SEH2_GetExceptionCode()); + _SEH2_YIELD(RETURN( 0)); + } + _SEH2_END; + + if ((Message.message != WM_KEYDOWN) && + (Message.message != WM_SYSKEYDOWN) && + (Message.message != WM_SYSCHAR) && + (Message.message != WM_CHAR)) + { + RETURN( 0); + } + + Accel = UserGetAccelObject(hAccel); + if (!Accel) + { + RETURN( 0); + } + + UserRefObjectCo(Accel, &AccelRef); + + Window = UserGetWindowObject(hWnd); + if (!Window) + { + RETURN( 0); + } + + UserRefObjectCo(Window, &WindowRef); + + /* FIXME: Associate AcceleratorTable with the current thread */ + + for (i = 0; i < Accel->Count; i++) + { + if (co_IntTranslateAccelerator(Window, &Message, &Accel->Table[i])) + { + RETURN( 1); + } + + /* Undocumented feature... */ + if (Accel->Table[i].fVirt & FVIRT_TBL_END) + break; + } + + RETURN( 0);
CLEANUP: - if (Window) UserDerefObjectCo(Window); - if (Accel) UserDerefObjectCo(Accel); - - TRACE("NtUserTranslateAccelerator returns %d\n", _ret_); - UserLeave(); - END_CLEANUP; -} + if (Window) UserDerefObjectCo(Window); + if (Accel) UserDerefObjectCo(Accel); + + TRACE("NtUserTranslateAccelerator returns %d\n", _ret_); + UserLeave(); + END_CLEANUP; +}
Modified: trunk/reactos/subsystems/win32/win32k/ntuser/hotkey.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntu... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/ntuser/hotkey.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/ntuser/hotkey.c [iso-8859-1] Sun Oct 9 20:41:09 2011 @@ -28,9 +28,9 @@ NTAPI InitHotkeyImpl(VOID) { - InitializeListHead(&gHotkeyList); - - return STATUS_SUCCESS; + InitializeListHead(&gHotkeyList); + + return STATUS_SUCCESS; }
#if 0 //not used @@ -38,7 +38,7 @@ CleanupHotKeys(VOID) {
- return STATUS_SUCCESS; + return STATUS_SUCCESS; } #endif
@@ -53,7 +53,7 @@ IntGetModifiers(PBYTE pKeyState) { UINT fModifiers = 0; - + if (IS_KEY_DOWN(pKeyState, VK_SHIFT)) fModifiers |= MOD_SHIFT;
@@ -72,48 +72,48 @@ VOID FASTCALL UnregisterWindowHotKeys(PWND Window) { - PHOT_KEY_ITEM HotKeyItem, tmp; - - LIST_FOR_EACH_SAFE(HotKeyItem, tmp, &gHotkeyList, HOT_KEY_ITEM, ListEntry) - { - if (HotKeyItem->hWnd == Window->head.h) - { - RemoveEntryList (&HotKeyItem->ListEntry); - ExFreePool (HotKeyItem); - } - } + PHOT_KEY_ITEM HotKeyItem, tmp; + + LIST_FOR_EACH_SAFE(HotKeyItem, tmp, &gHotkeyList, HOT_KEY_ITEM, ListEntry) + { + if (HotKeyItem->hWnd == Window->head.h) + { + RemoveEntryList(&HotKeyItem->ListEntry); + ExFreePool(HotKeyItem); + } + } }
VOID FASTCALL UnregisterThreadHotKeys(struct _ETHREAD *Thread) { - PHOT_KEY_ITEM HotKeyItem, tmp; - - LIST_FOR_EACH_SAFE(HotKeyItem, tmp, &gHotkeyList, HOT_KEY_ITEM, ListEntry) - { - if (HotKeyItem->Thread == Thread) - { - RemoveEntryList (&HotKeyItem->ListEntry); - ExFreePool (HotKeyItem); - } - } + PHOT_KEY_ITEM HotKeyItem, tmp; + + LIST_FOR_EACH_SAFE(HotKeyItem, tmp, &gHotkeyList, HOT_KEY_ITEM, ListEntry) + { + if (HotKeyItem->Thread == Thread) + { + RemoveEntryList(&HotKeyItem->ListEntry); + ExFreePool(HotKeyItem); + } + }
}
PHOT_KEY_ITEM FASTCALL IsHotKey(UINT fsModifiers, WORD wVk) { - PHOT_KEY_ITEM pHotKeyItem; - - LIST_FOR_EACH(pHotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) - { - if (pHotKeyItem->fsModifiers == fsModifiers && pHotKeyItem->vk == wVk) - { - return pHotKeyItem; - } - } - - return NULL; + PHOT_KEY_ITEM pHotKeyItem; + + LIST_FOR_EACH(pHotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) + { + if (pHotKeyItem->fsModifiers == fsModifiers && pHotKeyItem->vk == wVk) + { + return pHotKeyItem; + } + } + + return NULL; }
/* @@ -177,106 +177,106 @@ // Get/SetHotKey message support. // UINT FASTCALL -DefWndGetHotKey( HWND hwnd ) -{ - PHOT_KEY_ITEM HotKeyItem; - - ERR("DefWndGetHotKey\n"); - - if (IsListEmpty(&gHotkeyList)) return 0; - - LIST_FOR_EACH(HotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) - { - if ( HotKeyItem->hWnd == hwnd && - HotKeyItem->id == IDHOT_REACTOS ) - { - return MAKELONG(HotKeyItem->vk, HotKeyItem->fsModifiers); - } - } - return 0; -} - -INT FASTCALL -DefWndSetHotKey( PWND pWnd, WPARAM wParam ) -{ - UINT fsModifiers, vk; - PHOT_KEY_ITEM HotKeyItem; - HWND hWnd; - BOOL HaveSameWnd = FALSE; - INT Ret = 1; - - ERR("DefWndSetHotKey wParam 0x%x\n", wParam); - - // A hot key cannot be associated with a child window. - if (pWnd->style & WS_CHILD) return 0; - - // VK_ESCAPE, VK_SPACE, and VK_TAB are invalid hot keys. - if ( LOWORD(wParam) == VK_ESCAPE || +DefWndGetHotKey(HWND hwnd) +{ + PHOT_KEY_ITEM HotKeyItem; + + ERR("DefWndGetHotKey\n"); + + if (IsListEmpty(&gHotkeyList)) return 0; + + LIST_FOR_EACH(HotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) + { + if (HotKeyItem->hWnd == hwnd && + HotKeyItem->id == IDHOT_REACTOS) + { + return MAKELONG(HotKeyItem->vk, HotKeyItem->fsModifiers); + } + } + return 0; +} + +INT FASTCALL +DefWndSetHotKey(PWND pWnd, WPARAM wParam) +{ + UINT fsModifiers, vk; + PHOT_KEY_ITEM HotKeyItem; + HWND hWnd; + BOOL HaveSameWnd = FALSE; + INT Ret = 1; + + ERR("DefWndSetHotKey wParam 0x%x\n", wParam); + + // A hot key cannot be associated with a child window. + if (pWnd->style & WS_CHILD) return 0; + + // VK_ESCAPE, VK_SPACE, and VK_TAB are invalid hot keys. + if (LOWORD(wParam) == VK_ESCAPE || LOWORD(wParam) == VK_SPACE || - LOWORD(wParam) == VK_TAB ) return -1; - - vk = LOWORD(wParam); - fsModifiers = HIWORD(wParam); - hWnd = UserHMGetHandle(pWnd); - - if (wParam) - { - LIST_FOR_EACH(HotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) - { - if ( HotKeyItem->fsModifiers == fsModifiers && - HotKeyItem->vk == vk && - HotKeyItem->id == IDHOT_REACTOS ) - { - if (HotKeyItem->hWnd != hWnd) - Ret = 2; // Another window already has the same hot key. + LOWORD(wParam) == VK_TAB) return -1; + + vk = LOWORD(wParam); + fsModifiers = HIWORD(wParam); + hWnd = UserHMGetHandle(pWnd); + + if (wParam) + { + LIST_FOR_EACH(HotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) + { + if (HotKeyItem->fsModifiers == fsModifiers && + HotKeyItem->vk == vk && + HotKeyItem->id == IDHOT_REACTOS) + { + if (HotKeyItem->hWnd != hWnd) + Ret = 2; // Another window already has the same hot key. + break; + } + } + } + + LIST_FOR_EACH(HotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) + { + if (HotKeyItem->hWnd == hWnd && + HotKeyItem->id == IDHOT_REACTOS) + { + HaveSameWnd = TRUE; break; - } - } - } - - LIST_FOR_EACH(HotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) - { - if ( HotKeyItem->hWnd == hWnd && - HotKeyItem->id == IDHOT_REACTOS ) - { - HaveSameWnd = TRUE; - break; - } - } - - if (HaveSameWnd) - { - if (wParam == 0) - { // Setting wParam to NULL removes the hot key associated with a window. - UnregisterWindowHotKeys(pWnd); - } - else - { /* A window can only have one hot key. If the window already has a hot key - associated with it, the new hot key replaces the old one. */ - HotKeyItem->fsModifiers = fsModifiers; - HotKeyItem->vk = vk; - } - } - else // - { - if (wParam == 0) - return 1; // Do nothing, exit. - - HotKeyItem = ExAllocatePoolWithTag (PagedPool, sizeof(HOT_KEY_ITEM), USERTAG_HOTKEY); - if (HotKeyItem == NULL) - { - return 0; - } - - HotKeyItem->Thread = pWnd->head.pti->pEThread; - HotKeyItem->hWnd = hWnd; - HotKeyItem->id = IDHOT_REACTOS; // Don't care, these hot keys are unrelated to the hot keys set by RegisterHotKey. - HotKeyItem->fsModifiers = fsModifiers; - HotKeyItem->vk = vk; - - InsertHeadList (&gHotkeyList, &HotKeyItem->ListEntry); - } - return Ret; + } + } + + if (HaveSameWnd) + { + if (wParam == 0) + { // Setting wParam to NULL removes the hot key associated with a window. + UnregisterWindowHotKeys(pWnd); + } + else + { /* A window can only have one hot key. If the window already has a hot key + associated with it, the new hot key replaces the old one. */ + HotKeyItem->fsModifiers = fsModifiers; + HotKeyItem->vk = vk; + } + } + else // + { + if (wParam == 0) + return 1; // Do nothing, exit. + + HotKeyItem = ExAllocatePoolWithTag(PagedPool, sizeof(HOT_KEY_ITEM), USERTAG_HOTKEY); + if (HotKeyItem == NULL) + { + return 0; + } + + HotKeyItem->Thread = pWnd->head.pti->pEThread; + HotKeyItem->hWnd = hWnd; + HotKeyItem->id = IDHOT_REACTOS; // Don't care, these hot keys are unrelated to the hot keys set by RegisterHotKey. + HotKeyItem->fsModifiers = fsModifiers; + HotKeyItem->vk = vk; + + InsertHeadList(&gHotkeyList, &HotKeyItem->ListEntry); + } + return Ret; }
/* SYSCALLS *****************************************************************/ @@ -288,88 +288,88 @@ UINT fsModifiers, UINT vk) { - PHOT_KEY_ITEM HotKeyItem; - PWND Window; - PETHREAD HotKeyThread; - DECLARE_RETURN(BOOL); - - TRACE("Enter NtUserRegisterHotKey\n"); - UserEnterExclusive(); - - if (hWnd == NULL) - { - HotKeyThread = PsGetCurrentThread(); - } - else - { - if(!(Window = UserGetWindowObject(hWnd))) - { - RETURN( FALSE); - } - HotKeyThread = Window->head.pti->pEThread; - } - - /* Check for existing hotkey */ - if (IsHotKey(fsModifiers, vk)) - { - RETURN( FALSE); - } - - HotKeyItem = ExAllocatePoolWithTag(PagedPool, sizeof(HOT_KEY_ITEM), USERTAG_HOTKEY); - if (HotKeyItem == NULL) - { - RETURN( FALSE); - } - - HotKeyItem->Thread = HotKeyThread; - HotKeyItem->hWnd = hWnd; - HotKeyItem->id = id; - HotKeyItem->fsModifiers = fsModifiers; - HotKeyItem->vk = vk; - - InsertHeadList (&gHotkeyList, &HotKeyItem->ListEntry); - - RETURN( TRUE); + PHOT_KEY_ITEM HotKeyItem; + PWND Window; + PETHREAD HotKeyThread; + DECLARE_RETURN(BOOL); + + TRACE("Enter NtUserRegisterHotKey\n"); + UserEnterExclusive(); + + if (hWnd == NULL) + { + HotKeyThread = PsGetCurrentThread(); + } + else + { + if(!(Window = UserGetWindowObject(hWnd))) + { + RETURN( FALSE); + } + HotKeyThread = Window->head.pti->pEThread; + } + + /* Check for existing hotkey */ + if (IsHotKey(fsModifiers, vk)) + { + RETURN( FALSE); + } + + HotKeyItem = ExAllocatePoolWithTag(PagedPool, sizeof(HOT_KEY_ITEM), USERTAG_HOTKEY); + if (HotKeyItem == NULL) + { + RETURN( FALSE); + } + + HotKeyItem->Thread = HotKeyThread; + HotKeyItem->hWnd = hWnd; + HotKeyItem->id = id; + HotKeyItem->fsModifiers = fsModifiers; + HotKeyItem->vk = vk; + + InsertHeadList(&gHotkeyList, &HotKeyItem->ListEntry); + + RETURN( TRUE);
CLEANUP: - TRACE("Leave NtUserRegisterHotKey, ret=%i\n",_ret_); - UserLeave(); - END_CLEANUP; + TRACE("Leave NtUserRegisterHotKey, ret=%i\n", _ret_); + UserLeave(); + END_CLEANUP; }
BOOL APIENTRY NtUserUnregisterHotKey(HWND hWnd, int id) { - PHOT_KEY_ITEM HotKeyItem; - PWND Window; - DECLARE_RETURN(BOOL); - - TRACE("Enter NtUserUnregisterHotKey\n"); - UserEnterExclusive(); - - if(!(Window = UserGetWindowObject(hWnd))) - { - RETURN( FALSE); - } - - LIST_FOR_EACH(HotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) - { - if (HotKeyItem->hWnd == hWnd && HotKeyItem->id == id) - { - RemoveEntryList (&HotKeyItem->ListEntry); - ExFreePoolWithTag(HotKeyItem, USERTAG_HOTKEY); - - RETURN( TRUE); - } - } - - RETURN( FALSE); + PHOT_KEY_ITEM HotKeyItem; + PWND Window; + DECLARE_RETURN(BOOL); + + TRACE("Enter NtUserUnregisterHotKey\n"); + UserEnterExclusive(); + + if(!(Window = UserGetWindowObject(hWnd))) + { + RETURN( FALSE); + } + + LIST_FOR_EACH(HotKeyItem, &gHotkeyList, HOT_KEY_ITEM, ListEntry) + { + if (HotKeyItem->hWnd == hWnd && HotKeyItem->id == id) + { + RemoveEntryList(&HotKeyItem->ListEntry); + ExFreePoolWithTag(HotKeyItem, USERTAG_HOTKEY); + + RETURN( TRUE); + } + } + + RETURN( FALSE);
CLEANUP: - TRACE("Leave NtUserUnregisterHotKey, ret=%i\n",_ret_); - UserLeave(); - END_CLEANUP; + TRACE("Leave NtUserUnregisterHotKey, ret=%i\n", _ret_); + UserLeave(); + END_CLEANUP; }
/* EOF */