wxWindowBase::SetFocusFromKbd();
} // end of wxWindowOS2::SetFocus
-wxWindow* wxWindowBase::FindFocus()
+wxWindow* wxWindowBase::DoFindFocus()
{
HWND hWnd = ::WinQueryFocus(HWND_DESKTOP);
return wxFindWinFromHandle((WXHWND)hWnd);
}
return NULL;
-} // wxWindowBase::FindFocus
+} // wxWindowBase::DoFindFocus
bool wxWindowOS2::Enable(
bool bEnable
HWND hWndParent = GetHwnd();
HWND hMenu = GetHmenuOf(pMenu);
bool bIsWaiting = TRUE;
+ int nHeight;
+
+ // Protect against recursion
+ if (wxCurrentPopupMenu)
+ return false;
pMenu->SetInvokingWindow(this);
pMenu->UpdateUI();
-
+
if ( nX == -1 && nY == -1 )
{
wxPoint mouse = wxGetMousePosition();
DoClientToScreen( &nX
,&nY
);
+ DoGetSize(0,&nHeight);
+ nY = nHeight - nY;
}
wxCurrentPopupMenu = pMenu;
{
QMSG vMsg;
- if (vMsg.msg == WM_MENUEND || vMsg.msg == WM_COMMAND)
- {
+ ::WinGetMsg(vHabmain,&vMsg, (HWND)0, 0, 0);
+ if (vMsg.msg == WM_COMMAND)
bIsWaiting = FALSE;
- }
::WinDispatchMsg(vHabmain, (PQMSG)&vMsg);
-
}
+
wxCurrentPopupMenu = NULL;
pMenu->SetInvokingWindow(NULL);
return TRUE;
mResult = (MRESULT)TRUE;
}
break;
+
+#if wxUSE_MENUS_NATIVE
+ case WM_MENUEND:
+ if (wxCurrentPopupMenu)
+ {
+ if (GetHmenuOf(wxCurrentPopupMenu) == (HWND)lParam)
+ {
+ // Break out of msg loop in DoPopupMenu
+ ::WinPostMsg((HWND)lParam,WM_COMMAND,wParam,0);
+ }
+ }
+ break;
+#endif // wxUSE_MENUS_NATIVE
+
}
if (!bProcessed)
{
//
// The mouse events take consecutive IDs from WM_MOUSEFIRST to
- // WM_MOUSELAST, so it's enough to substract WM_MOUSEMOVE == WM_MOUSEFIRST
+ // WM_MOUSELAST, so it's enough to subtract WM_MOUSEMOVE == WM_MOUSEFIRST
// from the message id and take the value in the table to get wxWin event
// id
//
wxEVT_MIDDLE_DCLICK
};
- wxMouseEvent vEvent(eventsMouse[uMsg - WM_MOUSEMOVE]);
-
- InitMouseEvent( vEvent
- ,nX
- ,nY
- ,uFlags
- );
-
- bProcessed = GetEventHandler()->ProcessEvent(vEvent);
- if (!bProcessed)
+ // Bounds check
+ if ((uMsg >= WM_MOUSEMOVE) && (uMsg <= WM_BUTTON3DBLCLK))
{
- HPOINTER hCursor = (HPOINTER)GetCursor().GetHCURSOR();
+ wxMouseEvent vEvent(eventsMouse[uMsg - WM_MOUSEMOVE]);
- if (hCursor != NULLHANDLE)
+ InitMouseEvent( vEvent
+ ,nX
+ ,nY
+ ,uFlags
+ );
+
+ bProcessed = GetEventHandler()->ProcessEvent(vEvent);
+ if (!bProcessed)
{
- ::WinSetPointer(HWND_DESKTOP, hCursor);
- bProcessed = TRUE;
+ HPOINTER hCursor = (HPOINTER)GetCursor().GetHCURSOR();
+
+ if (hCursor != NULLHANDLE)
+ {
+ ::WinSetPointer(HWND_DESKTOP, hCursor);
+ bProcessed = TRUE;
+ }
}
}
- return GetEventHandler()->ProcessEvent(vEvent);
+ return bProcessed;
} // end of wxWindowOS2::HandleMouseEvent
bool wxWindowOS2::HandleMouseMove(