~brown121407/dwm

382d92c8de189675666081350f58fd3fa0c6b7b9 — Alexandru-Sergiu 6 months ago 3f61499
Add alwaysontop patch.
2 files changed, 44 insertions(+), 2 deletions(-)

M config.def.h
M dwm.c
M config.def.h => config.def.h +1 -0
@@ 200,6 200,7 @@ static Key keys[] = {
	{ MODKEY,            XK_F12,       spawn,        SHCMD("") },
	{ MODKEY,            XK_space,     zoom,            {0} },
	{ MODKEY|ShiftMask,  XK_space,     togglefloating,  {0} },
	{ MODKEY|ControlMask, XK_space,    togglealwaysontop, {0} },

	{ 0,                 XK_Print,          spawn,        SHCMD("scrot fs") },
	{ ShiftMask,         XK_Print,          spawn,        SHCMD("scrot menu") },

M dwm.c => dwm.c +43 -2
@@ 101,7 101,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, isterminal, noswallow;
	int isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen, isterminal, noswallow, isalwaysontop;
	pid_t pid;
	Client *next;
	Client *snext;


@@ 241,6 241,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 togglefullscr(const Arg *arg);
static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg);


@@ 830,8 831,11 @@ drawbar(Monitor *m)
		if (m->sel) {
			drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]);
			drw_text(drw, x, 0, w - 2 * sp, 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 - 2 * sp, bh, 1, 1);


@@ 1490,6 1494,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;


@@ 1997,6 2012,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);
}