aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoberto E. Vargas Caballero2013-06-23 12:09:19 +0200
committerRoberto E. Vargas Caballero2013-07-04 09:14:50 +0200
commit1c71045ee9af882196cefe63a31a2cb08fecdea6 (patch)
tree4890dc78744f4124e122da868efc118328111e22
parent33856d90a99d1972ea5b7463d74b8051275e8d9a (diff)
downloadaur-1c71045ee9af882196cefe63a31a2cb08fecdea6.tar.gz
Fix selection clearing
The way st knows if there is a selection activated is checking if sel.ob.x is equal to -1. In some parts of the code the way of disabling the selection was only setting it to -1, but after it you can't be sure if the selection is clearing from the terminal representation, because it is necessary mark all the lines affected by the selection as dirty. Already there is a functon which perform this task, selclear.
-rw-r--r--st.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/st.c b/st.c
index 2811876adf26..96111a0e6001 100644
--- a/st.c
+++ b/st.c
@@ -888,11 +888,7 @@ bpress(XEvent *e) {
gettimeofday(&now, NULL);
/* Clear previous selection, logically and visually. */
- if(sel.ob.x != -1) {
- sel.ob.x = -1;
- tsetdirt(sel.nb.y, sel.ne.y);
- draw();
- }
+ selclear(NULL);
sel.mode = 1;
sel.type = SEL_REGULAR;
sel.oe.x = sel.ob.x = x2col(e->xbutton.x);
@@ -1108,7 +1104,7 @@ brelease(XEvent *e) {
selpaste(NULL);
} else if(e->xbutton.button == Button1) {
if(sel.mode < 2) {
- sel.ob.x = -1;
+ selclear(NULL);
} else {
getbuttoninfo(e);
selcopy();
@@ -1441,7 +1437,7 @@ selscroll(int orig, int n) {
if(BETWEEN(sel.ob.y, orig, term.bot) || BETWEEN(sel.oe.y, orig, term.bot)) {
if((sel.ob.y += n) > term.bot || (sel.oe.y += n) < term.top) {
- sel.ob.x = -1;
+ selclear(NULL);
return;
}
if(sel.type == SEL_RECTANGULAR) {
@@ -1951,7 +1947,7 @@ csihandle(void) {
tputtab(1);
break;
case 'J': /* ED -- Clear screen */
- sel.ob.x = -1;
+ selclear(NULL);
switch(csiescseq.arg[0]) {
case 0: /* below */
tclearregion(term.c.x, term.c.y, term.col-1, term.c.y);
@@ -2448,7 +2444,7 @@ tputc(char *c, int len) {
if(control && !(term.c.attr.mode & ATTR_GFX))
return;
if(sel.ob.x != -1 && BETWEEN(term.c.y, sel.ob.y, sel.oe.y))
- sel.ob.x = -1;
+ selclear(NULL);
if(IS_SET(MODE_WRAP) && (term.c.state & CURSOR_WRAPNEXT)) {
term.line[term.c.y][term.c.x].mode |= ATTR_WRAP;
tnewline(1);