sites

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

commit b82688ff68ebd0b3403e205cbdbcc685356fcb0e
parent d64fe0c92a1a09242af8774b8b89f260437e79f0
Author: Ivan Delalande <colona@ycc.fr>
Date:   Sun, 31 May 2020 12:32:43 -0700

[st][patch][hidecursor] add patch version for 0.8.3 and later

Remove patch for 0.8.1 as the 0.8 version works fine up to 0.8.2, add a
version for 0.8.3 that also works up to current st git master (0.8 patch
breaks after the forcemousemod rename in commit b6d280d).

Diffstat:
Mst.suckless.org/patches/hidecursor/index.md | 2+-
Dst.suckless.org/patches/hidecursor/st-hidecursor-0.8.1.diff | 88-------------------------------------------------------------------------------
Ast.suckless.org/patches/hidecursor/st-hidecursor-0.8.3.diff | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 89 insertions(+), 89 deletions(-)

diff --git a/st.suckless.org/patches/hidecursor/index.md b/st.suckless.org/patches/hidecursor/index.md @@ -14,7 +14,7 @@ Download * [st-hidecursor-0.6.diff](st-hidecursor-0.6.diff) * [st-hidecursor-0.7.diff](st-hidecursor-0.7.diff) * [st-hidecursor-0.8.diff](st-hidecursor-0.8.diff) -* [st-hidecursor-0.8.1.diff](st-hidecursor-0.8.1.diff) +* [st-hidecursor-0.8.3.diff](st-hidecursor-0.8.3.diff) Authors ------- diff --git a/st.suckless.org/patches/hidecursor/st-hidecursor-0.8.1.diff b/st.suckless.org/patches/hidecursor/st-hidecursor-0.8.1.diff @@ -1,88 +0,0 @@ -diff --git a/x.c b/x.c -index c343ba2..a40de8c 100644 ---- a/x.c -+++ b/x.c -@@ -96,6 +96,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 */ -@@ -652,6 +657,13 @@ brelease(XEvent *e) - void - bmotion(XEvent *e) - { -+ 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; -@@ -997,10 +1009,10 @@ void - xinit(int cols, int rows) - { - 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"); -@@ -1076,8 +1088,9 @@ xinit(int cols, int rows) - 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; -@@ -1091,7 +1104,10 @@ xinit(int cols, int rows) - 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); -@@ -1574,6 +1590,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); - } -@@ -1692,6 +1710,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; - diff --git a/st.suckless.org/patches/hidecursor/st-hidecursor-0.8.3.diff b/st.suckless.org/patches/hidecursor/st-hidecursor-0.8.3.diff @@ -0,0 +1,88 @@ +diff --git a/x.c b/x.c +index e5f1737..7e759b0 100644 +--- a/x.c ++++ b/x.c +@@ -103,6 +103,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 */ +@@ -698,6 +703,13 @@ brelease(XEvent *e) + void + bmotion(XEvent *e) + { ++ 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 & forcemousemod)) { + mousereport(e); + return; +@@ -1099,10 +1111,10 @@ void + xinit(int cols, int rows) + { + 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"); +@@ -1166,8 +1178,9 @@ xinit(int cols, int rows) + } + + /* 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; +@@ -1181,7 +1194,10 @@ xinit(int cols, int rows) + 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); +@@ -1673,6 +1689,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); + } +@@ -1793,6 +1811,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; +