sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit 4bebf48de27e8b41f7eeec9afa4647972fe6a77a
parent 0cc38ddb8fe09b39b22bcbc9797d5751db006b78
Author: Ivan Delalande <colona@ycc.fr>
Date:   Tue,  4 Apr 2017 23:11:42 -0700

st: routine update for the hidecursor patch

Diffstat:
Mst.suckless.org/patches/hidecursor.md | 3++-
Rst.suckless.org/patches/st-hidecursor-20160727-308bfbf.diff -> st.suckless.org/patches/st-hidecursor-0.7.diff | 0
Ast.suckless.org/patches/st-hidecursor-20170404-745c40f.diff | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 90 insertions(+), 1 deletion(-)

diff --git a/st.suckless.org/patches/hidecursor.md b/st.suckless.org/patches/hidecursor.md @@ -12,7 +12,8 @@ Download * [st-hidecursor-0.5.diff](st-hidecursor-0.5.diff) * [st-hidecursor-0.6.diff](st-hidecursor-0.6.diff) -* [st-hidecursor-20160727-308bfbf.diff](st-hidecursor-20160727-308bfbf.diff) +* [st-hidecursor-0.7.diff](st-hidecursor-0.7.diff) +* [st-hidecursor-20170404-745c40f.diff](st-hidecursor-20170404-745c40f.diff) Authors ------- diff --git a/st.suckless.org/patches/st-hidecursor-20160727-308bfbf.diff b/st.suckless.org/patches/st-hidecursor-0.7.diff diff --git a/st.suckless.org/patches/st-hidecursor-20170404-745c40f.diff b/st.suckless.org/patches/st-hidecursor-20170404-745c40f.diff @@ -0,0 +1,88 @@ +diff --git a/x.c b/x.c +index fbfd350..2f72214 100644 +--- a/x.c ++++ b/x.c +@@ -47,6 +47,11 @@ typedef struct { + Draw draw; + Visual *vis; + XSetWindowAttributes attrs; ++ /* Here, we use the term *pointer* to differentiate the cursor ++ * one sees when hovering the mouse over the terminal from, e.g., ++ * a green rectangle where text would be entered. */ ++ Cursor vpointer, bpointer; /* visible and hidden pointers */ ++ int pointerisvisible; + int scr; + int isfixed; /* is fixed geometry? */ + int l, t; /* left and top offset */ +@@ -535,6 +540,13 @@ bmotion(XEvent *e) + { + int oldey, oldex, oldsby, oldsey; + ++ if (!xw.pointerisvisible) { ++ XDefineCursor(xw.dpy, xw.win, xw.vpointer); ++ xw.pointerisvisible = 1; ++ if (!IS_SET(MODE_MOUSEMANY)) ++ xsetpointermotion(0); ++ } ++ + if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) { + mousereport(e); + return; +@@ -871,10 +883,10 @@ void + xinit(void) + { + XGCValues gcvalues; +- Cursor cursor; + Window parent; + pid_t thispid = getpid(); + XColor xmousefg, xmousebg; ++ Pixmap blankpm; + + if (!(xw.dpy = XOpenDisplay(NULL))) + die("Can't open display\n"); +@@ -947,8 +959,9 @@ xinit(void) + die("XCreateIC failed. Could not obtain input method.\n"); + + /* white cursor, black outline */ +- cursor = XCreateFontCursor(xw.dpy, mouseshape); +- XDefineCursor(xw.dpy, xw.win, cursor); ++ xw.pointerisvisible = 1; ++ xw.vpointer = XCreateFontCursor(xw.dpy, mouseshape); ++ XDefineCursor(xw.dpy, xw.win, xw.vpointer); + + if (XParseColor(xw.dpy, xw.cmap, colorname[mousefg], &xmousefg) == 0) { + xmousefg.red = 0xffff; +@@ -962,7 +975,10 @@ xinit(void) + xmousebg.blue = 0x0000; + } + +- XRecolorCursor(xw.dpy, cursor, &xmousefg, &xmousebg); ++ XRecolorCursor(xw.dpy, xw.vpointer, &xmousefg, &xmousebg); ++ blankpm = XCreateBitmapFromData(xw.dpy, xw.win, &(char){0}, 1, 1); ++ xw.bpointer = XCreatePixmapCursor(xw.dpy, blankpm, blankpm, ++ &xmousefg, &xmousebg, 0, 0); + + xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False); + xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False); +@@ -1462,6 +1478,8 @@ unmap(XEvent *ev) + void + xsetpointermotion(int set) + { ++ if (!set && !xw.pointerisvisible) ++ return; + MODBIT(xw.attrs.event_mask, set, PointerMotionMask); + XChangeWindowAttributes(xw.dpy, xw.win, CWEventMask, &xw.attrs); + } +@@ -1521,6 +1539,12 @@ kpress(XEvent *ev) + Status status; + Shortcut *bp; + ++ if (xw.pointerisvisible) { ++ XDefineCursor(xw.dpy, xw.win, xw.bpointer); ++ xsetpointermotion(1); ++ xw.pointerisvisible = 0; ++ } ++ + if (IS_SET(MODE_KBDLOCK)) + return; +