[dwm] Re: a locked window for stalonetray - a different approach

From: Marcin Cieslak <saper_AT_system.pl>
Date: Fri, 05 Dec 2008 07:43:46 +0100

Marcin Cieslak wrote:
> Probably this behaviour could/should be combined with your "nofocus"
> feature, i.e. locked windows should never get focus *at first*.

And another version - allow the "locked" window to be normally focused
with mouse or keyboard, but do not focus it as the *first* client in
the view.

--Marcin

--- dwm.c.orig 2008-09-09 21:46:17.000000000 +0200
+++ dwm.c 2008-12-05 07:36:09.357994914 +0100
@@ -88,7 +88,7 @@
         int basew, baseh, incw, inch, maxw, maxh, minw, minh;
         int bw, oldbw;
         unsigned int tags;
- Bool isfixed, isfloating, isurgent;
+ Bool isfixed, isfloating, isurgent, islocked;
         Client *next;
         Client *snext;
         Window win;
@@ -127,6 +127,7 @@
         const char *title;
         unsigned int tags;
         Bool isfloating;
+ Bool islocked;
 } Rule;
 
 /* function declarations */
@@ -259,6 +260,7 @@
                         && (!r->instance || (ch.res_name && strstr(ch.res_name, r->instance)))) {
                                 c->isfloating = r->isfloating;
                                 c->tags |= r->tags & TAGMASK;
+ c->islocked = r->islocked;
                         }
                 }
                 if(ch.res_class)
@@ -497,9 +499,11 @@
         Client *c;
 
         for(c = clients; c; c = c->next) {
- occ |= c->tags;
- if(c->isurgent)
- urg |= c->tags;
+ if (!c->islocked) {
+ occ |= c->tags;
+ if(c->isurgent)
+ urg |= c->tags;
+ }
         }
 
         dc.x = 0;
@@ -610,7 +614,7 @@
 void
 focus(Client *c) {
         if(!c || !ISVISIBLE(c))
- for(c = stack; c && !ISVISIBLE(c); c = c->snext);
+ for(c = stack; c && (!ISVISIBLE(c) || c->islocked); c = c->snext);
         if(sel && sel != c) {
                 grabbuttons(sel, False);
                 XSetWindowBorder(dpy, sel->win, dc.norm[ColBorder]);
@@ -1405,8 +1409,10 @@
 void
 tag(const Arg *arg) {
         if(sel && arg->ui & TAGMASK) {
- sel->tags = arg->ui & TAGMASK;
- arrange();
+ if (!sel->islocked) {
+ sel->tags = arg->ui & TAGMASK;
+ arrange();
+ }
         }
 }
 
@@ -1467,6 +1473,9 @@
 togglefloating(const Arg *arg) {
         if(!sel)
                 return;
+ if (sel->islocked)
+ return;
+
         sel->isfloating = !sel->isfloating || sel->isfixed;
         if(sel->isfloating)
                 resize(sel, sel->x, sel->y, sel->w, sel->h, True);
@@ -1479,6 +1488,8 @@
 
         if (!sel)
                 return;
+ if (sel->islocked)
+ return;
         
         mask = sel->tags ^ (arg->ui & TAGMASK);
         if(sel && mask) {
Received on Fri Dec 05 2008 - 06:43:46 UTC

This archive was generated by hypermail 2.2.0 : Fri Dec 05 2008 - 06:48:05 UTC