This is a tiny patch to add client centering support, which I am using to hack up scratchpad functionality elsewhere.
Obviously this is only really useful if c->isfloating is also True. I hacked this patch into my current configuration, so it is not tested verbatim, but it should work when applied to vanilla dwm.
diff --git a/config.def.h b/config.def.h
index 875885b..2e3a9fb 100644
--- a/config.def.h
+++ b/config.def.h
@@ -21,9 +21,9 @@ static const Rule rules[] = {
* WM_CLASS(STRING) = instance, class
* WM_NAME(STRING) = title
*/
- /* class instance title tags mask isfloating
monitor */
- { "Gimp", NULL, NULL, 0, True, -1 },
- { "Firefox", NULL, NULL, 1 << 8, False, -1 },
+ /* class instance title tags mask iscentered
isfloating monitor */
+ { "Gimp", NULL, NULL, 0, False,
True, -1 },
+ { "Firefox", NULL, NULL, 1 << 8, False,
False, -1 },
};
/* layout(s) */
diff --git a/dwm.c b/dwm.c
index 1bbb4b3..a8a3356 100644
--- a/dwm.c
+++ b/dwm.c
@@ -91,7 +91,7 @@ struct Client {
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
int bw, oldbw;
unsigned int tags;
- Bool isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen;
+ Bool isfixed, iscentered, isfloating, isurgent, neverfocus, oldstate,
isfullscreen;
Client *next;
Client *snext;
Monitor *mon;
@@ -136,6 +136,7 @@ typedef struct {
const char *instance;
const char *title;
unsigned int tags;
+ Bool iscentered;
Bool isfloating;
int monitor;
} Rule;
@@ -294,6 +295,7 @@ applyrules(Client *c) {
&& (!r->class || strstr(class, r->class))
&& (!r->instance || strstr(instance, r->instance)))
{
+ c->iscentered = r->iscentered;
c->isfloating = r->isfloating;
c->tags |= r->tags;
for(m = mons; m && m->num != r->monitor; m = m->next);
@@ -1038,6 +1040,11 @@ manage(Window w, XWindowAttributes *wa) {
&& (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh :
c->mon->my);
c->bw = borderpx;
+ if(c->iscentered) {
+ c->x = (c->mon->mw - WIDTH(c)) / 2;
+ c->y = (c->mon->mh - HEIGHT(c)) / 2;
+ }
+
wc.border_width = c->bw;
XConfigureWindow(dpy, w, CWBorderWidth, &wc);
XSetWindowBorder(dpy, w, scheme[SchemeNorm].border->rgb);
pgp0kw4p37buX.pgp
Description: PGP signature
