From b420fb6a37c3aa1c268983925280da7b4d7a2ee7 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Fri, 10 Mar 2000 19:49:54 +0000 Subject: [PATCH] Small oops in redrawing code. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6598 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/win_gtk.h | 4 + include/wx/gtk1/win_gtk.h | 4 + src/gtk/win_gtk.c | 80 +++++++++++++++++++- src/gtk/window.cpp | 152 +++++++++++++++++++------------------- src/gtk1/win_gtk.c | 80 +++++++++++++++++++- src/gtk1/window.cpp | 152 +++++++++++++++++++------------------- 6 files changed, 316 insertions(+), 156 deletions(-) diff --git a/include/wx/gtk/win_gtk.h b/include/wx/gtk/win_gtk.h index afede32a49..b3c92cec54 100644 --- a/include/wx/gtk/win_gtk.h +++ b/include/wx/gtk/win_gtk.h @@ -67,6 +67,7 @@ struct _GtkPizza gboolean clear_on_draw; gboolean use_filter; + gboolean external_expose; }; struct _GtkPizzaClass @@ -90,6 +91,9 @@ void gtk_pizza_set_clear (GtkPizza *pizza, void gtk_pizza_set_filter (GtkPizza *pizza, gboolean use); +void gtk_pizza_set_external (GtkPizza *pizza, + gboolean expose); + void gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy); diff --git a/include/wx/gtk1/win_gtk.h b/include/wx/gtk1/win_gtk.h index afede32a49..b3c92cec54 100644 --- a/include/wx/gtk1/win_gtk.h +++ b/include/wx/gtk1/win_gtk.h @@ -67,6 +67,7 @@ struct _GtkPizza gboolean clear_on_draw; gboolean use_filter; + gboolean external_expose; }; struct _GtkPizzaClass @@ -90,6 +91,9 @@ void gtk_pizza_set_clear (GtkPizza *pizza, void gtk_pizza_set_filter (GtkPizza *pizza, gboolean use); +void gtk_pizza_set_external (GtkPizza *pizza, + gboolean expose); + void gtk_pizza_scroll (GtkPizza *pizza, gint dx, gint dy); diff --git a/src/gtk/win_gtk.c b/src/gtk/win_gtk.c index 7d5f7a92ad..4d925f373c 100644 --- a/src/gtk/win_gtk.c +++ b/src/gtk/win_gtk.c @@ -191,6 +191,7 @@ gtk_pizza_init (GtkPizza *pizza) pizza->clear_on_draw = TRUE; pizza->use_filter = TRUE; + pizza->external_expose = FALSE; } GtkWidget* @@ -250,6 +251,16 @@ gtk_pizza_set_filter (GtkPizza *pizza, pizza->use_filter = use; } +void +gtk_pizza_set_external (GtkPizza *pizza, + gboolean expose) +{ + g_return_if_fail (pizza != NULL); + g_return_if_fail (GTK_IS_PIZZA (pizza)); + + pizza->external_expose = expose; +} + void gtk_pizza_put (GtkPizza *pizza, GtkWidget *widget, @@ -652,16 +663,77 @@ static void gtk_pizza_draw (GtkWidget *widget, GdkRectangle *area) { - /* We handle all draws events in window.cpp now. */ - return; + GtkPizza *pizza; + GtkPizzaChild *child; + GdkRectangle child_area; + GList *children; + + g_return_if_fail (widget != NULL); + g_return_if_fail (GTK_IS_PIZZA (widget)); + + pizza = GTK_PIZZA (widget); + + /* Sometimes, We handle all expose events in window.cpp now. */ + if (pizza->external_expose) + return; + + children = pizza->children; + if ( !(GTK_WIDGET_APP_PAINTABLE (widget)) && + (pizza->clear_on_draw)) + { + gdk_window_clear_area( pizza->bin_window, + area->x, area->y, area->width, area->height); + } + + while (children) + { + child = children->data; + children = children->next; + + if (gtk_widget_intersect (child->widget, area, &child_area)) + gtk_widget_draw (child->widget, &child_area); + } } static gint gtk_pizza_expose (GtkWidget *widget, GdkEventExpose *event) { - /* We handle all expose events in window.cpp now. */ - return FALSE; + GtkPizza *pizza; + GtkPizzaChild *child; + GdkEventExpose child_event; + GList *children; + + g_return_val_if_fail (widget != NULL, FALSE); + g_return_val_if_fail (GTK_IS_PIZZA (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + pizza = GTK_PIZZA (widget); + + /* Sometimes, We handle all expose events in window.cpp now. */ + if (pizza->external_expose) + return; + + if (event->window != pizza->bin_window) + return FALSE; + + children = pizza->children; + while (children) + { + child = children->data; + children = children->next; + + child_event = *event; + + if (GTK_WIDGET_NO_WINDOW (child->widget) && + GTK_WIDGET_DRAWABLE (child->widget) && + gtk_widget_intersect (child->widget, &event->area, &child_event.area)) + { + gtk_widget_event (child->widget, (GdkEvent*) &child_event); + } + } + + return TRUE; } static void diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 78bb5fea4f..769973db09 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -620,9 +620,6 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev if (g_isIdle) wxapp_install_idle_handler(); - if (win->m_queuedFullRedraw) - return TRUE; - /* if (win->GetName() == wxT("htmlWindow")) { @@ -636,48 +633,52 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev } */ - win->GetUpdateRegion().Union( gdk_event->area.x, - gdk_event->area.y, - gdk_event->area.width, - gdk_event->area.height ); - + if (!win->m_queuedFullRedraw) + { - if (gdk_event->count > 0) - return TRUE; + win->GetUpdateRegion().Union( gdk_event->area.x, + gdk_event->area.y, + gdk_event->area.width, + gdk_event->area.height ); - wxEraseEvent eevent( win->GetId() ); - eevent.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent(eevent); + 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 ); + wxPaintEvent event( win->GetId() ); + event.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event ); - win->GetUpdateRegion().Clear(); + win->GetUpdateRegion().Clear(); + } - /* The following code will result in all window-less widgets - being redrawn if the wxWindows class is given a chance to - paint *anything* because it will then be allowed to paint - over the window-less widgets */ + /* The following code will result in all window-less widgets + being redrawn if the wxWindows class is given a chance to + paint *anything* because it will then be allowed to paint + over the window-less widgets */ - GtkPizza *pizza = GTK_PIZZA (widget); + GtkPizza *pizza = GTK_PIZZA (widget); - GList *children = pizza->children; - while (children) - { - GtkPizzaChild *child = (GtkPizzaChild*) children->data; - children = children->next; + GList *children = pizza->children; + while (children) + { + GtkPizzaChild *child = (GtkPizzaChild*) children->data; + children = children->next; - GdkEventExpose child_event = *gdk_event; + GdkEventExpose child_event = *gdk_event; - if (GTK_WIDGET_NO_WINDOW (child->widget) && - GTK_WIDGET_DRAWABLE (child->widget)) - { - child_event.area.x = child->widget->allocation.x; - child_event.area.y = child->widget->allocation.y; - child_event.area.width = child->widget->allocation.width; - child_event.area.height = child->widget->allocation.height; - gtk_widget_event (child->widget, (GdkEvent*) &child_event); + if (GTK_WIDGET_NO_WINDOW (child->widget) && + GTK_WIDGET_DRAWABLE (child->widget) /* && + gtk_widget_intersect (child->widget, &gdk_event->area, &child_event.area)*/ ) + { + child_event.area.x = child->widget->allocation.x; + child_event.area.y = child->widget->allocation.y; + child_event.area.width = child->widget->allocation.width; + child_event.area.height = child->widget->allocation.height; + gtk_widget_event (child->widget, (GdkEvent*) &child_event); + } } } @@ -690,8 +691,9 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev /* GTK thinks it is clever and filters out a certain amount of "unneeded" expose events. We need them, of course, so we override the main event - procedure in GtkWidget by giving our own handler for all system events, - looking for the expose events and then we can always send them. */ + procedure in GtkWidget by giving our own handler for all system events. + There, we look for expose events ourselves whereas all other events are + handled normally. */ gint gtk_window_event_event_callback( GtkWidget *widget, GdkEventExpose *event, wxWindow *win ) { @@ -701,7 +703,6 @@ gint gtk_window_event_event_callback( GtkWidget *widget, GdkEventExpose *event, return ret; } - return FALSE; } @@ -719,18 +720,6 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW if (g_isIdle) wxapp_install_idle_handler(); - if (win->m_queuedFullRedraw) - return; - - GtkPizza *pizza = GTK_PIZZA (widget); - - 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); - } - /* if (win->GetName() == wxT("htmlWindow")) { @@ -744,33 +733,45 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW } */ - win->GetUpdateRegion().Union( rect->x, rect->y, - rect->width, rect->height ); + GtkPizza *pizza = GTK_PIZZA (widget); + + if (!win->m_queuedFullRedraw) + { + 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->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) - { - GtkPizzaChild *child = (GtkPizzaChild*) children->data; - children = children->next; - - GdkRectangle child_area; - if (gtk_widget_intersect (child->widget, rect, &child_area)) + + GList *children = pizza->children; + while (children) { - gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ ); + GtkPizzaChild *child = (GtkPizzaChild*) children->data; + children = children->next; + + GdkRectangle child_area; + if (gtk_widget_intersect (child->widget, rect, &child_area)) + { + gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ ); + } } } } @@ -1921,8 +1922,8 @@ gtk_wxwindow_realized_callback( GtkWidget * WXUNUSED_UNLESS_XIM(widget), if ((colormap = gtk_widget_get_colormap (widget)) != gtk_widget_get_default_colormap ()) { - attrmask |= GDK_IC_PREEDIT_COLORMAP; - attr->preedit_colormap = colormap; + attrmask |= GDK_IC_PREEDIT_COLORMAP; + attr->preedit_colormap = colormap; } attrmask |= GDK_IC_PREEDIT_FOREGROUND; @@ -2291,6 +2292,9 @@ void wxWindow::PostCreation() if (!m_noExpose) { /* these get reported to wxWindows -> wxPaintEvent */ + + 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 ); @@ -2573,7 +2577,7 @@ void wxWindow::OnInternalIdle() m_updateRegion.Clear(); m_updateRegion.Union( 0,0,m_width,m_height ); gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL ); - + GdkEventMask mask = gdk_window_get_events( GTK_PIZZA(m_wxwindow)->bin_window ); mask = (GdkEventMask)(mask | GDK_EXPOSURE_MASK); gdk_window_set_events( GTK_PIZZA(m_wxwindow)->bin_window, mask ); diff --git a/src/gtk1/win_gtk.c b/src/gtk1/win_gtk.c index 7d5f7a92ad..4d925f373c 100644 --- a/src/gtk1/win_gtk.c +++ b/src/gtk1/win_gtk.c @@ -191,6 +191,7 @@ gtk_pizza_init (GtkPizza *pizza) pizza->clear_on_draw = TRUE; pizza->use_filter = TRUE; + pizza->external_expose = FALSE; } GtkWidget* @@ -250,6 +251,16 @@ gtk_pizza_set_filter (GtkPizza *pizza, pizza->use_filter = use; } +void +gtk_pizza_set_external (GtkPizza *pizza, + gboolean expose) +{ + g_return_if_fail (pizza != NULL); + g_return_if_fail (GTK_IS_PIZZA (pizza)); + + pizza->external_expose = expose; +} + void gtk_pizza_put (GtkPizza *pizza, GtkWidget *widget, @@ -652,16 +663,77 @@ static void gtk_pizza_draw (GtkWidget *widget, GdkRectangle *area) { - /* We handle all draws events in window.cpp now. */ - return; + GtkPizza *pizza; + GtkPizzaChild *child; + GdkRectangle child_area; + GList *children; + + g_return_if_fail (widget != NULL); + g_return_if_fail (GTK_IS_PIZZA (widget)); + + pizza = GTK_PIZZA (widget); + + /* Sometimes, We handle all expose events in window.cpp now. */ + if (pizza->external_expose) + return; + + children = pizza->children; + if ( !(GTK_WIDGET_APP_PAINTABLE (widget)) && + (pizza->clear_on_draw)) + { + gdk_window_clear_area( pizza->bin_window, + area->x, area->y, area->width, area->height); + } + + while (children) + { + child = children->data; + children = children->next; + + if (gtk_widget_intersect (child->widget, area, &child_area)) + gtk_widget_draw (child->widget, &child_area); + } } static gint gtk_pizza_expose (GtkWidget *widget, GdkEventExpose *event) { - /* We handle all expose events in window.cpp now. */ - return FALSE; + GtkPizza *pizza; + GtkPizzaChild *child; + GdkEventExpose child_event; + GList *children; + + g_return_val_if_fail (widget != NULL, FALSE); + g_return_val_if_fail (GTK_IS_PIZZA (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + pizza = GTK_PIZZA (widget); + + /* Sometimes, We handle all expose events in window.cpp now. */ + if (pizza->external_expose) + return; + + if (event->window != pizza->bin_window) + return FALSE; + + children = pizza->children; + while (children) + { + child = children->data; + children = children->next; + + child_event = *event; + + if (GTK_WIDGET_NO_WINDOW (child->widget) && + GTK_WIDGET_DRAWABLE (child->widget) && + gtk_widget_intersect (child->widget, &event->area, &child_event.area)) + { + gtk_widget_event (child->widget, (GdkEvent*) &child_event); + } + } + + return TRUE; } static void diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index 78bb5fea4f..769973db09 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -620,9 +620,6 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev if (g_isIdle) wxapp_install_idle_handler(); - if (win->m_queuedFullRedraw) - return TRUE; - /* if (win->GetName() == wxT("htmlWindow")) { @@ -636,48 +633,52 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev } */ - win->GetUpdateRegion().Union( gdk_event->area.x, - gdk_event->area.y, - gdk_event->area.width, - gdk_event->area.height ); - + if (!win->m_queuedFullRedraw) + { - if (gdk_event->count > 0) - return TRUE; + win->GetUpdateRegion().Union( gdk_event->area.x, + gdk_event->area.y, + gdk_event->area.width, + gdk_event->area.height ); - wxEraseEvent eevent( win->GetId() ); - eevent.SetEventObject( win ); - win->GetEventHandler()->ProcessEvent(eevent); + 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 ); + wxPaintEvent event( win->GetId() ); + event.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( event ); - win->GetUpdateRegion().Clear(); + win->GetUpdateRegion().Clear(); + } - /* The following code will result in all window-less widgets - being redrawn if the wxWindows class is given a chance to - paint *anything* because it will then be allowed to paint - over the window-less widgets */ + /* The following code will result in all window-less widgets + being redrawn if the wxWindows class is given a chance to + paint *anything* because it will then be allowed to paint + over the window-less widgets */ - GtkPizza *pizza = GTK_PIZZA (widget); + GtkPizza *pizza = GTK_PIZZA (widget); - GList *children = pizza->children; - while (children) - { - GtkPizzaChild *child = (GtkPizzaChild*) children->data; - children = children->next; + GList *children = pizza->children; + while (children) + { + GtkPizzaChild *child = (GtkPizzaChild*) children->data; + children = children->next; - GdkEventExpose child_event = *gdk_event; + GdkEventExpose child_event = *gdk_event; - if (GTK_WIDGET_NO_WINDOW (child->widget) && - GTK_WIDGET_DRAWABLE (child->widget)) - { - child_event.area.x = child->widget->allocation.x; - child_event.area.y = child->widget->allocation.y; - child_event.area.width = child->widget->allocation.width; - child_event.area.height = child->widget->allocation.height; - gtk_widget_event (child->widget, (GdkEvent*) &child_event); + if (GTK_WIDGET_NO_WINDOW (child->widget) && + GTK_WIDGET_DRAWABLE (child->widget) /* && + gtk_widget_intersect (child->widget, &gdk_event->area, &child_event.area)*/ ) + { + child_event.area.x = child->widget->allocation.x; + child_event.area.y = child->widget->allocation.y; + child_event.area.width = child->widget->allocation.width; + child_event.area.height = child->widget->allocation.height; + gtk_widget_event (child->widget, (GdkEvent*) &child_event); + } } } @@ -690,8 +691,9 @@ static int gtk_window_expose_callback( GtkWidget *widget, GdkEventExpose *gdk_ev /* GTK thinks it is clever and filters out a certain amount of "unneeded" expose events. We need them, of course, so we override the main event - procedure in GtkWidget by giving our own handler for all system events, - looking for the expose events and then we can always send them. */ + procedure in GtkWidget by giving our own handler for all system events. + There, we look for expose events ourselves whereas all other events are + handled normally. */ gint gtk_window_event_event_callback( GtkWidget *widget, GdkEventExpose *event, wxWindow *win ) { @@ -701,7 +703,6 @@ gint gtk_window_event_event_callback( GtkWidget *widget, GdkEventExpose *event, return ret; } - return FALSE; } @@ -719,18 +720,6 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW if (g_isIdle) wxapp_install_idle_handler(); - if (win->m_queuedFullRedraw) - return; - - GtkPizza *pizza = GTK_PIZZA (widget); - - 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); - } - /* if (win->GetName() == wxT("htmlWindow")) { @@ -744,33 +733,45 @@ static void gtk_window_draw_callback( GtkWidget *widget, GdkRectangle *rect, wxW } */ - win->GetUpdateRegion().Union( rect->x, rect->y, - rect->width, rect->height ); + GtkPizza *pizza = GTK_PIZZA (widget); + + if (!win->m_queuedFullRedraw) + { + 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->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) - { - GtkPizzaChild *child = (GtkPizzaChild*) children->data; - children = children->next; - - GdkRectangle child_area; - if (gtk_widget_intersect (child->widget, rect, &child_area)) + + GList *children = pizza->children; + while (children) { - gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ ); + GtkPizzaChild *child = (GtkPizzaChild*) children->data; + children = children->next; + + GdkRectangle child_area; + if (gtk_widget_intersect (child->widget, rect, &child_area)) + { + gtk_widget_draw (child->widget, &child_area /* (GdkRectangle*) NULL*/ ); + } } } } @@ -1921,8 +1922,8 @@ gtk_wxwindow_realized_callback( GtkWidget * WXUNUSED_UNLESS_XIM(widget), if ((colormap = gtk_widget_get_colormap (widget)) != gtk_widget_get_default_colormap ()) { - attrmask |= GDK_IC_PREEDIT_COLORMAP; - attr->preedit_colormap = colormap; + attrmask |= GDK_IC_PREEDIT_COLORMAP; + attr->preedit_colormap = colormap; } attrmask |= GDK_IC_PREEDIT_FOREGROUND; @@ -2291,6 +2292,9 @@ void wxWindow::PostCreation() if (!m_noExpose) { /* these get reported to wxWindows -> wxPaintEvent */ + + 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 ); @@ -2573,7 +2577,7 @@ void wxWindow::OnInternalIdle() m_updateRegion.Clear(); m_updateRegion.Union( 0,0,m_width,m_height ); gtk_widget_draw( m_wxwindow, (GdkRectangle*) NULL ); - + GdkEventMask mask = gdk_window_get_events( GTK_PIZZA(m_wxwindow)->bin_window ); mask = (GdkEventMask)(mask | GDK_EXPOSURE_MASK); gdk_window_set_events( GTK_PIZZA(m_wxwindow)->bin_window, mask ); -- 2.45.2