diff options
| author | Devin J. Pohly <djpohly@gmail.com> | 2018-02-21 22:56:02 -0600 | 
|---|---|---|
| committer | Devin J. Pohly <djpohly@gmail.com> | 2018-02-25 21:53:24 -0600 | 
| commit | 5683b1f80c5ac274adf98517ce2217b4d4896243 (patch) | |
| tree | 83e79c7f53eb44b6a7e76834dfe234408a7b0495 | |
| parent | 138caf294ea4d7968df36ead9d5ff5fc49f6215f (diff) | |
| download | st-5683b1f80c5ac274adf98517ce2217b4d4896243.tar.xz st-5683b1f80c5ac274adf98517ce2217b4d4896243.zip  | |
Move X-specific selection info into XSelection
Data about PRIMARY/CLIPBOARD and clicks are part of the front-end, not
the terminal.
Signed-off-by: Devin J. Pohly <djpohly@gmail.com>
| -rw-r--r-- | st.c | 4 | ||||
| -rw-r--r-- | st.h | 5 | ||||
| -rw-r--r-- | x.c | 31 | 
3 files changed, 19 insertions, 21 deletions
@@ -365,13 +365,9 @@ base64dec(const char *src)  void  selinit(void)  { -	clock_gettime(CLOCK_MONOTONIC, &sel.tclick1); -	clock_gettime(CLOCK_MONOTONIC, &sel.tclick2);  	sel.mode = SEL_IDLE;  	sel.snap = 0;  	sel.ob.x = -1; -	sel.primary = NULL; -	sel.clipboard = NULL;  }  int @@ -149,12 +149,7 @@ typedef struct {  		int x, y;  	} nb, ne, ob, oe; -	char *primary, *clipboard;  	int alt; -	struct timespec tclick1; -	struct timespec tclick2; - -	//Atom xtarget;  } Selection;  typedef union { @@ -94,6 +94,9 @@ typedef struct {  typedef struct {  	Atom xtarget; +	char *primary, *clipboard; +	struct timespec tclick1; +	struct timespec tclick2;  } XSelection;  /* Font structure */ @@ -234,11 +237,11 @@ clipcopy(const Arg *dummy)  {  	Atom clipboard; -	if (sel.clipboard != NULL) -		free(sel.clipboard); +	if (xsel.clipboard != NULL) +		free(xsel.clipboard); -	if (sel.primary != NULL) { -		sel.clipboard = xstrdup(sel.primary); +	if (xsel.primary != NULL) { +		xsel.clipboard = xstrdup(xsel.primary);  		clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);  		XSetSelectionOwner(xw.dpy, clipboard, xw.win, CurrentTime);  	} @@ -427,9 +430,9 @@ bpress(XEvent *e)  		 * If the user clicks below predefined timeouts specific  		 * snapping behaviour is exposed.  		 */ -		if (TIMEDIFF(now, sel.tclick2) <= tripleclicktimeout) { +		if (TIMEDIFF(now, xsel.tclick2) <= tripleclicktimeout) {  			sel.snap = SNAP_LINE; -		} else if (TIMEDIFF(now, sel.tclick1) <= doubleclicktimeout) { +		} else if (TIMEDIFF(now, xsel.tclick1) <= doubleclicktimeout) {  			sel.snap = SNAP_WORD;  		} else {  			sel.snap = 0; @@ -439,8 +442,8 @@ bpress(XEvent *e)  		if (sel.snap != 0)  			sel.mode = SEL_READY;  		tsetdirt(sel.nb.y, sel.ne.y); -		sel.tclick2 = sel.tclick1; -		sel.tclick1 = now; +		xsel.tclick2 = xsel.tclick1; +		xsel.tclick1 = now;  	}  } @@ -594,9 +597,9 @@ selrequest(XEvent *e)  		 */  		clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);  		if (xsre->selection == XA_PRIMARY) { -			seltext = sel.primary; +			seltext = xsel.primary;  		} else if (xsre->selection == clipboard) { -			seltext = sel.clipboard; +			seltext = xsel.clipboard;  		} else {  			fprintf(stderr,  				"Unhandled clipboard selection 0x%lx\n", @@ -620,8 +623,8 @@ selrequest(XEvent *e)  void  setsel(char *str, Time t)  { -	free(sel.primary); -	sel.primary = str; +	free(xsel.primary); +	xsel.primary = str;  	XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, t);  	if (XGetSelectionOwner(xw.dpy, XA_PRIMARY) != xw.win) @@ -1127,6 +1130,10 @@ xinit(void)  	xhints();  	XSync(xw.dpy, False); +	clock_gettime(CLOCK_MONOTONIC, &xsel.tclick1); +	clock_gettime(CLOCK_MONOTONIC, &xsel.tclick2); +	xsel.primary = NULL; +	xsel.clipboard = NULL;  	xsel.xtarget = XInternAtom(xw.dpy, "UTF8_STRING", 0);  	if (xsel.xtarget == None)  		xsel.xtarget = XA_STRING;  | 
