dwm

my fork of dwm
Index Commits Files Refs README LICENSE
commit 95e8d12b7189d4cd01b8ae8ecebfa5835a1809e6
parent a55f0e12fe5c1205f4d3e40c164fd087224fad7a
Author: arg@10ksloc.org <unknown>
Date:   Wed,  2 Aug 2006 16:32:05 +0200

made fullscreen apps working fine in floating mode (there is no sane way to make them work in tiled mode, thus I switch to floating mode if I run such kind of app), also fixed the xterm issue reported by Sander

Diffstat:
Mclient.c | 32++++++++++----------------------
Mconfig.arg.h | 18+++++++++---------
Mconfig.h | 18+++++++++---------
Mdraw.c | 1-
Mdwm.h | 4++--
Mevent.c | 65++++++++++++++++++++++++++++++++++++++++++++++-------------------
Mmain.c | 15++++++++-------
Mtag.c | 17++++++++---------
Mutil.c | 1-
9 files changed, 92 insertions(+), 79 deletions(-)
diff --git a/client.c b/client.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdlib.h>
 #include <string.h>
 #include <X11/Xatom.h>
@@ -219,7 +218,7 @@ manage(Window w, XWindowAttributes *wa)
     c->h = wa->height;
     c->th = bh;
 
-    c->border = 1;
+    c->border = 0;
     setsize(c);
 
     if(c->h != sh && c->y < bh)
@@ -254,8 +253,7 @@ manage(Window w, XWindowAttributes *wa)
     if(!c->isfloat)
         c->isfloat = trans
             || (c->maxw && c->minw &&
-                c->maxw == c->minw && c->maxh == c->minh)
-            || (c->w == sw && c->h == sh);
+                c->maxw == c->minw && c->maxh == c->minh);
     settitle(c);
     arrange(NULL);
 
@@ -271,7 +269,7 @@ resize(Client *c, Bool sizehints, Corner sticky)
 {
     int bottom = c->y + c->h;
     int right = c->x + c->w;
-    XConfigureEvent e;
+    /*XConfigureEvent e;*/
     XWindowChanges wc;
 
     if(sizehints) {
@@ -302,21 +300,11 @@ resize(Client *c, Bool sizehints, Corner sticky)
     wc.y = c->y;
     wc.width = c->w;
     wc.height = c->h;
-    wc.border_width = 1;
-    XConfigureWindow(dpy, c->win,
-            CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
-
-    e.type = ConfigureNotify;
-    e.event = c->win;
-    e.window = c->win;
-    e.x = c->x;
-    e.y = c->y;
-    e.width = c->w;
-    e.height = c->h;
-    e.border_width = c->border;
-    e.above = None;
-    e.override_redirect = False;
-    XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
+    if(c->w == sw && c->h == sh)
+        wc.border_width = 0;
+    else
+        wc.border_width = 1;
+    XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
     XSync(dpy, False);
 }
 
@@ -403,8 +391,8 @@ togglemax(Arg *arg)
         oh = sel->h;
         sel->x = sx;
         sel->y = sy + bh;
-        sel->w = sw - 2 * sel->border;
-        sel->h = sh - 2 * sel->border - bh;
+        sel->w = sw - 2;
+        sel->h = sh - 2 - bh;
 
         higher(sel);
         resize(sel, False, TopLeft);
diff --git a/config.arg.h b/config.arg.h
@@ -3,15 +3,6 @@
  * See LICENSE file for license details.
  */
 
-#define DEFMODE            dotile /* dofloat */
-#define FONT            "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
-#define BGCOLOR            "#0a2c2d"
-#define FGCOLOR            "#ddeeee"
-#define BORDERCOLOR        "#176164"
-#define MODKEY            Mod1Mask
-#define NUMLOCKMASK        Mod2Mask
-#define MASTERW            52 /* percent */
-
 enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
 #define TAGS \
 char *tags[TLast] = { \
@@ -21,7 +12,16 @@ char *tags[TLast] = { \
     [Twork] = "work", \
     [Tmisc] = "misc", \
 };
+
+#define DEFMODE            dotile /* dofloat */
 #define DEFTAG            Tdev
+#define FONT            "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*"
+#define BGCOLOR            "#0a2c2d"
+#define FGCOLOR            "#ddeeee"
+#define BORDERCOLOR        "#176164"
+#define MODKEY            Mod1Mask
+#define NUMLOCKMASK        Mod2Mask
+#define MASTERW            52 /* percent */
 
 #define KEYS \
     const char *browse[] = { "firefox", NULL }; \
diff --git a/config.h b/config.h
@@ -3,15 +3,6 @@
  * See LICENSE file for license details.
  */
 
-#define DEFMODE            dotile /* dofloat */
-#define FONT            "fixed"
-#define BGCOLOR            "#666699"
-#define FGCOLOR            "#eeeeee"
-#define BORDERCOLOR        "#9999CC"
-#define MODKEY            Mod1Mask
-#define NUMLOCKMASK        Mod2Mask
-#define MASTERW            52 /* percent */
-
 enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast };
 #define TAGS \
 char *tags[TLast] = { \
@@ -21,7 +12,16 @@ char *tags[TLast] = { \
     [Twork] = "work", \
     [Tmisc] = "misc", \
 };
+
+#define DEFMODE            dotile /* dofloat */
 #define DEFTAG            Tdev
+#define FONT            "fixed"
+#define BGCOLOR            "#666699"
+#define FGCOLOR            "#eeeeee"
+#define BORDERCOLOR        "#9999CC"
+#define MODKEY            Mod1Mask
+#define NUMLOCKMASK        Mod2Mask
+#define MASTERW            52 /* percent */
 
 #define KEYS \
     const char *term[] = { "xterm", NULL }; \
diff --git a/draw.c b/draw.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdio.h>
 #include <string.h>
 #include <X11/Xlocale.h>
diff --git a/dwm.h b/dwm.h
@@ -3,8 +3,8 @@
  * See LICENSE file for license details.
  */
 
-#include <X11/Xlib.h>
 #include CONFIG
+#include <X11/Xlib.h>
 
 /* mask shorthands, used in event.c and client.c */
 #define BUTTONMASK        (ButtonPressMask | ButtonReleaseMask)
@@ -57,8 +57,8 @@ struct Client {
     int tx, ty, tw, th; /* title */
     int basew, baseh, incw, inch, maxw, maxh, minw, minh;
     int grav;
-    unsigned int border;
     long flags; 
+    unsigned int border;
     Bool isfloat;
     Bool ismax;
     Client *next;
diff --git a/event.c b/event.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdlib.h>
 #include <X11/keysym.h>
 #include <X11/Xatom.h>
@@ -151,32 +150,60 @@ configurerequest(XEvent *e)
 {
     Client *c;
     XConfigureRequestEvent *ev = &e->xconfigurerequest;
+    XEvent synev;
     XWindowChanges wc;
+    unsigned long newmask;
 
-    ev->value_mask &= ~CWSibling;
     if((c = getclient(ev->window))) {
         gravitate(c, True);
-        if(ev->value_mask & CWX)
-            c->x = ev->x;
-        if(ev->value_mask & CWY)
-            c->y = ev->y;
-        if(ev->value_mask & CWWidth)
-            c->w = ev->width;
-        if(ev->value_mask & CWHeight)
-            c->h = ev->height;
+        if(c->isfloat) {
+            if(ev->value_mask & CWX)
+                c->x = ev->x;
+            if(ev->value_mask & CWY)
+                c->y = ev->y;
+            if(ev->value_mask & CWWidth)
+                c->w = ev->width;
+            if(ev->value_mask & CWHeight)
+                c->h = ev->height;
+        }
         if(ev->value_mask & CWBorderWidth)
-            c->border = 1;
+            c->border = ev->border_width;
         gravitate(c, False);
+
         resize(c, True, TopLeft);
-    }
 
-    wc.x = ev->x;
-    wc.y = ev->y;
-    wc.width = ev->width;
-    wc.height = ev->height;
-    wc.border_width = 1;
-    XConfigureWindow(dpy, ev->window,
-            CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
+        wc.x = c->x;
+        wc.y = c->y;
+        wc.width = c->w;
+        wc.height = c->h;
+        newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
+        if(newmask)
+            XConfigureWindow(dpy, c->win, newmask, &wc);
+        else {
+            synev.type = ConfigureNotify;
+            synev.xconfigure.display = dpy;
+            synev.xconfigure.event = c->win;
+            synev.xconfigure.window = c->win;
+            synev.xconfigure.x = c->x;
+            synev.xconfigure.y = c->y;
+            synev.xconfigure.width = c->w;
+            synev.xconfigure.height = c->h;
+            synev.xconfigure.border_width = c->border;
+            synev.xconfigure.above = None;
+            /* Send synthetic ConfigureNotify */
+            XSendEvent(dpy, c->win, True, NoEventMask, &synev);
+        }
+    }
+    else {
+        wc.x = ev->x;
+        wc.y = ev->y;
+        wc.width = ev->width;
+        wc.height = ev->height;
+        wc.border_width = ev->border_width;
+        wc.sibling = ev->above;
+        wc.stack_mode = ev->detail;
+        XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
+    }
     XSync(dpy, False);
 }
 
diff --git a/main.c b/main.c
@@ -4,7 +4,6 @@
  */
 
 #include "dwm.h"
-
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -15,7 +14,6 @@
 #include <X11/Xatom.h>
 #include <X11/Xproto.h>
 
-
 /* static */
 
 static int (*xerrorxlib)(Display *, XErrorEvent *);
@@ -165,6 +163,7 @@ main(int argc, char *argv[])
     int i;
     unsigned int mask;
     fd_set rd;
+    Bool readin = True;
     Window w;
     XEvent ev;
     XSetWindowAttributes wa;
@@ -251,7 +250,8 @@ main(int argc, char *argv[])
     /* main event loop, reads status text from stdin as well */
     while(running) {
         FD_ZERO(&rd);
-        FD_SET(STDIN_FILENO, &rd);
+        if(readin)
+            FD_SET(STDIN_FILENO, &rd);
         FD_SET(ConnectionNumber(dpy), &rd);
 
         i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0);
@@ -267,11 +267,12 @@ main(int argc, char *argv[])
                         (handler[ev.type])(&ev); /* call handler */
                 }
             }
-            if(FD_ISSET(STDIN_FILENO, &rd)) {
-                if(!fgets(stext, sizeof(stext), stdin))
-                    break;
-                else 
+            if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
+                readin = NULL != fgets(stext, sizeof(stext), stdin);
+                if(readin)
                     stext[strlen(stext) - 1] = 0;
+                else 
+                    strcpy(stext, "broken pipe");
                 drawstatus();
             }
         }
diff --git a/tag.c b/tag.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <regex.h>
 #include <stdio.h>
 #include <string.h>
@@ -86,26 +85,26 @@ dotile(Arg *arg)
             if(n == 1) {
                 c->x = sx;
                 c->y = sy + bh;
-                c->w = sw - 2 * c->border;
-                c->h = sh - 2 * c->border - bh;
+                c->w = sw - 2;
+                c->h = sh - 2 - bh;
             }
             else if(i == 0) {
                 c->x = sx;
                 c->y = sy + bh;
-                c->w = mw - 2 * c->border;
-                c->h = sh - 2 * c->border - bh;
+                c->w = mw - 2;
+                c->h = sh - 2 - bh;
             }
             else if(h > bh) {
                 c->x = sx + mw;
                 c->y = sy + (i - 1) * h + bh;
-                c->w = w - 2 * c->border;
-                c->h = h - 2 * c->border;
+                c->w = w - 2;
+                c->h = h - 2;
             }
             else { /* fallback if h < bh */
                 c->x = sx + mw;
                 c->y = sy + bh;
-                c->w = w - 2 * c->border;
-                c->h = sh - 2 * c->border - bh;
+                c->w = w - 2;
+                c->h = sh - 2 - bh;
             }
             resize(c, False, TopLeft);
             i++;
diff --git a/util.c b/util.c
@@ -3,7 +3,6 @@
  * See LICENSE file for license details.
  */
 #include "dwm.h"
-
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>