X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2d1efe3fec4393cb2a0da2e68e593b8074790e7b..4b2424bcadbc87babd3367d243b957e49333eeae:/src/mgl/window.cpp diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index b9db7ceb62..28e827dcc4 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -127,7 +127,7 @@ static void wxCaptureScreenshot(bool activeWindowOnly) } g_displayDC->savePNGFromDC(screenshot.mb_str(), - r.x, r. y, r.width, r.height); + r.x, r. y, r.x+r.width, r.y+r.height); wxMessageBox(_("Screenshot captured: ") + wxString(screenshot)); } @@ -185,24 +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 emulate the second one. - 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 ) @@ -210,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; @@ -922,7 +915,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; @@ -930,10 +923,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