diff options
| author | tslil clingman <tslil@posteo.de> | 2023-02-14 20:34:12 +0100 |
|---|---|---|
| committer | tslil clingman <tslil@posteo.de> | 2023-02-14 20:34:54 +0100 |
| commit | 819d795ba8472cc0c5b9f1f58fd4422d8c41ec71 (patch) | |
| tree | 72fc3a44b7e654c2d7f83b32f52fdb205b8aa11d /dwl-0.4/pertag.patch | |
| parent | e9d8f093021dc416a5c790e2161d047426db2592 (diff) | |
[dwl] merge main, fix pertag/view(0), rule can prevent client focus
Diffstat (limited to 'dwl-0.4/pertag.patch')
| -rw-r--r-- | dwl-0.4/pertag.patch | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/dwl-0.4/pertag.patch b/dwl-0.4/pertag.patch deleted file mode 100644 index d762efa..0000000 --- a/dwl-0.4/pertag.patch +++ /dev/null @@ -1,162 +0,0 @@ -From d8415ff1f2a8bd347cfcae334815eac1589ee069 Mon Sep 17 00:00:00 2001 -From: Guido Cella <guido@guidocella.xyz> -Date: Sun, 20 Mar 2022 21:22:13 +0100 -Subject: [PATCH] Port pertag - ---- - dwl.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- - 1 file changed, 73 insertions(+), 5 deletions(-) - -diff --git a/dwl.c b/dwl.c -index b4fa1efe..8f0bb0df 100644 ---- a/dwl.c -+++ b/dwl.c -@@ -88,6 +88,7 @@ typedef struct { - const Arg arg; - } Button; - -+typedef struct Pertag Pertag; - typedef struct Monitor Monitor; - typedef struct { - /* Must keep these three elements in this order */ -@@ -177,6 +178,7 @@ struct Monitor { - struct wlr_box w; /* window area, layout-relative */ - struct wl_list layers[4]; /* LayerSurface::link */ - const Layout *lt[2]; -+ Pertag *pertag; - unsigned int seltags; - unsigned int sellt; - unsigned int tagset[2]; -@@ -377,6 +379,14 @@ static Atom netatom[NetLast]; - /* attempt to encapsulate suck into one file */ - #include "client.h" - -+struct Pertag { -+ unsigned int curtag, prevtag; /* current and previous tag */ -+ int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */ -+ float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */ -+ unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */ -+ const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes */ -+}; -+ - /* compile-time check if all tags fit into an unsigned int bit array. */ - struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; - -@@ -974,6 +984,18 @@ createmon(struct wl_listener *listener, void *data) - wl_list_insert(&mons, &m->link); - printstatus(); - -+ m->pertag = calloc(1, sizeof(Pertag)); -+ m->pertag->curtag = m->pertag->prevtag = 1; -+ -+ for (i = 0; i <= LENGTH(tags); i++) { -+ m->pertag->nmasters[i] = m->nmaster; -+ m->pertag->mfacts[i] = m->mfact; -+ -+ m->pertag->ltidxs[i][0] = m->lt[0]; -+ m->pertag->ltidxs[i][1] = m->lt[1]; -+ m->pertag->sellts[i] = m->sellt; -+ } -+ - /* Adds this to the output layout in the order it was configured in. - * - * The output layout utility automatically adds a wl_output global to the -@@ -1283,7 +1305,7 @@ incnmaster(const Arg *arg) - { - if (!arg || !selmon) - return; -- selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); -+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag] = MAX(selmon->nmaster + arg->i, 0); - arrange(selmon); - } - -@@ -1973,9 +1995,9 @@ setlayout(const Arg *arg) - if (!selmon) - return; - if (!arg || !arg->v || arg->v != selmon->lt[selmon->sellt]) -- selmon->sellt ^= 1; -+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag] ^= 1; - if (arg && arg->v) -- selmon->lt[selmon->sellt] = (Layout *)arg->v; -+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt] = (Layout *)arg->v; - /* TODO change layout symbol? */ - arrange(selmon); - printstatus(); -@@ -1992,7 +2014,7 @@ setmfact(const Arg *arg) - f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; - if (f < 0.1 || f > 0.9) - return; -- selmon->mfact = f; -+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f; - arrange(selmon); - } - -@@ -2348,9 +2370,30 @@ void - toggleview(const Arg *arg) - { - unsigned int newtagset = selmon ? selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK) : 0; -+ size_t i; - - if (newtagset) { - selmon->tagset[selmon->seltags] = newtagset; -+ -+ if (newtagset == ~0) { -+ selmon->pertag->prevtag = selmon->pertag->curtag; -+ selmon->pertag->curtag = 0; -+ } -+ -+ /* test if the user did not select the same tag */ -+ if (!(newtagset & 1 << (selmon->pertag->curtag - 1))) { -+ selmon->pertag->prevtag = selmon->pertag->curtag; -+ for (i = 0; !(newtagset & 1 << i); i++) ; -+ selmon->pertag->curtag = i + 1; -+ } -+ -+ /* apply settings for this view */ -+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; -+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; -+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; -+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; -+ selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; -+ - focusclient(focustop(selmon), 1); - arrange(selmon); - } -@@ -2468,11 +2511,36 @@ urgent(struct wl_listener *listener, void *data) - void - view(const Arg *arg) - { -+ size_t i, tmptag; -+ - if (!selmon || (arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) - return; -+ -+ if ((arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) -+ - selmon->seltags ^= 1; /* toggle sel tagset */ -- if (arg->ui & TAGMASK) -+ if (arg->ui & TAGMASK) { - selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; -+ selmon->pertag->prevtag = selmon->pertag->curtag; -+ -+ if (arg->ui == ~0) -+ selmon->pertag->curtag = 0; -+ else { -+ for (i = 0; !(arg->ui & 1 << i); i++) ; -+ selmon->pertag->curtag = i + 1; -+ } -+ } else { -+ tmptag = selmon->pertag->prevtag; -+ selmon->pertag->prevtag = selmon->pertag->curtag; -+ selmon->pertag->curtag = tmptag; -+ } -+ -+ selmon->nmaster = selmon->pertag->nmasters[selmon->pertag->curtag]; -+ selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag]; -+ selmon->sellt = selmon->pertag->sellts[selmon->pertag->curtag]; -+ selmon->lt[selmon->sellt] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt]; -+ selmon->lt[selmon->sellt^1] = selmon->pertag->ltidxs[selmon->pertag->curtag][selmon->sellt^1]; -+ - focusclient(focustop(selmon), 1); - arrange(selmon); - printstatus(); |
