X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a2d93e735a9f126b855a9353ca8ddeacaaf52817..ca36c2cc8fd714e90318a02a881b823a68305408:/src/gtk1/window.cpp diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index cdbcf62cf0..937692b051 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -681,22 +681,6 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev GtkPizza *pizza = GTK_PIZZA (widget); -/* - if (win->IsTopLevel()) - { - gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL, - GTK_SHADOW_NONE, &gdk_event->area, win->m_widget, "base", 0, 0, -1, -1); - } - - wxWindow *parent = win->GetParent(); - if (parent && GTK_IS_NOTEBOOK(parent->m_widget)) - { - while (!parent->IsTopLevel()) - parent = parent->GetParent(); - gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL, - GTK_SHADOW_NONE, &gdk_event->area, parent->m_widget, "base", 0, 0, -1, -1); - } -*/ if (win->GetThemeEnabled()) { wxWindow *parent = win->GetParent(); @@ -714,18 +698,22 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev gdk_event->area.width, gdk_event->area.height ); - if (gdk_event->count == 0) - { - wxEraseEvent eevent( win->GetId() ); - eevent.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent(eevent); - - wxPaintEvent event( win->GetId() ); - event.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent( event ); + if (gdk_event->count == 0) + { + win->m_clipPaintRegion = TRUE; + + wxEraseEvent eevent( win->GetId() ); + eevent.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent(eevent); - win->GetUpdateRegion().Clear(); - } + wxPaintEvent event( win->GetId() ); + event.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event ); + + win->GetUpdateRegion().Clear(); + + win->m_clipPaintRegion = FALSE; + } /* The following code will result in all window-less widgets being redrawn if the wxWindows class is given a chance to @@ -789,7 +777,13 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW if (g_isIdle) wxapp_install_idle_handler(); - + + if ((win->HasFlag(wxNO_FULL_REPAINT_ON_RESIZE)) && + (win->GetChildren().GetCount() == 0)) + { + return; + } + /* if (win->GetName() == wxT("panel")) { @@ -805,48 +799,46 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW GtkPizza *pizza = GTK_PIZZA (widget); - if (win->IsTopLevel()) - { - gtk_paint_flat_box (win->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL, - GTK_SHADOW_NONE, rect, win->m_widget, "base", 0, 0, -1, -1); - } - - wxWindow *parent = win->GetParent(); - if (parent && GTK_IS_NOTEBOOK(parent->m_widget)) + if (win->GetThemeEnabled()) { - while (!parent->IsTopLevel()) + wxWindow *parent = win->GetParent(); + while (parent && !parent->IsTopLevel()) parent = parent->GetParent(); + if (!parent) + parent = win; + gtk_paint_flat_box (parent->m_widget->style, pizza->bin_window, GTK_STATE_NORMAL, GTK_SHADOW_NONE, rect, parent->m_widget, "base", 0, 0, -1, -1); } - if (!(GTK_WIDGET_APP_PAINTABLE (widget)) && - (pizza->clear_on_draw)) - { - gdk_window_clear_area( pizza->bin_window, + + if (!(GTK_WIDGET_APP_PAINTABLE (widget)) && + (pizza->clear_on_draw)) + { + gdk_window_clear_area( pizza->bin_window, rect->x, rect->y, rect->width, rect->height); - } + } - win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height ); + win->GetUpdateRegion().Union( rect->x, rect->y, rect->width, rect->height ); - win->m_clipPaintRegion = TRUE; + win->m_clipPaintRegion = TRUE; - wxEraseEvent eevent( win->GetId() ); - eevent.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent(eevent); + wxEraseEvent eevent( win->GetId() ); + eevent.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent(eevent); - wxPaintEvent event( win->GetId() ); - event.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent( event ); + wxPaintEvent event( win->GetId() ); + event.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event ); - win->GetUpdateRegion().Clear(); + win->GetUpdateRegion().Clear(); - win->m_clipPaintRegion = FALSE; + win->m_clipPaintRegion = FALSE; - GList *children = pizza->children; - while (children) - { + GList *children = pizza->children; + while (children) + { GtkPizzaChild *child = (GtkPizzaChild*) children->data; children = children->next; @@ -855,7 +847,7 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW { gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ ); } - } + } } //----------------------------------------------------------------------------- @@ -2408,14 +2400,17 @@ void wxWindow::PostCreation() gtk_pizza_set_external( GTK_PIZZA(m_wxwindow), TRUE ); - gtk_signal_connect( GTK_OBJECT(m_wxwindow), "event", - GTK_SIGNAL_FUNC(gtk_window_event_event_callback), (gpointer)this ); - gtk_signal_connect( GTK_OBJECT(m_wxwindow), "expose_event", GTK_SIGNAL_FUNC(gtk_window_expose_callback), (gpointer)this ); gtk_signal_connect( GTK_OBJECT(m_wxwindow), "draw", GTK_SIGNAL_FUNC(gtk_window_draw_callback), (gpointer)this ); + + if (HasFlag(wxNO_FULL_REPAINT_ON_RESIZE)) + { + gtk_signal_connect( GTK_OBJECT(m_wxwindow), "event", + GTK_SIGNAL_FUNC(gtk_window_event_event_callback), (gpointer)this ); + } } #if (GTK_MINOR_VERSION > 0)