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.
This commit is contained in:
noname authored and Roberto E. Vargas Caballero committed 2015-05-04 11:57:17 +02:00
1 parent 22571ea4e8
commit 1811b6030c
1 file changed
+14 -9
+14 -9
View File
@@ -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;