devdraw: cocoa fixes, bigarrow support (thanks Marius Eriksen)
diff --git a/src/cmd/devdraw/cocoa-screen.m b/src/cmd/devdraw/cocoa-screen.m
index 58c53f7..bbe4816 100644
--- a/src/cmd/devdraw/cocoa-screen.m
+++ b/src/cmd/devdraw/cocoa-screen.m
@@ -30,6 +30,11 @@
 
 int usegestures = 0;
 int useoldfullscreen = 0;
+int usebigarrow = 0;
+
+extern Cursor bigarrow;
+
+void setcursor0(Cursor *c);
 
 void
 usage(void)
@@ -64,6 +69,9 @@
 	case 'g':
 		usegestures = 1;
 		break;
+	case 'b':
+		usebigarrow = 1;
+		break;
 	default:
 		usage();
 	}ARGEND
@@ -71,6 +79,11 @@
 	if(OSX_VERSION < 100700)
 		[NSAutoreleasePool new];
 
+	// Reset cursor to ensure we start
+	// with bigarrow.
+	if(usebigarrow)
+		setcursor0(nil);
+
 	[NSApplication sharedApplication];
 	[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
 	[NSApp setDelegate:[appdelegate new]];
@@ -163,6 +176,7 @@
 + (void)calldrawimg:(id)arg{ drawimg();}
 + (void)callflushwin:(id)arg{ flushwin();}
 + (void)callmakewin:(id)arg{ makewin();}
++ (void)callsetcursor0:(id)arg{ setcursor0([[arg autorelease] pointerValue]);}
 - (void)calltogglefs:(id)arg{ togglefs();}
 @end
 
@@ -453,13 +467,15 @@
 {
 	NSCursor *c;
 
+	[super resetCursorRects];
+
 	qlock(&win.cursorl);
 
 	c = win.cursor;
 	if(c == nil)
 		c = [NSCursor arrowCursor];
-	[self addCursorRect:[self bounds] cursor:c];
 
+	[self addCursorRect:[self bounds] cursor:c];
 	qunlock(&win.cursorl);
 }
 - (BOOL)isFlipped
@@ -1128,7 +1144,16 @@
 }
 
 void
-setcursor(Cursor *c)
+setcursor(Cursor *cursor)
+{
+	[appdelegate
+		performSelectorOnMainThread:@selector(callsetcursor0:)
+		withObject:[[NSValue valueWithPointer:cursor] retain]
+		waitUntilDone:YES];
+}
+
+void
+setcursor0(Cursor *c)
 {
 	NSBitmapImageRep *r;
 	NSImage *i;
@@ -1142,6 +1167,10 @@
 		[win.cursor release];
 		win.cursor = nil;
 	}
+
+	if(c == nil && usebigarrow)
+		c = &bigarrow;
+
 	if(c){
 		r = [[NSBitmapImageRep alloc]
 			initWithBitmapDataPlanes:nil
@@ -1167,9 +1196,11 @@
 
 		win.cursor = [[NSCursor alloc] initWithImage:i hotSpot:p];
 
+		[win.cursor set];
 		[i release];
 		[r release];
 	}
+
 	qunlock(&win.cursorl);
 	[WIN invalidateCursorRectsForView:win.content];
 }
diff --git a/src/cmd/devdraw/cursor.c b/src/cmd/devdraw/cursor.c
new file mode 100644
index 0000000..af7e65d
--- /dev/null
+++ b/src/cmd/devdraw/cursor.c
@@ -0,0 +1,16 @@
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <cursor.h>
+
+Cursor bigarrow = {
+	{0, 0},
+	{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC, 
+	 0xFF, 0xF0, 0xFF, 0xF0, 0xFF, 0xF8, 0xFF, 0xFC, 
+	 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC, 
+	 0xF3, 0xF8, 0xF1, 0xF0, 0xE0, 0xE0, 0xC0, 0x40},
+	{0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFC, 0x7F, 0xF0, 
+	 0x7F, 0xE0, 0x7F, 0xE0, 0x7F, 0xF0, 0x7F, 0xF8, 
+	 0x7F, 0xFC, 0x7F, 0xFE, 0x7F, 0xFC, 0x73, 0xF8, 
+	 0x61, 0xF0, 0x60, 0xE0, 0x40, 0x40, 0x00, 0x00},
+};
diff --git a/src/cmd/devdraw/mkwsysrules.sh b/src/cmd/devdraw/mkwsysrules.sh
index dde44c8..a9072ad 100644
--- a/src/cmd/devdraw/mkwsysrules.sh
+++ b/src/cmd/devdraw/mkwsysrules.sh
@@ -59,7 +59,7 @@
 	echo 'WSYSOFILES=$WSYSOFILES osx-screen-carbon-objc.o osx-draw.o osx-srv.o'
 	echo 'MACARGV=macargv.o'
 elif [ $WSYSTYPE = osx-cocoa ]; then
-	echo 'WSYSOFILES=$WSYSOFILES osx-draw.o cocoa-screen-objc.o cocoa-srv.o cocoa-thread.o'
+	echo 'WSYSOFILES=$WSYSOFILES osx-draw.o cocoa-screen-objc.o cocoa-srv.o cocoa-thread.o cursor.o'
 	echo 'MACARGV=macargv-objc.o'
 elif [ $WSYSTYPE = nowsys ]; then
 	echo 'WSYSOFILES=nowsys.o'