Explorar el Código

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.
Roberto E. Vargas Caballero hace 11 años
padre
commit
ebbac77d74
Se han modificado 1 ficheros con 5 adiciones y 9 borrados
  1. 5 9
      st.c

+ 5 - 9
st.c

@@ -888,11 +888,7 @@ bpress(XEvent *e) {
 		gettimeofday(&now, NULL);
 		gettimeofday(&now, NULL);
 
 
 		/* Clear previous selection, logically and visually. */
 		/* 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.mode = 1;
 		sel.type = SEL_REGULAR;
 		sel.type = SEL_REGULAR;
 		sel.oe.x = sel.ob.x = x2col(e->xbutton.x);
 		sel.oe.x = sel.ob.x = x2col(e->xbutton.x);
@@ -1108,7 +1104,7 @@ brelease(XEvent *e) {
 		selpaste(NULL);
 		selpaste(NULL);
 	} else if(e->xbutton.button == Button1) {
 	} else if(e->xbutton.button == Button1) {
 		if(sel.mode < 2) {
 		if(sel.mode < 2) {
-			sel.ob.x = -1;
+			selclear(NULL);
 		} else {
 		} else {
 			getbuttoninfo(e);
 			getbuttoninfo(e);
 			selcopy();
 			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(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) {
 		if((sel.ob.y += n) > term.bot || (sel.oe.y += n) < term.top) {
-			sel.ob.x = -1;
+			selclear(NULL);
 			return;
 			return;
 		}
 		}
 		if(sel.type == SEL_RECTANGULAR) {
 		if(sel.type == SEL_RECTANGULAR) {
@@ -1951,7 +1947,7 @@ csihandle(void) {
 			tputtab(1);
 			tputtab(1);
 		break;
 		break;
 	case 'J': /* ED -- Clear screen */
 	case 'J': /* ED -- Clear screen */
-		sel.ob.x = -1;
+		selclear(NULL);
 		switch(csiescseq.arg[0]) {
 		switch(csiescseq.arg[0]) {
 		case 0: /* below */
 		case 0: /* below */
 			tclearregion(term.c.x, term.c.y, term.col-1, term.c.y);
 			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))
 	if(control && !(term.c.attr.mode & ATTR_GFX))
 		return;
 		return;
 	if(sel.ob.x != -1 && BETWEEN(term.c.y, sel.ob.y, sel.oe.y))
 	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)) {
 	if(IS_SET(MODE_WRAP) && (term.c.state & CURSOR_WRAPNEXT)) {
 		term.line[term.c.y][term.c.x].mode |= ATTR_WRAP;
 		term.line[term.c.y][term.c.x].mode |= ATTR_WRAP;
 		tnewline(1);
 		tnewline(1);