patched windowmap

This commit is contained in:
tavo-wasd 2024-05-02 21:41:12 -06:00
parent 2db17b48e3
commit 4d52a0a8a6

View file

@ -8,10 +8,11 @@ dwm-movestack-20211115-a786211.diff
dwm-fullgaps-6.4.diff
dwm-attachbottom-6.3.diff
dwm-alwayscenter-20200625-f04cac6.diff
dwm-windowmap-20221026.diff
---
diff '--color=auto' -Nu a/config.def.h b/config.def.h
--- a/config.def.h 2024-03-19 05:24:52.000000000 -0600
+++ b/config.def.h 2024-04-28 21:58:33.535704620 -0600
+++ b/config.def.h 2024-05-02 21:39:10.483748489 -0600
@@ -2,7 +2,9 @@
/* appearance */
@ -74,18 +75,18 @@ diff '--color=auto' -Nu a/config.def.h b/config.def.h
{ ClkClientWin, MODKEY, Button2, togglefloating, {0} },
diff '--color=auto' -Nu a/config.h b/config.h
--- a/config.h 1969-12-31 18:00:00.000000000 -0600
+++ b/config.h 2024-04-28 22:01:48.845590861 -0600
@@ -0,0 +1,172 @@
+++ b/config.h 2024-05-02 21:39:10.483748489 -0600
@@ -0,0 +1,170 @@
+/* See LICENSE file for copyright and license details. */
+#include <X11/XF86keysym.h>
+
+/* appearance */
+static const unsigned int borderpx = 2; /* border pixel of windows */
+static const unsigned int gappx = 5; /* gaps between windows */
+static const unsigned int gappx = 15; /* gaps between windows */
+static const unsigned int snap = 5; /* 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 int topbar = 0; /* 0 means bottom bar */
+static const char *fonts[] = { "JetBrainsMono:bold:size=10" };
+static const char dmenufont[] = "JetBrainsMono:bold:size=10";
+static const char col_gray1[] = "#222222";
@ -94,16 +95,14 @@ diff '--color=auto' -Nu a/config.h b/config.h
+static const char col_gray4[] = "#eeeeee";
+static const char col_cyan[] = "#005577";
+/* custom colors */
+static const char col_light[] = "#689d6a";
+static const char col_light[] = "#fabd2f";
+static const char col_dark[] = "#1d2021";
+static const char col_main_light[] = "#fabd2f";
+static const char col_main_dark[] = "#1d2021";
+static const char col_main_contr[] = "#012b27";
+static const char col_black[] = "#000000";
+static const char *colors[][3] = {
+/* --------------- */
+ /* fg bg border */
+ [SchemeNorm] = { col_light, col_main_contr, col_main_dark },
+ [SchemeSel] = { col_dark, col_main_light, col_main_light },
+ [SchemeNorm] = { col_dark, col_black, col_dark },
+ [SchemeSel] = { col_dark, col_light, col_light },
+};
+
+/* tagging */
@ -114,14 +113,14 @@ diff '--color=auto' -Nu a/config.h b/config.h
+ * WM_CLASS(STRING) = instance, class
+ * WM_NAME(STRING) = title
+ */
+ /* class instance title tags mask isfloating isterminal noswallow monitor */
+ /* class instance title tags mask isfloating isterminal noswallow monitor */
+ { "st", NULL, NULL, 0, 0, 1, 0, -1 },
+ { "Display-im6.q16", NULL, NULL, 0, 1, 1, 0, -1 },
+ { NULL, NULL, "Event Tester", 0, 0, 0, 1, -1 }, /* xev */
+};
+
+/* layout(s) */
+static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */
+static const float mfact = 0.50; /* 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 lockfullscreen = 1; /* 1 will force focus on the fullscreen window */
@ -250,7 +249,7 @@ diff '--color=auto' -Nu a/config.h b/config.h
+
diff '--color=auto' -Nu a/config.mk b/config.mk
--- a/config.mk 2024-03-19 05:24:52.000000000 -0600
+++ b/config.mk 2024-04-28 21:58:33.535704620 -0600
+++ b/config.mk 2024-05-02 21:39:10.483748489 -0600
@@ -20,10 +20,11 @@
# OpenBSD (uncomment)
#FREETYPEINC = ${X11INC}/freetype2
@ -266,7 +265,7 @@ diff '--color=auto' -Nu a/config.mk b/config.mk
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
diff '--color=auto' -Nu a/dwm.c b/dwm.c
--- a/dwm.c 2024-03-19 05:24:52.000000000 -0600
+++ b/dwm.c 2024-04-28 21:58:33.535704620 -0600
+++ b/dwm.c 2024-05-02 21:39:10.487748219 -0600
@@ -40,6 +40,12 @@
#include <X11/extensions/Xinerama.h>
#endif /* XINERAMA */
@ -375,15 +374,18 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg);
static void unfocus(Client *c, int setfocus);
@@ -227,6 +244,7 @@
@@ -227,6 +244,10 @@
static void updatewindowtype(Client *c);
static void updatewmhints(Client *c);
static void view(const Arg *arg);
+static void warp(const Client *c);
+static void window_set_state(Display *dpy, Window win, long state);
+static void window_map(Display *dpy, Client *c, int deiconify);
+static void window_unmap(Display *dpy, Window win, Window root, int iconify);
static Client *wintoclient(Window w);
static Monitor *wintomon(Window w);
static int xerror(Display *dpy, XErrorEvent *ee);
@@ -234,6 +252,12 @@
@@ -234,6 +255,12 @@
static int xerrorstart(Display *dpy, XErrorEvent *ee);
static void zoom(const Arg *arg);
@ -396,7 +398,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
/* variables */
static const char broken[] = "broken";
static char stext[256];
@@ -268,9 +292,20 @@
@@ -268,9 +295,20 @@
static Monitor *mons, *selmon;
static Window root, wmcheckwin;
@ -417,7 +419,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
/* compile-time check if all tags fit into an unsigned int bit array. */
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
@@ -297,6 +332,8 @@
@@ -297,6 +335,8 @@
&& (!r->class || strstr(class, r->class))
&& (!r->instance || strstr(instance, r->instance)))
{
@ -426,7 +428,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
c->isfloating = r->isfloating;
c->tags |= r->tags;
for (m = mons; m && m->num != r->monitor; m = m->next);
@@ -409,6 +446,15 @@
@@ -409,6 +449,15 @@
}
void
@ -442,7 +444,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
attachstack(Client *c)
{
c->snext = c->mon->stack;
@@ -416,6 +462,53 @@
@@ -416,6 +465,53 @@
}
void
@ -496,7 +498,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
buttonpress(XEvent *e)
{
unsigned int i, x, click;
@@ -441,10 +534,8 @@
@@ -441,10 +537,8 @@
arg.ui = 1 << i;
} else if (ev->x < x + TEXTW(selmon->ltsymbol))
click = ClkLtSymbol;
@ -508,7 +510,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
} else if ((c = wintoclient(ev->window))) {
focus(c);
restack(selmon);
@@ -525,6 +616,10 @@
@@ -525,6 +619,10 @@
|| cme->data.l[2] == netatom[NetWMFullscreen])
setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */
|| (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen)));
@ -519,7 +521,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
} else if (cme->message_type == netatom[NetActiveWindow]) {
if (c != selmon->sel && !c->isurgent)
seturgent(c, 1);
@@ -634,6 +729,7 @@
@@ -634,6 +732,7 @@
createmon(void)
{
Monitor *m;
@ -527,7 +529,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
m = ecalloc(1, sizeof(Monitor));
m->tagset[0] = m->tagset[1] = 1;
@@ -641,9 +737,24 @@
@@ -641,9 +740,24 @@
m->nmaster = nmaster;
m->showbar = showbar;
m->topbar = topbar;
@ -552,7 +554,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
return m;
}
@@ -655,6 +766,9 @@
@@ -655,6 +769,9 @@
if ((c = wintoclient(ev->window)))
unmanage(c, 1);
@ -562,7 +564,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
}
void
@@ -735,15 +849,8 @@
@@ -735,15 +852,8 @@
x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
if ((w = m->ww - tw - x) > bh) {
@ -578,7 +580,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
}
drw_map(drw, m->barwin, 0, 0, m->ww, bh);
}
@@ -833,6 +940,7 @@
@@ -833,6 +943,7 @@
unfocus(selmon->sel, 0);
selmon = m;
focus(NULL);
@ -586,7 +588,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
}
void
@@ -980,7 +1088,7 @@
@@ -980,7 +1091,7 @@
void
incnmaster(const Arg *arg)
{
@ -595,7 +597,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
arrange(selmon);
}
@@ -1031,12 +1139,13 @@
@@ -1031,12 +1142,13 @@
void
manage(Window w, XWindowAttributes *wa)
{
@ -610,7 +612,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
/* geometry */
c->x = c->oldx = wa->x;
c->y = c->oldy = wa->y;
@@ -1051,6 +1160,7 @@
@@ -1051,6 +1163,7 @@
} else {
c->mon = selmon;
applyrules(c);
@ -618,7 +620,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
}
if (c->x + WIDTH(c) > c->mon->wx + c->mon->ww)
@@ -1068,13 +1178,15 @@
@@ -1068,13 +1181,15 @@
updatewindowtype(c);
updatesizehints(c);
updatewmhints(c);
@ -635,7 +637,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
attachstack(c);
XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend,
(unsigned char *) &(c->win), 1);
@@ -1085,6 +1197,8 @@
@@ -1085,6 +1200,8 @@
c->mon->sel = c;
arrange(c->mon);
XMapWindow(dpy, c->win);
@ -644,7 +646,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
focus(NULL);
}
@@ -1245,11 +1359,8 @@
@@ -1245,11 +1362,8 @@
drawbars();
break;
}
@ -657,7 +659,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
if (ev->atom == netatom[NetWMWindowType])
updatewindowtype(c);
}
@@ -1375,6 +1486,8 @@
@@ -1375,6 +1489,8 @@
wc.sibling = c->win;
}
}
@ -666,7 +668,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
XSync(dpy, False);
while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
}
@@ -1427,7 +1540,7 @@
@@ -1427,7 +1543,7 @@
detachstack(c);
c->mon = m;
c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */
@ -675,7 +677,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
attachstack(c);
focus(NULL);
arrange(NULL);
@@ -1508,12 +1621,39 @@
@@ -1508,12 +1624,39 @@
}
void
@ -717,7 +719,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol);
if (selmon->sel)
arrange(selmon);
@@ -1532,7 +1672,7 @@
@@ -1532,7 +1675,7 @@
f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0;
if (f < 0.05 || f > 0.95)
return;
@ -726,7 +728,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
arrange(selmon);
}
@@ -1576,6 +1716,7 @@
@@ -1576,6 +1719,7 @@
netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
netatom[NetWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
@ -734,7 +736,24 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False);
netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False);
netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
@@ -1697,25 +1838,25 @@
@@ -1633,14 +1777,12 @@
return;
if (ISVISIBLE(c)) {
/* show clients top down */
- XMoveWindow(dpy, c->win, c->x, c->y);
- if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && !c->isfullscreen)
- resize(c, c->x, c->y, c->w, c->h, 0);
+ window_map(dpy, c, 1);
showhide(c->snext);
} else {
/* hide clients bottom up */
showhide(c->snext);
- XMoveWindow(dpy, c->win, WIDTH(c) * -2, c->y);
+ window_unmap(dpy, c->win, root, 1);
}
}
@@ -1697,25 +1839,25 @@
if (n > m->nmaster)
mw = m->nmaster ? m->ww * m->mfact : 0;
else
@ -772,7 +791,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
updatebarpos(selmon);
XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh);
arrange(selmon);
@@ -1736,6 +1877,15 @@
@@ -1736,6 +1878,15 @@
}
void
@ -788,7 +807,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
toggletag(const Arg *arg)
{
unsigned int newtags;
@@ -1754,9 +1904,33 @@
@@ -1754,9 +1905,33 @@
toggleview(const Arg *arg)
{
unsigned int newtagset = selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK);
@ -822,7 +841,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
focus(NULL);
arrange(selmon);
}
@@ -1781,6 +1955,20 @@
@@ -1781,6 +1956,20 @@
Monitor *m = c->mon;
XWindowChanges wc;
@ -843,7 +862,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
detach(c);
detachstack(c);
if (!destroyed) {
@@ -1796,9 +1984,12 @@
@@ -1796,9 +1985,12 @@
XUngrabServer(dpy);
}
free(c);
@ -859,7 +878,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
}
void
@@ -1916,6 +2107,7 @@
@@ -1916,6 +2108,7 @@
detachstack(c);
c->mon = mons;
attach(c);
@ -867,7 +886,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
attachstack(c);
}
if (m == selmon)
@@ -2025,10 +2217,13 @@
@@ -2025,10 +2218,13 @@
Atom state = getatomprop(c, netatom[NetWMState]);
Atom wtype = getatomprop(c, netatom[NetWMWindowType]);
@ -885,8 +904,55 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
}
void
@@ -2053,15 +2248,193 @@
@@ -2051,17 +2247,240 @@
}
void
+window_set_state(Display *dpy, Window win, long state)
+{
+ long data[] = { state, None };
+
+ XChangeProperty(dpy, win, wmatom[WMState], wmatom[WMState], 32,
+ PropModeReplace, (unsigned char*)data, 2);
+}
+
+void
+window_map(Display *dpy, Client *c, int deiconify)
+{
+ Window win = c->win;
+
+ if (deiconify)
+ window_set_state(dpy, win, NormalState);
+
+ XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
+ XSetInputFocus(dpy, win, RevertToPointerRoot, CurrentTime);
+ XMapWindow(dpy, win);
+}
+
+void
+window_unmap(Display *dpy, Window win, Window root, int iconify)
+{
+ static XWindowAttributes ca, ra;
+
+ XGrabServer(dpy);
+ XGetWindowAttributes(dpy, root, &ra);
+ XGetWindowAttributes(dpy, win, &ca);
+
+ /* Prevent UnmapNotify events */
+ XSelectInput(dpy, root, ra.your_event_mask & ~SubstructureNotifyMask);
+ XSelectInput(dpy, win, ca.your_event_mask & ~StructureNotifyMask);
+
+ XUnmapWindow(dpy, win);
+
+ if (iconify)
+ window_set_state(dpy, win, IconicState);
+
+ XSelectInput(dpy, root, ra.your_event_mask);
+ XSelectInput(dpy, win, ca.your_event_mask);
+ XUngrabServer(dpy);
+}
+
+void
view(const Arg *arg)
{
+ int i;
@ -1080,7 +1146,7 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
Client *
wintoclient(Window w)
{
@@ -2151,10 +2524,12 @@
@@ -2151,10 +2570,12 @@
fputs("warning: no locale support\n", stderr);
if (!(dpy = XOpenDisplay(NULL)))
die("dwm: cannot open display");
@ -1094,14 +1160,14 @@ diff '--color=auto' -Nu a/dwm.c b/dwm.c
die("pledge");
#endif /* __OpenBSD__ */
scan();
@@ -2163,3 +2538,4 @@
@@ -2163,3 +2584,4 @@
XCloseDisplay(dpy);
return EXIT_SUCCESS;
}
+
diff '--color=auto' -Nu a/movestack.c b/movestack.c
--- a/movestack.c 1969-12-31 18:00:00.000000000 -0600
+++ b/movestack.c 2024-04-28 21:58:33.535704620 -0600
+++ b/movestack.c 2024-05-02 21:39:10.487748219 -0600
@@ -0,0 +1,48 @@
+void
+movestack(const Arg *arg) {