dwm-push_no_master-6.1.diff (1557B)
1 diff --git a/dwm.c b/dwm.c 2 index 0362114..d61d736 100644 3 --- a/dwm.c 4 +++ b/dwm.c 5 @@ -186,7 +186,10 @@ static void motionnotify(XEvent *e); 6 static void movemouse(const Arg *arg); 7 static Client *nexttiled(Client *c); 8 static void pop(Client *); 9 +static Client *prevtiled(Client *c); 10 static void propertynotify(XEvent *e); 11 +static void pushdown(const Arg *arg); 12 +static void pushup(const Arg *arg); 13 static void quit(const Arg *arg); 14 static Monitor *recttomon(int x, int y, int w, int h); 15 static void resize(Client *c, int x, int y, int w, int h, int interact); 16 @@ -1225,6 +1228,16 @@ pop(Client *c) 17 arrange(c->mon); 18 } 19 20 +Client * 21 +prevtiled(Client *c) { 22 + Client *p, *r; 23 + 24 + for(p = selmon->clients, r = NULL; p && p != c; p = p->next) 25 + if(!p->isfloating && ISVISIBLE(p)) 26 + r = p; 27 + return r; 28 +} 29 + 30 void 31 propertynotify(XEvent *e) 32 { 33 @@ -1263,6 +1276,37 @@ propertynotify(XEvent *e) 34 } 35 36 void 37 +pushdown(const Arg *arg) { 38 + Client *sel = selmon->sel, *c; 39 + 40 + if(!sel || sel->isfloating || sel == nexttiled(selmon->clients)) 41 + return; 42 + if((c = nexttiled(sel->next))) { 43 + detach(sel); 44 + sel->next = c->next; 45 + c->next = sel; 46 + } 47 + focus(sel); 48 + arrange(selmon); 49 +} 50 + 51 +void 52 +pushup(const Arg *arg) { 53 + Client *sel = selmon->sel, *c; 54 + 55 + if(!sel || sel->isfloating) 56 + return; 57 + if((c = prevtiled(sel)) && c != nexttiled(selmon->clients)) { 58 + detach(sel); 59 + sel->next = c; 60 + for(c = selmon->clients; c->next != sel->next; c = c->next); 61 + c->next = sel; 62 + } 63 + focus(sel); 64 + arrange(selmon); 65 +} 66 + 67 +void 68 quit(const Arg *arg) 69 { 70 running = 0;