From f12c0d3e489388733769c7b29a98191793fc093f Mon Sep 17 00:00:00 2001 From: Santiago Lo Coco Date: Fri, 13 Aug 2021 19:30:25 -0300 Subject: [PATCH] Added new swallow patch --- config.def.h | 10 +- config.h | 196 ---------- drw.o | Bin 10616 -> 0 bytes dwm | Bin 80456 -> 0 bytes dwm.c | 40 ++- dwm.o | Bin 74128 -> 0 bytes patches/dwm-swallow-20201211-61bb8b2.diff | 412 ++++++++++++++++++++++ util.o | Bin 2256 -> 0 bytes 8 files changed, 442 insertions(+), 216 deletions(-) delete mode 100644 config.h delete mode 100644 drw.o delete mode 100755 dwm delete mode 100644 dwm.o create mode 100644 patches/dwm-swallow-20201211-61bb8b2.diff delete mode 100644 util.o diff --git a/config.def.h b/config.def.h index 2854e18..acdad8e 100644 --- a/config.def.h +++ b/config.def.h @@ -5,6 +5,7 @@ /* appearance */ static const unsigned int borderpx = 1; /* border pixel of windows */ static const unsigned int snap = 32; /* snap pixel */ +static const int swallowfloating = 0; /* 1 means swallow floating windows by default */ static const unsigned int gappih = 20; /* horiz inner gap between windows */ static const unsigned int gappiv = 10; /* vert inner gap between windows */ static const unsigned int gappoh = 10; /* horiz outer gap between windows and screen edge */ @@ -50,10 +51,11 @@ static const Rule rules[] = { * WM_CLASS(STRING) = instance, class * WM_NAME(STRING) = title */ - /* class instance title tags mask isfloating isterminal noswallow monitor */ - { "Gimp", NULL, NULL, 0, 1, 0, 0, -1 }, - { "Firefox", NULL, NULL, 1 << 8, 0, 0, 0, -1 }, - { "st", NULL, NULL, 0, 0, 1, 0, -1 }, + /* class instance title tags mask isfloating isterminal noswallow monitor */ + { "Gimp", NULL, NULL, 0, 1, 0, 0, -1 }, + { "Firefox", NULL, NULL, 1 << 8, 0, 0, -1, -1 }, + { "st", NULL, NULL, 0, 0, 1, 0, -1 }, + { NULL, NULL, "Event Tester", 0, 0, 0, 1, -1 }, /* xev */ }; /* layout(s) */ diff --git a/config.h b/config.h deleted file mode 100644 index eff8663..0000000 --- a/config.h +++ /dev/null @@ -1,196 +0,0 @@ -/* See LICENSE file for copyright and license details. */ - -#include - -/* appearance */ -static const unsigned int borderpx = 1; /* border pixel of windows */ -static const unsigned int snap = 32; /* snap pixel */ -static const unsigned int gappih = 20; /* horiz inner gap between windows */ -static const unsigned int gappiv = 10; /* vert inner gap between windows */ -static const unsigned int gappoh = 10; /* horiz outer gap between windows and screen edge */ -static const unsigned int gappov = 30; /* vert outer gap between windows and screen edge */ -static int smartgaps = 0; /* 1 means no outer gap when there is only one window */ -static const int showbar = 1; /* 0 means no bar */ -static const int topbar = 1; /* 0 means bottom bar */ -//static const char *fonts[] = { "monospace:size=10"}; -static const char *fonts[] = { "monospace:size=10", "Noto Emoji:pixelsize=12:antialias=true:autohint=true" }; -static const char dmenufont[] = "monospace:size=10"; -static const char col_gray1[] = "#222222"; -static const char col_gray2[] = "#444444"; -static const char col_gray3[] = "#bbbbbb"; -static const char col_gray4[] = "#eeeeee"; -static const char col_cyan[] = "#005577"; -static const char col1[] = "#ffffff"; -static const char col2[] = "#ffffff"; -static const char col3[] = "#ffffff"; -static const char col4[] = "#ffffff"; -static const char col5[] = "#ffffff"; -static const char col6[] = "#ffffff"; - -enum { SchemeNorm, SchemeCol1, SchemeCol2, SchemeCol3, SchemeCol4, - SchemeCol5, SchemeCol6, SchemeSel }; /* color schemes */ - -static const char *colors[][3] = { - /* fg bg border */ - [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, - [SchemeCol1] = { col1, col_gray1, col_gray2 }, - [SchemeCol2] = { col2, col_gray1, col_gray2 }, - [SchemeCol3] = { col3, col_gray1, col_gray2 }, - [SchemeCol4] = { col4, col_gray1, col_gray2 }, - [SchemeCol5] = { col5, col_gray1, col_gray2 }, - [SchemeCol6] = { col6, col_gray1, col_gray2 }, - [SchemeSel] = { col_gray4, col_cyan, col_cyan }, -}; - -/* tagging */ -static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; - -static const Rule rules[] = { - /* xprop(1): - * WM_CLASS(STRING) = instance, class - * WM_NAME(STRING) = title - */ - /* class instance title tags mask isfloating isterminal noswallow monitor */ - { "Gimp", NULL, NULL, 0, 1, 0, 0, -1 }, - { "Firefox", NULL, NULL, 1 << 8, 0, 0, 0, -1 }, - { "st", NULL, NULL, 0, 0, 1, 0, -1 }, -}; - -/* layout(s) */ -static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ -static const int nmaster = 1; /* number of clients in master area */ -static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ -static const int attachdirection = 2; /* 0 default, 1 above, 2 aside, 3 below, 4 bottom, 5 top */ -static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ - -#define FORCE_VSPLIT 1 /* nrowgrid layout: force two clients to always split vertically */ -#include "vanitygaps.c" - -static const Layout layouts[] = { - /* symbol arrange function */ - { "[]=", tile }, /* first entry is default */ - { "[M]", monocle }, - { "[@]", spiral }, - { "[\\]", dwindle }, - { "H[]", deck }, - { "TTT", bstack }, - { "===", bstackhoriz }, - { "HHH", grid }, - { "###", nrowgrid }, - { "---", horizgrid }, - { ":::", gaplessgrid }, - { "|M|", centeredmaster }, - { ">M>", centeredfloatingmaster }, - { "><>", NULL }, /* no layout function means floating behavior */ - { NULL, NULL }, -}; - -/* key definitions */ -#define MODKEY Mod1Mask -#define TAGKEYS(KEY,TAG) \ - { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ - { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ - { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ - { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, - -/* helper for spawning shell commands in the pre dwm-5.0 fashion */ -#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } - -/* commands */ -static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ -static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL }; -static const char *termcmd[] = { "st", NULL }; - -/* -static const char *upvol[] = { "pulsemixer" , "--change-volume", "+1", NULL }; -static const char *downvol[] = { "pulsemixer" , "--change-volume", "-1", NULL }; -static const char *mutevol[] = { "pulsemixer" , "--toggle-mute", NULL }; -*/ - -static Key keys[] = { - /* modifier key function argument */ - { MODKEY, XK_p, spawn, {.v = dmenucmd } }, - { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } }, - { MODKEY, XK_b, togglebar, {0} }, - { MODKEY, XK_j, focusstack, {.i = +1 } }, - { MODKEY, XK_k, focusstack, {.i = -1 } }, - { MODKEY, XK_i, incnmaster, {.i = +1 } }, - { MODKEY, XK_d, incnmaster, {.i = -1 } }, - { MODKEY, XK_h, setmfact, {.f = -0.05} }, - { MODKEY, XK_l, setmfact, {.f = +0.05} }, - { MODKEY|ShiftMask, XK_h, setcfact, {.f = +0.25} }, - { MODKEY|ShiftMask, XK_l, setcfact, {.f = -0.25} }, - { MODKEY|ShiftMask, XK_o, setcfact, {.f = 0.00} }, - { MODKEY, XK_Return, zoom, {0} }, - { MODKEY|Mod4Mask, XK_u, incrgaps, {.i = +1 } }, - { MODKEY|Mod4Mask|ShiftMask, XK_u, incrgaps, {.i = -1 } }, - { MODKEY|Mod4Mask, XK_i, incrigaps, {.i = +1 } }, - { MODKEY|Mod4Mask|ShiftMask, XK_i, incrigaps, {.i = -1 } }, - { MODKEY|Mod4Mask, XK_o, incrogaps, {.i = +1 } }, - { MODKEY|Mod4Mask|ShiftMask, XK_o, incrogaps, {.i = -1 } }, - { MODKEY|Mod4Mask, XK_6, incrihgaps, {.i = +1 } }, - { MODKEY|Mod4Mask|ShiftMask, XK_6, incrihgaps, {.i = -1 } }, - { MODKEY|Mod4Mask, XK_7, incrivgaps, {.i = +1 } }, - { MODKEY|Mod4Mask|ShiftMask, XK_7, incrivgaps, {.i = -1 } }, - { MODKEY|Mod4Mask, XK_8, incrohgaps, {.i = +1 } }, - { MODKEY|Mod4Mask|ShiftMask, XK_8, incrohgaps, {.i = -1 } }, - { MODKEY|Mod4Mask, XK_9, incrovgaps, {.i = +1 } }, - { MODKEY|Mod4Mask|ShiftMask, XK_9, incrovgaps, {.i = -1 } }, - { MODKEY|Mod4Mask, XK_0, togglegaps, {0} }, - { MODKEY|Mod4Mask|ShiftMask, XK_0, defaultgaps, {0} }, - { MODKEY, XK_Tab, view, {0} }, - { MODKEY|ShiftMask, XK_c, killclient, {0} }, - { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, - { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, - { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, - { MODKEY, XK_space, setlayout, {0} }, - { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, - { MODKEY, XK_0, view, {.ui = ~0 } }, - { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, - { MODKEY, XK_comma, focusmon, {.i = -1 } }, - { MODKEY, XK_period, focusmon, {.i = +1 } }, - { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, - { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, - TAGKEYS( XK_1, 0) - TAGKEYS( XK_2, 1) - TAGKEYS( XK_3, 2) - TAGKEYS( XK_4, 3) - TAGKEYS( XK_5, 4) - TAGKEYS( XK_6, 5) - TAGKEYS( XK_7, 6) - TAGKEYS( XK_8, 7) - TAGKEYS( XK_9, 8) - { MODKEY|ShiftMask, XK_q, quit, {0} }, - - // https://gist.github.com/palopezv/efd34059af6126ad970940bcc6a90f2e - // In my case, these XF86XK keys are FN+F2, FN+F4, FN+F3 respectively... - /* - { 0, XF86XK_AudioLowerVolume, spawn, {.v = downvol } }, - { 0, XF86XK_AudioMute, spawn, {.v = mutevol } }, - { 0, XF86XK_AudioRaiseVolume, spawn, {.v = upvol } }, - */ - { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("pulsemixer --change-volume -1; sigdwmblocks 2") }, - { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("pulsemixer --change-volume +1; sigdwmblocks 2") }, - { 0, XF86XK_AudioMute, spawn, SHCMD("pulsemixer --toggle-mute; sigdwmblocks 2") }, - { MODKEY, XK_v, spawn, SHCMD("clipmenu") }, -}; - -/* button definitions */ -/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ -static Button buttons[] = { - /* click event mask button function argument */ - { ClkLtSymbol, 0, Button1, setlayout, {0} }, - { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, - { ClkWinTitle, 0, Button2, zoom, {0} }, - { ClkStatusText, 0, Button1, sigdwmblocks, {.i = 1} }, - { ClkStatusText, 0, Button2, sigdwmblocks, {.i = 2} }, - { ClkStatusText, 0, Button3, sigdwmblocks, {.i = 3} }, - { ClkClientWin, MODKEY, Button1, movemouse, {0} }, - { ClkClientWin, MODKEY, Button2, togglefloating, {0} }, - { ClkClientWin, MODKEY, Button3, resizemouse, {0} }, - { ClkTagBar, 0, Button1, view, {0} }, - { ClkTagBar, 0, Button3, toggleview, {0} }, - { ClkTagBar, MODKEY, Button1, tag, {0} }, - { ClkTagBar, MODKEY, Button3, toggletag, {0} }, -}; - diff --git a/drw.o b/drw.o deleted file mode 100644 index b410ae3ca662d80d497f45cc8ffc33f383ac5697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10616 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 YVxhzinstance || strstr(instance, r->instance))) { c->isterminal = r->isterminal; + c->noswallow = r->noswallow; c->isfloating = r->isfloating; c->tags |= r->tags; for (m = mons; m && m->num != r->monitor; m = m->next); @@ -525,8 +526,11 @@ attachstack(Client *c) void swallow(Client *p, Client *c) { + if (c->noswallow || c->isterminal) return; + if (c->noswallow && !swallowfloating && c->isfloating) + return; detach(c); detachstack(c); @@ -541,8 +545,8 @@ swallow(Client *p, Client *c) p->win = c->win; c->win = w; updatetitle(p); - arrange(p->mon); XMoveResizeWindow(dpy, p->win, p->x, p->y, p->w, p->h); + arrange(p->mon); configure(p); updateclientlist(); } @@ -555,12 +559,15 @@ unswallow(Client *c) free(c->swallowing); c->swallowing = NULL; + /* unfullscreen the client */ + setfullscreen(c, 0); updatetitle(c); arrange(c->mon); XMapWindow(dpy, c->win); XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); - configure(c); setclientstate(c, NormalState); + focus(NULL); + arrange(c->mon); } void @@ -632,7 +639,7 @@ cleanup(void) selmon->lt[selmon->sellt] = &foo; for (m = mons; m; m = m->next) while (m->stack) - unmanage(m->stack, 0); // XXX - unmanage swallowing windows too + unmanage(m->stack, 0); XUngrabKey(dpy, AnyKey, AnyModifier, root); while (mons) cleanupmon(mons); @@ -810,6 +817,7 @@ destroynotify(XEvent *e) if ((c = wintoclient(ev->window))) unmanage(c, 1); + else if ((c = swallowingclient(ev->window))) unmanage(c->swallowing, 1); } @@ -2035,6 +2043,8 @@ unmanage(Client *c, int destroyed) { Monitor *m = c->mon; XWindowChanges wc; + + if (c->swallowing) { unswallow(c); return; @@ -2045,7 +2055,7 @@ unmanage(Client *c, int destroyed) free(s->swallowing); s->swallowing = NULL; arrange(m); - focus(NULL); + focus(NULL); return; } @@ -2406,6 +2416,7 @@ view(const Arg *arg) pid_t winpid(Window w) { + pid_t result = 0; xcb_res_client_id_spec_t spec = {0}; @@ -2433,6 +2444,7 @@ winpid(Window w) if (result == (pid_t)-1) result = 0; + return result; } @@ -2451,7 +2463,7 @@ getparentprocess(pid_t p) fscanf(f, "%*u %*s %*c %u", &v); fclose(f); -#endif /* __linux__ */ +#endif /* __linux__*/ return (pid_t)v; } @@ -2598,10 +2610,6 @@ main(int argc, char *argv[]) die("dwm: cannot get xcb connection\n"); checkotherwm(); setup(); -#ifdef __OpenBSD__ - if (pledge("stdio rpath proc exec", NULL) == -1) - die("pledge"); -#endif /* __OpenBSD__ */ scan(); run(); cleanup(); diff --git a/dwm.o b/dwm.o deleted file mode 100644 index 81334a7d188a189c95444ecd62686adb6333212d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74128 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 YjvsG7obLL{-yQ!b@=CU;{`LI-3t_6z7XSbN diff --git a/patches/dwm-swallow-20201211-61bb8b2.diff b/patches/dwm-swallow-20201211-61bb8b2.diff new file mode 100644 index 0000000..6bc0a1f --- /dev/null +++ b/patches/dwm-swallow-20201211-61bb8b2.diff @@ -0,0 +1,412 @@ +From f0cdf40e0a7126838d051eb84d84b91421b771d6 Mon Sep 17 00:00:00 2001 +From: 0x1bi +Date: Fri, 11 Dec 2020 10:16:25 -0500 +Subject: [PATCH] fix swallow for openbsd + +--- + config.def.h | 9 +- + config.mk | 3 +- + dwm.c | 235 +++++++++++++++++++++++++++++++++++++++++++++++++-- + 3 files changed, 237 insertions(+), 10 deletions(-) + +diff --git a/config.def.h b/config.def.h +index 1c0b587..fe51476 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -3,6 +3,7 @@ + /* appearance */ + static const unsigned int borderpx = 1; /* border pixel of windows */ + static const unsigned int snap = 32; /* snap pixel */ ++static const int swallowfloating = 0; /* 1 means swallow floating windows by default */ + static const int showbar = 1; /* 0 means no bar */ + static const int topbar = 1; /* 0 means bottom bar */ + static const char *fonts[] = { "monospace:size=10" }; +@@ -26,9 +27,11 @@ static const Rule rules[] = { + * WM_CLASS(STRING) = instance, class + * WM_NAME(STRING) = title + */ +- /* class instance title tags mask isfloating monitor */ +- { "Gimp", NULL, NULL, 0, 1, -1 }, +- { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, ++ /* class instance title tags mask isfloating isterminal noswallow monitor */ ++ { "Gimp", NULL, NULL, 0, 1, 0, 0, -1 }, ++ { "Firefox", NULL, NULL, 1 << 8, 0, 0, -1, -1 }, ++ { "St", NULL, NULL, 0, 0, 1, 0, -1 }, ++ { NULL, NULL, "Event Tester", 0, 0, 0, 1, -1 }, /* xev */ + }; + + /* layout(s) */ +diff --git a/config.mk b/config.mk +index 7084c33..ff9e508 100644 +--- a/config.mk ++++ b/config.mk +@@ -19,10 +19,11 @@ FREETYPELIBS = -lfontconfig -lXft + FREETYPEINC = /usr/include/freetype2 + # OpenBSD (uncomment) + #FREETYPEINC = ${X11INC}/freetype2 ++#KVMLIB = -lkvm + + # includes and libs + INCS = -I${X11INC} -I${FREETYPEINC} +-LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} ++LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lX11-xcb -lxcb -lxcb-res ${KVMLIB} + + # flags + CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=200809L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} +diff --git a/dwm.c b/dwm.c +index 664c527..0b20086 100644 +--- a/dwm.c ++++ b/dwm.c +@@ -40,6 +40,12 @@ + #include + #endif /* XINERAMA */ + #include ++#include ++#include ++#ifdef __OpenBSD__ ++#include ++#include ++#endif /* __OpenBSD */ + + #include "drw.h" + #include "util.h" +@@ -92,9 +98,11 @@ struct Client { + int basew, baseh, incw, inch, maxw, maxh, minw, minh; + int bw, oldbw; + unsigned int tags; +- int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; ++ int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, isterminal, noswallow; ++ pid_t pid; + Client *next; + Client *snext; ++ Client *swallowing; + Monitor *mon; + Window win; + }; +@@ -138,6 +146,8 @@ typedef struct { + const char *title; + unsigned int tags; + int isfloating; ++ int isterminal; ++ int noswallow; + int monitor; + } Rule; + +@@ -235,6 +245,12 @@ static int xerrordummy(Display *dpy, XErrorEvent *ee); + static int xerrorstart(Display *dpy, XErrorEvent *ee); + static void zoom(const Arg *arg); + ++static pid_t getparentprocess(pid_t p); ++static int isdescprocess(pid_t p, pid_t c); ++static Client *swallowingclient(Window w); ++static Client *termforwin(const Client *c); ++static pid_t winpid(Window w); ++ + /* variables */ + static const char broken[] = "broken"; + static char stext[256]; +@@ -269,6 +285,8 @@ static Drw *drw; + static Monitor *mons, *selmon; + static Window root, wmcheckwin; + ++static xcb_connection_t *xcon; ++ + /* configuration, allows nested code to access above variables */ + #include "config.h" + +@@ -298,6 +316,8 @@ applyrules(Client *c) + && (!r->class || strstr(class, r->class)) + && (!r->instance || strstr(instance, r->instance))) + { ++ c->isterminal = r->isterminal; ++ c->noswallow = r->noswallow; + c->isfloating = r->isfloating; + c->tags |= r->tags; + for (m = mons; m && m->num != r->monitor; m = m->next); +@@ -414,6 +434,53 @@ attachstack(Client *c) + c->mon->stack = c; + } + ++void ++swallow(Client *p, Client *c) ++{ ++ ++ if (c->noswallow || c->isterminal) ++ return; ++ if (c->noswallow && !swallowfloating && c->isfloating) ++ return; ++ ++ detach(c); ++ detachstack(c); ++ ++ setclientstate(c, WithdrawnState); ++ XUnmapWindow(dpy, p->win); ++ ++ p->swallowing = c; ++ c->mon = p->mon; ++ ++ Window w = p->win; ++ p->win = c->win; ++ c->win = w; ++ updatetitle(p); ++ XMoveResizeWindow(dpy, p->win, p->x, p->y, p->w, p->h); ++ arrange(p->mon); ++ configure(p); ++ updateclientlist(); ++} ++ ++void ++unswallow(Client *c) ++{ ++ c->win = c->swallowing->win; ++ ++ free(c->swallowing); ++ c->swallowing = NULL; ++ ++ /* unfullscreen the client */ ++ setfullscreen(c, 0); ++ updatetitle(c); ++ arrange(c->mon); ++ XMapWindow(dpy, c->win); ++ XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); ++ setclientstate(c, NormalState); ++ focus(NULL); ++ arrange(c->mon); ++} ++ + void + buttonpress(XEvent *e) + { +@@ -653,6 +720,9 @@ destroynotify(XEvent *e) + + if ((c = wintoclient(ev->window))) + unmanage(c, 1); ++ ++ else if ((c = swallowingclient(ev->window))) ++ unmanage(c->swallowing, 1); + } + + void +@@ -1018,12 +1088,13 @@ killclient(const Arg *arg) + void + manage(Window w, XWindowAttributes *wa) + { +- Client *c, *t = NULL; ++ Client *c, *t = NULL, *term = NULL; + Window trans = None; + XWindowChanges wc; + + c = ecalloc(1, sizeof(Client)); + c->win = w; ++ c->pid = winpid(w); + /* geometry */ + c->x = c->oldx = wa->x; + c->y = c->oldy = wa->y; +@@ -1038,6 +1109,7 @@ manage(Window w, XWindowAttributes *wa) + } else { + c->mon = selmon; + applyrules(c); ++ term = termforwin(c); + } + + if (c->x + WIDTH(c) > c->mon->mx + c->mon->mw) +@@ -1074,6 +1146,8 @@ manage(Window w, XWindowAttributes *wa) + c->mon->sel = c; + arrange(c->mon); + XMapWindow(dpy, c->win); ++ if (term) ++ swallow(term, c); + focus(NULL); + } + +@@ -1768,6 +1842,20 @@ unmanage(Client *c, int destroyed) + Monitor *m = c->mon; + XWindowChanges wc; + ++ if (c->swallowing) { ++ unswallow(c); ++ return; ++ } ++ ++ Client *s = swallowingclient(c->win); ++ if (s) { ++ free(s->swallowing); ++ s->swallowing = NULL; ++ arrange(m); ++ focus(NULL); ++ return; ++ } ++ + detach(c); + detachstack(c); + if (!destroyed) { +@@ -1782,9 +1870,12 @@ unmanage(Client *c, int destroyed) + XUngrabServer(dpy); + } + free(c); +- focus(NULL); +- updateclientlist(); +- arrange(m); ++ ++ if (!s) { ++ arrange(m); ++ focus(NULL); ++ updateclientlist(); ++ } + } + + void +@@ -2047,6 +2138,136 @@ view(const Arg *arg) + arrange(selmon); + } + ++pid_t ++winpid(Window w) ++{ ++ ++ pid_t result = 0; ++ ++#ifdef __linux__ ++ xcb_res_client_id_spec_t spec = {0}; ++ spec.client = w; ++ spec.mask = XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID; ++ ++ xcb_generic_error_t *e = NULL; ++ xcb_res_query_client_ids_cookie_t c = xcb_res_query_client_ids(xcon, 1, &spec); ++ xcb_res_query_client_ids_reply_t *r = xcb_res_query_client_ids_reply(xcon, c, &e); ++ ++ if (!r) ++ return (pid_t)0; ++ ++ xcb_res_client_id_value_iterator_t i = xcb_res_query_client_ids_ids_iterator(r); ++ for (; i.rem; xcb_res_client_id_value_next(&i)) { ++ spec = i.data->spec; ++ if (spec.mask & XCB_RES_CLIENT_ID_MASK_LOCAL_CLIENT_PID) { ++ uint32_t *t = xcb_res_client_id_value_value(i.data); ++ result = *t; ++ break; ++ } ++ } ++ ++ free(r); ++ ++ if (result == (pid_t)-1) ++ result = 0; ++ ++#endif /* __linux__ */ ++ ++#ifdef __OpenBSD__ ++ Atom type; ++ int format; ++ unsigned long len, bytes; ++ unsigned char *prop; ++ pid_t ret; ++ ++ if (XGetWindowProperty(dpy, w, XInternAtom(dpy, "_NET_WM_PID", 0), 0, 1, False, AnyPropertyType, &type, &format, &len, &bytes, &prop) != Success || !prop) ++ return 0; ++ ++ ret = *(pid_t*)prop; ++ XFree(prop); ++ result = ret; ++ ++#endif /* __OpenBSD__ */ ++ return result; ++} ++ ++pid_t ++getparentprocess(pid_t p) ++{ ++ unsigned int v = 0; ++ ++#ifdef __linux__ ++ FILE *f; ++ char buf[256]; ++ snprintf(buf, sizeof(buf) - 1, "/proc/%u/stat", (unsigned)p); ++ ++ if (!(f = fopen(buf, "r"))) ++ return 0; ++ ++ fscanf(f, "%*u %*s %*c %u", &v); ++ fclose(f); ++#endif /* __linux__*/ ++ ++#ifdef __OpenBSD__ ++ int n; ++ kvm_t *kd; ++ struct kinfo_proc *kp; ++ ++ kd = kvm_openfiles(NULL, NULL, NULL, KVM_NO_FILES, NULL); ++ if (!kd) ++ return 0; ++ ++ kp = kvm_getprocs(kd, KERN_PROC_PID, p, sizeof(*kp), &n); ++ v = kp->p_ppid; ++#endif /* __OpenBSD__ */ ++ ++ return (pid_t)v; ++} ++ ++int ++isdescprocess(pid_t p, pid_t c) ++{ ++ while (p != c && c != 0) ++ c = getparentprocess(c); ++ ++ return (int)c; ++} ++ ++Client * ++termforwin(const Client *w) ++{ ++ Client *c; ++ Monitor *m; ++ ++ if (!w->pid || w->isterminal) ++ return NULL; ++ ++ for (m = mons; m; m = m->next) { ++ for (c = m->clients; c; c = c->next) { ++ if (c->isterminal && !c->swallowing && c->pid && isdescprocess(c->pid, w->pid)) ++ return c; ++ } ++ } ++ ++ return NULL; ++} ++ ++Client * ++swallowingclient(Window w) ++{ ++ Client *c; ++ Monitor *m; ++ ++ for (m = mons; m; m = m->next) { ++ for (c = m->clients; c; c = c->next) { ++ if (c->swallowing && c->swallowing->win == w) ++ return c; ++ } ++ } ++ ++ return NULL; ++} ++ + Client * + wintoclient(Window w) + { +@@ -2138,10 +2359,12 @@ main(int argc, char *argv[]) + fputs("warning: no locale support\n", stderr); + if (!(dpy = XOpenDisplay(NULL))) + die("dwm: cannot open display"); ++ if (!(xcon = XGetXCBConnection(dpy))) ++ die("dwm: cannot get xcb connection\n"); + checkotherwm(); + setup(); + #ifdef __OpenBSD__ +- if (pledge("stdio rpath proc exec", NULL) == -1) ++ if (pledge("stdio rpath proc exec ps", NULL) == -1) + die("pledge"); + #endif /* __OpenBSD__ */ + scan(); +-- +2.28.0 + diff --git a/util.o b/util.o deleted file mode 100644 index 5dee2d71351881ac743ab3aad98bf048e9418476..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2256 zcmbuAO-vI(6vtl+O2yJv;DEtH538XGZdwu}sY(hISal;sYD6xzv|DNHm)orYH4!5o znx+W{4<0;l@M7Y@M2{vkdhp88lXx`210FmWOzL~PGceh-7k$a(z4^WWo0*-N-F-Zz zPCFeA;O2laIP7r>5Ib@hN6at+9_WF2rMj;?`SA^rQZ=Mer5cwaN>!BpBBfT~Kd#Pdi57IXJv{LIlJ%oXR0}h26 zO6?MMu=iD|uSv?E)yZa}*iFN_B@8>@pKd z4WqS39nEm1Z_AH)lZKk6+wI=!=4gxd#-wvr;j>1?t<=pGnPBl#Dw)d_Q(=Ia$;q&P zXy)3DfIk$JM`T(HbYk;kqwT~LIKj~%#`oO8`p1xw^;-@c53Yk_#pf7wceyrDJb?TZ z%l#%l?(sc!Uh(X)+$hVPWVxFj7bC45&EE+>o2{}P2dg{GTB8YJ*ZOBew z^D&L+=s8+(xeY(xhL5%3(Kh^Q8y-VW>*wn>_Yc`z8$DEvY)(#rtWE|YozEzq;)(e9ggTXg`+BG?n{j$BYFzKfn2hw)xLsrc=lr}tF0bZ|)$C<c4h$Z5=ftq)->jX8o%G(JCHFVFG$xsPCiV)J9mMd%lqpif{F@;dG> z3rv*exj=+1w6~Dadnw*kDk-sg`?~DUa}Tv7wbyU5dip+zX0Oj-veo%-5=7(k)A`eT z%