dwm-notallowed-6.2.diff (2569B)
1 diff -up dwm-6.2.orig/config.def.h dwm-6.2/config.def.h 2 --- dwm-6.2.orig/config.def.h 2021-04-17 17:58:27.803010601 +0200 3 +++ dwm-6.2/config.def.h 2021-04-19 09:04:26.224804870 +0200 4 @@ -26,9 +26,9 @@ static const Rule rules[] = { 5 * WM_CLASS(STRING) = instance, class 6 * WM_NAME(STRING) = title 7 */ 8 - /* class instance title tags mask isfloating monitor */ 9 - { "Gimp", NULL, NULL, 0, 1, -1 }, 10 - { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, 11 + /* class instance title tags mask isfloating monitor notallowed */ 12 + { "Gimp", NULL, NULL, 0, 1, -1, 0 }, 13 + { "Firefox", NULL, NULL, 1 << 8, 0, -1, 0 }, 14 }; 15 16 /* layout(s) */ 17 diff -up dwm-6.2.orig/dwm.c dwm-6.2/dwm.c 18 --- dwm-6.2.orig/dwm.c 2021-04-17 17:58:27.803010601 +0200 19 +++ dwm-6.2/dwm.c 2021-04-19 09:03:42.571206643 +0200 20 @@ -92,7 +92,7 @@ struct Client { 21 int basew, baseh, incw, inch, maxw, maxh, minw, minh; 22 int bw, oldbw; 23 unsigned int tags; 24 - int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; 25 + int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, notallowed; 26 Client *next; 27 Client *snext; 28 Monitor *mon; 29 @@ -139,6 +139,7 @@ typedef struct { 30 unsigned int tags; 31 int isfloating; 32 int monitor; 33 + int notallowed; 34 } Rule; 35 36 /* function declarations */ 37 @@ -297,6 +298,10 @@ applyrules(Client *c) 38 && (!r->class || strstr(class, r->class)) 39 && (!r->instance || strstr(instance, r->instance))) 40 { 41 + if (r->notallowed) { 42 + c->notallowed = r->notallowed; 43 + break; 44 + } 45 c->isfloating = r->isfloating; 46 c->tags |= r->tags; 47 for (m = mons; m && m->num != r->monitor; m = m->next); 48 @@ -1029,6 +1034,7 @@ manage(Window w, XWindowAttributes *wa) 49 c->w = c->oldw = wa->width; 50 c->h = c->oldh = wa->height; 51 c->oldbw = wa->border_width; 52 + c->notallowed = 0; 53 54 updatetitle(c); 55 if (XGetTransientForHint(dpy, w, &trans) && (t = wintoclient(trans))) { 56 @@ -1037,6 +1043,21 @@ manage(Window w, XWindowAttributes *wa) 57 } else { 58 c->mon = selmon; 59 applyrules(c); 60 + if (c->notallowed) { 61 + 62 + XMapWindow(dpy, c->win); 63 + if (!sendevent(c, wmatom[WMDelete])) { 64 + XGrabServer(dpy); 65 + XSetErrorHandler(xerrordummy); 66 + XSetCloseDownMode(dpy, DestroyAll); 67 + XKillClient(dpy, c->win); 68 + XSync(dpy, False); 69 + XSetErrorHandler(xerror); 70 + XUngrabServer(dpy); 71 + } 72 + 73 + return; 74 + } 75 } 76 77 if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw)