summaryrefslogtreecommitdiff
path: root/st/patches/st-hidecursor-0.8.1.diff
diff options
context:
space:
mode:
authorShubham Saini <shubham6405@gmail.com>2020-05-16 17:43:31 +0000
committerShubham Saini <shubham6405@gmail.com>2020-05-16 17:43:31 +0000
commit16d45c32c20d7b3db8ba2533ca9d414d8cd308f2 (patch)
treef829957546b740e6897eba24c8f49bb4c170044e /st/patches/st-hidecursor-0.8.1.diff
gone full suckless
Diffstat (limited to 'st/patches/st-hidecursor-0.8.1.diff')
-rw-r--r--st/patches/st-hidecursor-0.8.1.diff88
1 files changed, 88 insertions, 0 deletions
diff --git a/st/patches/st-hidecursor-0.8.1.diff b/st/patches/st-hidecursor-0.8.1.diff
new file mode 100644
index 0000000..d27267c
--- /dev/null
+++ b/st/patches/st-hidecursor-0.8.1.diff
@@ -0,0 +1,88 @@
1diff --git a/x.c b/x.c
2index c343ba2..a40de8c 100644
3--- a/x.c
4+++ b/x.c
5@@ -96,6 +96,11 @@ typedef struct {
6 Draw draw;
7 Visual *vis;
8 XSetWindowAttributes attrs;
9+ /* Here, we use the term *pointer* to differentiate the cursor
10+ * one sees when hovering the mouse over the terminal from, e.g.,
11+ * a green rectangle where text would be entered. */
12+ Cursor vpointer, bpointer; /* visible and hidden pointers */
13+ int pointerisvisible;
14 int scr;
15 int isfixed; /* is fixed geometry? */
16 int l, t; /* left and top offset */
17@@ -652,6 +657,13 @@ brelease(XEvent *e)
18 void
19 bmotion(XEvent *e)
20 {
21+ if (!xw.pointerisvisible) {
22+ XDefineCursor(xw.dpy, xw.win, xw.vpointer);
23+ xw.pointerisvisible = 1;
24+ if (!IS_SET(MODE_MOUSEMANY))
25+ xsetpointermotion(0);
26+ }
27+
28 if (IS_SET(MODE_MOUSE) && !(e->xbutton.state & forceselmod)) {
29 mousereport(e);
30 return;
31@@ -997,10 +1009,10 @@ void
32 xinit(int cols, int rows)
33 {
34 XGCValues gcvalues;
35- Cursor cursor;
36 Window parent;
37 pid_t thispid = getpid();
38 XColor xmousefg, xmousebg;
39+ Pixmap blankpm;
40
41 if (!(xw.dpy = XOpenDisplay(NULL)))
42 die("Can't open display\n");
43@@ -1076,8 +1088,9 @@ xinit(int cols, int rows)
44 die("XCreateIC failed. Could not obtain input method.\n");
45
46 /* white cursor, black outline */
47- cursor = XCreateFontCursor(xw.dpy, mouseshape);
48- XDefineCursor(xw.dpy, xw.win, cursor);
49+ xw.pointerisvisible = 1;
50+ xw.vpointer = XCreateFontCursor(xw.dpy, mouseshape);
51+ XDefineCursor(xw.dpy, xw.win, xw.vpointer);
52
53 if (XParseColor(xw.dpy, xw.cmap, colorname[mousefg], &xmousefg) == 0) {
54 xmousefg.red = 0xffff;
55@@ -1091,7 +1104,10 @@ xinit(int cols, int rows)
56 xmousebg.blue = 0x0000;
57 }
58
59- XRecolorCursor(xw.dpy, cursor, &xmousefg, &xmousebg);
60+ XRecolorCursor(xw.dpy, xw.vpointer, &xmousefg, &xmousebg);
61+ blankpm = XCreateBitmapFromData(xw.dpy, xw.win, &(char){0}, 1, 1);
62+ xw.bpointer = XCreatePixmapCursor(xw.dpy, blankpm, blankpm,
63+ &xmousefg, &xmousebg, 0, 0);
64
65 xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False);
66 xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False);
67@@ -1574,6 +1590,8 @@ unmap(XEvent *ev)
68 void
69 xsetpointermotion(int set)
70 {
71+ if (!set && !xw.pointerisvisible)
72+ return;
73 MODBIT(xw.attrs.event_mask, set, PointerMotionMask);
74 XChangeWindowAttributes(xw.dpy, xw.win, CWEventMask, &xw.attrs);
75 }
76@@ -1692,6 +1710,12 @@ kpress(XEvent *ev)
77 Status status;
78 Shortcut *bp;
79
80+ if (xw.pointerisvisible) {
81+ XDefineCursor(xw.dpy, xw.win, xw.bpointer);
82+ xsetpointermotion(1);
83+ xw.pointerisvisible = 0;
84+ }
85+
86 if (IS_SET(MODE_KBDLOCK))
87 return;
88