diff options
| author | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-11-08 19:49:13 +0100 | 
|---|---|---|
| committer | Aurélien Aptel <aurelien.aptel@gmail.com> | 2010-11-08 19:49:13 +0100 | 
| commit | d581bfccd7c2987e12809383d8ce1f833529b715 (patch) | |
| tree | 654049ff217fe8ef99a6bc230beace2b344eae02 | |
| parent | b1e6099220f7e10d88adb8d960db27f63f1d8ccb (diff) | |
| download | st-d581bfccd7c2987e12809383d8ce1f833529b715.tar.gz st-d581bfccd7c2987e12809383d8ce1f833529b715.tar.bz2 | |
selection code cleanup.
| -rw-r--r-- | st.c | 97 | 
1 files changed, 24 insertions, 73 deletions
| @@ -286,35 +286,24 @@ static char *getseltext() {  static void selection_notify(XEvent *e) {  	unsigned long nitems; -	unsigned long length; -	int format, res; +	unsigned long ofs, rem; +	int format;  	unsigned char *data;  	Atom type; -	res = XGetWindowProperty(xw.dis, xw.win, XA_PRIMARY, 0, 0, False,  -				AnyPropertyType, &type, &format, &nitems, &length, &data); -	switch(res) { -		case BadAtom: -		case BadValue: -		case BadWindow: -			fprintf(stderr, "Invalid paste, XGetWindowProperty0"); +	ofs = 0; +	do { +		if(XGetWindowProperty(xw.dis, xw.win, XA_PRIMARY, ofs, BUFSIZ/4, +					False, AnyPropertyType, &type, &format, +					&nitems, &rem, &data)) { +			fprintf(stderr, "Clipboard allocation failed\n");  			return; -	} - -	res = XGetWindowProperty(xw.dis, xw.win, XA_PRIMARY, 0, length, False, -				AnyPropertyType, &type, &format, &nitems, &length, &data); -	switch(res) { -		case BadAtom: -		case BadValue: -		case BadWindow: -			fprintf(stderr, "Invalid paste, XGetWindowProperty0"); -			return; -	} - -	if(data) { +		}  		ttywrite((const char *) data, nitems * format / 8);  		XFree(data); -	} +		/* number of 32-bit chunks returned */ +		ofs += nitems * format / 32; +	} while(rem > 0);  }  static void selpaste() { @@ -325,7 +314,6 @@ static void selection_request(XEvent *e)  {  	XSelectionRequestEvent *xsre;  	XSelectionEvent xev; -	int res;  	Atom xa_targets;  	xsre = (XSelectionRequestEvent *) e; @@ -341,70 +329,33 @@ static void selection_request(XEvent *e)  	if(xsre->target == xa_targets) {  		/* respond with the supported type */  		Atom string = XA_STRING; -		res = XChangeProperty(xsre->display, xsre->requestor, xsre->property, XA_ATOM, 32, -				PropModeReplace, (unsigned char *) &string, 1); -		switch(res) { -			case BadAlloc: -			case BadAtom: -			case BadMatch: -			case BadValue: -			case BadWindow: -				fprintf(stderr, "Error in selection_request, TARGETS"); -				break; -			default: -				xev.property = xsre->property; -		} +		XChangeProperty(xsre->display, xsre->requestor, xsre->property, +				XA_ATOM, 32, PropModeReplace, +				(unsigned char *) &string, 1); +		xev.property = xsre->property;  	} else if(xsre->target == XA_STRING) { -		res = XChangeProperty(xsre->display, xsre->requestor, xsre->property, -				xsre->target, 8, PropModeReplace, (unsigned char *) sel.clip, -				strlen(sel.clip)); -		switch(res) { -			case BadAlloc: -			case BadAtom: -			case BadMatch: -			case BadValue: -			case BadWindow: -				fprintf(stderr, "Error in selection_request, XA_STRING"); -				break; -			default: -			 xev.property = xsre->property; -		} +		XChangeProperty(xsre->display, xsre->requestor, xsre->property, +				xsre->target, 8, PropModeReplace, +				(unsigned char *) sel.clip, strlen(sel.clip)); +		xev.property = xsre->property;  	}  	/* all done, send a notification to the listener */ -	res = XSendEvent(xsre->display, xsre->requestor, True, 0, (XEvent *) &xev); -	switch(res) { -		case 0: -		case BadValue: -		case BadWindow: -			fprintf(stderr, "Error in selection_requested, XSendEvent"); -	} +	if(!XSendEvent(xsre->display, xsre->requestor, True, 0, (XEvent *) &xev)) +		fprintf(stderr, "Error sending SelectionNotify event\n");  }  static void selcopy(char *str) {  	/* register the selection for both the clipboard and the primary */  	Atom clipboard; -	int res;  	free(sel.clip);  	sel.clip = str; -	res = XSetSelectionOwner(xw.dis, XA_PRIMARY, xw.win, CurrentTime); -	switch(res) { -		case BadAtom: -		case BadWindow: -			fprintf(stderr, "Invalid copy, XSetSelectionOwner"); -			return; -	} +	XSetSelectionOwner(xw.dis, XA_PRIMARY, xw.win, CurrentTime);  	clipboard = XInternAtom(xw.dis, "CLIPBOARD", 0); -	res = XSetSelectionOwner(xw.dis, clipboard, xw.win, CurrentTime); -	switch(res) { -		case BadAtom: -		case BadWindow: -			fprintf(stderr, "Invalid copy, XSetSelectionOwner"); -			return; -	} +	XSetSelectionOwner(xw.dis, clipboard, xw.win, CurrentTime);  	XFlush(xw.dis);  } | 
