diff options
Diffstat (limited to '')
| -rw-r--r-- | st.c | 23 |
1 files changed, 14 insertions, 9 deletions
| @@ -162,6 +162,12 @@ enum window_state { | |||
| 162 | WIN_FOCUSED = 2 | 162 | WIN_FOCUSED = 2 |
| 163 | }; | 163 | }; |
| 164 | 164 | ||
| 165 | enum selection_mode { | ||
| 166 | SEL_IDLE = 0, | ||
| 167 | SEL_EMPTY = 1, | ||
| 168 | SEL_READY = 2 | ||
| 169 | }; | ||
| 170 | |||
| 165 | enum selection_type { | 171 | enum selection_type { |
| 166 | SEL_REGULAR = 1, | 172 | SEL_REGULAR = 1, |
| 167 | SEL_RECTANGULAR = 2 | 173 | SEL_RECTANGULAR = 2 |
| @@ -643,7 +649,7 @@ void | |||
| 643 | selinit(void) { | 649 | selinit(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; |
