From 1865b2e60879a9ff0afc79ad57705a3c94d06425 Mon Sep 17 00:00:00 2001 From: Solomon Laing Date: Sat, 19 Apr 2025 15:57:50 +0930 Subject: [PATCH] patched attachtop --- drw.c | 1 + dwm.c | 34 +++++++++++++++++++++++++++++----- util.h | 1 + 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/drw.c b/drw.c index 9fdd1a4..9b343c8 100644 --- a/drw.c +++ b/drw.c @@ -469,3 +469,4 @@ drw_cur_free(Drw *drw, Cur *cursor) XFreeCursor(drw->dpy, cursor->cursor); free(cursor); } + diff --git a/dwm.c b/dwm.c index 7c5e7a6..4d76f73 100644 --- a/dwm.c +++ b/dwm.c @@ -49,7 +49,8 @@ #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) #define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \ * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy))) -#define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) +#define ISVISIBLEONTAG(C, T) ((C->tags & T)) +#define ISVISIBLE(C) ISVISIBLEONTAG(C, C->mon->tagset[C->mon->seltags]) #define MOUSEMASK (BUTTONMASK|PointerMotionMask) #define WIDTH(X) ((X)->w + 2 * (X)->bw) #define HEIGHT(X) ((X)->h + 2 * (X)->bw) @@ -167,6 +168,7 @@ static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interac static void arrange(Monitor *m); static void arrangemon(Monitor *m); static void attach(Client *c); +static void attachtop(Client *c); static void attachstack(Client *c); static void buttonpress(XEvent *e); static void checkotherwm(void); @@ -439,6 +441,25 @@ attach(Client *c) c->mon->clients = c; } +void +attachtop(Client *c) +{ + int n; + Monitor *m = selmon; + Client *below; + + for (n = 1, below = c->mon->clients; + below && below->next && (below->isfloating || !ISVISIBLEONTAG(below, c->tags) || n != m->nmaster); + n = below->isfloating || !ISVISIBLEONTAG(below, c->tags) ? n + 0 : n + 1, below = below->next); + c->next = NULL; + if (below) { + c->next = below->next; + below->next = c; + } + else + c->mon->clients = c; +} + void attachstack(Client *c) { @@ -1185,7 +1206,7 @@ manage(Window w, XWindowAttributes *wa) c->isfloating = c->oldstate = trans != None || c->isfixed; if (c->isfloating) XRaiseWindow(dpy, c->win); - attach(c); + attachtop(c); attachstack(c); XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, (unsigned char *) &(c->win), 1); @@ -1590,7 +1611,7 @@ sendmon(Client *c, Monitor *m) detachstack(c); c->mon = m; c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ - attach(c); + attachtop(c); attachstack(c); if (c->isfullscreen) resizeclient(c, m->mx, m->my, m->mw, m->mh); @@ -2075,7 +2096,7 @@ updategeom(void) { int dirty = 0; -#ifdef XINERAMA +// #ifdef XINERAMA if (XineramaIsActive(dpy)) { int i, j, n, nn; Client *c; @@ -2100,6 +2121,8 @@ updategeom(void) else mons = createmon(); } + + for (i = 0, m = mons; i < nn && m; m = m->next, i++) if (i >= n || unique[i].x_org != m->mx || unique[i].y_org != m->my @@ -2130,7 +2153,7 @@ updategeom(void) } free(unique); } else -#endif /* XINERAMA */ +// #endif /* XINERAMA */ { /* default monitor setup */ if (!mons) mons = createmon(); @@ -2514,3 +2537,4 @@ main(int argc, char *argv[]) XCloseDisplay(dpy); return EXIT_SUCCESS; } + diff --git a/util.h b/util.h index c0a50d4..3a40b0f 100644 --- a/util.h +++ b/util.h @@ -7,3 +7,4 @@ void die(const char *fmt, ...); void *ecalloc(size_t nmemb, size_t size); +