From: Robin Dunn Date: Wed, 19 Feb 2003 02:59:36 +0000 (+0000) Subject: Send the wxWindowDestroyEvent for all ports X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/7de595519a38b04622b80fbb7b90f741f8a832b2?ds=sidebyside Send the wxWindowDestroyEvent for all ports git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19251 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/window.h b/include/wx/window.h index 1c57f21291..398d332d46 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -891,6 +891,9 @@ protected: void SatisfyConstraints(); #endif // wxUSE_CONSTRAINTS + // Send the wxWindowDestroyEvent + void SendDestroyEvent(); + // the window id - a number which uniquely identifies a window among // its siblings unless it is -1 wxWindowID m_windowId; diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 221d6dbf2f..0a6772b8e9 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -58,7 +58,7 @@ #endif // wxUSE_DRAG_AND_DROP #if wxUSE_ACCESSIBILITY - #include "wx/access.h" + #include "wx/access.h" #endif #if wxUSE_HELP @@ -2078,6 +2078,15 @@ void wxWindowBase::ReleaseMouse() GetCapture()); } + +void wxWindowBase::SendDestroyEvent() +{ + wxWindowDestroyEvent event; + event.SetEventObject(this); + event.SetId(GetId()); + GetEventHandler()->ProcessEvent(event); +} + // ---------------------------------------------------------------------------- // global functions // ---------------------------------------------------------------------------- diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index acc7d12ca2..a18db75fb5 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -1912,7 +1912,7 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, wxLogTrace(TRACE_FOCUS, _T("%s: focus in"), win->GetName().c_str()); - + #ifdef HAVE_XIM if (win->m_ic) gdk_im_begin(win->m_ic, win->m_wxwindow->window); @@ -2275,21 +2275,6 @@ wxWindow *wxWindowBase::FindFocus() return (wxWindow *)g_focusWindow; } -//----------------------------------------------------------------------------- -// "destroy" event -//----------------------------------------------------------------------------- - -// VZ: Robert commented the code using out so it generates warnings: should -// be either fixed or removed completely -#if 0 - -static void gtk_window_destroy_callback( GtkWidget* widget, wxWindow *win ) -{ - wxWindowDestroyEvent event(win); - win->GetEventHandler()->ProcessEvent(event); -} - -#endif // 0 //----------------------------------------------------------------------------- // "realize" from m_widget @@ -2735,6 +2720,8 @@ bool wxWindowGTK::Create( wxWindow *parent, wxWindowGTK::~wxWindowGTK() { + SendDestroyEvent(); + if (g_focusWindow == this) g_focusWindow = NULL; @@ -2940,11 +2927,6 @@ void wxWindowGTK::ConnectWidget( GtkWidget *widget ) gtk_signal_connect( GTK_OBJECT(widget), "leave_notify_event", GTK_SIGNAL_FUNC(gtk_window_leave_callback), (gpointer)this ); - - // This keeps crashing on me. RR. - // - // gtk_signal_connect( GTK_OBJECT(widget), "destroy", - // GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this ); } bool wxWindowGTK::Destroy() @@ -3438,7 +3420,7 @@ int wxWindowGTK::GetCharHeight() const pango_layout_line_get_extents(line, NULL, &rect); g_object_unref( G_OBJECT( layout ) ); - + return (int) (rect.height / PANGO_SCALE); #else GdkFont *font = m_font.GetInternalFont( 1.0 ); @@ -3471,7 +3453,7 @@ int wxWindowGTK::GetCharWidth() const pango_layout_line_get_extents(line, NULL, &rect); g_object_unref( G_OBJECT( layout ) ); - + return (int) (rect.width / PANGO_SCALE); #else GdkFont *font = m_font.GetInternalFont( 1.0 ); diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index acc7d12ca2..a18db75fb5 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -1912,7 +1912,7 @@ static gint gtk_window_focus_in_callback( GtkWidget *widget, wxLogTrace(TRACE_FOCUS, _T("%s: focus in"), win->GetName().c_str()); - + #ifdef HAVE_XIM if (win->m_ic) gdk_im_begin(win->m_ic, win->m_wxwindow->window); @@ -2275,21 +2275,6 @@ wxWindow *wxWindowBase::FindFocus() return (wxWindow *)g_focusWindow; } -//----------------------------------------------------------------------------- -// "destroy" event -//----------------------------------------------------------------------------- - -// VZ: Robert commented the code using out so it generates warnings: should -// be either fixed or removed completely -#if 0 - -static void gtk_window_destroy_callback( GtkWidget* widget, wxWindow *win ) -{ - wxWindowDestroyEvent event(win); - win->GetEventHandler()->ProcessEvent(event); -} - -#endif // 0 //----------------------------------------------------------------------------- // "realize" from m_widget @@ -2735,6 +2720,8 @@ bool wxWindowGTK::Create( wxWindow *parent, wxWindowGTK::~wxWindowGTK() { + SendDestroyEvent(); + if (g_focusWindow == this) g_focusWindow = NULL; @@ -2940,11 +2927,6 @@ void wxWindowGTK::ConnectWidget( GtkWidget *widget ) gtk_signal_connect( GTK_OBJECT(widget), "leave_notify_event", GTK_SIGNAL_FUNC(gtk_window_leave_callback), (gpointer)this ); - - // This keeps crashing on me. RR. - // - // gtk_signal_connect( GTK_OBJECT(widget), "destroy", - // GTK_SIGNAL_FUNC(gtk_window_destroy_callback), (gpointer)this ); } bool wxWindowGTK::Destroy() @@ -3438,7 +3420,7 @@ int wxWindowGTK::GetCharHeight() const pango_layout_line_get_extents(line, NULL, &rect); g_object_unref( G_OBJECT( layout ) ); - + return (int) (rect.height / PANGO_SCALE); #else GdkFont *font = m_font.GetInternalFont( 1.0 ); @@ -3471,7 +3453,7 @@ int wxWindowGTK::GetCharWidth() const pango_layout_line_get_extents(line, NULL, &rect); g_object_unref( G_OBJECT( layout ) ); - + return (int) (rect.width / PANGO_SCALE); #else GdkFont *font = m_font.GetInternalFont( 1.0 ); diff --git a/src/mac/carbon/window.cpp b/src/mac/carbon/window.cpp index cf5a48692c..1c05505709 100644 --- a/src/mac/carbon/window.cpp +++ b/src/mac/carbon/window.cpp @@ -133,6 +133,8 @@ void wxWindowMac::Init() // Destructor wxWindowMac::~wxWindowMac() { + SendDestroyEvent(); + // deleting a window while it is shown invalidates the region if ( IsShown() ) { wxWindowMac* iter = this ; @@ -169,7 +171,7 @@ wxWindowMac::~wxWindowMac() { s_lastMouseWindow = NULL ; } - + wxFrame* frame = wxDynamicCast( wxGetTopLevelParent( this ) , wxFrame ) ; if ( frame ) { @@ -628,7 +630,7 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height) if ( HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) ) { - wxPoint oldPos( m_x , m_y ) ; + wxPoint oldPos( m_x , m_y ) ; wxPoint newPos( actualX , actualY ) ; MacWindowToRootWindow( &oldPos.x , &oldPos.y ) ; MacWindowToRootWindow( &newPos.x , &newPos.y ) ; @@ -1264,7 +1266,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect) if (child == m_vScrollBar) continue; if (child == m_hScrollBar) continue; if (child->IsTopLevel()) continue; - + int x,y; child->GetPosition( &x, &y ); int w,h; @@ -1499,15 +1501,15 @@ bool wxWindowMac::MacGetWindowFromPoint( const wxPoint &screenpoint , wxWindowMa static wxWindow *gs_lastWhich = NULL; -bool wxWindowMac::MacSetupCursor( const wxPoint& pt) +bool wxWindowMac::MacSetupCursor( const wxPoint& pt) { // first trigger a set cursor event - + wxPoint clientorigin = GetClientAreaOrigin() ; wxSize clientsize = GetClientSize() ; wxCursor cursor ; if ( wxRect2DInt( clientorigin.x , clientorigin.y , clientsize.x , clientsize.y ).Contains( wxPoint2DInt( pt ) ) ) - { + { wxSetCursorEvent event( pt.x , pt.y ); bool processedEvtSetCursor = GetEventHandler()->ProcessEvent(event); @@ -1517,7 +1519,7 @@ bool wxWindowMac::MacSetupCursor( const wxPoint& pt) } else { - + // the test for processedEvtSetCursor is here to prevent using m_cursor // if the user code caught EVT_SET_CURSOR() and returned nothing from // it - this is a way to say that our cursor shouldn't be used for this @@ -1682,9 +1684,9 @@ const wxRegion& wxWindowMac::MacGetVisibleRegion( bool respectChildrenAndSibling parent->MacWindowToRootWindow( &x, &y ) ; MacRootWindowToWindow( &x , &y ) ; - SetRectRgn( tempRgn , - x + parent->MacGetLeftBorderSize() , y + parent->MacGetTopBorderSize() , - x + size.x - parent->MacGetRightBorderSize(), + SetRectRgn( tempRgn , + x + parent->MacGetLeftBorderSize() , y + parent->MacGetTopBorderSize() , + x + size.x - parent->MacGetRightBorderSize(), y + size.y - parent->MacGetBottomBorderSize()) ; SectRgn( visRgn , tempRgn , visRgn ) ; @@ -1784,7 +1786,7 @@ void wxWindowMac::MacRedraw( WXHRGN updatergnr , long time, bool erase) if ( erase && !EmptyRgn(ownUpdateRgn) ) { wxWindowDC dc(this); - if (!EmptyRgn(ownUpdateRgn)) + if (!EmptyRgn(ownUpdateRgn)) dc.SetClippingRegion(wxRegion(ownUpdateRgn)); wxEraseEvent eevent( GetId(), &dc ); eevent.SetEventObject( this ); diff --git a/src/mac/window.cpp b/src/mac/window.cpp index cf5a48692c..1c05505709 100644 --- a/src/mac/window.cpp +++ b/src/mac/window.cpp @@ -133,6 +133,8 @@ void wxWindowMac::Init() // Destructor wxWindowMac::~wxWindowMac() { + SendDestroyEvent(); + // deleting a window while it is shown invalidates the region if ( IsShown() ) { wxWindowMac* iter = this ; @@ -169,7 +171,7 @@ wxWindowMac::~wxWindowMac() { s_lastMouseWindow = NULL ; } - + wxFrame* frame = wxDynamicCast( wxGetTopLevelParent( this ) , wxFrame ) ; if ( frame ) { @@ -628,7 +630,7 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height) if ( HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) ) { - wxPoint oldPos( m_x , m_y ) ; + wxPoint oldPos( m_x , m_y ) ; wxPoint newPos( actualX , actualY ) ; MacWindowToRootWindow( &oldPos.x , &oldPos.y ) ; MacWindowToRootWindow( &newPos.x , &newPos.y ) ; @@ -1264,7 +1266,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect) if (child == m_vScrollBar) continue; if (child == m_hScrollBar) continue; if (child->IsTopLevel()) continue; - + int x,y; child->GetPosition( &x, &y ); int w,h; @@ -1499,15 +1501,15 @@ bool wxWindowMac::MacGetWindowFromPoint( const wxPoint &screenpoint , wxWindowMa static wxWindow *gs_lastWhich = NULL; -bool wxWindowMac::MacSetupCursor( const wxPoint& pt) +bool wxWindowMac::MacSetupCursor( const wxPoint& pt) { // first trigger a set cursor event - + wxPoint clientorigin = GetClientAreaOrigin() ; wxSize clientsize = GetClientSize() ; wxCursor cursor ; if ( wxRect2DInt( clientorigin.x , clientorigin.y , clientsize.x , clientsize.y ).Contains( wxPoint2DInt( pt ) ) ) - { + { wxSetCursorEvent event( pt.x , pt.y ); bool processedEvtSetCursor = GetEventHandler()->ProcessEvent(event); @@ -1517,7 +1519,7 @@ bool wxWindowMac::MacSetupCursor( const wxPoint& pt) } else { - + // the test for processedEvtSetCursor is here to prevent using m_cursor // if the user code caught EVT_SET_CURSOR() and returned nothing from // it - this is a way to say that our cursor shouldn't be used for this @@ -1682,9 +1684,9 @@ const wxRegion& wxWindowMac::MacGetVisibleRegion( bool respectChildrenAndSibling parent->MacWindowToRootWindow( &x, &y ) ; MacRootWindowToWindow( &x , &y ) ; - SetRectRgn( tempRgn , - x + parent->MacGetLeftBorderSize() , y + parent->MacGetTopBorderSize() , - x + size.x - parent->MacGetRightBorderSize(), + SetRectRgn( tempRgn , + x + parent->MacGetLeftBorderSize() , y + parent->MacGetTopBorderSize() , + x + size.x - parent->MacGetRightBorderSize(), y + size.y - parent->MacGetBottomBorderSize()) ; SectRgn( visRgn , tempRgn , visRgn ) ; @@ -1784,7 +1786,7 @@ void wxWindowMac::MacRedraw( WXHRGN updatergnr , long time, bool erase) if ( erase && !EmptyRgn(ownUpdateRgn) ) { wxWindowDC dc(this); - if (!EmptyRgn(ownUpdateRgn)) + if (!EmptyRgn(ownUpdateRgn)) dc.SetClippingRegion(wxRegion(ownUpdateRgn)); wxEraseEvent eevent( GetId(), &dc ); eevent.SetEventObject( this ); diff --git a/src/mgl/window.cpp b/src/mgl/window.cpp index 562756b248..8d363b2ea4 100644 --- a/src/mgl/window.cpp +++ b/src/mgl/window.cpp @@ -64,9 +64,9 @@ winmng_t *g_winMng = NULL; MGLDevCtx *g_displayDC = NULL; -// the window that has keyboard focus: +// the window that has keyboard focus: static wxWindowMGL *gs_focusedWindow = NULL; -// the window that is about to be focused after currently focused +// the window that is about to be focused after currently focused // one looses focus: static wxWindow *gs_toBeFocusedWindow = NULL; // the window that is currently under mouse cursor: @@ -81,7 +81,7 @@ static wxWindowMGL *gs_activeFrame = NULL; // constants // --------------------------------------------------------------------------- -// Custom identifiers used to distinguish between various event handlers +// Custom identifiers used to distinguish between various event handlers // and capture handlers passed to MGL_wm enum { @@ -113,22 +113,22 @@ static void wxCaptureScreenshot(bool activeWindowOnly) #endif static int screenshot_num = 0; wxString screenshot; - - do + + do { screenshot.Printf(SCREENSHOT_FILENAME, screenshot_num++); } while ( wxFileExists(screenshot) && screenshot_num < 1000 ); - + wxRect r(0, 0, g_displayDC->sizex(), g_displayDC->sizey()); if ( activeWindowOnly && gs_activeFrame ) { r.Intersect(gs_activeFrame->GetRect()); } - - g_displayDC->savePNGFromDC(screenshot.mb_str(), + + g_displayDC->savePNGFromDC(screenshot.mb_str(), r.x, r. y, r.x+r.width, r.y+r.height); - + wxMessageBox(wxString::Format(_T("Screenshot captured: %s"), screenshot.c_str())); } @@ -140,7 +140,7 @@ static void wxCaptureScreenshot(bool activeWindowOnly) static void MGLAPI wxWindowPainter(window_t *wnd, MGLDC *dc) { wxWindowMGL *w = (wxWindow*) wnd->userData; - + if ( w && !(w->GetWindowStyle() & wxTRANSPARENT_WINDOW) ) { MGLDevCtx ctx(dc); @@ -153,18 +153,18 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) wxWindowMGL *win = (wxWindowMGL*)MGL_wmGetWindowUserData(wnd); wxPoint orig(win->GetClientAreaOrigin()); wxPoint where; - - MGL_wmCoordGlobalToLocal(win->GetHandle(), + + MGL_wmCoordGlobalToLocal(win->GetHandle(), e->where_x, e->where_y, &where.x, &where.y); for (wxWindowMGL *w = win; w; w = w->GetParent()) { - if ( !w->IsEnabled() ) + if ( !w->IsEnabled() ) return FALSE; if ( w->IsTopLevel() ) break; } - + wxEventType type = wxEVT_NULL; wxMouseEvent event; event.SetEventObject(win); @@ -178,7 +178,7 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) event.m_leftDown = e->modifiers & EVT_LEFTBUT; event.m_middleDown = e->modifiers & EVT_MIDDLEBUT; event.m_rightDown = e->modifiers & EVT_RIGHTBUT; - + switch (e->what) { case EVT_MOUSEDOWN: @@ -224,8 +224,8 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) if ( gs_windowUnderMouse ) { wxMouseEvent event2(event); - MGL_wmCoordGlobalToLocal(gs_windowUnderMouse->GetHandle(), - e->where_x, e->where_y, + MGL_wmCoordGlobalToLocal(gs_windowUnderMouse->GetHandle(), + e->where_x, e->where_y, &event2.m_x, &event2.m_y); wxPoint orig(gs_windowUnderMouse->GetClientAreaOrigin()); @@ -246,28 +246,28 @@ static ibool MGLAPI wxWindowMouseHandler(window_t *wnd, event_t *e) } else // gs_mouseCapture { - bool inside = (where.x >= 0 && + bool inside = (where.x >= 0 && where.y >= 0 && where.x < win->GetSize().x && where.y < win->GetSize().y); if ( (inside && gs_windowUnderMouse != win) || (!inside && gs_windowUnderMouse == win) ) { - wxMouseEvent evt(inside ? + wxMouseEvent evt(inside ? wxEVT_ENTER_WINDOW : wxEVT_LEAVE_WINDOW); evt.SetEventObject(win); win->GetEventHandler()->ProcessEvent(evt); gs_windowUnderMouse = inside ? win : NULL; } } - + type = wxEVT_MOTION; break; default: break; } - + if ( type == wxEVT_NULL ) { return FALSE; @@ -293,11 +293,11 @@ static long wxScanToKeyCode(event_t *event, bool translate) break; #else #define KEY(mgl_key,wx_key) \ - case mgl_key: key = wx_key; break; + case mgl_key: key = wx_key; break; #endif long key = 0; - + if ( translate ) { switch ( EVT_scanCode(event->message) ) @@ -371,7 +371,7 @@ static long wxScanToKeyCode(event_t *event, bool translate) default: break; } } - + if ( key == 0 ) { switch ( EVT_scanCode(event->message) ) @@ -415,10 +415,10 @@ static long wxScanToKeyCode(event_t *event, bool translate) KEY (KB_esc, WXK_ESCAPE) KEY (KB_backspace, WXK_BACK) KEY (KB_tab, WXK_TAB) - KEY (KB_enter, WXK_RETURN) + KEY (KB_enter, WXK_RETURN) - default: - key = EVT_asciiCode(event->message); + default: + key = EVT_asciiCode(event->message); break; } } @@ -433,15 +433,15 @@ static bool wxHandleSpecialKeys(wxKeyEvent& event) // Add an easy way to capture screenshots: if ( event.m_keyCode == WXK_SNAPSHOT #ifdef __WXDEBUG__ // FIXME_MGL - remove when KB_sysReq works in MGL! - || (event.m_keyCode == WXK_F1 && - event.m_shiftDown && event.m_controlDown) + || (event.m_keyCode == WXK_F1 && + event.m_shiftDown && event.m_controlDown) #endif ) { wxCaptureScreenshot(event.m_altDown/*only active wnd?*/); return TRUE; } - + return FALSE; } @@ -452,9 +452,9 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e) if ( !win->IsEnabled() ) return FALSE; wxPoint where; - MGL_wmCoordGlobalToLocal(win->GetHandle(), + MGL_wmCoordGlobalToLocal(win->GetHandle(), e->where_x, e->where_y, &where.x, &where.y); - + wxKeyEvent event; event.SetEventObject(win); event.SetTimestamp(e->when); @@ -479,7 +479,7 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e) event.SetEventType(wxEVT_KEY_DOWN); event2 = event; - + ret = win->GetEventHandler()->ProcessEvent(event); // wxMSW doesn't send char events with Alt pressed @@ -491,7 +491,7 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e) event2.SetEventType(wxEVT_CHAR); ret = win->GetEventHandler()->ProcessEvent(event2); } - + // Synthetize navigation key event, but do it only if the TAB key // wasn't handled yet: if ( !ret && event.m_keyCode == WXK_TAB && @@ -506,12 +506,12 @@ static ibool MGLAPI wxWindowKeybHandler(window_t *wnd, event_t *e) navEvent.SetCurrentFocus(wxStaticCast(win, wxWindow)); ret = win->GetParent()->GetEventHandler()->ProcessEvent(navEvent); } - - // Finally, process special meaning keys that are usually + + // Finally, process special meaning keys that are usually // a responsibility of OS or window manager: if ( !ret ) ret = wxHandleSpecialKeys(event); - + return ret; } } @@ -563,6 +563,8 @@ void wxWindowMGL::Init() // Destructor wxWindowMGL::~wxWindowMGL() { + SendDestroyEvent(); + m_isBeingDeleted = TRUE; if ( gs_mouseCapture == this ) @@ -583,7 +585,7 @@ wxWindowMGL::~wxWindowMGL() win->SetFocus(); } } - + if ( gs_focusedWindow == this ) KillFocus(); @@ -625,7 +627,7 @@ bool wxWindowMGL::Create(wxWindow *parent, AdjustForParentClientOrigin(x, y, 0); w = WidthDefault(size.x); h = HeightDefault(size.y); - + long mgl_style = 0; window_t *wnd_parent = parent ? parent->GetHandle() : NULL; @@ -649,7 +651,7 @@ bool wxWindowMGL::Create(wxWindow *parent, MGL_wmSetWindowFlags(wnd, mgl_style); MGL_wmShowWindow(wnd, m_isShown); - + SetMGLwindow_t(wnd); return TRUE; @@ -662,7 +664,7 @@ void wxWindowMGL::SetMGLwindow_t(struct window_t *wnd) m_wnd = wnd; if ( !m_wnd ) return; - + m_isShown = m_wnd->visible; MGL_wmSetWindowUserData(m_wnd, (void*) this); @@ -692,9 +694,9 @@ void wxWindowMGL::SetFocus() gs_focusedWindow->KillFocus(); gs_toBeFocusedWindow = NULL; } - + gs_focusedWindow = this; - + MGL_wmCaptureEvents(GetHandle(), EVT_KEYEVT, wxMGL_CAPTURE_KEYB); wxWindowMGL *active = wxGetTopLevelParent(this); @@ -712,7 +714,7 @@ void wxWindowMGL::SetFocus() event.SetEventObject(gs_activeFrame); gs_activeFrame->GetEventHandler()->ProcessEvent(event); } - + wxFocusEvent event(wxEVT_SET_FOCUS, GetId()); event.SetEventObject(this); event.SetWindow((wxWindow*)oldFocusedWindow); @@ -732,7 +734,7 @@ void wxWindowMGL::KillFocus() gs_focusedWindow = NULL; if ( m_isBeingDeleted ) return; - + MGL_wmUncaptureEvents(GetHandle(), wxMGL_CAPTURE_KEYB); #if wxUSE_CARET @@ -763,7 +765,7 @@ bool wxWindowMGL::Show(bool show) return FALSE; MGL_wmShowWindow(m_wnd, show); - + if (!show && gs_activeFrame == this) { // activate next frame in Z-order: @@ -810,7 +812,7 @@ void wxWindowMGL::DoCaptureMouse() void wxWindowMGL::DoReleaseMouse() { wxASSERT_MSG( gs_mouseCapture == this, wxT("attempt to release mouse, but this window hasn't captured it") ); - + MGL_wmUncaptureEvents(m_wnd, wxMGL_CAPTURE_MOUSE); gs_mouseCapture = NULL; } @@ -850,7 +852,7 @@ void wxWindowMGL::WarpPointer(int x, int y) x = w-1; if ( y >= h ) y = h-1; - + EVT_setMousePos(x, y); } @@ -936,7 +938,7 @@ void wxWindowMGL::DragAcceptFiles(bool accept) void wxWindowMGL::DoGetSize(int *x, int *y) const { wxASSERT_MSG( m_wnd, wxT("invalid window") ); - + if (x) *x = m_wnd->width; if (y) *y = m_wnd->height; } @@ -946,7 +948,7 @@ void wxWindowMGL::DoGetPosition(int *x, int *y) const wxASSERT_MSG( m_wnd, wxT("invalid window") ); int pX = 0, pY = 0; - AdjustForParentClientOrigin(pX, pY, 0); + AdjustForParentClientOrigin(pX, pY, 0); if (x) *x = m_wnd->x - pX; if (y) *y = m_wnd->y - pY; @@ -1027,7 +1029,7 @@ void wxWindowMGL::DoSetSize(int x, int y, int width, int height, int sizeFlags) width = currentW; } } - + if ( height == -1 ) { if ( sizeFlags & wxSIZE_AUTO_HEIGHT ) @@ -1046,18 +1048,18 @@ void wxWindowMGL::DoSetSize(int x, int y, int width, int height, int sizeFlags) height = currentH; } } - + int maxWidth = GetMaxWidth(), - minWidth = GetMinWidth(), + minWidth = GetMinWidth(), maxHeight = GetMaxHeight(), minHeight = GetMinHeight(); - + if ( minWidth != -1 && width < minWidth ) width = minWidth; if ( maxWidth != -1 && width > maxWidth ) width = maxWidth; if ( minHeight != -1 && height < minHeight ) height = minHeight; if ( maxHeight != -1 && height > maxHeight ) height = maxHeight; - if ( m_wnd->x != x || m_wnd->y != y || + if ( m_wnd->x != x || m_wnd->y != y || (int)m_wnd->width != width || (int)m_wnd->height != height ) { DoMoveWindow(x, y, width, height); @@ -1164,7 +1166,7 @@ void wxWindowMGL::Refresh(bool eraseBack, const wxRect *rect) m_eraseBackground = eraseBack; else m_eraseBackground |= eraseBack; - + if ( rect ) { rect_t r; @@ -1199,12 +1201,12 @@ void wxWindowMGL::HandlePaint(MGLDevCtx *dc) { if ( m_frozen ) { - // Don't paint anything if the window is frozen. + // Don't paint anything if the window is frozen. m_refreshAfterThaw = TRUE; return; } - -#ifdef __WXDEBUG__ + +#ifdef __WXDEBUG__ // FIXME_MGL -- debugging stuff, to be removed! static int debugPaintEvents = -1; if ( debugPaintEvents == -1 ) @@ -1241,7 +1243,7 @@ void wxWindowMGL::HandlePaint(MGLDevCtx *dc) wxNcPaintEvent eventNc(GetId()); eventNc.SetEventObject(this); GetEventHandler()->ProcessEvent(eventNc); - + wxPaintEvent eventPt(GetId()); eventPt.SetEventObject(this); GetEventHandler()->ProcessEvent(eventPt); diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 4ee76d5b68..07f274bdfe 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -1887,7 +1887,7 @@ static void wxYieldForCommandsOnly() { wxTheApp->DoMessage((WXMSG *)&msg); } - + // If we retrieved a WM_QUIT, insert back into the message queue. if (msg.message == WM_QUIT) ::PostQuitMessage(0); @@ -3325,8 +3325,7 @@ bool wxWindowMSW::HandleCreate(WXLPCREATESTRUCT cs, bool *mayCreate) bool wxWindowMSW::HandleDestroy() { - wxWindowDestroyEvent event((wxWindow *)this); - (void)GetEventHandler()->ProcessEvent(event); + SendDestroyEvent(); // delete our drop target if we've got one #if wxUSE_DRAG_AND_DROP diff --git a/src/os2/window.cpp b/src/os2/window.cpp index 99bd6f5a51..25610ad248 100644 --- a/src/os2/window.cpp +++ b/src/os2/window.cpp @@ -3513,9 +3513,7 @@ bool wxWindowOS2::HandleCreate( bool wxWindowOS2::HandleDestroy() { - wxWindowDestroyEvent vEvent((wxWindow*)this); - - (void)GetEventHandler()->ProcessEvent(vEvent); + SendDestroyEvent(); // // Delete our drop target if we've got one diff --git a/src/x11/window.cpp b/src/x11/window.cpp index cf10d5730f..5901a58e80 100644 --- a/src/x11/window.cpp +++ b/src/x11/window.cpp @@ -107,7 +107,7 @@ void wxWindowX11::Init() m_clientWindow = (WXWindow) 0; m_insertIntoMain = FALSE; m_updateNcArea = FALSE; - + m_winCaptured = FALSE; m_needsInputFocus = FALSE; m_isShown = TRUE; @@ -135,20 +135,20 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id, Colormap cm = DefaultColormap( xdisplay, xscreen ); m_backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); - m_backgroundColour.CalcPixel( (WXColormap) cm ); - + m_backgroundColour.CalcPixel( (WXColormap) cm ); + m_foregroundColour = *wxBLACK; - m_foregroundColour.CalcPixel( (WXColormap) cm ); + m_foregroundColour.CalcPixel( (WXColormap) cm ); Window xparent = (Window) parent->GetClientAreaWindow(); - + // Add window's own scrollbars to main window, not to client window if (parent->GetInsertIntoMain()) { // wxLogDebug( "Inserted into main: %s", GetName().c_str() ); xparent = (Window) parent->GetMainWindow(); } - + // Size (not including the border) must be nonzero (or a Value error results)! // Note: The Xlib manual doesn't mention this restriction of XCreateWindow. wxSize size2(size); @@ -162,7 +162,7 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id, pos2.x = 0; if (pos2.y == -1) pos2.y = 0; - + #if wxUSE_TWO_WINDOWS bool need_two_windows = ((( wxSUNKEN_BORDER | wxRAISED_BORDER | wxSIMPLE_BORDER | wxHSCROLL | wxVSCROLL ) & m_windowStyle) != 0); @@ -175,50 +175,50 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id, #else XSetWindowAttributes xattributes; long xattributes_mask = 0; - + xattributes_mask |= CWBackPixel; xattributes.background_pixel = m_backgroundColour.GetPixel(); - + xattributes_mask |= CWBorderPixel; xattributes.border_pixel = BlackPixel( xdisplay, xscreen ); - + xattributes_mask |= CWEventMask; #endif - + if (need_two_windows) { #if wxUSE_NANOX long backColor, foreColor; backColor = GR_RGB(m_backgroundColour.Red(), m_backgroundColour.Green(), m_backgroundColour.Blue()); foreColor = GR_RGB(m_foregroundColour.Red(), m_foregroundColour.Green(), m_foregroundColour.Blue()); - - Window xwindow = XCreateWindowWithColor( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y, + + Window xwindow = XCreateWindowWithColor( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y, 0, 0, InputOutput, xvisual, backColor, foreColor); XSelectInput( xdisplay, xwindow, GR_EVENT_MASK_CLOSE_REQ | ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask | PropertyChangeMask ); - + #else // Normal X11 - xattributes.event_mask = + xattributes.event_mask = ExposureMask | StructureNotifyMask | ColormapChangeMask; - Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y, + Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y, 0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes ); #endif - + XSetWindowBackgroundPixmap( xdisplay, xwindow, None ); - + m_mainWindow = (WXWindow) xwindow; wxAddWindowToTable( xwindow, (wxWindow*) this ); - + XMapWindow( xdisplay, xwindow ); -#if !wxUSE_NANOX - xattributes.event_mask = +#if !wxUSE_NANOX + xattributes.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask | @@ -230,21 +230,21 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id, xattributes.bit_gravity = StaticGravity; } #endif - + if (HasFlag( wxSUNKEN_BORDER) || HasFlag( wxRAISED_BORDER)) { pos2.x = 2; pos2.y = 2; size2.x -= 4; size2.y -= 4; - } + } else if (HasFlag( wxSIMPLE_BORDER )) { pos2.x = 1; pos2.y = 1; size2.x -= 2; size2.y -= 2; - } + } else { pos2.x = 0; @@ -257,28 +257,28 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id, if (size2.y <= 0) size2.y = 1; -#if wxUSE_NANOX +#if wxUSE_NANOX backColor = GR_RGB(m_backgroundColour.Red(), m_backgroundColour.Green(), m_backgroundColour.Blue()); foreColor = GR_RGB(m_foregroundColour.Red(), m_foregroundColour.Green(), m_foregroundColour.Blue()); - - xwindow = XCreateWindowWithColor( xdisplay, xwindow, pos2.x, pos2.y, size2.x, size2.y, + + xwindow = XCreateWindowWithColor( xdisplay, xwindow, pos2.x, pos2.y, size2.x, size2.y, 0, 0, InputOutput, xvisual, backColor, foreColor); XSelectInput( xdisplay, xwindow, GR_EVENT_MASK_CLOSE_REQ | ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask | PropertyChangeMask ); - + #else - xwindow = XCreateWindow( xdisplay, xwindow, pos2.x, pos2.y, size2.x, size2.y, + xwindow = XCreateWindow( xdisplay, xwindow, pos2.x, pos2.y, size2.x, size2.y, 0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes ); #endif - + XSetWindowBackgroundPixmap( xdisplay, xwindow, None ); - + m_clientWindow = (WXWindow) xwindow; wxAddClientWindowToTable( xwindow, (wxWindow*) this ); - + XMapWindow( xdisplay, xwindow ); } else @@ -288,17 +288,17 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id, long backColor, foreColor; backColor = GR_RGB(m_backgroundColour.Red(), m_backgroundColour.Green(), m_backgroundColour.Blue()); foreColor = GR_RGB(m_foregroundColour.Red(), m_foregroundColour.Green(), m_foregroundColour.Blue()); - - Window xwindow = XCreateWindowWithColor( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y, + + Window xwindow = XCreateWindowWithColor( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y, 0, 0, InputOutput, xvisual, backColor, foreColor); XSelectInput( xdisplay, xwindow, GR_EVENT_MASK_CLOSE_REQ | ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask | PropertyChangeMask ); - + #else - xattributes.event_mask = + xattributes.event_mask = ExposureMask | KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | KeymapStateMask | FocusChangeMask | ColormapChangeMask | StructureNotifyMask | @@ -309,17 +309,17 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id, xattributes_mask |= CWBitGravity; xattributes.bit_gravity = NorthWestGravity; } - - Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y, + + Window xwindow = XCreateWindow( xdisplay, xparent, pos2.x, pos2.y, size2.x, size2.y, 0, DefaultDepth(xdisplay,xscreen), InputOutput, xvisual, xattributes_mask, &xattributes ); #endif - + XSetWindowBackgroundPixmap( xdisplay, xwindow, None ); - + m_mainWindow = (WXWindow) xwindow; m_clientWindow = m_mainWindow; wxAddWindowToTable( xwindow, (wxWindow*) this ); - + XMapWindow( xdisplay, xwindow ); } @@ -341,11 +341,13 @@ bool wxWindowX11::Create(wxWindow *parent, wxWindowID id, // Destructor wxWindowX11::~wxWindowX11() { + SendDestroyEvent(); + if (g_captureWindow == this) g_captureWindow = NULL; - + m_isBeingDeleted = TRUE; - + if (m_parent) m_parent->RemoveChild( this ); @@ -359,7 +361,7 @@ wxWindowX11::~wxWindowX11() XDestroyWindow( wxGlobalDisplay(), xwindow ); m_clientWindow = NULL; } - + // Destroy the window Window xwindow = (Window) m_mainWindow; wxDeleteWindowFromTable( xwindow ); @@ -374,11 +376,11 @@ wxWindowX11::~wxWindowX11() void wxWindowX11::SetFocus() { Window xwindow = (Window) m_clientWindow; - + wxCHECK_RET( xwindow, wxT("invalid window") ); - + wxCHECK_RET( AcceptsFocus(), wxT("set focus on window that doesn't accept the focus") ); - + #if 0 if (GetName() == "scrollBar") { @@ -386,7 +388,7 @@ void wxWindowX11::SetFocus() *crash = 0; } #endif - + if (wxWindowIsVisible(xwindow)) { wxLogTrace( _T("focus"), _T("wxWindowX11::SetFocus: %s"), GetClassInfo()->GetClassName()); @@ -427,7 +429,7 @@ bool wxWindowX11::Enable(bool enable) { if ( !wxWindowBase::Enable(enable) ) return FALSE; - + return TRUE; } @@ -476,14 +478,14 @@ void wxWindowX11::DoCaptureMouse() (*tmp) = 1; return; } - + if (m_winCaptured) return; Window xwindow = (Window) m_clientWindow; wxCHECK_RET( xwindow, wxT("invalid window") ); - + g_captureWindow = (wxWindow*) this; if (xwindow) @@ -504,7 +506,7 @@ void wxWindowX11::DoCaptureMouse() wxLogDebug(msg); if (res == GrabNotViewable) wxLogDebug( wxT("This is not a viewable window - perhaps not shown yet?") ); - + g_captureWindow = NULL; return; } @@ -516,7 +518,7 @@ void wxWindowX11::DoCaptureMouse() void wxWindowX11::DoReleaseMouse() { g_captureWindow = NULL; - + if ( !m_winCaptured ) return; @@ -526,7 +528,7 @@ void wxWindowX11::DoReleaseMouse() { XUngrabPointer( wxGlobalDisplay(), CurrentTime ); } - + // wxLogDebug( "Ungrabbed pointer in %s", GetName().c_str() ); m_winCaptured = FALSE; @@ -554,7 +556,7 @@ bool wxWindowX11::SetCursor(const wxCursor& cursor) Window xwindow = (Window) m_clientWindow; wxCHECK_MSG( xwindow, FALSE, wxT("invalid window") ); - + wxCursor cursorToUse; if (m_cursor.Ok()) cursorToUse = m_cursor; @@ -574,7 +576,7 @@ void wxWindowX11::WarpPointer (int x, int y) Window xwindow = (Window) m_clientWindow; wxCHECK_RET( xwindow, wxT("invalid window") ); - + XWarpPointer( wxGlobalDisplay(), None, xwindow, 0, 0, 0, 0, x, y); } @@ -583,27 +585,27 @@ void wxWindowX11::ScrollWindow(int dx, int dy, const wxRect *rect) { // No scrolling requested. if ((dx == 0) && (dy == 0)) return; - + if (!m_updateRegion.IsEmpty()) { m_updateRegion.Offset( dx, dy ); - + int cw = 0; int ch = 0; GetSize( &cw, &ch ); // GetClientSize() ?? m_updateRegion.Intersect( 0, 0, cw, ch ); } - + if (!m_clearRegion.IsEmpty()) { m_clearRegion.Offset( dx, dy ); - + int cw = 0; int ch = 0; GetSize( &cw, &ch ); // GetClientSize() ?? m_clearRegion.Intersect( 0, 0, cw, ch ); } - + Window xwindow = (Window) GetClientAreaWindow(); wxCHECK_RET( xwindow, wxT("invalid window") ); @@ -621,7 +623,7 @@ void wxWindowX11::ScrollWindow(int dx, int dy, const wxRect *rect) { s_x = rect->x; s_y = rect->y; - + cw = rect->width; ch = rect->height; } @@ -631,7 +633,7 @@ void wxWindowX11::ScrollWindow(int dx, int dy, const wxRect *rect) s_y = 0; GetClientSize( &cw, &ch ); } - + #if wxUSE_TWO_WINDOWS wxPoint offset( 0,0 ); #else @@ -639,10 +641,10 @@ void wxWindowX11::ScrollWindow(int dx, int dy, const wxRect *rect) s_x += offset.x; s_y += offset.y; #endif - + int w = cw - abs(dx); int h = ch - abs(dy); - + if ((h < 0) || (w < 0)) { Refresh(); @@ -654,17 +656,17 @@ void wxWindowX11::ScrollWindow(int dx, int dy, const wxRect *rect) if (dy < 0) rect.y = ch+dy + offset.y; else rect.y = s_y; if (dy != 0) rect.width = cw; else rect.width = abs(dx); if (dx != 0) rect.height = ch; else rect.height = abs(dy); - + int d_x = s_x; int d_y = s_y; - + if (dx < 0) s_x += -dx; if (dy < 0) s_y += -dy; if (dx > 0) d_x = dx + offset.x; if (dy > 0) d_y = dy + offset.y; XCopyArea( xdisplay, xwindow, xwindow, xgc, s_x, s_y, w, h, d_x, d_y ); - + // wxLogDebug( "Copy: s_x %d s_y %d w %d h %d d_x %d d_y %d", s_x, s_y, w, h, d_x, d_y ); // wxLogDebug( "Update: %d %d %d %d", rect.x, rect.y, rect.width, rect.height ); @@ -672,7 +674,7 @@ void wxWindowX11::ScrollWindow(int dx, int dy, const wxRect *rect) m_updateRegion.Union( rect ); m_clearRegion.Union( rect ); } - + XFreeGC( xdisplay, xgc ); } @@ -723,13 +725,13 @@ void wxWindowX11::DoGetSize(int *x, int *y) const Window xwindow = (Window) m_mainWindow; wxCHECK_RET( xwindow, wxT("invalid window") ); - + //XSync(wxGlobalDisplay(), False); XWindowAttributes attr; Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr ); wxASSERT(status); - + if (status) { *x = attr.width /* + 2*m_borderSize */ ; @@ -746,12 +748,12 @@ void wxWindowX11::DoGetPosition(int *x, int *y) const XWindowAttributes attr; Status status = XGetWindowAttributes(wxGlobalDisplay(), window, & attr); wxASSERT(status); - + if (status) { *x = attr.x; *y = attr.y; - + // We may be faking the client origin. So a window that's really at (0, 30) // may appear (to wxWin apps) to be at (0, 0). if (GetParent()) @@ -799,7 +801,7 @@ void wxWindowX11::DoGetClientSize(int *x, int *y) const XWindowAttributes attr; Status status = XGetWindowAttributes( wxGlobalDisplay(), window, &attr ); wxASSERT(status); - + if (status) { *x = attr.width ; @@ -811,7 +813,7 @@ void wxWindowX11::DoGetClientSize(int *x, int *y) const void wxWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags) { // wxLogDebug("DoSetSize: %s (%ld) %d, %d %dx%d", GetClassInfo()->GetClassName(), GetId(), x, y, width, height); - + Window xwindow = (Window) m_mainWindow; wxCHECK_RET( xwindow, wxT("invalid window") ); @@ -819,12 +821,12 @@ void wxWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags) XWindowAttributes attr; Status status = XGetWindowAttributes( wxGlobalDisplay(), xwindow, &attr ); wxCHECK_RET( status, wxT("invalid window attributes") ); - + int new_x = attr.x; int new_y = attr.y; int new_w = attr.width; int new_h = attr.height; - + if (x != -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) { int yy = 0; @@ -849,24 +851,24 @@ void wxWindowX11::DoSetSize(int x, int y, int width, int height, int sizeFlags) if (new_h <= 0) new_h = 20; } - + DoMoveWindow( new_x, new_y, new_w, new_h ); } void wxWindowX11::DoSetClientSize(int width, int height) { // wxLogDebug("DoSetClientSize: %s (%ld) %dx%d", GetClassInfo()->GetClassName(), GetId(), width, height); - + Window xwindow = (Window) m_mainWindow; wxCHECK_RET( xwindow, wxT("invalid window") ); XResizeWindow( wxGlobalDisplay(), xwindow, width, height ); - + if (m_mainWindow != m_clientWindow) { xwindow = (Window) m_clientWindow; - + wxWindow *window = (wxWindow*) this; wxRenderer *renderer = window->GetRenderer(); if (renderer) @@ -875,7 +877,7 @@ void wxWindowX11::DoSetClientSize(int width, int height) width -= border.x + border.width; height -= border.y + border.height; } - + XResizeWindow( wxGlobalDisplay(), xwindow, width, height ); } } @@ -899,7 +901,7 @@ void wxWindowX11::DoMoveWindow(int x, int y, int width, int height) if (m_mainWindow != m_clientWindow) { xwindow = (Window) m_clientWindow; - + wxWindow *window = (wxWindow*) this; wxRenderer *renderer = window->GetRenderer(); if (renderer) @@ -915,7 +917,7 @@ void wxWindowX11::DoMoveWindow(int x, int y, int width, int height) x = 0; y = 0; } - + wxScrollBar *sb = window->GetScrollbar( wxHORIZONTAL ); if (sb && sb->IsShown()) { @@ -928,11 +930,11 @@ void wxWindowX11::DoMoveWindow(int x, int y, int width, int height) wxSize size = sb->GetSize(); width -= size.x; } - + XMoveResizeWindow( wxGlobalDisplay(), xwindow, x, y, wxMax(1, width), wxMax(1, height) ); } - -#else + +#else XWindowChanges windowChanges; windowChanges.x = x; @@ -943,7 +945,7 @@ void wxWindowX11::DoMoveWindow(int x, int y, int width, int height) int valueMask = CWX | CWY | CWWidth | CWHeight; XConfigureWindow( wxGlobalDisplay(), xwindow, valueMask, &windowChanges ); - + #endif } @@ -957,7 +959,7 @@ void wxWindowX11::SetSizeHints(int minW, int minH, int maxW, int maxH, int incW, #if !wxUSE_NANOX XSizeHints sizeHints; sizeHints.flags = 0; - + if (minW > -1 && minH > -1) { sizeHints.flags |= PMinSize; @@ -997,7 +999,7 @@ int wxWindowX11::GetCharHeight() const int w,h; pango_layout_get_pixel_size(layout, &w, &h); g_object_unref( G_OBJECT( layout ) ); - + return h; #else WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, wxGlobalDisplay()); @@ -1024,7 +1026,7 @@ int wxWindowX11::GetCharWidth() const int w,h; pango_layout_get_pixel_size(layout, &w, &h); g_object_unref( G_OBJECT( layout ) ); - + return w; #else WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, wxGlobalDisplay()); @@ -1057,19 +1059,19 @@ void wxWindowX11::GetTextExtent(const wxString& string, #if wxUSE_UNICODE PangoLayout *layout = pango_layout_new( wxTheApp->GetPangoContext() ); - + PangoFontDescription *desc = fontToUse.GetNativeFontInfo()->description; pango_layout_set_font_description(layout, desc); - + const wxCharBuffer data = wxConvUTF8.cWC2MB( string ); pango_layout_set_text(layout, (const char*) data, strlen( (const char*) data )); - + PangoLayoutLine *line = (PangoLayoutLine *)pango_layout_get_lines(layout)->data; - + PangoRectangle rect; pango_layout_line_get_extents(line, NULL, &rect); - + if (x) (*x) = (wxCoord) (rect.width / PANGO_SCALE); if (y) (*y) = (wxCoord) (rect.height / PANGO_SCALE); if (descent) @@ -1118,7 +1120,7 @@ void wxWindowX11::Refresh(bool eraseBack, const wxRect *rect) { int height,width; GetSize( &width, &height ); - + // Schedule for later Updating in ::Update() or ::OnInternalIdle(). m_clearRegion.Clear(); m_clearRegion.Union( 0, 0, width, height ); @@ -1134,7 +1136,7 @@ void wxWindowX11::Refresh(bool eraseBack, const wxRect *rect) { int height,width; GetSize( &width, &height ); - + // Schedule for later Updating in ::Update() or ::OnInternalIdle(). m_updateRegion.Clear(); m_updateRegion.Union( 0, 0, width, height ); @@ -1149,13 +1151,13 @@ void wxWindowX11::Update() // Send nc paint events. SendNcPaintEvents(); } - + if (!m_updateRegion.IsEmpty()) { // wxLogDebug("wxWindowX11::Update: %s", GetClassInfo()->GetClassName()); // Actually send erase events. SendEraseEvents(); - + // Actually send paint events. SendPaintEvents(); } @@ -1172,10 +1174,10 @@ void wxWindowX11::Clear() void wxWindowX11::SendEraseEvents() { if (m_clearRegion.IsEmpty()) return; - + wxClientDC dc( (wxWindow*)this ); dc.SetClippingRegion( m_clearRegion ); - + wxEraseEvent erase_event( GetId(), &dc ); erase_event.SetEventObject( this ); @@ -1184,7 +1186,7 @@ void wxWindowX11::SendEraseEvents() Display *xdisplay = wxGlobalDisplay(); Window xwindow = (Window) GetClientAreaWindow(); XSetForeground( xdisplay, g_eraseGC, m_backgroundColour.GetPixel() ); - + wxRegionIterator upd( m_clearRegion ); while (upd) { @@ -1193,7 +1195,7 @@ void wxWindowX11::SendEraseEvents() upd ++; } } - + m_clearRegion.Clear(); } @@ -1202,13 +1204,13 @@ void wxWindowX11::SendPaintEvents() // wxLogDebug("SendPaintEvents: %s (%ld)", GetClassInfo()->GetClassName(), GetId()); m_clipPaintRegion = TRUE; - + wxPaintEvent paint_event( GetId() ); paint_event.SetEventObject( this ); GetEventHandler()->ProcessEvent( paint_event ); - + m_updateRegion.Clear(); - + m_clipPaintRegion = FALSE; } @@ -1226,7 +1228,7 @@ void wxWindowX11::SendNcPaintEvents() { height = sb->GetSize().y; y = sb->GetPosition().y; - + sb = window->GetScrollbar( wxVERTICAL ); if (sb && sb->IsShown()) { @@ -1238,17 +1240,17 @@ void wxWindowX11::SendNcPaintEvents() Colormap cm = (Colormap) wxTheApp->GetMainColormap( wxGetDisplay() ); wxColour colour = wxSystemSettings::GetColour(wxSYS_COLOUR_APPWORKSPACE); colour.CalcPixel( (WXColormap) cm ); - + XSetForeground( xdisplay, g_eraseGC, colour.GetPixel() ); - + XFillRectangle( xdisplay, xwindow, g_eraseGC, x, y, width, height ); } } - + wxNcPaintEvent nc_paint_event( GetId() ); nc_paint_event.SetEventObject( this ); GetEventHandler()->ProcessEvent( nc_paint_event ); - + m_updateNcArea = FALSE; } @@ -1282,7 +1284,7 @@ void wxWindowX11::OnInternalIdle() { // Update invalidated regions. Update(); - + // This calls the UI-update mechanism (querying windows for // menu/toolbar/control state information) UpdateWindowUI(); @@ -1296,7 +1298,7 @@ void wxWindowX11::OnInternalIdle() printf(msg.c_str()); #endif SetFocus(); - + // If it couldn't set the focus now, there's // no point in trying again. m_needsInputFocus = FALSE; @@ -1568,11 +1570,11 @@ bool wxWindowX11::SetBackgroundColour(const wxColour& col) Colormap cm = DefaultColormap( xdisplay, xscreen ); m_backgroundColour.CalcPixel( (WXColormap) cm ); - + // We don't set the background colour as we paint // the background ourselves. // XSetWindowBackground( xdisplay, (Window) m_clientWindow, m_backgroundColour.GetPixel() ); - + return TRUE; } @@ -1662,7 +1664,7 @@ bool wxWinModule::OnInit() Window xroot = RootWindow( xdisplay, xscreen ); g_eraseGC = XCreateGC( xdisplay, xroot, 0, NULL ); XSetFillStyle( xdisplay, g_eraseGC, FillSolid ); - + return TRUE; }