URI: 
       made bar togglalble - dwm - dynamic window manager
  HTML git clone https://git.parazyd.org/dwm
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 2aef8b9b4ce0900d241c60cb3a07e111c825d13a
   DIR parent d96307cbe4f8beee03811754f6304a810a7860e5
  HTML Author: Anselm R. Garbe <arg@suckless.org>
       Date:   Tue, 15 May 2007 12:09:18 +0200
       
       made bar togglalble
       Diffstat:
         M config.arg.h                        |       3 ++-
         M config.default.h                    |       3 ++-
         M dwm.h                               |      21 ++++++++++++---------
         M layout.c                            |       6 ++++++
         M main.c                              |      32 ++++++++++++++++++++++++-------
       
       5 files changed, 47 insertions(+), 18 deletions(-)
       ---
   DIR diff --git a/config.arg.h b/config.arg.h
       @@ -3,6 +3,7 @@
         * See LICENSE file for license details. */
        
        /* appearance */
       +#define BARPOS                        BarTop /* BarBot, BarOff */
        #define BORDERPX                1
        #define FONT                        "-*-pixelcarnage monospace-*-r-*-*-14-*-*-*-*-*-*-*"
        #define NORMBORDERCOLOR                "#333"
       @@ -11,7 +12,6 @@
        #define SELBORDERCOLOR                "#8c8"
        #define SELBGCOLOR                "#555"
        #define SELFGCOLOR                "#fff"
       -#define TOPBAR                        True                /* False */
        
        /* tagging */
        #define TAGS \
       @@ -47,6 +47,7 @@ static Key key[] = { \
                { MODKEY|ShiftMask,                XK_Return,        spawn, \
                        "exec urxvtcd -tr -bg '#222' -fg '#eee' -cr '#eee' +sb -fn '"FONT"'" }, \
                { MODKEY,                        XK_space,        setlayout,        NULL }, \
       +        { MODKEY,                        XK_b,                togglebar,        NULL }, \
                { MODKEY,                        XK_h,                incmasterw,        "-32" }, \
                { MODKEY,                        XK_l,                incmasterw,        "32" }, \
                { MODKEY|ShiftMask,                XK_j,                incnmaster,        "1" }, \
   DIR diff --git a/config.default.h b/config.default.h
       @@ -3,6 +3,7 @@
         * See LICENSE file for license details. */
        
        /* appearance */
       +#define BARPOS                        BarTop /* BarBot, BarOff */
        #define BORDERPX                1
        #define FONT                        "-*-fixed-medium-r-normal-*-13-*-*-*-*-*-*-*"
        #define NORMBORDERCOLOR                "#dddddd"
       @@ -11,7 +12,6 @@
        #define SELBORDERCOLOR                "#ff0000"
        #define SELBGCOLOR                "#006699"
        #define SELFGCOLOR                "#ffffff"
       -#define TOPBAR                        True                /* False */
        
        /* tagging */
        #define TAGS \
       @@ -45,6 +45,7 @@ static Key key[] = { \
                { MODKEY|ShiftMask,                XK_Return,        spawn,                "exec xterm" }, \
                { MODKEY,                        XK_p,                spawn,                 "exe=`dmenu_path | dmenu` && exec $exe" }, \
                { MODKEY,                        XK_space,        setlayout,        NULL }, \
       +        { MODKEY,                        XK_b,                togglebar,        NULL }, \
                { MODKEY,                        XK_h,                incmasterw,        "-32" }, \
                { MODKEY,                        XK_l,                incmasterw,        "32" }, \
                { MODKEY|ShiftMask,                XK_j,                incnmaster,        "1" }, \
   DIR diff --git a/dwm.h b/dwm.h
       @@ -37,10 +37,11 @@
        /* mask shorthands, used in event.c and client.c */
        #define BUTTONMASK                (ButtonPressMask | ButtonReleaseMask)
        
       -enum { NetSupported, NetWMName, NetLast };                /* EWMH atoms */
       -enum { WMProtocols, WMDelete, WMState, WMLast };        /* default atoms */
       +enum { BarTop, BarBot, BarOff };                        /* bar position */
        enum { CurNormal, CurResize, CurMove, CurLast };        /* cursor */
        enum { ColBorder, ColFG, ColBG, ColLast };                /* color */
       +enum { NetSupported, NetWMName, NetLast };                /* EWMH atoms */
       +enum { WMProtocols, WMDelete, WMState, WMLast };        /* default atoms */
        
        typedef struct Client Client;
        struct Client {
       @@ -83,7 +84,7 @@ extern const char *tags[];                /* all tags */
        char stext[256];                        /* status text */
        int screen, sx, sy, sw, sh;                /* screen geometry */
        int wax, way, wah, waw;                        /* windowarea geometry */
       -unsigned int bh, blw;                        /* bar height, bar layout label width */
       +unsigned int bh, blw, bpos;                /* bar height, bar layout label width, bar position */
        unsigned int ntags, numlockmask;        /* number of tags, dynamic lock mask */
        void (*handler[LASTEvent])(XEvent *);        /* event handler */
        Atom wmatom[WMLast], netatom[NetLast];
       @@ -100,13 +101,13 @@ void attach(Client *c);                        /* attaches c to global client list */
        void configure(Client *c);                /* send synthetic configure event */
        void detach(Client *c);                        /* detaches c from global client list */
        void focus(Client *c);                        /* focus c, c may be NULL */
       -void focustopvisible(void);            /* focus top visible window on stack */
       -void killclient(const char *arg);                /* kill sel  nicely */
       +void focustopvisible(void);                /* focus top visible window on stack */
       +void killclient(const char *arg);        /* kill sel  nicely */
        void manage(Window w, XWindowAttributes *wa);        /* manage new client */
        void resize(Client *c, int x, int y,
                        int w, int h, Bool sizehints);        /* resize with given coordinates c*/
        void togglefloating(const char *arg);        /* toggles sel between floating/tiled state */
       -void updatesizehints(Client *c);                /* update the size hint variables of c */
       +void updatesizehints(Client *c);        /* update the size hint variables of c */
        void updatetitle(Client *c);                /* update the name of c */
        void unmanage(Client *c);                /* destroy c */
        
       @@ -126,11 +127,13 @@ void incnmaster(const char *arg);        /* increments nmaster with arg's index value *
        void initlayouts(void);                        /* initialize layout array */
        Client *nexttiled(Client *c);                /* returns tiled successor of c */
        void restack(void);                        /* restores z layers of all clients */
       -void setlayout(const char *arg);                /* sets layout, -1 toggles */
       -void togglemax(const char *arg);                /* toggles maximization of floating client */
       +void setlayout(const char *arg);        /* sets layout, -1 toggles */
       +void togglebar(const char *arg);        /* shows/hides the bar */
       +void togglemax(const char *arg);        /* toggles maximization of floating client */
        void zoom(const char *arg);                /* zooms the focused client to master area, arg is ignored */
        
        /* main.c */
       +void updatebarpos(void);                /* updates the bar position */
        void quit(const char *arg);                /* quit dwm nicely */
        int xerror(Display *dsply, XErrorEvent *ee);        /* dwm's X error handler */
        
       @@ -139,7 +142,7 @@ void compileregs(void);                        /* initialize regexps of rules defined in config.h */
        Bool isvisible(Client *c);                /* returns True if client is visible */
        void settags(Client *c, Client *trans);        /* sets tags of c */
        void tag(const char *arg);                /* tags sel with arg's index */
       -void toggletag(const char *arg);                /* toggles sel tags with arg's index */
       +void toggletag(const char *arg);        /* toggles sel tags with arg's index */
        void toggleview(const char *arg);        /* toggles the tag with arg's index (in)visible */
        void view(const char *arg);                /* views the tag with arg's index */
        
   DIR diff --git a/layout.c b/layout.c
       @@ -217,6 +217,12 @@ setlayout(const char *arg) {
        }
        
        void
       +togglebar(const char *arg) {
       +        bpos = (bpos == BarOff) ? BARPOS : BarOff;
       +        updatebarpos();
       +}
       +
       +void
        togglemax(const char *arg) {
                XEvent ev;
        
   DIR diff --git a/main.c b/main.c
       @@ -18,7 +18,7 @@
        
        char stext[256];
        int screen, sx, sy, sw, sh, wax, way, waw, wah;
       -unsigned int bh, ntags, numlockmask;
       +unsigned int bh, bpos, ntags, numlockmask;
        Atom wmatom[WMLast], netatom[NetLast];
        Bool *seltag;
        Bool selscreen = True;
       @@ -190,17 +190,13 @@ setup(void) {
                wa.override_redirect = 1;
                wa.background_pixmap = ParentRelative;
                wa.event_mask = ButtonPressMask | ExposureMask;
       -        barwin = XCreateWindow(dpy, root, sx, sy + (TOPBAR ? 0 : sh - bh), sw, bh, 0,
       +        barwin = XCreateWindow(dpy, root, sx, sy - bh, sw, bh, 0,
                                DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen),
                                CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
                XDefineCursor(dpy, barwin, cursor[CurNormal]);
       +        updatebarpos();
                XMapRaised(dpy, barwin);
                strcpy(stext, "dwm-"VERSION);
       -        /* windowarea */
       -        wax = sx;
       -        way = sy + (TOPBAR ? bh : 0);
       -        wah = sh - bh;
       -        waw = sw;
                /* pixmap for everything */
                dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
                dc.gc = XCreateGC(dpy, root, 0, 0);
       @@ -228,6 +224,28 @@ quit(const char *arg) {
                readin = running = False;
        }
        
       +void
       +updatebarpos(void) {
       +        wax = sx;
       +        way = sy;
       +        wah = sh;
       +        waw = sw;
       +        switch(bpos) {
       +        case BarTop:
       +                wah -= bh;
       +                way += bh;
       +                XMoveWindow(dpy, barwin, sx, sy);
       +                break;
       +        case BarBot:
       +                wah -= bh;
       +                XMoveWindow(dpy, barwin, sx, sy + wah);
       +                break;
       +        case BarOff:
       +                XMoveWindow(dpy, barwin, sx, sy - bh);
       +        }
       +        lt->arrange();
       +}
       +
        /* There's no way to check accesses to destroyed windows, thus those cases are
         * ignored (especially on UnmapNotify's).  Other types of errors call Xlibs
         * default error handler, which may call exit.