X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e4db172a3b318df9aff178eb6c5da149d56e0859..99d21c0e1f8d87570702c52dccd3ad698f0a0931:/src/mgl/window.cpp?ds=sidebyside diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index db89438703..caa7490178 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -35,6 +35,8 @@ #include "wx/panel.h" #include "wx/intl.h" #include "wx/log.h" + #include "wx/dcscreen.h" + #include "wx/menu.h" #endif #if wxUSE_DRAG_AND_DROP @@ -43,7 +45,6 @@ #include "wx/sysopt.h" #include "wx/mgl/private.h" -#include "wx/dcscreen.h" #include "wx/caret.h" #include @@ -72,6 +73,8 @@ static wxWindowMGL *gs_mouseCapture = NULL; // the frame that is currently active (i.e. its child has focus). It is // used to generate wxActivateEvents static wxWindowMGL *gs_activeFrame = NULL; +// track the mouse button state for wxGetMouseState() +unsigned long g_buttonState = 0; // --------------------------------------------------------------------------- // constants @@ -150,6 +153,8 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) wxPoint orig(win->GetClientAreaOrigin()); wxPoint where; + g_buttonState = e->modifiers; + MGL_wmCoordGlobalToLocal(win->GetHandle(), e->where_x, e->where_y, &where.x, &where.y); @@ -179,7 +184,7 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) { case EVT_MOUSEDOWN: // Change focus if the user clicks outside focused window: - if ( win->AcceptsFocus() && wxWindow::FindFocus() != win ) + if ( win->CanAcceptFocus() && wxWindow::FindFocus() != win ) win->SetFocus(); if ( e->message & EVT_DBLCLICK ) @@ -296,23 +301,25 @@ static long wxScanToKeyCode(event_t *event, bool translate) if ( translate ) { + bool numlock = (event->modifiers & EVT_NUMLOCK) != 0; + switch ( EVT_scanCode(event->message) ) { KEY (KB_padMinus, WXK_NUMPAD_SUBTRACT) KEY (KB_padPlus, WXK_NUMPAD_ADD) KEY (KB_padTimes, WXK_NUMPAD_MULTIPLY) KEY (KB_padDivide, WXK_NUMPAD_DIVIDE) - KEY (KB_padCenter, WXK_NUMPAD_SEPARATOR) // ? - KEY (KB_padLeft, WXK_NUMPAD_LEFT) - KEY (KB_padRight, WXK_NUMPAD_RIGHT) - KEY (KB_padUp, WXK_NUMPAD_UP) - KEY (KB_padDown, WXK_NUMPAD_DOWN) - KEY (KB_padInsert, WXK_NUMPAD_INSERT) - KEY (KB_padDelete, WXK_NUMPAD_DELETE) - KEY (KB_padHome, WXK_NUMPAD_HOME) - KEY (KB_padEnd, WXK_NUMPAD_END) - KEY (KB_padPageUp, WXK_NUMPAD_PAGEUP) - KEY (KB_padPageDown, WXK_NUMPAD_PAGEDOWN) + KEY (KB_padCenter, numlock ? WXK_NUMPAD5 : WXK_NUMPAD_SEPARATOR) // ? + KEY (KB_padLeft, numlock ? WXK_NUMPAD4 : WXK_NUMPAD_LEFT) + KEY (KB_padRight, numlock ? WXK_NUMPAD6 : WXK_NUMPAD_RIGHT) + KEY (KB_padUp, numlock ? WXK_NUMPAD8 : WXK_NUMPAD_UP) + KEY (KB_padDown, numlock ? WXK_NUMPAD2 : WXK_NUMPAD_DOWN) + KEY (KB_padInsert, numlock ? WXK_NUMPAD0 : WXK_NUMPAD_INSERT) + KEY (KB_padDelete, numlock ? WXK_DECIMAL : WXK_NUMPAD_DELETE) + KEY (KB_padHome, numlock ? WXK_NUMPAD7 : WXK_NUMPAD_HOME) + KEY (KB_padEnd, numlock ? WXK_NUMPAD1 : WXK_NUMPAD_END) + KEY (KB_padPageUp, numlock ? WXK_NUMPAD9 : WXK_NUMPAD_PAGEUP) + KEY (KB_padPageDown, numlock ? WXK_NUMPAD3 : WXK_NUMPAD_PAGEDOWN) KEY (KB_1, '1') KEY (KB_2, '2') KEY (KB_3, '3') @@ -697,6 +704,11 @@ void wxWindowMGL::SetFocus() gs_activeFrame->GetEventHandler()->ProcessEvent(event); } + // notify the parent keeping track of focus for the kbd navigation + // purposes that we got it + wxChildFocusEvent eventFocus((wxWindow*)this); + GetEventHandler()->ProcessEvent(eventFocus); + wxFocusEvent event(wxEVT_SET_FOCUS, GetId()); event.SetEventObject(this); event.SetWindow((wxWindow*)oldFocusedWindow); @@ -1095,7 +1107,6 @@ void wxWindowMGL::Clear() dc.Clear(); } -#include "wx/menu.h" void wxWindowMGL::Refresh(bool eraseBack, const wxRect *rect) { if ( m_eraseBackground == -1 ) @@ -1151,7 +1162,7 @@ void wxWindowMGL::HandlePaint(MGLDevCtx *dc) { dc->setColorRGB(255,0,255); dc->fillRect(-1000,-1000,2000,2000); - wxUsleep(50); + wxMilliSleep(50); } #endif @@ -1214,6 +1225,6 @@ wxWindow* wxFindWindowAtPoint(const wxPoint& pt) void wxWindowMGL::OnInternalIdle() { - if (wxUpdateUIEvent::CanUpdate(this)) + if (wxUpdateUIEvent::CanUpdate(this) && IsShown()) UpdateWindowUI(wxUPDATE_UI_FROMIDLE); }