X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/60df0f96859fb0131ddfa8b477612a15f4a43790..dfe8399aa013a1fa6487d008bf1176078f218c6d:/src/mgl/window.cpp diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index d2f4633140..36baf4f2cb 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -185,35 +185,8 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) if ( win->AcceptsFocus() && wxWindow::FindFocus() != win ) win->SetFocus(); - if ( e->message & EVT_LEFTBMASK ) - type = wxEVT_LEFT_DOWN; - else if ( e->message & EVT_MIDDLEBMASK ) - type = wxEVT_MIDDLE_DOWN; - else if ( e->message & EVT_RIGHTBMASK ) - type = wxEVT_RIGHT_DOWN; - if ( e->message & EVT_DBLCLICK ) { - // MGL doesn't generate two subsequent single clicks prior - // to a double click, but rather only fires one single click - // followed by one double click. wxWindows expects two single - // clicks, so we have to synthetize the second one. First - // generate wxEVT_?_DOWN: - event.SetEventType(type); - win->GetEventHandler()->ProcessEvent(event); - - // ...followed by wxEVT_?_UP: - if ( e->message & EVT_LEFTBMASK ) - type = wxEVT_LEFT_UP; - else if ( e->message & EVT_MIDDLEBMASK ) - type = wxEVT_MIDDLE_UP; - else if ( e->message & EVT_RIGHTBMASK ) - type = wxEVT_RIGHT_UP; - event.SetEventType(type); - win->GetEventHandler()->ProcessEvent(event); - - // And change event type for the real double click event - // that will be generated later in this function: if ( e->message & EVT_LEFTBMASK ) type = wxEVT_LEFT_DCLICK; else if ( e->message & EVT_MIDDLEBMASK ) @@ -221,6 +194,15 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) else if ( e->message & EVT_RIGHTBMASK ) type = wxEVT_RIGHT_DCLICK; } + else + { + if ( e->message & EVT_LEFTBMASK ) + type = wxEVT_LEFT_DOWN; + else if ( e->message & EVT_MIDDLEBMASK ) + type = wxEVT_MIDDLE_DOWN; + else if ( e->message & EVT_RIGHTBMASK ) + type = wxEVT_RIGHT_DOWN; + } break; @@ -458,14 +440,7 @@ static bool wxHandleSpecialKeys(wxKeyEvent& event) wxCaptureScreenshot(event.m_altDown/*only active wnd?*/); return TRUE; } - - if ( event.m_keyCode == WXK_F4 && event.m_altDown && - gs_activeFrame != NULL ) - { - gs_activeFrame->Close(); - return TRUE; - } - + return FALSE; } @@ -594,12 +569,17 @@ wxWindowMGL::~wxWindowMGL() if (gs_activeFrame == this) { - gs_activeFrame = NULL; - // activate next frame in Z-order: - if ( m_wnd->prev ) - { - wxWindowMGL *win = (wxWindowMGL*)m_wnd->prev->userData; - win->SetFocus(); + gs_activeFrame = NULL; + // activate next frame in Z-order: + if ( m_wnd->prev ) + { + wxWindowMGL *win = (wxWindowMGL*)m_wnd->prev->userData; + win->SetFocus(); + } + else if ( m_wnd->next ) + { + wxWindowMGL *win = (wxWindowMGL*)m_wnd->next->userData; + win->SetFocus(); } } @@ -785,11 +765,20 @@ bool wxWindowMGL::Show(bool show) if (!show && gs_activeFrame == this) { - // activate next frame in Z-order: - if ( m_wnd->prev ) - { - wxWindowMGL *win = (wxWindowMGL*)m_wnd->prev->userData; - win->SetFocus(); + // activate next frame in Z-order: + if ( m_wnd->prev ) + { + wxWindowMGL *win = (wxWindowMGL*)m_wnd->prev->userData; + win->SetFocus(); + } + else if ( m_wnd->next ) + { + wxWindowMGL *win = (wxWindowMGL*)m_wnd->next->userData; + win->SetFocus(); + } + else + { + gs_activeFrame = NULL; } } @@ -848,7 +837,19 @@ bool wxWindowMGL::SetCursor(const wxCursor& cursor) void wxWindowMGL::WarpPointer(int x, int y) { + int w, h; + wxDisplaySize(&w, &h); + ClientToScreen(&x, &y); + if ( x < 0 ) + x = 0; + if ( y < 0 ) + y = 0; + if ( x >= w ) + x = w-1; + if ( y >= h ) + y = h-1; + EVT_setMousePos(x, y); } @@ -933,7 +934,7 @@ void wxWindowMGL::DragAcceptFiles(bool accept) // Get total size void wxWindowMGL::DoGetSize(int *x, int *y) const { - wxASSERT_MSG( m_wnd, wxT("invalid window") ) + wxASSERT_MSG( m_wnd, wxT("invalid window") ); if (x) *x = m_wnd->width; if (y) *y = m_wnd->height; @@ -941,10 +942,13 @@ void wxWindowMGL::DoGetSize(int *x, int *y) const void wxWindowMGL::DoGetPosition(int *x, int *y) const { - wxASSERT_MSG( m_wnd, wxT("invalid window") ) + wxASSERT_MSG( m_wnd, wxT("invalid window") ); + + int pX = 0, pY = 0; + AdjustForParentClientOrigin(pX, pY, 0); - if (x) *x = m_wnd->x; - if (y) *y = m_wnd->y; + if (x) *x = m_wnd->x - pX; + if (y) *y = m_wnd->y - pY; } void wxWindowMGL::DoScreenToClient(int *x, int *y) const