---- - config.def.h | 1 + - dwm.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- - 2 files changed, 44 insertions(+), 2 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 1c0b587..c3c7edd 100644 ---- a/config.def.h -+++ b/config.def.h -_AT_@ -78,6 +78,7 @@ static Key keys[] = { - { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, - { MODKEY, XK_space, setlayout, {0} }, - { MODKEY|ShiftMask, XK_space, togglefloating, {0} }, -+ { MODKEY|ShiftMask, XK_space, togglealwaysontop, {0} }, - { MODKEY, XK_0, view, {.ui = ~0 } }, - { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } }, - { MODKEY, XK_comma, focusmon, {.i = -1 } }, -diff --git a/dwm.c b/dwm.c -index 4465af1..8d54b26 100644 ---- a/dwm.c -+++ b/dwm.c -_AT_@ -92,7 +92,7 @@ struct Client { - int basew, baseh, incw, inch, maxw, maxh, minw, minh; - int bw, oldbw; - unsigned int tags; -- int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; -+ int isfixed, iscentered, isfloating, isalwaysontop, isurgent, neverfocus, oldstate, isfullscreen; - Client *next; - Client *snext; - Monitor *mon; -_AT_@ -211,6 +211,7 @@ static void tagmon(const Arg *arg); - static void tile(Monitor *); - static void togglebar(const Arg *arg); - static void togglefloating(const Arg *arg); -+static void togglealwaysontop(const Arg *arg); - static void toggletag(const Arg *arg); - static void toggleview(const Arg *arg); - static void unfocus(Client *c, int setfocus); -_AT_@ -732,8 +733,11 @@ drawbar(Monitor *m) - if (m->sel) { - drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); -- if (m->sel->isfloating) -+ if (m->sel->isfloating) { - drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); -+ if (m->sel->isalwaysontop) -+ drw_rect(drw, x + boxs, bh - boxw, boxw, boxw, 0, 0); -+ } - } else { - drw_setscheme(drw, scheme[SchemeNorm]); - drw_rect(drw, x, 0, w, bh, 1, 1); -_AT_@ -1356,6 +1360,17 @@ restack(Monitor *m) - return; - if (m->sel->isfloating || !m->lt[m->sellt]->arrange) - XRaiseWindow(dpy, m->sel->win); -+ -+ /* raise the aot window */ -+ for(Monitor *m_search = mons; m_search; m_search = m_search->next){ -+ for(c = m_search->clients; c; c = c->next){ -+ if(c->isalwaysontop){ -+ XRaiseWindow(dpy, c->win); -+ break; -+ } -+ } -+ } -+ - if (m->lt[m->sellt]->arrange) { - wc.stack_mode = Below; - wc.sibling = m->barwin; -_AT_@ -1716,6 +1731,32 @@ togglefloating(const Arg *arg) - if (selmon->sel->isfloating) - resize(selmon->sel, selmon->sel->x, selmon->sel->y, - selmon->sel->w, selmon->sel->h, 0); -+ else -+ selmon->sel->isalwaysontop = 0; /* disabled, turn this off too */ -+ arrange(selmon); -+} -+ -+void -+togglealwaysontop(const Arg *arg) -+{ -+ if (!selmon->sel) -+ return; -+ if (selmon->sel->isfullscreen) -+ return; -+ -+ if(selmon->sel->isalwaysontop){ -+ selmon->sel->isalwaysontop = 0; -+ }else{ -+ /* disable others */ -+ for(Monitor *m = mons; m; m = m->next) -+ for(Client *c = m->clients; c; c = c->next) -+ c->isalwaysontop = 0; -+ -+ /* turn on, make it float too */ -+ selmon->sel->isfloating = 1; -+ selmon->sel->isalwaysontop = 1; -+ } -+ - arrange(selmon); - } - --- -2.31.1 -Received on Mon Jul 18 2022 - 13:16:51 CEST
This archive was generated by hypermail 2.3.0 : Mon Jul 18 2022 - 13:24:39 CEST