return p;
}
+#ifdef __WXDEBUG__
+// Add an easy way to capture screenshots:
+static void CaptureScreenshot()
+{
+ wxBusyCursor bcur;
+
+ static int screenshot_num = 0;
+ char screenshot[128];
+ sprintf(screenshot, "screenshot-%03i.png", screenshot_num++);
+ g_displayDC->savePNGFromDC(screenshot, 0, 0,
+ g_displayDC->sizex(),
+ g_displayDC->sizey());
+}
+#endif
+
// ---------------------------------------------------------------------------
// MGL_WM hooks:
// ---------------------------------------------------------------------------
static void wxWindowPainter(window_t *wnd, MGLDC *dc)
{
wxWindowMGL *w = (wxWindow*) wnd->userData;
+
if ( w && !(w->GetWindowStyle() & wxTRANSPARENT_WINDOW) )
{
MGLDevCtx ctx(dc);
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;
ret = win->GetEventHandler()->ProcessEvent(event);
+
+#ifdef __WXDEBUG__
+ // Add an easy way to capture screenshots:
+ if ( event.m_keyCode == WXK_F1 &&
+ event.m_shiftDown && event.m_controlDown )
+ CaptureScreenshot();
+#endif
+
#if wxUSE_ACCEL
if ( !ret )
{
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;
}
if ( gs_focusedWindow == this )
void wxWindowMGL::SetFocus()
{
+ if ( gs_focusedWindow == this ) return;
+
if ( gs_focusedWindow )
gs_focusedWindow->KillFocus();
#endif // wxUSE_CARET
wxWindowMGL *active = wxGetTopLevelParent(this);
- if ( active != gs_activeFrame )
+ if ( !(m_windowStyle & wxPOPUP_WINDOW) && active != gs_activeFrame )
{
if ( gs_activeFrame )
{
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);
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;
}
dc.Clear();
}
+#include "wx/menu.h"
void wxWindowMGL::Refresh(bool eraseBack, const wxRect *rect)
{
if ( m_eraseBackground == -1 )
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);