Merge branch 'master' of ssh://suckless.org/gitrepos/st - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 83e73c6242fc309a3859c12b996ab88d36c7e838
 (DIR) parent 9619760e129b0994cd3bc4c827c83960f6a5e98f
 (HTM) Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       Date:   Tue, 14 Apr 2015 09:47:19 +0200
       
       Merge branch 'master' of ssh://suckless.org/gitrepos/st
       
       Diffstat:
         M st.c                                |      23 ++++++++++++++---------
       
       1 file changed, 14 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -423,7 +423,7 @@ static void xsettitle(char *);
        static void xresettitle(void);
        static void xsetpointermotion(int);
        static void xseturgency(int);
       -static void xsetsel(char *);
       +static void xsetsel(char *, Time);
        static void xtermclear(int, int, int, int);
        static void xunloadfont(Font *);
        static void xunloadfonts(void);
       @@ -449,7 +449,7 @@ static void selinit(void);
        static void selnormalize(void);
        static inline bool selected(int, int);
        static char *getsel(void);
       -static void selcopy(void);
       +static void selcopy(Time);
        static void selscroll(int, int);
        static void selsnap(int, int *, int *, int);
        static int x2col(int);
       @@ -984,8 +984,8 @@ getsel(void) {
        }
        
        void
       -selcopy(void) {
       -        xsetsel(getsel());
       +selcopy(Time t) {
       +        xsetsel(getsel(), t);
        }
        
        void
       @@ -997,7 +997,7 @@ selnotify(XEvent *e) {
                XSelectionEvent *xsev;
        
                ofs = 0;
       -        xsev = (XSelectionEvent *)e;
       +        xsev = &e->xselection;
                if (xsev->property == None)
                    return;
                do {
       @@ -1083,6 +1083,9 @@ selrequest(XEvent *e) {
                xev.selection = xsre->selection;
                xev.target = xsre->target;
                xev.time = xsre->time;
       +        if (xsre->property == None)
       +            xsre->property = xsre->target;
       +
                /* reject */
                xev.property = None;
        
       @@ -1125,11 +1128,13 @@ selrequest(XEvent *e) {
        }
        
        void
       -xsetsel(char *str) {
       +xsetsel(char *str, Time t) {
                free(sel.primary);
                sel.primary = str;
        
       -        XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, CurrentTime);
       +        XSetSelectionOwner(xw.dpy, XA_PRIMARY, xw.win, t);
       +        if (XGetSelectionOwner(xw.dpy, XA_PRIMARY) != xw.win)
       +            selclear(0);
        }
        
        void
       @@ -1146,7 +1151,7 @@ brelease(XEvent *e) {
                                selclear(NULL);
                        } else {
                                getbuttoninfo(e);
       -                        selcopy();
       +                        selcopy(e->xbutton.time);
                        }
                        sel.mode = 0;
                        tsetdirt(sel.nb.y, sel.ne.y);
       @@ -2390,7 +2395,7 @@ tputtab(int n) {
                                for(--x; x > 0 && !term.tabs[x]; --x)
                                        /* nothing */ ;
                }
       -        tmoveto(x, term.c.y);
       +        term.c.x = LIMIT(x, 0, term.col-1);
        }
        
        void