Add enumeration for sel.mode
authornoname <noname@inventati.org>
Fri, 1 May 2015 17:13:13 +0000 (17:13 +0000)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Mon, 4 May 2015 09:57:17 +0000 (11:57 +0200)
This patch also prevents sel.mode from increasing beyond 2. It is almost
impossible, but sel.mode may overflow if mouse is moved around for too
long while selecting.

st.c

diff --git a/st.c b/st.c
index 6138817..d6dd4de 100644 (file)
--- a/st.c
+++ b/st.c
@@ -162,6 +162,12 @@ enum window_state {
        WIN_FOCUSED = 2
 };
 
+enum selection_mode {
+       SEL_IDLE = 0,
+       SEL_EMPTY = 1,
+       SEL_READY = 2
+};
+
 enum selection_type {
        SEL_REGULAR = 1,
        SEL_RECTANGULAR = 2
@@ -643,7 +649,7 @@ void
 selinit(void) {
        memset(&sel.tclick1, 0, sizeof(sel.tclick1));
        memset(&sel.tclick2, 0, sizeof(sel.tclick2));
-       sel.mode = 0;
+       sel.mode = SEL_IDLE;
        sel.ob.x = -1;
        sel.primary = NULL;
        sel.clipboard = NULL;
@@ -897,7 +903,7 @@ bpress(XEvent *e) {
 
                /* Clear previous selection, logically and visually. */
                selclear(NULL);
-               sel.mode = 1;
+               sel.mode = SEL_EMPTY;
                sel.type = SEL_REGULAR;
                sel.oe.x = sel.ob.x = x2col(e->xbutton.x);
                sel.oe.y = sel.ob.y = y2row(e->xbutton.y);
@@ -920,7 +926,7 @@ bpress(XEvent *e) {
                 * make clicks visible
                 */
                if(sel.snap != 0) {
-                       sel.mode++;
+                       sel.mode = SEL_READY;
                        tsetdirt(sel.nb.y, sel.ne.y);
                }
                sel.tclick2 = sel.tclick1;
@@ -1142,13 +1148,12 @@ brelease(XEvent *e) {
        if(e->xbutton.button == Button2) {
                selpaste(NULL);
        } else if(e->xbutton.button == Button1) {
-               if(sel.mode < 2) {
-                       selclear(NULL);
-               } else {
+               if(sel.mode == SEL_READY) {
                        getbuttoninfo(e);
                        selcopy(e->xbutton.time);
-               }
-               sel.mode = 0;
+               } else
+                       selclear(NULL);
+               sel.mode = SEL_IDLE;
                tsetdirt(sel.nb.y, sel.ne.y);
        }
 }
@@ -1165,7 +1170,7 @@ bmotion(XEvent *e) {
        if(!sel.mode)
                return;
 
-       sel.mode++;
+       sel.mode = SEL_READY;
        oldey = sel.oe.y;
        oldex = sel.oe.x;
        oldsby = sel.nb.y;