X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/31ae546e1684e7a7f7c743e18572ef34fcf19151..df02852424b38b483c4c072eb1df6ac35825153c:/src/mgl/window.cpp diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index 1360b65450..b79394efbc 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -180,6 +180,7 @@ static wxWindowMGL* wxGetTopLevelParent(wxWindowMGL *win) static void wxWindowPainter(window_t *wnd, MGLDC *dc) { wxWindowMGL *w = (wxWindow*) wnd->userData; + if ( w && !(w->GetWindowStyle() & wxTRANSPARENT_WINDOW) ) { MGLDevCtx ctx(dc); @@ -197,7 +198,13 @@ static ibool wxWindowMouseHandler(window_t *wnd, event_t *e) MGL_wmCoordGlobalToLocal(win->GetHandle(), e->where_x, e->where_y, &where.x, &where.y); - if ( !win->IsEnabled() ) return FALSE; + for (wxWindowMGL *w = win; w; w = w->GetParent()) + { + if ( !w->IsEnabled() ) + return FALSE; + if ( w->IsTopLevel() ) + break; + } wxEventType type = wxEVT_NULL; wxMouseEvent event; @@ -624,6 +631,8 @@ bool wxWindowMGL::Create(wxWindow *parent, void wxWindowMGL::SetFocus() { + if ( gs_focusedWindow == this ) return; + if ( gs_focusedWindow ) gs_focusedWindow->KillFocus(); @@ -639,7 +648,7 @@ void wxWindowMGL::SetFocus() #endif // wxUSE_CARET wxWindowMGL *active = wxGetTopLevelParent(this); - if ( active != gs_activeFrame ) + if ( !(m_windowStyle & wxPOPUP_WINDOW) && active != gs_activeFrame ) { if ( gs_activeFrame ) { @@ -675,14 +684,6 @@ void wxWindowMGL::KillFocus() caret->OnKillFocus(); #endif // wxUSE_CARET - if ( IsTopLevel() ) - { - // FIXME_MGL - this is wrong, see wxGTK! - wxActivateEvent event(wxEVT_ACTIVATE, FALSE, GetId()); - event.SetEventObject(this); - GetEventHandler()->ProcessEvent(event); - } - wxFocusEvent event(wxEVT_KILL_FOCUS, GetId()); event.SetEventObject(this); GetEventHandler()->ProcessEvent(event); @@ -703,6 +704,17 @@ bool wxWindowMGL::Show(bool show) return FALSE; MGL_wmShowWindow(m_wnd, 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(); + } + } + return TRUE; } @@ -1044,6 +1056,7 @@ void wxWindowMGL::Clear() dc.Clear(); } +#include "wx/menu.h" void wxWindowMGL::Refresh(bool eraseBack, const wxRect *rect) { if ( m_eraseBackground == -1 ) @@ -1090,6 +1103,12 @@ void wxWindowMGL::HandlePaint(MGLDevCtx *dc) return; } +#if 0 // FIXME_MGL -- debugging stuff! + dc->setColorRGB(255,0,255); + dc->fillRect(-1000,-1000,2000,2000); + wxUsleep(100); +#endif + MGLRegion clip; dc->getClipRegion(clip); m_updateRegion = wxRegion(clip);