Bug 392498 - GC.copyarea does not work correctly on linux
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java
index 6c45c0f..fb6d761 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java
@@ -452,6 +452,7 @@
int /*long*/ cairo = Cairo.cairo_create(image.surface);
if (cairo == 0) SWT.error(SWT.ERROR_NO_HANDLES);
Cairo.cairo_translate(cairo, -x, -y);
+ Cairo.cairo_push_group(cairo);
if (data.image != null) {
Cairo.cairo_set_source_surface(cairo, data.image.surface, 0, 0);
} else if (data.drawable != 0) {
@@ -468,10 +469,13 @@
Cairo.cairo_set_source_surface(cairo, srcSurface, 0, 0);
}
} else {
+ Cairo.cairo_destroy(cairo);
return;
}
Cairo.cairo_set_operator(cairo, Cairo.CAIRO_OPERATOR_SOURCE);
Cairo.cairo_paint(cairo);
+ Cairo.cairo_pop_group_to_source(cairo);
+ Cairo.cairo_paint(cairo);
Cairo.cairo_destroy(cairo);
return;
}