From 6fff7c34f07aa7b3ad504654eab310f63f44ad4c Mon Sep 17 00:00:00 2001 From: terminaldweller Date: Fri, 22 Apr 2022 10:38:33 +0430 Subject: added center patch --- dmenu-center-4.8.diff | 19 +++++++++++++++++++ dmenu.c | 26 ++++++++++++++++++++------ 2 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 dmenu-center-4.8.diff diff --git a/dmenu-center-4.8.diff b/dmenu-center-4.8.diff new file mode 100644 index 0000000..5878a33 --- /dev/null +++ b/dmenu-center-4.8.diff @@ -0,0 +1,19 @@ +diff --git a/dmenu.c b/dmenu.c +index 5e9c367..2268ea9 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -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(); + diff --git a/dmenu.c b/dmenu.c index 19f369b..e940e57 100644 --- a/dmenu.c +++ b/dmenu.c @@ -120,6 +120,13 @@ static void 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) { size_t i; @@ -914,6 +921,7 @@ static void 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))) { @@ -942,18 +950,24 @@ static void 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; + /* 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 { 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; + /* 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); -- cgit v1.2.3