---- - config.def.h | 4 ++++ - dwm.c | 38 ++++++++++++++++++++++++++++++++++++++ - 2 files changed, 42 insertions(+) +This patch is heavily inspired by the moveplace patch. It allows to "throw" +windows in 4 directions, which makes them floating (if not floating already) +and then moves them in the chosen direction until they hit the border of the +screen. Unlike moveplace, the windows get to keep their original size. +Additionally, there's a "middle direction" defined which simply centers a +window on the screen. diff --git a/config.def.h b/config.def.h -index 1c0b587..e873d28 100644 +index 1c0b587..cd8b0a7 100644 --- a/config.def.h +++ b/config.def.h _AT_@ -84,6 +84,11 @@ static Key keys[] = { { MODKEY, XK_period, focusmon, {.i = +1 } }, { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, -+ { MODKEY|ShiftMask, XK_Up, movethrow, {.ui = WIN_N }}, -+ { MODKEY|ShiftMask, XK_Down, movethrow, {.ui = WIN_S }}, -+ { MODKEY|ShiftMask, XK_Left, movethrow, {.ui = WIN_W }}, -+ { MODKEY|ShiftMask, XK_Right, movethrow, {.ui = WIN_E }}, -+ { MODKEY|ShiftMask, XK_m, movethrow, {.ui = WIN_C }}, ++ { MODKEY|ShiftMask, XK_Up, movethrow, {.ui = DIR_N }}, ++ { MODKEY|ShiftMask, XK_Down, movethrow, {.ui = DIR_S }}, ++ { MODKEY|ShiftMask, XK_Left, movethrow, {.ui = DIR_W }}, ++ { MODKEY|ShiftMask, XK_Right, movethrow, {.ui = DIR_E }}, ++ { MODKEY|ShiftMask, XK_m, movethrow, {.ui = DIR_C }}, TAGKEYS( XK_1, 0) TAGKEYS( XK_2, 1) TAGKEYS( XK_3, 2) diff --git a/dwm.c b/dwm.c -index 4465af1..df1eb05 100644 +index 4465af1..16f4b08 100644 --- a/dwm.c +++ b/dwm.c _AT_@ -66,6 +66,7 @@ enum { NetSupported, NetWMName, NetWMState, NetWMCheck, _AT_@ -42,7 +33,15 @@ index 4465af1..df1eb05 100644 typedef union { int i; -_AT_@ -1192,6 +1193,44 @@ movemouse(const Arg *arg) +_AT_@ -183,6 +184,7 @@ static void maprequest(XEvent *e); + static void monocle(Monitor *m); + static void motionnotify(XEvent *e); + static void movemouse(const Arg *arg); ++static void movethrow(const Arg *arg); + static Client *nexttiled(Client *c); + static void pop(Client *); + static void propertynotify(XEvent *e); +_AT_@ -1192,6 +1194,46 @@ movemouse(const Arg *arg) } } _AT_@ -52,41 +51,40 @@ index 4465af1..df1eb05 100644 + Client *c; + int nh, nw, nx, ny; + c = selmon->sel; ++ if (!c) ++ return; + if (selmon->lt[selmon->sellt]->arrange && !c->isfloating) + togglefloating(NULL); + nw = c->w; + nh = c->h; -+ switch(arg->ui) { -+ case DIR_N: -+ nx = c->x; -+ ny = selmon->wy; -+ break; -+ case DIR_E: -+ nx = selmon->wx + selmon->ww - c->w - c->bw*2; -+ ny = c->y; -+ break; -+ case DIR_S: -+ nx = c->x; -+ ny = selmon->wy + selmon->wh - c->h - c->bw*2; -+ break; -+ case DIR_W: -+ nx = selmon->wx; -+ ny = c->y; -+ break; -+ case DIR_C: -+ nx = selmon->wx + ((selmon->ww - c->w - c->bw*2) / 2); -+ ny = selmon->wy + ((selmon->wh - c->h - c->bw*2) / 2); -+ break; -+ default: -+ return; -+ } ++ switch(arg->ui) { ++ case DIR_N: ++ nx = c->x; ++ ny = selmon->wy; ++ break; ++ case DIR_E: ++ nx = selmon->wx + selmon->ww - c->w - c->bw*2; ++ ny = c->y; ++ break; ++ case DIR_S: ++ nx = c->x; ++ ny = selmon->wy + selmon->wh - c->h - c->bw*2; ++ break; ++ case DIR_W: ++ nx = selmon->wx; ++ ny = c->y; ++ break; ++ case DIR_C: ++ nx = selmon->wx + ((selmon->ww - c->w - c->bw*2) / 2); ++ ny = selmon->wy + ((selmon->wh - c->h - c->bw*2) / 2); ++ break; ++ default: ++ return; ++ } + resize(c, nx, ny, nw, nh, True); -+ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, nw/2, nh/2); ++ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, nw/2, nh/2); +} + Client * nexttiled(Client *c) { --- -2.27.0 -Received on Sat Feb 10 2024 - 21:05:55 CET
This archive was generated by hypermail 2.3.0 : Sat Feb 10 2024 - 21:12:44 CET