[hackers] [dwm] added antoszka's viewprev patch with some minor modifications, restored Client->tags as Bool *, however kept the static initialization of ntags and seltags (prevtags) - this seems to be the best compromise

From: Anselm R. Garbe <garbeam_AT_gmail.com>
Date: Wed Oct 10 18:42:54 2007

changeset: 1027:0735e86bbd49
tag: tip
user: Anselm R. Garbe <garbeam_AT_gmail.com>
date: Wed Oct 10 18:39:28 2007 +0200
summary: added antoszka's viewprev patch with some minor modifications, restored Client->tags as Bool *, however kept the static initialization of ntags and seltags (prevtags) - this seems to be the best compromise

diff -r bc0929d03388 -r 0735e86bbd49 config.def.h
--- a/config.def.h Sat Oct 06 19:43:15 2007 +0200
+++ b/config.def.h Wed Oct 10 18:39:28 2007 +0200
@@ -49,6 +49,7 @@ Key keys[] = { \
         { MODKEY, XK_l, setmwfact, "+0.05" }, \
         { MODKEY, XK_m, togglemax, NULL }, \
         { MODKEY, XK_Return, zoom, NULL }, \
+ { MODKEY, XK_Tab, viewprevtag, NULL }, \
         { MODKEY|ShiftMask, XK_space, togglefloating, NULL }, \
         { MODKEY|ShiftMask, XK_c, killclient, NULL }, \
         { MODKEY, XK_0, view, NULL }, \
diff -r bc0929d03388 -r 0735e86bbd49 config.mk
--- a/config.mk Sat Oct 06 19:43:15 2007 +0200
+++ b/config.mk Wed Oct 10 18:39:28 2007 +0200
@@ -17,7 +17,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
 # flags
 CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"
 LDFLAGS = -s ${LIBS}
-#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
+#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
 #LDFLAGS = -g ${LIBS}
 
 # Solaris
diff -r bc0929d03388 -r 0735e86bbd49 dwm.c
--- a/dwm.c Sat Oct 06 19:43:15 2007 +0200
+++ b/dwm.c Wed Oct 10 18:39:28 2007 +0200
@@ -57,6 +57,22 @@ enum { WMProtocols, WMDelete, WMName, WM
 
 /* typedefs */
 typedef struct Client Client;
+
+struct Client {
+ char name[256];
+ int x, y, w, h;
+ int rx, ry, rw, rh; /* revert geometry */
+ int basew, baseh, incw, inch, maxw, maxh, minw, minh;
+ int minax, maxax, minay, maxay;
+ long flags;
+ unsigned int border, oldborder;
+ Bool isbanned, isfixed, ismax, isfloating, wasfloating;
+ Bool *tags;
+ Client *next;
+ Client *prev;
+ Client *snext;
+ Window win;
+};
 
 typedef struct {
         int x, y, w, h;
@@ -170,6 +186,7 @@ void updatesizehints(Client *c);
 void updatesizehints(Client *c);
 void updatetitle(Client *c);
 void view(const char *arg);
+void viewprevtag(const char *arg); /* views previous selected tags */
 int xerror(Display *dpy, XErrorEvent *ee);
 int xerrordummy(Display *dsply, XErrorEvent *ee);
 int xerrorstart(Display *dsply, XErrorEvent *ee);
@@ -219,22 +236,7 @@ Regs *regs = NULL;
 /* Statically define the number of tags. */
 unsigned int ntags = sizeof tags / sizeof tags[0];
 Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True};
-
-struct Client {
- char name[256];
- int x, y, w, h;
- int rx, ry, rw, rh; /* revert geometry */
- int basew, baseh, incw, inch, maxw, maxh, minw, minh;
- int minax, maxax, minay, maxay;
- long flags;
- unsigned int border, oldborder;
- Bool isbanned, isfixed, ismax, isfloating, wasfloating;
- Bool tags[sizeof tags / sizeof tags[0]];
- Client *next;
- Client *prev;
- Client *snext;
- Window win;
-};
+Bool prevtags[sizeof tags / sizeof tags[0]] = {[0] = True};
 
 /* functions*/
 void
@@ -265,8 +267,7 @@ applyrules(Client *c) {
         if(ch.res_name)
                 XFree(ch.res_name);
         if(!matched)
- for(i = 0; i < ntags; i++)
- c->tags[i] = seltags[i];
+ memcpy(c->tags, seltags, sizeof seltags);
 }
 
 void
@@ -1002,13 +1003,13 @@ leavenotify(XEvent *e) {
 
 void
 manage(Window w, XWindowAttributes *wa) {
- unsigned int i;
         Client *c, *t = NULL;
         Window trans;
         Status rettrans;
         XWindowChanges wc;
 
         c = emallocz(sizeof(Client));
+ c->tags = emallocz(sizeof seltags);
         c->win = w;
         c->x = wa->x;
         c->y = wa->y;
@@ -1043,8 +1044,7 @@ manage(Window w, XWindowAttributes *wa)
         if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success))
                 for(t = clients; t && t->win != trans; t = t->next);
         if(t)
- for(i = 0; i < ntags; i++)
- c->tags[i] = t->tags[i];
+ memcpy(c->tags, t->tags, sizeof seltags);
         applyrules(c);
         if(!c->isfloating)
                 c->isfloating = (rettrans == Success) || c->isfixed;
@@ -1702,6 +1702,7 @@ unmanage(Client *c) {
                 focus(NULL);
         XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
         setclientstate(c, WithdrawnState);
+ free(c->tags);
         free(c);
         XSync(dpy, False);
         XSetErrorHandler(xerror);
@@ -1838,11 +1839,22 @@ view(const char *arg) {
 view(const char *arg) {
         unsigned int i;
 
+ memcpy(prevtags, seltags, sizeof seltags);
         for(i = 0; i < ntags; i++)
                 seltags[i] = arg == NULL;
         i = idxoftag(arg);
         if(i >= 0 && i < ntags)
                 seltags[i] = True;
+ arrange();
+}
+
+void
+viewprevtag(const char *arg) {
+ static Bool tmptags[sizeof tags / sizeof tags[0]];
+
+ memcpy(tmptags, seltags, sizeof seltags);
+ memcpy(seltags, prevtags, sizeof seltags);
+ memcpy(prevtags, tmptags, sizeof seltags);
         arrange();
 }
 
Received on Wed Oct 10 2007 - 18:42:54 UTC

This archive was generated by hypermail 2.2.0 : Sun Jul 13 2008 - 15:58:30 UTC