summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;