Commit Diff


commit - 138caf294ea4d7968df36ead9d5ff5fc49f6215f
commit + 5683b1f80c5ac274adf98517ce2217b4d4896243
blob - d4dfe6e1fa04a42a45fd4661ff54c93dbbc9aefa
blob + ea0726cd267532ef878655868c75dbfc4d920e59
--- st.c
+++ st.c
@@ -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
blob - 8637d358123ea1d5cdcc850bcc571bb698eb6b15
blob + 79dd47ea2b078b19285c57bdbdad41cfee53157d
--- st.h
+++ st.h
@@ -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 {
blob - e3e54513d5244011eb0bcac64f9636198b7060b5
blob + 9f506b133290f906cec94d2c83b6ab817935b395
--- x.c
+++ x.c
@@ -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;