Introduction
Introduction Statistics Contact Development Disclaimer Help
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
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.