Commit Diff


commit - 61601587295f6d0ef1c4084530fe0318e0c72b16
commit + 7bb69ba88b8083b3eb9b3afefd8cdeae6aea2149
blob - 329dd71fa7d7b75f9deffcfecf109214f3f9b4b9
blob + c1cf5983856681bb4b210b96a7cc322a3a56f079
--- src/cmd/devdraw/cocoa-srv.c
+++ src/cmd/devdraw/cocoa-srv.c
@@ -162,6 +162,14 @@ runmsg(Wsysmsg *m)
 		break;
 
 	case Tcursor:
+		if(m->arrowcursor)
+			setcursor(nil, nil);
+		else
+			setcursor(&m->cursor, nil);
+		replymsg(m);
+		break;
+
+	case Tcursor2:
 		if(m->arrowcursor)
 			setcursor(nil, nil);
 		else
blob - 17563f411a521f671b3bfd77194a0d6d99defc96
blob + 8141648271f611b386201430cfff131673e311bc
--- src/cmd/devdraw/x11-srv.c
+++ src/cmd/devdraw/x11-srv.c
@@ -332,6 +332,7 @@ runmsg(Wsysmsg *m)
 		break;
 
 	case Tcursor:
+	case Tcursor2:
 		if(m->arrowcursor)
 			_xsetcursor(nil);
 		else
blob - de20d3a3b4cde330ffdcf1a4fe5766af776f0d2f
blob + f0b1d388a4d15be9ff5a93a5077754944d396f94
--- src/libdraw/drawclient.c
+++ src/libdraw/drawclient.c
@@ -296,7 +296,7 @@ _displaycursor(Display *d, Cursor *c, Cursor2 *c2)
 {
 	Wsysmsg tx, rx;
 	
-	tx.type = Tcursor;
+	tx.type = Tcursor2;
 	if(c == nil){
 		memset(&tx.cursor, 0, sizeof tx.cursor);
 		memset(&tx.cursor2, 0, sizeof tx.cursor2);
blob - e36413b6547c1ace2f8fad12ea4d0de32da0503f
blob + 09051bbc00861fdefabdcac15498f6c39190dfb1
--- src/libdraw/drawfcall.c
+++ src/libdraw/drawfcall.c
@@ -48,6 +48,7 @@ sizeW2M(Wsysmsg *m)
 	case Rbouncemouse:
 	case Rmoveto:
 	case Rcursor:
+	case Rcursor2:
 	case Trdkbd:
 	case Rlabel:
 	case Rinit:
@@ -64,6 +65,8 @@ sizeW2M(Wsysmsg *m)
 	case Tmoveto:
 		return 4+1+1+4+4;
 	case Tcursor:
+		return 4+1+1+4+4+2*16+2*16+1;
+	case Tcursor2:
 		return 4+1+1+4+4+2*16+2*16+4+4+4*32+4*32+1;
 	case Rerror:
 		return 4+1+1+_stringsize(m->error);
@@ -108,6 +111,7 @@ convW2M(Wsysmsg *m, uchar *p, uint n)
 	case Rbouncemouse:
 	case Rmoveto:
 	case Rcursor:
+	case Rcursor2:
 	case Trdkbd:
 	case Rlabel:
 	case Rinit:
@@ -141,6 +145,13 @@ convW2M(Wsysmsg *m, uchar *p, uint n)
 		PUT(p+10, m->cursor.offset.y);
 		memmove(p+14, m->cursor.clr, sizeof m->cursor.clr);
 		memmove(p+46, m->cursor.set, sizeof m->cursor.set);
+		p[78] = m->arrowcursor;
+		break;
+	case Tcursor2:
+		PUT(p+6, m->cursor.offset.x);
+		PUT(p+10, m->cursor.offset.y);
+		memmove(p+14, m->cursor.clr, sizeof m->cursor.clr);
+		memmove(p+46, m->cursor.set, sizeof m->cursor.set);
 		PUT(p+78, m->cursor2.offset.x);
 		PUT(p+82, m->cursor2.offset.y);
 		memmove(p+86, m->cursor2.clr, sizeof m->cursor2.clr);
@@ -200,6 +211,7 @@ convM2W(uchar *p, uint n, Wsysmsg *m)
 	case Rbouncemouse:
 	case Rmoveto:
 	case Rcursor:
+	case Rcursor2:
 	case Trdkbd:
 	case Rlabel:
 	case Rinit:
@@ -233,6 +245,13 @@ convM2W(uchar *p, uint n, Wsysmsg *m)
 		GET(p+10, m->cursor.offset.y);
 		memmove(m->cursor.clr, p+14, sizeof m->cursor.clr);
 		memmove(m->cursor.set, p+46, sizeof m->cursor.set);
+		m->arrowcursor = p[78];
+		break;
+	case Tcursor2:
+		GET(p+6, m->cursor.offset.x);
+		GET(p+10, m->cursor.offset.y);
+		memmove(m->cursor.clr, p+14, sizeof m->cursor.clr);
+		memmove(m->cursor.set, p+46, sizeof m->cursor.set);
 		GET(p+78, m->cursor2.offset.x);
 		GET(p+82, m->cursor2.offset.y);
 		memmove(m->cursor2.clr, p+86, sizeof m->cursor2.clr);
@@ -319,8 +338,12 @@ drawfcallfmt(Fmt *fmt)
 		return fmtprint(fmt, "Rmoveto");
 	case Tcursor:
 		return fmtprint(fmt, "Tcursor arrow=%d", m->arrowcursor);
+	case Tcursor2:
+		return fmtprint(fmt, "Tcursor2 arrow=%d", m->arrowcursor);
 	case Rcursor:
 		return fmtprint(fmt, "Rcursor");
+	case Rcursor2:
+		return fmtprint(fmt, "Rcursor2");
 	case Trdkbd:
 		return fmtprint(fmt, "Trdkbd");
 	case Rrdkbd: