X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/375efc1fce6d04847ba477c8fcaa6eef4e3cbc71..8a31648287be0ef976f133de2786b137f1e98340:/src/gtk/win_gtk.cpp?ds=sidebyside diff --git a/src/gtk/win_gtk.cpp b/src/gtk/win_gtk.cpp index 82d4669c1e..bf4bd7fc2d 100644 --- a/src/gtk/win_gtk.cpp +++ b/src/gtk/win_gtk.cpp @@ -52,7 +52,7 @@ static void size_allocate(GtkWidget* widget, GtkAllocation* alloc) int w = alloc->width - 2 * border_x; if (w < 0) w = 0; - if (GTK_WIDGET_REALIZED(widget) && (is_move || is_resize)) + if (gtk_widget_get_realized(widget) && (is_move || is_resize)) { int h = alloc->height - 2 * border_y; if (h < 0) h = 0; @@ -76,7 +76,7 @@ static void size_allocate(GtkWidget* widget, GtkAllocation* alloc) for (const GList* list = pizza->m_fixed.children; list; list = list->next) { const GtkFixedChild* child = static_cast(list->data); - if (GTK_WIDGET_VISIBLE(child->widget)) + if (gtk_widget_get_visible(child->widget)) { GtkAllocation child_alloc; // note that child positions do not take border into @@ -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+ @@ -210,7 +236,11 @@ GtkWidget* wxPizza::New(long windowStyle) pizza->m_is_scrollable = (windowStyle & (wxHSCROLL | wxVSCROLL)) != 0; // mask off border styles not useable with wxPizza pizza->m_border_style = int(windowStyle & BORDER_STYLES); +#if GTK_CHECK_VERSION(3,0,0) || defined(GTK_DISABLE_DEPRECATED) + gtk_widget_set_has_window(widget, true); +#else gtk_fixed_set_has_window(GTK_FIXED(widget), true); +#endif gtk_widget_add_events(widget, GDK_EXPOSURE_MASK | GDK_SCROLL_MASK |