From: Paul Cornett Date: Fri, 25 Jun 2010 04:31:45 +0000 (+0000) Subject: invalidate border area when showing or hiding a pizza widget, fixes #12174 X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/6e7cf3bd5be0b3ceffb00d59bae724780e05370c invalidate border area when showing or hiding a pizza widget, fixes #12174 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64725 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/gtk/win_gtk.cpp b/src/gtk/win_gtk.cpp index 82d4669c1e..6c420a7a34 100644 --- a/src/gtk/win_gtk.cpp +++ b/src/gtk/win_gtk.cpp @@ -114,6 +114,30 @@ static void realize(GtkWidget* widget) } } +static void show(GtkWidget* widget) +{ + if (widget->parent && WX_PIZZA(widget)->m_border_style) + { + // invalidate whole allocation so borders will be drawn properly + const GtkAllocation& a = widget->allocation; + gtk_widget_queue_draw_area(widget->parent, a.x, a.y, a.width, a.height); + } + + parent_class->show(widget); +} + +static void hide(GtkWidget* widget) +{ + if (widget->parent && WX_PIZZA(widget)->m_border_style) + { + // invalidate whole allocation so borders will be erased properly + const GtkAllocation& a = widget->allocation; + gtk_widget_queue_draw_area(widget->parent, a.x, a.y, a.width, a.height); + } + + parent_class->hide(widget); +} + // not used, but needs to exist so gtk_widget_set_scroll_adjustments will work static void set_scroll_adjustments(GtkWidget*, GtkAdjustment*, GtkAdjustment*) { @@ -163,6 +187,8 @@ static void class_init(void* g_class, void*) GtkWidgetClass* widget_class = (GtkWidgetClass*)g_class; widget_class->size_allocate = size_allocate; widget_class->realize = realize; + widget_class->show = show; + widget_class->hide = hide; wxPizzaClass* klass = (wxPizzaClass*)g_class; // needed to make widget appear scrollable to GTK+ diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index a23f303794..e44324e210 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -305,6 +305,9 @@ expose_event_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win) if (gdk_event->window != gtk_widget_get_parent_window(win->m_wxwindow)) return false; + if (!win->IsShown()) + return false; + const GtkAllocation& alloc = win->m_wxwindow->allocation; const int x = alloc.x; const int y = alloc.y;