diff options
Diffstat (limited to 'packages/patches/gtk/gdk-empty-clip.patch')
-rw-r--r-- | packages/patches/gtk/gdk-empty-clip.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/packages/patches/gtk/gdk-empty-clip.patch b/packages/patches/gtk/gdk-empty-clip.patch new file mode 100644 index 0000000..e71f22f --- /dev/null +++ b/packages/patches/gtk/gdk-empty-clip.patch @@ -0,0 +1,47 @@ +diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c +index f058570..c8b791b 100644 +--- a/gdk/gdkwindow.c ++++ b/gdk/gdkwindow.c +@@ -3744,7 +3744,7 @@ start_draw_helper (GdkDrawable *drawable, + impl = private->impl; + } + +- if (clip) ++ if (clip && !gdk_region_empty (clip)) + _gdk_gc_add_drawable_clip (gc, + clip_region_tag, clip, + /* If there was a clip origin set appart from the +@@ -5417,18 +5417,25 @@ _gdk_window_process_updates_recurse (GdkWindow *window, + { + if (private->event_mask & GDK_EXPOSURE_MASK) + { ++ GdkRegion *region_copy = gdk_region_copy (expose_region); + GdkEvent event; + +- event.expose.type = GDK_EXPOSE; +- event.expose.window = g_object_ref (window); +- event.expose.send_event = FALSE; +- event.expose.count = 0; +- event.expose.region = expose_region; +- gdk_region_get_clipbox (expose_region, &event.expose.area); ++ gdk_region_intersect (region_copy, private->clip_region_with_children); ++ if (!gdk_region_empty (region_copy)) ++ { ++ event.expose.type = GDK_EXPOSE; ++ event.expose.window = g_object_ref (window); ++ event.expose.send_event = FALSE; ++ event.expose.count = 0; ++ event.expose.region = expose_region; ++ gdk_region_get_clipbox (expose_region, &event.expose.area); ++ ++ (*_gdk_event_func) (&event, _gdk_event_data); + +- (*_gdk_event_func) (&event, _gdk_event_data); ++ g_object_unref (window); ++ } + +- g_object_unref (window); ++ gdk_region_destroy (region_copy); + } + else if (private->bg_pixmap != GDK_NO_BG && + private->window_type != GDK_WINDOW_FOREIGN) |