moved allocation of OS resource from GCData back to GC
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java
index 9ca111c..603af72 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java
@@ -148,6 +148,9 @@
/* Free resources */
int clipRgn = data.clipRgn;
if (clipRgn != 0) OS.DisposeRgn(clipRgn);
+
+ clipRgn = data.saveClip;
+ if (clipRgn != 0) OS.DisposeRgn(clipRgn);
Image image = data.image;
if (image != null) image.memGC = null;
@@ -156,6 +159,7 @@
drawable.internal_dispose_GC(handle, data);
data.clipRgn = 0;
+ data.saveClip = 0;
data.font = null;
drawable = null;
data.device = null;
@@ -2068,6 +2072,8 @@
OS.QDSetPatternOrigin(p);
}
// save clip region
+ if (data.saveClip == 0)
+ data.saveClip= OS.NewRgn();
OS.GetClip(data.saveClip);
// calculate new clip based on the Control's bound and GC clipping region
@@ -2121,7 +2127,8 @@
if (doClip) {
// restore clipping and origin of port
- OS.SetClip(data.saveClip);
+ if (data.saveClip != 0)
+ OS.SetClip(data.saveClip);
OS.SetOrigin((short)0, (short)0);
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GCData.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GCData.java
index 566cf73..488b412 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GCData.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GCData.java
@@ -37,7 +37,7 @@
public boolean clipAgainstChildren= true;
public int[] savePort= new int[1];
public int[] saveGWorld= new int[1];
- public int saveClip= OS.NewRgn();
+ public int saveClip;
public boolean isFocused= false;
public int lineWidth= 1;
public boolean xorMode= false;