Send WM_HELP message when F1 is pressed.
diff --git a/controls/menu.c b/controls/menu.c
index a277ecb..786782a 100644
--- a/controls/menu.c
+++ b/controls/menu.c
@@ -2140,6 +2140,16 @@
return item->hSubMenu;
}
+
+
+/**********************************************************************
+ * MENU_IsMenuActive
+ */
+BOOL MENU_IsMenuActive(void)
+{
+ return pTopPopupWnd && (pTopPopupWnd->dwStyle & WS_VISIBLE);
+}
+
/***********************************************************************
* MENU_PtMenu
*
@@ -2768,6 +2778,22 @@
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 741def8..88e4a5e 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -11,6 +11,7 @@
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 1050075..c0607f2 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_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);