summaryrefslogtreecommitdiff
path: root/dmenu/dmenu-center-4.8.diff
diff options
context:
space:
mode:
Diffstat (limited to 'dmenu/dmenu-center-4.8.diff')
-rw-r--r--dmenu/dmenu-center-4.8.diff56
1 files changed, 56 insertions, 0 deletions
diff --git a/dmenu/dmenu-center-4.8.diff b/dmenu/dmenu-center-4.8.diff
new file mode 100644
index 0000000..a970fcb
--- /dev/null
+++ b/dmenu/dmenu-center-4.8.diff
@@ -0,0 +1,56 @@
+diff --git a/dmenu.c b/dmenu.c
+index 5e9c367..2268ea9 100644
+--- a/dmenu.c
++++ b/dmenu.c
+@@ -88,6 +88,15 @@ calcoffsets(void)
+ break;
+ }
+
++static int
++max_textw(void)
++{
++ int len = 0;
++ for (struct item *item = items; item && item->text; item++)
++ len = MAX(TEXTW(item->text), len);
++ return len;
++}
++
+ static void
+ cleanup(void)
+ {
+@@ -598,6 +607,7 @@ setup(void)
+ bh = drw->fonts->h + 2;
+ lines = MAX(lines, 0);
+ mh = (lines + 1) * bh;
++ promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
+ #ifdef XINERAMA
+ i = 0;
+ if (parentwin == root && (info = XineramaQueryScreens(dpy, &n))) {
+@@ -624,9 +634,9 @@ setup(void)
+ if (INTERSECT(x, y, 1, 1, info[i]))
+ break;
+
+- x = info[i].x_org;
+- y = info[i].y_org + (topbar ? 0 : info[i].height - mh);
+- mw = info[i].width;
++ mw = MIN(MAX(max_textw() + promptw, 100), info[i].width);
++ x = info[i].x_org + ((info[i].width - mw) / 2);
++ y = info[i].y_org + ((info[i].height - mh) / 2);
+ XFree(info);
+ } else
+ #endif
+@@ -634,11 +644,10 @@ setup(void)
+ if (!XGetWindowAttributes(dpy, parentwin, &wa))
+ die("could not get embedding window attributes: 0x%lx",
+ parentwin);
+- x = 0;
+- y = topbar ? 0 : wa.height - mh;
+- mw = wa.width;
++ mw = MIN(MAX(max_textw() + promptw, 100), wa.width);
++ x = (wa.width - mw) / 2;
++ y = (wa.height - mh) / 2;
+ }
+- promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
+ inputw = MIN(inputw, mw/3);
+ match();
+