Unhighlight selection when selection is owner by other window
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(+)
This commit is contained in:
parent
017af76f5c
commit
f471a32d29
1 changed files with 9 additions and 0 deletions
9
st.c
9
st.c
|
@ -311,6 +311,7 @@ static void brelease(XEvent *);
|
||||||
static void bpress(XEvent *);
|
static void bpress(XEvent *);
|
||||||
static void bmotion(XEvent *);
|
static void bmotion(XEvent *);
|
||||||
static void selnotify(XEvent *);
|
static void selnotify(XEvent *);
|
||||||
|
static void selclear(XEvent *);
|
||||||
static void selrequest(XEvent *);
|
static void selrequest(XEvent *);
|
||||||
|
|
||||||
static void selinit(void);
|
static void selinit(void);
|
||||||
|
@ -336,6 +337,7 @@ static void (*handler[LASTEvent])(XEvent *) = {
|
||||||
[MotionNotify] = bmotion,
|
[MotionNotify] = bmotion,
|
||||||
[ButtonPress] = bpress,
|
[ButtonPress] = bpress,
|
||||||
[ButtonRelease] = brelease,
|
[ButtonRelease] = brelease,
|
||||||
|
[SelectionClear] = selclear,
|
||||||
[SelectionNotify] = selnotify,
|
[SelectionNotify] = selnotify,
|
||||||
[SelectionRequest] = selrequest,
|
[SelectionRequest] = selrequest,
|
||||||
};
|
};
|
||||||
|
@ -612,6 +614,13 @@ selpaste() {
|
||||||
XConvertSelection(xw.dpy, XA_PRIMARY, sel.xtarget, XA_PRIMARY, xw.win, CurrentTime);
|
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
|
void
|
||||||
selrequest(XEvent *e) {
|
selrequest(XEvent *e) {
|
||||||
XSelectionRequestEvent *xsre;
|
XSelectionRequestEvent *xsre;
|
||||||
|
|
Loading…
Reference in a new issue