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.
noname noname@inventati.org
1 files changed,
14 insertions(+),
9 deletions(-)
jump to
M
st.c
→
st.c
@@ -162,6 +162,12 @@ WIN_VISIBLE = 1,
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 @@ clock_gettime(CLOCK_MONOTONIC, &now);
/* 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 @@ * Draw selection, unless it's regular and we don't want to
* 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 @@
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 @@
if(!sel.mode) return; - sel.mode++; + sel.mode = SEL_READY; oldey = sel.oe.y; oldex = sel.oe.x; oldsby = sel.nb.y;