X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6aeb6f2a5810694b5241eb267d71dab4848cf8bb..f4bd67593eae8df6e9a9eb0b7e1374833dbc2a70:/src/gtk1/window.cpp diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 7460101617..392a1095f5 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -509,6 +509,10 @@ static int gtk_window_expose_callback( GtkWidget *widget, gdk_event->area.y, gdk_event->area.width, gdk_event->area.height ); + win->m_clearRegion.Union( gdk_event->area.x, + gdk_event->area.y, + gdk_event->area.width, + gdk_event->area.height ); // Actual redrawing takes place in idle time. win->GtkUpdate(); @@ -1975,7 +1979,8 @@ static void gtk_window_vscroll_callback( GtkAdjustment *adjust, win->m_oldVerticalPos = adjust->value; - wxEventType command = GtkScrollWinTypeToWx(GET_SCROLL_TYPE(win->m_widget)); + GtkScrolledWindow *sw = GTK_SCROLLED_WINDOW(win->m_widget); + wxEventType command = GtkScrollWinTypeToWx(GET_SCROLL_TYPE(sw->vscrollbar)); int value = (int)(adjust->value+0.5); @@ -2003,7 +2008,8 @@ static void gtk_window_hscroll_callback( GtkAdjustment *adjust, float diff = adjust->value - win->m_oldHorizontalPos; if (fabs(diff) < 0.2) return; - wxEventType command = GtkScrollWinTypeToWx(GET_SCROLL_TYPE(win->m_widget)); + GtkScrolledWindow *sw = GTK_SCROLLED_WINDOW(win->m_widget); + wxEventType command = GtkScrollWinTypeToWx(GET_SCROLL_TYPE(sw->hscrollbar)); win->m_oldHorizontalPos = adjust->value; @@ -2524,6 +2530,9 @@ wxWindowGTK::~wxWindowGTK() if (g_activeFrame == this) g_activeFrame = NULL; + if ( g_delayedFocus == this ) + g_delayedFocus = NULL; + m_isBeingDeleted = TRUE; m_hasVMT = FALSE; @@ -3258,7 +3267,7 @@ void wxWindowGTK::SetFocus() } } - (void)DoSendFocusEvents(this); + (void)DoSendFocusEvents((wxWindow*)this); } bool wxWindowGTK::AcceptsFocus() const @@ -3467,8 +3476,43 @@ void wxWindowGTK::GtkSendPaintEvents() return; } + // widget to draw on + GtkPizza *pizza = GTK_PIZZA (m_wxwindow); + + // Clip to paint region in wxClientDC m_clipPaintRegion = TRUE; + if (GetThemeEnabled()) + { + // find ancestor from which to steal background + wxWindow *parent = GetParent(); + while (parent && !parent->IsTopLevel()) + parent = parent->GetParent(); + if (!parent) + parent = (wxWindow*)this; + + wxRegionIterator upd( m_updateRegion ); + while (upd) + { + GdkRectangle rect; + rect.x = upd.GetX(); + rect.y = upd.GetY(); + rect.width = upd.GetWidth(); + rect.height = upd.GetHeight(); + + gtk_paint_flat_box( parent->m_widget->style, + pizza->bin_window, + GTK_STATE_NORMAL, + GTK_SHADOW_NONE, + &rect, + parent->m_widget, + (char *)"base", + 0, 0, -1, -1 ); + + upd ++; + } + } + else // if (!m_clearRegion.IsEmpty()) // always send an erase event { wxWindowDC dc( (wxWindow*)this ); @@ -3481,46 +3525,16 @@ void wxWindowGTK::GtkSendPaintEvents() { if (!g_eraseGC) { - g_eraseGC = gdk_gc_new( GTK_PIZZA(m_wxwindow)->bin_window ); + g_eraseGC = gdk_gc_new( pizza->bin_window ); gdk_gc_set_fill( g_eraseGC, GDK_SOLID ); } gdk_gc_set_foreground( g_eraseGC, m_backgroundColour.GetColor() ); - // widget to draw on - GtkPizza *pizza = GTK_PIZZA (m_wxwindow); - - // find ancestor from which to steal background - wxWindow *parent = GetParent(); - while (parent && !parent->IsTopLevel()) - parent = parent->GetParent(); - if (!parent) - parent = this; - wxRegionIterator upd( m_clearRegion ); while (upd) { - if (GetThemeEnabled()) - { - GdkRectangle rect; - rect.x = upd.GetX(); - rect.y = upd.GetY(); - rect.width = upd.GetWidth(); - rect.height = upd.GetHeight(); - - gtk_paint_flat_box( parent->m_widget->style, - pizza->bin_window, - GTK_STATE_NORMAL, - GTK_SHADOW_NONE, - &rect, - parent->m_widget, - (char *)"base", - 0, 0, -1, -1 ); - } - else - { - gdk_draw_rectangle( pizza->bin_window, g_eraseGC, 1, - upd.GetX(), upd.GetY(), upd.GetWidth(), upd.GetHeight() ); - } + gdk_draw_rectangle( pizza->bin_window, g_eraseGC, 1, + upd.GetX(), upd.GetY(), upd.GetWidth(), upd.GetHeight() ); upd ++; } } @@ -3543,8 +3557,6 @@ void wxWindowGTK::GtkSendPaintEvents() // being redrawn because the wxWindows class is allowed to // paint over the window-less widgets. - GtkPizza *pizza = GTK_PIZZA(m_wxwindow); - GList *children = pizza->children; while (children) { @@ -3629,12 +3641,9 @@ void wxWindowGTK::GtkSetBackgroundColour( const wxColour &colour ) // We need the pixel value e.g. for background clearing. m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) ); - if ((m_wxwindow) && - (m_backgroundColour != wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE))) + if (m_wxwindow) { - /* wxMSW doesn't clear the window here. I don't do that either to - provide compatibility. call Clear() to do the job. */ - + // wxMSW doesn't clear the window here, either. gdk_window_set_background( window, m_backgroundColour.GetColor() ); } @@ -4236,7 +4245,6 @@ void wxWindowGTK::ScrollWindow( int dx, int dy, const wxRect* WXUNUSED(rect) ) GetClientSize( &cw, &ch ); m_clearRegion.Intersect( 0, 0, cw, ch ); } - m_clipPaintRegion = TRUE; gtk_pizza_scroll( GTK_PIZZA(m_wxwindow), -dx, -dy ); @@ -4325,3 +4333,4 @@ void wxWinModule::OnExit() gdk_gc_unref( g_eraseGC ); } +// vi:sts=4:sw=4:et