aboutsummaryrefslogtreecommitdiff
path: root/st.c
diff options
context:
space:
mode:
authornoname <noname@inventati.org>2015-05-01 17:13:13 +0000
committerRoberto E. Vargas Caballero <k0ga@shike2.com>2015-05-04 11:57:17 +0200
commit1811b6030cd9ac6bb938449eef778c6f54ab0e49 (patch)
treeb0eb9d5df6fc3b31735162cdd903e81df6a93c3d /st.c
parent22571ea4e8729efee6940b704666566b46e42e76 (diff)
downloadst-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.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/st.c b/st.c
index 6138817..d6dd4de 100644
--- 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;