--- st.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/st.c b/st.c index b0d0cb0..58e9b1b 100644 --- a/st.c +++ b/st.c _AT_@ -138,6 +138,11 @@ enum selection_type { SEL_RECTANGULAR = 2 }; +enum selection_mode { + SEL_START = 1, + SEL_ACTIVE = 2 +}; + enum selection_snap { SNAP_WORD = 1, SNAP_LINE = 2 _AT_@ -689,6 +694,7 @@ getbuttoninfo(XEvent *e) { int type; uint state = e->xbutton.state &~Button1Mask; + sel.mode = SEL_ACTIVE; sel.alt = IS_SET(MODE_ALTSCREEN); sel.ex = x2col(e->xbutton.x); _AT_@ -779,7 +785,7 @@ bpress(XEvent *e) { tsetdirt(sel.b.y, sel.e.y); draw(); } - sel.mode = 1; + sel.mode = SEL_START; sel.type = SEL_REGULAR; sel.ex = sel.bx = x2col(e->xbutton.x); sel.ey = sel.by = y2row(e->xbutton.y); _AT_@ -806,10 +812,11 @@ bpress(XEvent *e) { sel.e.y = sel.ey; /* - * Draw selection, unless it's regular and we don't want to - * make clicks visible + * Draw selection, unless it's regular and it is unclear + * if user intended to select or merely clicked */ if (sel.snap != 0) { + sel.mode = SEL_ACTIVE; tsetdirt(sel.b.y, sel.e.y); draw(); } _AT_@ -987,14 +994,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 == SEL_START) { sel.bx = -1; } else { + getbuttoninfo(e); selcopy(); } + sel.mode = 0; + term.dirty[sel.ey] = 1; } } -- 1.7.10.4Received on Thu Apr 25 2013 - 01:02:46 CEST
This archive was generated by hypermail 2.3.0 : Thu Apr 25 2013 - 01:12:05 CEST