X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/634f6a1f0a5e863305bf1152e287fdf486433eee..244d3b67caf13566cdcef6cccdd85163845c893e:/src/mgl/window.cpp diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index 6b6c5df6e5..346c33f826 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -132,6 +132,7 @@ static void wxWindowPainter(window_t *wnd, MGLDC *dc) static ibool wxWindowMouseHandler(window_t *wnd, event_t *e) { wxWindowMGL *win = (wxWindowMGL*)MGL_wmGetWindowUserData(wnd); + wxPoint orig(win->GetClientAreaOrigin()); wxPoint where; MGL_wmCoordGlobalToLocal(win->GetHandle(), @@ -149,8 +150,8 @@ static ibool wxWindowMouseHandler(window_t *wnd, event_t *e) wxMouseEvent event; event.SetEventObject(win); event.SetTimestamp(e->when); - event.m_x = where.x; - event.m_y = where.y; + event.m_x = where.x - orig.x; + event.m_y = where.y - orig.y; event.m_shiftDown = e->modifiers & EVT_SHIFTKEY; event.m_controlDown = e->modifiers & EVT_CTRLSTATE; event.m_altDown = e->modifiers & EVT_LEFTALT; @@ -194,6 +195,10 @@ static ibool wxWindowMouseHandler(window_t *wnd, event_t *e) e->where_x, e->where_y, &event2.m_x, &event2.m_y); + wxPoint orig(gs_windowUnderMouse->GetClientAreaOrigin()); + event2.m_x -= orig.x; + event2.m_y -= orig.y; + event2.SetEventObject(gs_windowUnderMouse); event2.SetEventType(wxEVT_LEAVE_WINDOW); gs_windowUnderMouse->GetEventHandler()->ProcessEvent(event2); @@ -466,6 +471,11 @@ END_EVENT_TABLE() void wxWindowMGL::Init() { + // First of all, make sure window manager is up and running. If it is + // not the case, initialize it in default display mode + if ( !g_winMng ) + wxTheApp->SetDisplayMode(wxDisplayModeInfo(640, 480, 16)); + // generic: InitBase(); @@ -924,11 +934,15 @@ void wxWindowMGL::DoSetSize(int x, int y, int width, int height, int sizeFlags) } } - DoMoveWindow(x, y, width, height); + if ( m_wnd->x != x || m_wnd->y != y || + (int)m_wnd->width != width || (int)m_wnd->height != height ) + { + DoMoveWindow(x, y, width, height); - wxSizeEvent event(wxSize(width, height), GetId()); - event.SetEventObject(this); - GetEventHandler()->ProcessEvent(event); + wxSizeEvent event(wxSize(width, height), GetId()); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(event); + } } void wxWindowMGL::DoSetClientSize(int width, int height)