diff options
author | noname <noname@inventati.org> | 2015-05-01 17:13:13 +0000 |
---|---|---|
committer | Roberto E. Vargas Caballero <k0ga@shike2.com> | 2015-05-04 11:57:17 +0200 |
commit | 1811b6030cd9ac6bb938449eef778c6f54ab0e49 (patch) | |
tree | b0eb9d5df6fc3b31735162cdd903e81df6a93c3d /st.c | |
parent | 22571ea4e8729efee6940b704666566b46e42e76 (diff) | |
download | st-1811b6030cd9ac6bb938449eef778c6f54ab0e49.tar.gz st-1811b6030cd9ac6bb938449eef778c6f54ab0e49.tar.bz2 st-1811b6030cd9ac6bb938449eef778c6f54ab0e49.zip |
Add enumeration for sel.mode
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.
Diffstat (limited to 'st.c')
-rw-r--r-- | st.c | 23 |
1 files changed, 14 insertions, 9 deletions
@@ -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; |