X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=st.c;h=165d930461379282b1d8719dcffc4e3aca9252dc;hb=4a4ae19158a6d18d63b8e9fce92e6e5e45543746;hp=655d5a330555608bbdff962e12d506e944d1fd94;hpb=462a966ee2c0f49f432bedaf8e6ebdff995262a9;p=st.git diff --git a/st.c b/st.c index 655d5a3..165d930 100644 --- a/st.c +++ b/st.c @@ -291,7 +291,7 @@ static void ttywrite(const char *, size_t); static void xdraws(char *, Glyph, int, int, int, int); static void xhints(void); static void xclear(int, int, int, int); -static void xcopy(); +static void xcopy(void); static void xdrawcursor(void); static void xinit(void); static void xloadcols(void); @@ -311,12 +311,13 @@ static void brelease(XEvent *); static void bpress(XEvent *); static void bmotion(XEvent *); static void selnotify(XEvent *); +static void selclear(XEvent *); static void selrequest(XEvent *); static void selinit(void); static inline bool selected(int, int); static void selcopy(void); -static void selpaste(); +static void selpaste(void); static void selscroll(int, int); static int utf8decode(char *, long *); @@ -336,6 +337,7 @@ static void (*handler[LASTEvent])(XEvent *) = { [MotionNotify] = bmotion, [ButtonPress] = bpress, [ButtonRelease] = brelease, + [SelectionClear] = selclear, [SelectionNotify] = selnotify, [SelectionRequest] = selrequest, }; @@ -549,6 +551,7 @@ bpress(XEvent *e) { sel.mode = 1; sel.ex = sel.bx = X2COL(e->xbutton.x); sel.ey = sel.by = Y2ROW(e->xbutton.y); + draw(); } } @@ -612,6 +615,14 @@ selpaste() { XConvertSelection(xw.dpy, XA_PRIMARY, sel.xtarget, XA_PRIMARY, xw.win, CurrentTime); } +void selclear(XEvent *e) { + if(sel.bx == -1) + return; + sel.bx = -1; + tsetdirt(sel.b.y, sel.e.y); + draw(); +} + void selrequest(XEvent *e) { XSelectionRequestEvent *xsre; @@ -1949,8 +1960,7 @@ xinit(void) { attrs.bit_gravity = NorthWestGravity; attrs.event_mask = FocusChangeMask | KeyPressMask | ExposureMask | VisibilityChangeMask | StructureNotifyMask - | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask - | EnterWindowMask | LeaveWindowMask; + | ButtonMotionMask | ButtonPressMask | ButtonReleaseMask; attrs.colormap = xw.cmap; parent = opt_embed ? strtol(opt_embed, NULL, 0) : XRootWindow(xw.dpy, xw.scr); @@ -2036,7 +2046,6 @@ void xcopy() { XdbeSwapInfo swpinfo[1] = {{xw.win, XdbeCopied}}; XdbeSwapBuffers(xw.dpy, swpinfo, 1); - } void @@ -2059,7 +2068,7 @@ xdrawcursor(void) { } else xclear(oldx, oldy, oldx, oldy); - xcopy(oldx, oldy, 1, 1); + xcopy(); /* draw the new one */ if(!(term.c.state & CURSOR_HIDE)) { @@ -2074,7 +2083,7 @@ xdrawcursor(void) { oldx = term.c.x, oldy = term.c.y; } - xcopy(term.c.x, term.c.y, 1, 1); + xcopy(); } void