From 33026a2a6eaed25b1b0dbc77157e2274a3e6a9b1 Mon Sep 17 00:00:00 2001 From: Ulrich Czekalla <ulrichc@corel.com> Date: Sat, 26 Feb 2000 19:13:44 +0000 Subject: [PATCH] Send WM_HELP message when F1 is pressed. --- controls/menu.c | 26 ++++++++++++++++++++++++++ include/menu.h | 1 + windows/message.c | 23 +++++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/controls/menu.c b/controls/menu.c index a277ecbe19a..786782a04e4 100644 --- a/controls/menu.c +++ b/controls/menu.c @@ -2140,6 +2140,16 @@ static HMENU MENU_ShowSubPopup( HWND hwndOwner, HMENU hmenu, return item->hSubMenu; } + + +/********************************************************************** + * MENU_IsMenuActive + */ +BOOL MENU_IsMenuActive(void) +{ + return pTopPopupWnd && (pTopPopupWnd->dwStyle & WS_VISIBLE); +} + /*********************************************************************** * MENU_PtMenu * @@ -2768,6 +2778,22 @@ static INT MENU_TrackMenu( HMENU hmenu, UINT wFlags, INT x, INT y, fEndMenu = TRUE; break; + case VK_F1: + { + HELPINFO hi; + hi.cbSize = sizeof(HELPINFO); + hi.iContextType = HELPINFO_MENUITEM; + if (menu->FocusedItem == NO_SELECTED_ITEM) + hi.iCtrlId = 0; + else + hi.iCtrlId = menu->items[menu->FocusedItem].wID; + hi.hItemHandle = hmenu; + hi.dwContextId = menu->dwContextHelpID; + hi.MousePos = msg.pt; + SendMessageA(hwnd, WM_HELP, 0, (LPARAM)&hi); + break; + } + default: break; } diff --git a/include/menu.h b/include/menu.h index 741def89956..88e4a5eaf5e 100644 --- a/include/menu.h +++ b/include/menu.h @@ -11,6 +11,7 @@ LRESULT WINAPI PopupMenuWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ); extern BOOL MENU_Init(void); +extern BOOL MENU_IsMenuActive(void); extern HMENU MENU_GetSysMenu(HWND hWndOwner, HMENU hSysPopup); extern UINT MENU_GetMenuBarHeight( HWND hwnd, UINT menubarWidth, INT orgX, INT orgY ); diff --git a/windows/message.c b/windows/message.c index 10500752031..c0607f2bab3 100644 --- a/windows/message.c +++ b/windows/message.c @@ -27,6 +27,7 @@ #include "selectors.h" #include "thread.h" #include "options.h" +#include "menu.h" #include "struct32.h" #include "debugtools.h" @@ -422,6 +423,28 @@ static DWORD MSG_TranslateKbdMsg( HWND hTopWnd, DWORD first, DWORD last, */ static DWORD MSG_ProcessKbdMsg( MSG *msg, BOOL remove ) { + /* Handle F1 key by sending out WM_HELP message */ + if ((msg->message == WM_KEYUP) && + (msg->wParam == VK_F1) && + (msg->hwnd != GetDesktopWindow()) && + !MENU_IsMenuActive()) + { + HELPINFO hi; + WND *pWnd = WIN_FindWndPtr(msg->hwnd); + + if (NULL != pWnd) + { + hi.cbSize = sizeof(HELPINFO); + hi.iContextType = HELPINFO_WINDOW; + hi.iCtrlId = pWnd->wIDmenu; + hi.hItemHandle = msg->hwnd; + hi.dwContextId = pWnd->helpContext; + hi.MousePos = msg->pt; + SendMessageA(msg->hwnd, WM_HELP, 0, (LPARAM)&hi); + } + WIN_ReleaseWndPtr(pWnd); + } + return (HOOK_CallHooks16( WH_KEYBOARD, remove ? HC_ACTION : HC_NOREMOVE, LOWORD (msg->wParam), msg->lParam ) ? SYSQ_MSG_SKIP : SYSQ_MSG_ACCEPT); -- GitLab