dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit d6e0e6e9879c144f5d374fca0c015fd6208fc27e
parent b1669b5c48f71c9a7a919dbf09a1af527c62f69a
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Tue, 11 Jul 2006 18:53:41 +0200

several changes, new stuff

Diffstat:
Mbar.c | 24+++++++++++++-----------
Mclient.c | 5+++++
Mconfig.h | 2+-
Mevent.c | 1-
Mutil.c | 2+-
Mwm.c | 16++++++++++++----
Mwm.h | 3++-
7 files changed, 34 insertions(+), 19 deletions(-)
diff --git a/bar.c b/bar.c
@@ -5,22 +5,24 @@
 
 #include "wm.h"
 
-static const char *status[] = {
-    "sh", "-c", "echo -n `date` `uptime | sed 's/.*://; s/,//g'`"
-        " `acpi | awk '{print $4}' | sed 's/,//'`", 0 \
-};
-
 void
 draw_bar()
 {
-    static char buf[1024];
-
-    buf[0] = 0;
-    pipe_spawn(buf, sizeof(buf), dpy, (char **)status);
-
     brush.rect = barrect;
     brush.rect.x = brush.rect.y = 0;
-    draw(dpy, &brush, False, buf);
+    draw(dpy, &brush, False, NULL);
+
+    if(stack) {
+        brush.rect.width = textwidth(&brush.font, stack->name) + labelheight(&brush.font);
+        swap((void **)&brush.fg, (void **)&brush.bg);
+        draw(dpy, &brush, False, stack->name);
+        swap((void **)&brush.fg, (void **)&brush.bg);
+        brush.rect.x += brush.rect.width;
+    }
+
+    brush.rect.width = textwidth(&brush.font, statustext) + labelheight(&brush.font);
+    brush.rect.x = barrect.x + barrect.width - brush.rect.width;
+    draw(dpy, &brush, False, statustext);
 
     XCopyArea(dpy, brush.drawable, barwin, brush.gc, 0, 0, barrect.width,
             barrect.height, 0, 0);
diff --git a/client.c b/client.c
@@ -35,6 +35,10 @@ update_name(Client *c)
         }
     }
     XFree(name.value);
+    if(c == stack)
+        draw_bar();
+    else
+        draw_client(c);
 }
 
 void
@@ -66,6 +70,7 @@ manage(Window w, XWindowAttributes *wa)
     c->r[RFloat].height = wa->height;
     c->border = wa->border_width;
     XSetWindowBorderWidth(dpy, c->win, 0);
+    XSelectInput(dpy, c->win, StructureNotifyMask | PropertyChangeMask | EnterWindowMask);
     XGetTransientForHint(dpy, c->win, &c->trans);
     if(!XGetWMNormalHints(dpy, c->win, &c->size, &msize) || !c->size.flags)
         c->size.flags = PSize;
diff --git a/config.h b/config.h
@@ -7,4 +7,4 @@
 #define BGCOLOR        "#000000"
 #define FGCOLOR        "#ffaa00"
 #define BORDERCOLOR    "#000000"
-#define STATUSDELAY 1 /* milliseconds */
+#define STATUSDELAY    10 /* milliseconds */
diff --git a/event.c b/event.c
@@ -187,7 +187,6 @@ propertynotify(XEvent *e)
         }
         if(ev->atom == XA_WM_NAME || ev->atom == net_atom[NetWMName]) {
             update_name(c);
-            /*draw_frame(c->sel);*/
         }
     }
 }
diff --git a/util.c b/util.c
@@ -134,7 +134,7 @@ pipe_spawn(char *buf, unsigned int len, Display *dpy, char *argv[])
             n += l;
         }
         close(pfd[0]);
-        buf[n - 1] = 0;
+        buf[n < len ? n : len - 1] = 0;
     }
     wait(0);
 }
diff --git a/wm.c b/wm.c
@@ -27,7 +27,7 @@ XRectangle rect, barrect;
 Bool running = True;
 Bool sel_screen;
 
-char *bartext, tag[256];
+char statustext[1024], tag[256];
 int screen;
 
 Brush brush = {0};
@@ -35,9 +35,15 @@ Client *clients = NULL;
 Client *stack = NULL;
 
 static Bool other_wm_running;
-static char version[] = "gridwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n";
+static const char version[] = "gridwm - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n";
 static int (*x_error_handler) (Display *, XErrorEvent *);
 
+static const char *status[] = {
+    "sh", "-c", "echo -n `date '+%Y/%m/%d %H:%M'`" 
+    " `uptime | sed 's/.*://; s/,//g'`"
+    " `acpi | awk '{print $4}' | sed 's/,//'`", 0
+};
+
 static void
 usage()
 {
@@ -258,9 +264,9 @@ main(int argc, char *argv[])
             barrect.width, barrect.height, 0, DefaultDepth(dpy, screen),
             CopyFromParent, DefaultVisual(dpy, screen),
             CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
-    bartext = NULL;
     XDefineCursor(dpy, barwin, cursor[CurNormal]);
     XMapRaised(dpy, barwin);
+    pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status);
     draw_bar();
 
     wa.event_mask = SubstructureRedirectMask | EnterWindowMask \
@@ -282,8 +288,10 @@ main(int argc, char *argv[])
         t = timeout;
         if(select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &t) > 0)
             continue;
-        else if(errno != EINTR)
+        else if(errno != EINTR) {
+            pipe_spawn(statustext, sizeof(statustext), dpy, (char **)status);
             draw_bar();
+        }
     }
 
     cleanup();
diff --git a/wm.h b/wm.h
@@ -55,7 +55,7 @@ extern Bool running, sel_screen, grid;
 extern void (*handler[LASTEvent]) (XEvent *);
 
 extern int screen;
-extern char *bartext, tag[256];
+extern char statustext[1024], tag[256];
 
 extern Brush brush;
 extern Client *clients, *stack;
@@ -74,6 +74,7 @@ extern void unmanage(Client *c);
 extern Client *getclient(Window w);
 extern void focus(Client *c);
 extern void update_name(Client *c);
+extern void draw_client(Client *c);
 
 /* event.c */
 extern unsigned int flush_events(long even_mask);