Commit Diff


commit - bebdea4e8e1a93c14099a7b8182ddfcb6d2cae14
commit + 4fc1aa09a95ca3fc4716a98a264a3f58b95b0d2a
blob - bad110f743952b77250b050b3423857cd6686e02
blob + 05431b61627b6efc41e18d0d66b2280da50d3fab
--- src/libdraw/x11-itrans.c
+++ src/libdraw/x11-itrans.c
@@ -555,7 +555,8 @@ applegetsnarf(void)
 	PasteboardItemID id;
 	PasteboardSyncFlags flags;
 	UInt32 i;
-	
+
+//	fprint(2, "applegetsnarf\n");
 	qlock(&clip.lk);
 	if(clip.apple == nil){
 		if(PasteboardCreate(kPasteboardClipboard, &clip.apple) != noErr){
@@ -566,8 +567,9 @@ applegetsnarf(void)
 	}
 	flags = PasteboardSynchronize(clip.apple);
 	if(flags&kPasteboardClientIsOwner){
+		s = strdup(clip.buf);
 		qunlock(&clip.lk);
-		return strdup(clip.buf);
+		return s;
 	}
 	if(PasteboardGetItemCount(clip.apple, &nitem) != noErr){
 		fprint(2, "apple pasteboard get item count failed\n");
@@ -608,6 +610,8 @@ appleputsnarf(char *s)
 	CFDataRef cfdata;
 	PasteboardSyncFlags flags;
 
+//	fprint(2, "appleputsnarf\n");
+
 	if(strlen(s) >= SnarfSize)
 		return;
 	qlock(&clip.lk);
@@ -648,13 +652,26 @@ appleputsnarf(char *s)
 	/* CFRelease(cfdata); ??? */
 	qunlock(&clip.lk);
 }
+static int useapplesnarf = -1;
+static int
+checkapplesnarf(void)
+{
+	char *x;
+	
+	x = getenv("USEX11SNARF");
+	if(x && x[0])
+		return 0;
+	return 1;
+}
 #endif	/* APPLESNARF */
 
 void
 putsnarf(char *data)
 {
 #ifdef APPLESNARF
-	if(1){
+	if(useapplesnarf == -1)
+		useapplesnarf = checkapplesnarf();
+	if(useapplesnarf){
 		appleputsnarf(data);
 		return;
 	}
@@ -666,7 +683,9 @@ char*
 getsnarf(void)
 {
 #ifdef APPLESNARF
-	if(1)
+	if(useapplesnarf == -1)
+		useapplesnarf = checkapplesnarf();
+	if(useapplesnarf)
 		return applegetsnarf();
 #endif
 	return _xgetsnarf(_x.snarfcon);