dmenu-managed-4.9.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
dmenu-managed-4.9.diff (2917B) | |
--- | |
1 From 5aee7d1488354322462e243416e27e026d73e0eb Mon Sep 17 00:00:00 2001 | |
2 From: Miles Alan <[email protected]> | |
3 Date: Tue, 16 Jun 2020 21:40:30 -0500 | |
4 Subject: [PATCH] Add -wm flag to run dmenu as managed WM window (e.g. no | |
5 override_redirect) | |
6 | |
7 --- | |
8 dmenu.1 | 4 ++++ | |
9 dmenu.c | 20 +++++++++++++++++--- | |
10 2 files changed, 21 insertions(+), 3 deletions(-) | |
11 | |
12 diff --git a/dmenu.1 b/dmenu.1 | |
13 index 323f93c..89a9493 100644 | |
14 --- a/dmenu.1 | |
15 +++ b/dmenu.1 | |
16 @@ -22,6 +22,7 @@ dmenu \- dynamic menu | |
17 .IR color ] | |
18 .RB [ \-w | |
19 .IR windowid ] | |
20 +.RB [ \-wm ] | |
21 .P | |
22 .BR dmenu_run " ..." | |
23 .SH DESCRIPTION | |
24 @@ -80,6 +81,9 @@ prints version information to stdout, then exits. | |
25 .TP | |
26 .BI \-w " windowid" | |
27 embed into windowid. | |
28 +.TP | |
29 +.BI \-wm | |
30 +Display as a managed WM window (e.g. don't set overide_redirect flag) | |
31 .SH USAGE | |
32 dmenu is completely controlled by the keyboard. Items are selected usi… | |
33 arrow keys, page up, page down, home, and end. | |
34 diff --git a/dmenu.c b/dmenu.c | |
35 index 6b8f51b..4632eb4 100644 | |
36 --- a/dmenu.c | |
37 +++ b/dmenu.c | |
38 @@ -44,6 +44,7 @@ static struct item *items = NULL; | |
39 static struct item *matches, *matchend; | |
40 static struct item *prev, *curr, *next, *sel; | |
41 static int mon = -1, screen; | |
42 +static int managed = 0; | |
43 | |
44 static Atom clip, utf8; | |
45 static Display *dpy; | |
46 @@ -198,7 +199,7 @@ grabkeyboard(void) | |
47 struct timespec ts = { .tv_sec = 0, .tv_nsec = 1000000 }; | |
48 int i; | |
49 | |
50 - if (embed) | |
51 + if (embed || managed) | |
52 return; | |
53 /* try to grab keyboard, we may have to wait for another proces… | |
54 for (i = 0; i < 1000; i++) { | |
55 @@ -651,7 +652,7 @@ setup(void) | |
56 match(); | |
57 | |
58 /* create menu window */ | |
59 - swa.override_redirect = True; | |
60 + swa.override_redirect = managed ? False : True; | |
61 swa.background_pixel = scheme[SchemeNorm][ColBg].pixel; | |
62 swa.event_mask = ExposureMask | KeyPressMask | VisibilityChange… | |
63 win = XCreateWindow(dpy, parentwin, x, y, mw, mh, 0, | |
64 @@ -665,7 +666,18 @@ setup(void) | |
65 XNClientWindow, win, XNFocusWindow, win, NULL); | |
66 | |
67 XMapRaised(dpy, win); | |
68 - XSetInputFocus(dpy, win, RevertToParent, CurrentTime); | |
69 + | |
70 + if (managed) { | |
71 + XTextProperty prop; | |
72 + char *windowtitle = prompt != NULL ? prompt : "dmenu"; | |
73 + Xutf8TextListToTextProperty(dpy, &windowtitle, 1, XUTF8… | |
74 + XSetWMName(dpy, win, &prop); | |
75 + XSetTextProperty(dpy, win, &prop, XInternAtom(dpy, "_NE… | |
76 + XFree(prop.value); | |
77 + } else { | |
78 + XSetInputFocus(dpy, win, RevertToParent, CurrentTime); | |
79 + } | |
80 + | |
81 if (embed) { | |
82 XSelectInput(dpy, parentwin, FocusChangeMask); | |
83 if (XQueryTree(dpy, parentwin, &dw, &w, &dws, &du) && d… | |
84 @@ -705,6 +717,8 @@ main(int argc, char *argv[]) | |
85 else if (!strcmp(argv[i], "-i")) { /* case-insensitive … | |
86 fstrncmp = strncasecmp; | |
87 fstrstr = cistrstr; | |
88 + } else if (!strcmp(argv[i], "-wm")) { /* display as man… | |
89 + managed = 1; | |
90 } else if (i + 1 == argc) | |
91 usage(); | |
92 /* these options take one argument */ | |
93 -- | |
94 2.27.0 | |
95 |