]> git.armaanb.net Git - st.git/commitdiff
Unhighlight selection when selection is owner by other window
authorRoberto E. Vargas Caballero <k0ga@shike2.com>
Wed, 5 Sep 2012 19:55:45 +0000 (21:55 +0200)
committerRoberto E. Vargas Caballero <k0ga@shike2.com>
Wed, 5 Sep 2012 19:55:45 +0000 (21:55 +0200)
st marks the active selection using reverse colors in the box selection, but
once that another window becomes owner of the selection, it is very
confusing that st keeps highlight the old selection. Usually terminal
emulators remove the highlight when it is not valid anymore.

X sends a SelectionClear event in this situation, so we only have to add a
callback which unhighlight the selectin box.
---
 st.c |    9 +++++++++
 1 file changed, 9 insertions(+)

st.c

diff --git a/st.c b/st.c
index 8e31a7357efc792e597111fe5b7a40c005daba95..bf3993aa01a7ade722f59adbf6b85047443f5815 100644 (file)
--- a/st.c
+++ b/st.c
@@ -311,6 +311,7 @@ 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);
@@ -336,6 +337,7 @@ static void (*handler[LASTEvent])(XEvent *) = {
        [MotionNotify] = bmotion,
        [ButtonPress] = bpress,
        [ButtonRelease] = brelease,
+       [SelectionClear] = selclear,
        [SelectionNotify] = selnotify,
        [SelectionRequest] = selrequest,
 };
@@ -612,6 +614,13 @@ 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);
+}
+
 void
 selrequest(XEvent *e) {
        XSelectionRequestEvent *xsre;