diff -u gtk+2.0-2.18.3/debian/changelog gtk+2.0-2.18.3/debian/changelog --- gtk+2.0-2.18.3/debian/changelog +++ gtk+2.0-2.18.3/debian/changelog @@ -1,3 +1,15 @@ +gtk+2.0 (2.18.3-1ubuntu2.2) karmic-proposed; urgency=low + + * debian/patches/096_git_no_implicit_paints_on_foreign_windows.patch: + - git change to fix a crasher issue + * debian/patches/097_git_no_destroyed_windows_drawing.patch: + - git change to fix another csw crasher bug + * debian/patches/098_git_fix_pixmap_refcount_issue.patch: + - git change to fix a refcounting issue leading to xorg crashes + (lp: #450832) + + -- Sebastien Bacher Thu, 21 Jan 2010 11:39:18 +0100 + gtk+2.0 (2.18.3-1ubuntu2.1) karmic-proposed; urgency=low * debian/patches/095_fix_java_clipboard_crash.patch: diff -u gtk+2.0-2.18.3/debian/patches/series gtk+2.0-2.18.3/debian/patches/series --- gtk+2.0-2.18.3/debian/patches/series +++ gtk+2.0-2.18.3/debian/patches/series @@ -20,0 +21,3 @@ +096_git_no_implicit_paints_on_foreign_windows.patch +097_git_no_destroyed_windows_drawing.patch +098_git_fix_pixmap_refcount_issue.patch only in patch2: unchanged: --- gtk+2.0-2.18.3.orig/debian/patches/098_git_fix_pixmap_refcount_issue.patch +++ gtk+2.0-2.18.3/debian/patches/098_git_fix_pixmap_refcount_issue.patch @@ -0,0 +1,24 @@ +From 0e17e8daa551193b9c3b1922f152eaafe6167957 Mon Sep 17 00:00:00 2001 +From: Matthias Clasen +Date: Mon, 11 Jan 2010 15:23:57 +0000 +Subject: Plug a pixmap leak + +We were getting our refcounts tangled up when setting drawable clips on +GCs with CSW, leading to a pretty bad pixmap leak. See bug 606143. +(cherry picked from commit d32b061895378aa721cca52065608e1b34a60e2b) +--- +diff --git a/gdk/gdkgc.c b/gdk/gdkgc.c +index 44c2aa7..ae27bcb 100644 +--- a/gdk/gdkgc.c ++++ b/gdk/gdkgc.c +@@ -680,6 +680,7 @@ _gdk_gc_add_drawable_clip (GdkGC *gc, + -1, -1); + gdk_gc_set_clip_region (tmp_gc, NULL); + gdk_gc_set_clip_mask (gc, new_mask); ++ g_object_unref (new_mask); + } + else if (overlap == GDK_OVERLAP_RECTANGLE_OUT) + { +-- +cgit v0.8.3.1 + only in patch2: unchanged: --- gtk+2.0-2.18.3.orig/debian/patches/097_git_no_destroyed_windows_drawing.patch +++ gtk+2.0-2.18.3/debian/patches/097_git_no_destroyed_windows_drawing.patch @@ -0,0 +1,37 @@ +From f2fffaad71c012d110ad79a1f15afdb81c580d2f Mon Sep 17 00:00:00 2001 +From: Alexander Larsson +Date: Fri, 15 Jan 2010 15:06:12 +0000 +Subject: Avoid drawing implicit paints to destroyed windows + +It may happen that a window gets destroyed during painting, if so +we should not draw the implicit paint double-buffered pixmap to it +as that will cause a BadDrawable X error. + +This fixes bug 600865 +(cherry picked from commit f96e51db46f2196707c0ea44a46f1d67f9a069d4) +--- +diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c +index 5e9e44f..612f5ac 100644 +--- a/gdk/gdkwindow.c ++++ b/gdk/gdkwindow.c +@@ -2668,7 +2668,7 @@ gdk_window_flush_implicit_paint (GdkWindow *window) + gdk_region_offset (region, private->abs_x, private->abs_y); + gdk_region_intersect (region, paint->region); + +- if (!gdk_region_empty (region)) ++ if (!GDK_WINDOW_DESTROYED (window) && !gdk_region_empty (region)) + { + /* Remove flushed region from the implicit paint */ + gdk_region_subtract (paint->region, region); +@@ -2701,7 +2701,7 @@ gdk_window_end_implicit_paint (GdkWindow *window) + + private->implicit_paint = NULL; + +- if (!gdk_region_empty (paint->region)) ++ if (!GDK_WINDOW_DESTROYED (window) && !gdk_region_empty (paint->region)) + { + /* Some regions are valid, push these to window now */ + tmp_gc = _gdk_drawable_get_scratch_gc ((GdkDrawable *)window, FALSE); +-- +cgit v0.8.3.1 + only in patch2: unchanged: --- gtk+2.0-2.18.3.orig/debian/patches/096_git_no_implicit_paints_on_foreign_windows.patch +++ gtk+2.0-2.18.3/debian/patches/096_git_no_implicit_paints_on_foreign_windows.patch @@ -0,0 +1,32 @@ +From f0111dba7369996b5d51110ab372ced8f6a6d48f Mon Sep 17 00:00:00 2001 +From: Matthias Clasen +Date: Tue, 08 Dec 2009 15:09:04 +0000 +Subject: Never do implicit paints for foreign windows + +They don't need double buffer combination since they have no +client-side children, and creating pixmaps for them is risky +since they could disappear at any time. + +May fix bug 598476 and 603652. +--- +diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c +index ab7b8eb..d297e62 100644 +--- a/gdk/gdkwindow.c ++++ b/gdk/gdkwindow.c +@@ -2611,6 +2611,14 @@ gdk_window_begin_implicit_paint (GdkWindow *window, GdkRectangle *rect) + private->implicit_paint != NULL) + return FALSE; /* Don't stack implicit paints */ + ++ /* Never do implicit paints for foreign windows, they don't need ++ * double buffer combination since they have no client side children, ++ * and creating pixmaps for them is risky since they could disappear ++ * at any time ++ */ ++ if (private->window_type == GDK_WINDOW_FOREIGN) ++ return FALSE; ++ + paint = g_new (GdkWindowPaint, 1); + paint->region = gdk_region_new (); /* Empty */ + paint->x_offset = rect->x; +-- +cgit v0.8.3.1