diff --git a/config.def.h b/config.def.h index be4e9e8..9f682c7 100644 --- a/config.def.h +++ b/config.def.h @@ -674,9 +674,6 @@ static const int decorhints = 1; /* 1 means respect decoration hints */ #define FORCE_VSPLIT 1 #endif -/* Position of the monocle layout in the layouts variable, used by warp and fullscreen patches */ -#define MONOCLE_LAYOUT_POS 2 - #if FLEXTILE_DELUXE_LAYOUT static const Layout layouts[] = { /* symbol arrange function, { nmaster, nstack, layout, master axis, stack axis, secondary stack axis } */ diff --git a/dwm.c b/dwm.c index adf6853..ad63384 100644 --- a/dwm.c +++ b/dwm.c @@ -2591,6 +2591,9 @@ restack(Monitor *m) Client *c; XEvent ev; XWindowChanges wc; + #if WARP_PATCH && FLEXTILE_DELUXE_LAYOUT + int n; + #endif // WARP_PATCH drawbar(m); if (!m->sel) @@ -2608,8 +2611,21 @@ restack(Monitor *m) } XSync(dpy, False); while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); - #if WARP_PATCH - if (m == selmon && (m->tagset[m->seltags] & m->sel->tags) && selmon->lt[selmon->sellt] != &layouts[MONOCLE_LAYOUT_POS]) + #if WARP_PATCH && (FLEXTILE_DELUXE_LAYOUT || MONOCLE_LAYOUT) + #if FLEXTILE_DELUXE_LAYOUT + for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + #endif // FLEXTILE_DELUXE_LAYOUT + if (m == selmon && (m->tagset[m->seltags] & m->sel->tags) && ( + #if MONOCLE_LAYOUT && FLEXTILE_DELUXE_LAYOUT + (m->lt[m->sellt]->arrange != &monocle + && !(m->ltaxis[MASTER] == MONOCLE && (abs(m->ltaxis[LAYOUT] == NO_SPLIT || !m->nmaster || n <= m->nmaster)))) + #elif MONOCLE_LAYOUT + m->lt[m->sellt]->arrange == &monocle + #else + !(m->ltaxis[MASTER] == MONOCLE && (abs(m->ltaxis[LAYOUT] == NO_SPLIT || !m->nmaster || n <= m->nmaster))) + #endif // FLEXTILE_DELUXE_LAYOUT + || m->sel->isfloating) + ) warp(m->sel); #endif // WARP_PATCH } diff --git a/patch/fullscreen.c b/patch/fullscreen.c index ac50f37..f0f2726 100644 --- a/patch/fullscreen.c +++ b/patch/fullscreen.c @@ -3,9 +3,11 @@ Layout *last_layout; void fullscreen(const Arg *arg) { + int monocle_pos; if (selmon->showbar || last_layout == NULL) { + for (monocle_pos = 0, last_layout = (Layout *)layouts; !last_layout->arrange || last_layout->arrange != &monocle; monocle_pos++, last_layout++ ); for (last_layout = (Layout *)layouts; last_layout != selmon->lt[selmon->sellt]; last_layout++); - setlayout(&((Arg) { .v = &layouts[MONOCLE_LAYOUT_POS] })); + setlayout(&((Arg) { .v = &layouts[monocle_pos] })); } else { setlayout(&((Arg) { .v = last_layout })); } diff --git a/patch/warp.c b/patch/warp.c index 1cbf4b9..acc69f8 100644 --- a/patch/warp.c +++ b/patch/warp.c @@ -4,21 +4,21 @@ warp(const Client *c) int x, y; if (!c) { - XWarpPointer(dpy, None, root, 0, 0, 0, 0, selmon->wx + selmon->ww/2, selmon->wy + selmon->wh/2); + XWarpPointer(dpy, None, root, 0, 0, 0, 0, selmon->wx + selmon->ww / 2, selmon->wy + selmon->wh / 2); return; } if (!getrootptr(&x, &y) || - (x > c->x - c->bw && - y > c->y - c->bw && - x < c->x + c->w + c->bw*2 && - y < c->y + c->h + c->bw*2) || - x < c->mon->wx || - x > c->mon->wx + c->mon->ww || - y < c->mon->wy || - y > c->mon->wy + c->mon->wh + (x > c->x - c->bw && + y > c->y - c->bw && + x < c->x + c->w + c->bw*2 && + y < c->y + c->h + c->bw*2) || + x < c->mon->wx || + x > c->mon->wx + c->mon->ww || + y < c->mon->wy || + y > c->mon->wy + c->mon->wh ) return; XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w / 2, c->h / 2); -} \ No newline at end of file +} diff --git a/patches.def.h b/patches.def.h index 958d109..e4c1232 100644 --- a/patches.def.h +++ b/patches.def.h @@ -503,7 +503,6 @@ /* Applies the monocle layout with the focused client on top and hides the bar. When pressed * again it shows the bar and restores the layout that was active before going fullscreen. - * NB: This patch assumes that the third layout is monocle and that the bar is shown. * https://dwm.suckless.org/patches/fullscreen/ */ #define FULLSCREEN_PATCH 0