Commit Diff


commit - b8f457199c4228aed8a8049639e85df2c9cbe858
commit + 4a34106c7d95df617021900f5d52a79f5a502288
blob - e529b8de4b8745721a4a8278f41bfd9e06ce67d0
blob + cdedd2fb2fee6dbe7ed9441c07c331388581ae93
--- src/cmd/9pfuse/fuse_kernel.h
+++ src/cmd/9pfuse/fuse_kernel.h
@@ -64,13 +64,13 @@ struct fuse_attr {
 	__u64	atime;
 	__u64	mtime;
 	__u64	ctime;
-#if (__FreeBSD__ >= 10 && __OSX_VERSION__ >= 100500)
+#if (__FreeBSD__ >= 10 && OSX_VERSION >= 100500)
 	__u64	crtime;
 #endif /* __FreeBSD__ >= 10 */
 	__u32	atimensec;
 	__u32	mtimensec;
 	__u32	ctimensec;
-#if (__FreeBSD__ >= 10 && __OSX_VERSION__ >= 100500)
+#if (__FreeBSD__ >= 10 && OSX_VERSION >= 100500)
 	__u32	crtimensec;
 #endif /* __FreeBSD__ >= 10 */
 	__u32	mode;
@@ -80,7 +80,7 @@ struct fuse_attr {
 	__u32	rdev;
 #if (__FreeBSD__ >= 10)
 	__u32	flags; /* file flags; see chflags(2) */
-#if __OSX_VERSION__ < 100500
+#if OSX_VERSION < 100500
 	__u32	padding;
 #endif /* __OSX_VERSION__ < 100500 */
 #endif /* __FreeBSD__ >= 10 */
blob - 8939ee3170390686f911b3b3292f314acf24dbeb
blob + dc2fb092683af44dcd31c316fb80e13aeb8bd9bd
--- src/cmd/devdraw/osx-screen.c
+++ src/cmd/devdraw/osx-screen.c
@@ -29,7 +29,9 @@ extern Rectangle mouserect;
 
 struct {
 	char *label;
+	int newlabel;
 	char *winsize;
+	QLock labellock;
 
 	Rectangle fullscreenr;
 	Rectangle screenr;
@@ -88,7 +90,7 @@ attachscreen(char *label, char *winsize)
 {
 	if(label == nil)
 		label = "gnot a label";
-	osx.label = label;
+	osx.label = strdup(label);
 	osx.winsize = winsize;
 	if(osx.screenimage == nil){
 		screeninit();
@@ -244,6 +246,14 @@ eventhandler(EventHandlerCallRef next, EventRef event,
 {
 	OSStatus result;
 
+	if(osx.newlabel) {
+		// dummy message so we update the label
+		qlock(&osx.labellock);
+		setlabel(osx.label);
+		osx.newlabel = 0;
+		qunlock(&osx.labellock);
+	}
+
 	result = CallNextEventHandler(next, event);
 
 	switch(GetEventClass(event)){
@@ -826,6 +836,36 @@ setlabel(char *label)
 	cs = CFStringCreateWithBytes(nil, (uchar*)label, strlen(label), kCFStringEncodingUTF8, false);
 	SetWindowTitleWithCFString(osx.window, cs);
 	CFRelease(cs);
+}
+
+void
+kicklabel(char *label)
+{
+	char *p;
+
+	p = strdup(label);
+	if(p == nil)
+		return;
+	qlock(&osx.labellock);
+	free(osx.label);
+	osx.newlabel = 1;
+	osx.label = p;
+	qunlock(&osx.labellock);
+	
+	// TODO(rsc): It would be great to send an OS X event to the
+	// event handling loop to force the update of the label,
+	// but I cannot manage to do this.
+	//	int i;
+	//	EventRef ev;
+	/*
+	ev = 0;
+	i = CreateEvent(nil, kEventClassApplication, 0, 0, 0, &ev);
+	if(i != 0)
+		fprint(2, "CreateEvent: %d\n", i);
+	i = SendEventToEventTarget(ev, GetUserFocusEventTarget());
+	if(i != 0)
+		fprint(2, "SendEventToEventTarget %p: %d\n", ev, i);
+	*/
 }
 
 static void
blob - 522046862b45b9d178255dca1b5e9789bb55e1ac
blob + f50d8dfe7d023b2cc14d716176b5aea81f1f714b
--- src/cmd/devdraw/osx-screen.h
+++ src/cmd/devdraw/osx-screen.h
@@ -12,6 +12,7 @@ void	putsnarf(char*);
 
 void	mousetrack(int, int, int, int);
 void	keystroke(int);
+void	kicklabel(char*);
 
 extern	Rectangle mouserect;
 extern	int	mouseresized;
blob - 10baf0f33c50a458a63118ebe16a0a076478051b
blob + ae14ba184f7191aa800d0b0ae21f37df524e9061
--- src/cmd/devdraw/osx-srv.c
+++ src/cmd/devdraw/osx-srv.c
@@ -238,7 +238,7 @@ runmsg(Wsysmsg *m)
 		break;
 
 	case Tlabel:
-		setlabel(m->label);
+		kicklabel(m->label);
 		replymsg(m);
 		break;