t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 95e8d12b7189d4cd01b8ae8ecebfa5835a1809e6
   DIR parent a55f0e12fe5c1205f4d3e40c164fd087224fad7a
   URI 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:
         M client.c                            |      32 ++++++++++---------------------
         M config.arg.h                        |      18 +++++++++---------
         M config.h                            |      18 +++++++++---------
         M draw.c                              |       1 -
         M dwm.h                               |       4 ++--
         M event.c                             |      65 ++++++++++++++++++++++---------
         M main.c                              |      15 ++++++++-------
         M tag.c                               |      17 ++++++++---------
         M util.c                              |       1 -
       
       9 files changed, 92 insertions(+), 79 deletions(-)
       ---
   DIR diff --git a/client.c b/client.c
       t@@ -3,7 +3,6 @@
         * See LICENSE file for license details.
         */
        #include "dwm.h"
       -
        #include <stdlib.h>
        #include <string.h>
        #include <X11/Xatom.h>
       t@@ -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)
       t@@ -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);
        
       t@@ -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) {
       t@@ -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);
        }
        
       t@@ -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);
   DIR diff --git a/config.arg.h b/config.arg.h
       t@@ -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] = { \
       t@@ -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 }; \
   DIR diff --git a/config.h b/config.h
       t@@ -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] = { \
       t@@ -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 }; \
   DIR diff --git a/draw.c b/draw.c
       t@@ -3,7 +3,6 @@
         * See LICENSE file for license details.
         */
        #include "dwm.h"
       -
        #include <stdio.h>
        #include <string.h>
        #include <X11/Xlocale.h>
   DIR diff --git a/dwm.h b/dwm.h
       t@@ -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)
       t@@ -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;
   DIR diff --git a/event.c b/event.c
       t@@ -3,7 +3,6 @@
         * See LICENSE file for license details.
         */
        #include "dwm.h"
       -
        #include <stdlib.h>
        #include <X11/keysym.h>
        #include <X11/Xatom.h>
       t@@ -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);
        }
        
   DIR diff --git a/main.c b/main.c
       t@@ -4,7 +4,6 @@
         */
        
        #include "dwm.h"
       -
        #include <errno.h>
        #include <stdio.h>
        #include <stdlib.h>
       t@@ -15,7 +14,6 @@
        #include <X11/Xatom.h>
        #include <X11/Xproto.h>
        
       -
        /* static */
        
        static int (*xerrorxlib)(Display *, XErrorEvent *);
       t@@ -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;
       t@@ -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);
       t@@ -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();
                                }
                        }
   DIR diff --git a/tag.c b/tag.c
       t@@ -3,7 +3,6 @@
         * See LICENSE file for license details.
         */
        #include "dwm.h"
       -
        #include <regex.h>
        #include <stdio.h>
        #include <string.h>
       t@@ -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++;
   DIR diff --git a/util.c b/util.c
       t@@ -3,7 +3,6 @@
         * See LICENSE file for license details.
         */
        #include "dwm.h"
       -
        #include <stdarg.h>
        #include <stdio.h>
        #include <stdlib.h>