diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 41fffb4bce..96789defe2 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -4099,9 +4099,21 @@ void wxWindowGTK::GTKSendPaintEvents(const GdkRegion* region) #endif { #ifdef __WXGTK3__ - m_paintContext = cr; + { + cairo_region_t* region = gdk_window_get_clip_region(gtk_widget_get_window(m_wxwindow)); + cairo_rectangle_int_t rect; + cairo_region_get_extents(region, &rect); + cairo_region_destroy(region); + cairo_rectangle(cr, rect.x, rect.y, rect.width, rect.height); + cairo_clip(cr); + } double x1, y1, x2, y2; cairo_clip_extents(cr, &x1, &y1, &x2, &y2); + + if (x1 >= x2 || y1 >= y2) + return; + + m_paintContext = cr; m_updateRegion = wxRegion(int(x1), int(y1), int(x2 - x1), int(y2 - y1)); #else // !__WXGTK3__ m_updateRegion = wxRegion(region);