Last active
October 30, 2024 12:01
-
-
Save Dovias/f935192b3ba1132df892ea66b9f3cfba to your computer and use it in GitHub Desktop.
Unofficial dwm 6.5 patch for dwm's attachside patch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/dwm.c b/dwm.c | |
index f1d86b2..8b04e0b 100644 | |
--- a/dwm.c | |
+++ b/dwm.c | |
@@ -48,7 +48,7 @@ | |
#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 LENGTH(X) (sizeof X / sizeof X[0]) | |
#define MOUSEMASK (BUTTONMASK|PointerMotionMask) | |
#define WIDTH(X) ((X)->w + 2 * (X)->bw) | |
@@ -147,6 +148,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 attachaside(Client *c); | |
static void attachstack(Client *c); | |
static void buttonpress(XEvent *e); | |
static void checkotherwm(void); | |
@@ -184,6 +186,7 @@ static void maprequest(XEvent *e); | |
static void monocle(Monitor *m); | |
static void motionnotify(XEvent *e); | |
static void movemouse(const Arg *arg); | |
+static Client *nexttagged(Client *c); | |
static Client *nexttiled(Client *c); | |
static void pop(Client *c); | |
static void propertynotify(XEvent *e); | |
@@ -408,6 +411,17 @@ attach(Client *c) | |
c->mon->clients = c; | |
} | |
+void | |
+attachaside(Client *c) { | |
+ Client *at = nexttagged(c); | |
+ if(!at) { | |
+ attach(c); | |
+ return; | |
+ } | |
+ c->next = at->next; | |
+ at->next = c; | |
+} | |
+ | |
void | |
attachstack(Client *c) | |
{ | |
@@ -1074,7 +1088,7 @@ manage(Window w, XWindowAttributes *wa) | |
c->isfloating = c->oldstate = trans != None || c->isfixed; | |
if (c->isfloating) | |
XRaiseWindow(dpy, c->win); | |
- attach(c); | |
+ attachaside(c); | |
attachstack(c); | |
XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, | |
(unsigned char *) &(c->win), 1); | |
@@ -1202,6 +1216,16 @@ movemouse(const Arg *arg) | |
} | |
} | |
+Client * | |
+nexttagged(Client *c) { | |
+ Client *walked = c->mon->clients; | |
+ for(; | |
+ walked && (walked->isfloating || !ISVISIBLEONTAG(walked, c->tags)); | |
+ walked = walked->next | |
+ ); | |
+ return walked; | |
+} | |
+ | |
Client * | |
nexttiled(Client *c) | |
{ | |
@@ -1427,7 +1451,7 @@ sendmon(Client *c, Monitor *m) | |
detachstack(c); | |
c->mon = m; | |
c->tags = m->tagset[m->seltags]; /* assign tags of target monitor */ | |
- attach(c); | |
+ attachaside(c); | |
attachstack(c); | |
focus(NULL); | |
arrange(NULL); | |
@@ -1915,7 +1939,7 @@ updategeom(void) | |
m->clients = c->next; | |
detachstack(c); | |
c->mon = mons; | |
- attach(c); | |
+ attachaside(c); | |
attachstack(c); | |
} | |
if (m == selmon) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment