X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=st.c;h=8d27c94b6b1e6956a52d3dcca34cf94ee9536540;hb=1b2751f5c24ca06afbb68e41e73fc9fce6c6b521;hp=92854b4a3bac9e677554de2cb2c20e7e11722acb;hpb=048c54fd5b275ac54d7819020485b77e99fcc469;p=st.git diff --git a/st.c b/st.c index 92854b4..8d27c94 100644 --- a/st.c +++ b/st.c @@ -785,11 +785,8 @@ bpress(XEvent *e) { sel.ey = sel.by = y2row(e->xbutton.y); /* - * Snap handling. - * If user clicks are fasst enough (e.g. below timeouts), - * we ignore if his hand slipped left or down and accidentally - * selected more; we are just snapping to whatever we're - * snapping. + * If the user clicks below predefined timeouts specific + * snapping behaviour is exposed. */ if(TIMEDIFF(now, sel.tclick2) <= tripleclicktimeout) { sel.snap = SNAP_LINE; @@ -809,7 +806,8 @@ bpress(XEvent *e) { * Draw selection, unless it's regular and we don't want to * make clicks visible */ - if (sel.snap != 0) { + if(sel.snap != 0) { + sel.mode++; tsetdirt(sel.b.y, sel.e.y); draw(); } @@ -987,14 +985,14 @@ brelease(XEvent *e) { if(e->xbutton.button == Button2) { selpaste(NULL); } else if(e->xbutton.button == Button1) { - sel.mode = 0; - getbuttoninfo(e); - term.dirty[sel.ey] = 1; - if(sel.bx == sel.ex && sel.by == sel.ey) { + if(sel.mode < 2) { sel.bx = -1; } else { + getbuttoninfo(e); selcopy(); } + sel.mode = 0; + term.dirty[sel.ey] = 1; } } @@ -1010,6 +1008,7 @@ bmotion(XEvent *e) { if(!sel.mode) return; + sel.mode++; oldey = sel.ey; oldex = sel.ex; oldsby = sel.b.y; @@ -1410,7 +1409,7 @@ tsetchar(char *c, Glyph *attr, int x, int y) { void tclearregion(int x1, int y1, int x2, int y2) { - int x, y, temp, mask; + int x, y, temp; if(x1 > x2) temp = x1, x1 = x2, x2 = temp; @@ -1425,9 +1424,9 @@ tclearregion(int x1, int y1, int x2, int y2) { for(y = y1; y <= y2; y++) { term.dirty[y] = 1; for(x = x1; x <= x2; x++) { - mask = selected(x, y) ? ATTR_REVERSE : 0; + if(selected(x, y)) + selclear(NULL); term.line[y][x] = term.c.attr; - term.line[y][x].mode ^= mask; memcpy(term.line[y][x].c, " ", 2); } } @@ -3096,7 +3095,7 @@ drawregion(int x1, int y1, int x2, int y2) { ic = ib = ox = 0; for(x = x1; x < x2; x++) { new = term.line[y][x]; - if(ena_sel && *(new.c) && selected(x, y)) + if(ena_sel && selected(x, y)) new.mode ^= ATTR_REVERSE; if(ib > 0 && (ATTRCMP(base, new) || ib >= DRAW_BUF_SIZ-UTF_SIZ)) {