aboutsummaryrefslogtreecommitdiff
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
parent22571ea4e8729efee6940b704666566b46e42e76 (diff)
downloadst-patched-1811b6030cd9ac6bb938449eef778c6f54ab0e49.tar.bz2
st-patched-1811b6030cd9ac6bb938449eef778c6f54ab0e49.tar.xz
st-patched-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.
-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 {
162 WIN_FOCUSED = 2 162 WIN_FOCUSED = 2
163}; 163};
164 164
165enum selection_mode {
166 SEL_IDLE = 0,
167 SEL_EMPTY = 1,
168 SEL_READY = 2
169};
170
165enum selection_type { 171enum selection_type {
166 SEL_REGULAR = 1, 172 SEL_REGULAR = 1,
167 SEL_RECTANGULAR = 2 173 SEL_RECTANGULAR = 2
@@ -643,7 +649,7 @@ void
643selinit(void) { 649selinit(void) {
644 memset(&sel.tclick1, 0, sizeof(sel.tclick1)); 650 memset(&sel.tclick1, 0, sizeof(sel.tclick1));
645 memset(&sel.tclick2, 0, sizeof(sel.tclick2)); 651 memset(&sel.tclick2, 0, sizeof(sel.tclick2));
646 sel.mode = 0; 652 sel.mode = SEL_IDLE;
647 sel.ob.x = -1; 653 sel.ob.x = -1;
648 sel.primary = NULL; 654 sel.primary = NULL;
649 sel.clipboard = NULL; 655 sel.clipboard = NULL;
@@ -897,7 +903,7 @@ bpress(XEvent *e) {
897 903
898 /* Clear previous selection, logically and visually. */ 904 /* Clear previous selection, logically and visually. */
899 selclear(NULL); 905 selclear(NULL);
900 sel.mode = 1; 906 sel.mode = SEL_EMPTY;
901 sel.type = SEL_REGULAR; 907 sel.type = SEL_REGULAR;
902 sel.oe.x = sel.ob.x = x2col(e->xbutton.x); 908 sel.oe.x = sel.ob.x = x2col(e->xbutton.x);
903 sel.oe.y = sel.ob.y = y2row(e->xbutton.y); 909 sel.oe.y = sel.ob.y = y2row(e->xbutton.y);
@@ -920,7 +926,7 @@ bpress(XEvent *e) {
920 * make clicks visible 926 * make clicks visible
921 */ 927 */
922 if(sel.snap != 0) { 928 if(sel.snap != 0) {
923 sel.mode++; 929 sel.mode = SEL_READY;
924 tsetdirt(sel.nb.y, sel.ne.y); 930 tsetdirt(sel.nb.y, sel.ne.y);
925 } 931 }
926 sel.tclick2 = sel.tclick1; 932 sel.tclick2 = sel.tclick1;
@@ -1142,13 +1148,12 @@ brelease(XEvent *e) {
1142 if(e->xbutton.button == Button2) { 1148 if(e->xbutton.button == Button2) {
1143 selpaste(NULL); 1149 selpaste(NULL);
1144 } else if(e->xbutton.button == Button1) { 1150 } else if(e->xbutton.button == Button1) {
1145 if(sel.mode < 2) { 1151 if(sel.mode == SEL_READY) {
1146 selclear(NULL);
1147 } else {
1148 getbuttoninfo(e); 1152 getbuttoninfo(e);
1149 selcopy(e->xbutton.time); 1153 selcopy(e->xbutton.time);
1150 } 1154 } else
1151 sel.mode = 0; 1155 selclear(NULL);
1156 sel.mode = SEL_IDLE;
1152 tsetdirt(sel.nb.y, sel.ne.y); 1157 tsetdirt(sel.nb.y, sel.ne.y);
1153 } 1158 }
1154} 1159}
@@ -1165,7 +1170,7 @@ bmotion(XEvent *e) {
1165 if(!sel.mode) 1170 if(!sel.mode)
1166 return; 1171 return;
1167 1172
1168 sel.mode++; 1173 sel.mode = SEL_READY;
1169 oldey = sel.oe.y; 1174 oldey = sel.oe.y;
1170 oldex = sel.oe.x; 1175 oldex = sel.oe.x;
1171 oldsby = sel.nb.y; 1176 oldsby = sel.nb.y;