JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
renamed floating into swimming (this does not clash with C naming conventions and...
authorAnselm R. Garbe <arg@suckless.org>
Mon, 19 Feb 2007 16:00:32 +0000 (17:00 +0100)
committerAnselm R. Garbe <arg@suckless.org>
Mon, 19 Feb 2007 16:00:32 +0000 (17:00 +0100)
client.c
config.arg.h
config.default.h
dwm.1
dwm.h
event.c
screen.c

index 48b4167..e312a9a 100644 (file)
--- a/client.c
+++ b/client.c
@@ -253,8 +253,8 @@ manage(Window w, XWindowAttributes *wa) {
        updatetitle(c);
        for(t = clients; t && t->win != trans; t = t->next);
        settags(c, t);
        updatetitle(c);
        for(t = clients; t && t->win != trans; t = t->next);
        settags(c, t);
-       if(!c->isfloat)
-               c->isfloat = (t != NULL) || c->isfixed;
+       if(!c->swimming)
+               c->swimming = (t != NULL) || c->isfixed;
        attach(c);
        attachstack(c);
        c->isbanned = True;
        attach(c);
        attachstack(c);
        c->isbanned = True;
@@ -268,7 +268,7 @@ manage(Window w, XWindowAttributes *wa) {
 
 Client *
 nexttiled(Client *c) {
 
 Client *
 nexttiled(Client *c) {
-       for(; c && (c->isfloat || !isvisible(c)); c = c->next);
+       for(; c && (c->swimming || !isvisible(c)); c = c->next);
        return c;
 }
 
        return c;
 }
 
@@ -440,7 +440,7 @@ zoom(Arg *arg) {
 
        if(!sel)
                return;
 
        if(!sel)
                return;
-       if(sel->isfloat || (lt->arrange == dofloat)) {
+       if(sel->swimming || (lt->arrange == swim)) {
                togglemax(sel);
                return;
        }
                togglemax(sel);
                return;
        }
index 67069a6..7b54ca2 100644 (file)
@@ -8,8 +8,8 @@ const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL };
 #define LAYOUTS \
 static Layout layout[] = { \
        /* symbol               function */ \
 #define LAYOUTS \
 static Layout layout[] = { \
        /* symbol               function */ \
-       { "[]=",                dotile }, /* first entry is default */ \
-       { "><>",                dofloat }, \
+       { "[]=",                tile }, /* first entry is default */ \
+       { "><>",                swim }, \
 };
 
 #define BORDERPX               1
 };
 
 #define BORDERPX               1
@@ -64,7 +64,7 @@ static Key key[] = { \
        { MODKEY|ControlMask|ShiftMask, XK_9,           toggletag,      { .i = 8 } }, \
        { MODKEY|ShiftMask,             XK_c,           killclient,     { 0 } }, \
        { MODKEY,                       XK_space,       togglelayout,   { 0 } }, \
        { MODKEY|ControlMask|ShiftMask, XK_9,           toggletag,      { .i = 8 } }, \
        { MODKEY|ShiftMask,             XK_c,           killclient,     { 0 } }, \
        { MODKEY,                       XK_space,       togglelayout,   { 0 } }, \
-       { MODKEY|ShiftMask,             XK_space,       togglefloat,    { 0 } }, \
+       { MODKEY|ShiftMask,             XK_space,       toggleswimming, { 0 } }, \
        { MODKEY,                       XK_0,           view,           { .i = -1 } }, \
        { MODKEY,                       XK_1,           view,           { .i = 0 } }, \
        { MODKEY,                       XK_2,           view,           { .i = 1 } }, \
        { MODKEY,                       XK_0,           view,           { .i = -1 } }, \
        { MODKEY,                       XK_1,           view,           { .i = 0 } }, \
        { MODKEY,                       XK_2,           view,           { .i = 1 } }, \
@@ -89,7 +89,7 @@ static Key key[] = { \
 
 #define RULES \
 static Rule rule[] = { \
 
 #define RULES \
 static Rule rule[] = { \
-       /* class:instance:title regex   tags regex      isfloat */ \
+       /* class:instance:title regex   tags regex      swimming */ \
        { "Firefox",                    "3",            False }, \
        { "Gimp",                       NULL,           True }, \
        { "MPlayer",                    NULL,           True }, \
        { "Firefox",                    "3",            False }, \
        { "Gimp",                       NULL,           True }, \
        { "MPlayer",                    NULL,           True }, \
index c318973..1b6b349 100644 (file)
@@ -8,8 +8,8 @@ const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL };
 #define LAYOUTS \
 Layout layout[] = { \
        /* symbol               function */ \
 #define LAYOUTS \
 Layout layout[] = { \
        /* symbol               function */ \
-       { "[]=",                dotile }, /* first entry is default */ \
-       { "><>",                dofloat }, \
+       { "[]=",                tile }, /* first entry is default */ \
+       { "><>",                swim }, \
 };
 
 #define BORDERPX               1
 };
 
 #define BORDERPX               1
@@ -59,7 +59,7 @@ static Key key[] = { \
        { MODKEY|ControlMask|ShiftMask, XK_9,           toggletag,      { .i = 8 } }, \
        { MODKEY|ShiftMask,             XK_c,           killclient,     { 0 } }, \
        { MODKEY,                       XK_space,       togglelayout,   { 0 } }, \
        { MODKEY|ControlMask|ShiftMask, XK_9,           toggletag,      { .i = 8 } }, \
        { MODKEY|ShiftMask,             XK_c,           killclient,     { 0 } }, \
        { MODKEY,                       XK_space,       togglelayout,   { 0 } }, \
-       { MODKEY|ShiftMask,             XK_space,       togglefloat,    { 0 } }, \
+       { MODKEY|ShiftMask,             XK_space,       toggleswimming, { 0 } }, \
        { MODKEY,                       XK_0,           view,           { .i = -1 } }, \
        { MODKEY,                       XK_1,           view,           { .i = 0 } }, \
        { MODKEY,                       XK_2,           view,           { .i = 1 } }, \
        { MODKEY,                       XK_0,           view,           { .i = -1 } }, \
        { MODKEY,                       XK_1,           view,           { .i = 0 } }, \
        { MODKEY,                       XK_2,           view,           { .i = 1 } }, \
@@ -86,7 +86,7 @@ static Key key[] = { \
  * xprop | awk -F '"' '/^WM_CLASS/ { printf("%s:%s:",$4,$2) }; /^WM_NAME/ { printf("%s\n",$2) }' */
 #define RULES \
 static Rule rule[] = { \
  * xprop | awk -F '"' '/^WM_CLASS/ { printf("%s:%s:",$4,$2) }; /^WM_NAME/ { printf("%s\n",$2) }' */
 #define RULES \
 static Rule rule[] = { \
-       /* class:instance:title regex   tags regex      isfloat */ \
+       /* class:instance:title regex   tags regex      swimming */ \
        { "Gimp",                       NULL,           True }, \
        { "MPlayer",                    NULL,           True }, \
        { "Acroread",                   NULL,           True }, \
        { "Gimp",                       NULL,           True }, \
        { "MPlayer",                    NULL,           True }, \
        { "Acroread",                   NULL,           True }, \
diff --git a/dwm.1 b/dwm.1
index 2024f77..c48e853 100644 (file)
--- a/dwm.1
+++ b/dwm.1
@@ -6,13 +6,13 @@ dwm \- dynamic window manager
 .RB [ \-v ]
 .SH DESCRIPTION
 dwm is a dynamic window manager for X. It manages windows in tiling and
 .RB [ \-v ]
 .SH DESCRIPTION
 dwm is a dynamic window manager for X. It manages windows in tiling and
-floating layouts. Either layout can be applied dynamically, optimizing the
+swimming layouts. Either layout can be applied dynamically, optimizing the
 environment for the application in use and the task performed.
 .P
 In tiling layout windows are managed in a master and stacking area. The master
 area contains the windows which currently need most attention, whereas the
 environment for the application in use and the task performed.
 .P
 In tiling layout windows are managed in a master and stacking area. The master
 area contains the windows which currently need most attention, whereas the
-stacking area contains all other windows. In floating layout windows can be
-resized and moved freely. Dialog windows are always managed floating,
+stacking area contains all other windows. In swimming layout windows can be
+resized and moved freely. Dialog windows are always managed swimming,
 regardless of the layout applied.
 .P
 Windows are grouped by tags. Each window can be tagged with one or multiple
 regardless of the layout applied.
 .P
 Windows are grouped by tags. Each window can be tagged with one or multiple
@@ -38,7 +38,7 @@ is read and displayed in the status text area.
 .TP
 .B Button1
 click on a tag label to display all windows with that tag, click on the layout
 .TP
 .B Button1
 click on a tag label to display all windows with that tag, click on the layout
-label toggles between tiling and floating layout.
+label toggles between tiling and swimming layout.
 .TP
 .B Button3
 click on a tag label adds/removes all windows with that tag to/from the view.
 .TP
 .B Button3
 click on a tag label adds/removes all windows with that tag to/from the view.
@@ -67,7 +67,7 @@ Focus next window.
 Focus previous window.
 .TP
 .B Mod1-Return
 Focus previous window.
 .TP
 .B Mod1-Return
-Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (floating layout).
+Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (swimming layout).
 .TP
 .B Mod1-g
 Grow master area (tiling layout only).
 .TP
 .B Mod1-g
 Grow master area (tiling layout only).
@@ -98,10 +98,10 @@ tag to/from current window.
 Close focused window.
 .TP
 .B Mod1-space
 Close focused window.
 .TP
 .B Mod1-space
-Toggle between tiling and floating layout (affects all windows).
+Toggle between tiling and swimming layout (affects all windows).
 .TP
 .B Mod1-Shift-space
 .TP
 .B Mod1-Shift-space
-Toggle focused window between floating and non-floating state (tiling layout only).
+Toggle focused window between swimming and non-swimming state (tiling layout only).
 .TP
 .B Mod1-[1..n]
 View all windows with
 .TP
 .B Mod1-[1..n]
 View all windows with
@@ -121,13 +121,13 @@ Quit dwm.
 .SS Mouse commands
 .TP
 .B Mod1-Button1
 .SS Mouse commands
 .TP
 .B Mod1-Button1
-Move current window while dragging (floating layout only).
+Move current window while dragging (swimming layout only).
 .TP
 .B Mod1-Button2
 .TP
 .B Mod1-Button2
-Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (floating layout).
+Zooms/cycles current window to/from master area (tiling layout), toggles maximization of current window (swimming layout).
 .TP
 .B Mod1-Button3
 .TP
 .B Mod1-Button3
-Resize current window while dragging (floating layout only).
+Resize current window while dragging (swimming layout only).
 .SH CUSTOMIZATION
 dwm is customized by creating a custom config.h and (re)compiling the source
 code. This keeps it fast, secure and simple.
 .SH CUSTOMIZATION
 dwm is customized by creating a custom config.h and (re)compiling the source
 code. This keeps it fast, secure and simple.
diff --git a/dwm.h b/dwm.h
index 822c33b..0d63341 100644 (file)
--- a/dwm.h
+++ b/dwm.h
@@ -72,7 +72,7 @@ struct Client {
        int minax, minay, maxax, maxay;
        long flags; 
        unsigned int border;
        int minax, minay, maxax, maxay;
        long flags; 
        unsigned int border;
-       Bool isbanned, isfixed, isfloat, ismax;
+       Bool isbanned, isfixed, ismax, swimming;
        Bool *tags;
        Client *next;
        Client *prev;
        Bool *tags;
        Client *next;
        Client *prev;
@@ -129,16 +129,15 @@ extern int xerror(Display *dsply, XErrorEvent *ee);       /* dwm's X error handler */
 
 /* screen.c */
 extern void compileregs(void);                 /* initialize regexps of rules defined in config.h */
 
 /* screen.c */
 extern void compileregs(void);                 /* initialize regexps of rules defined in config.h */
-extern void dofloat(void);                     /* arranges all windows floating */
-extern void dotile(void);                      /* arranges all windows tiled */
 extern void incnmaster(Arg *arg);              /* increments nmaster with arg's index value */
 extern void initlayouts(void);                 /* initialize layout array */
 extern Bool isvisible(Client *c);              /* returns True if client is visible */
 extern void resizemaster(Arg *arg);            /* resizes the master percent with arg's index value */
 extern void restack(void);                     /* restores z layers of all clients */
 extern void settags(Client *c, Client *trans); /* sets tags of c */
 extern void incnmaster(Arg *arg);              /* increments nmaster with arg's index value */
 extern void initlayouts(void);                 /* initialize layout array */
 extern Bool isvisible(Client *c);              /* returns True if client is visible */
 extern void resizemaster(Arg *arg);            /* resizes the master percent with arg's index value */
 extern void restack(void);                     /* restores z layers of all clients */
 extern void settags(Client *c, Client *trans); /* sets tags of c */
+extern void swim(void);                                /* arranges all windows swimming */
 extern void tag(Arg *arg);                     /* tags c with arg's index */
 extern void tag(Arg *arg);                     /* tags c with arg's index */
-extern void togglefloat(Arg *arg);             /* toggles focusesd client between floating/non-floating state */
+extern void toggleswimming(Arg *arg);          /* toggles focusesd client between swimming/and non-swimming state */
 extern void togglelayout(Arg *arg);            /* toggles layout */
 extern void toggletag(Arg *arg);               /* toggles c tags with arg's index */
 extern void toggleview(Arg *arg);              /* toggles the tag with arg's index (in)visible */
 extern void togglelayout(Arg *arg);            /* toggles layout */
 extern void toggletag(Arg *arg);               /* toggles c tags with arg's index */
 extern void toggleview(Arg *arg);              /* toggles the tag with arg's index (in)visible */
diff --git a/event.c b/event.c
index d200a8d..b8036fc 100644 (file)
--- a/event.c
+++ b/event.c
@@ -156,14 +156,14 @@ buttonpress(XEvent *e) {
                focus(c);
                if(CLEANMASK(ev->state) != MODKEY)
                        return;
                focus(c);
                if(CLEANMASK(ev->state) != MODKEY)
                        return;
-               if(ev->button == Button1 && (lt->arrange == dofloat || c->isfloat)) {
+               if(ev->button == Button1 && (lt->arrange == swim || c->swimming)) {
                        restack();
                        movemouse(c);
                }
                else if(ev->button == Button2)
                        zoom(NULL);
                else if(ev->button == Button3
                        restack();
                        movemouse(c);
                }
                else if(ev->button == Button2)
                        zoom(NULL);
                else if(ev->button == Button3
-               && (lt->arrange == dofloat || c->isfloat) && !c->isfixed)
+               && (lt->arrange == swim || c->swimming) && !c->isfixed)
                {
                        restack();
                        resizemouse(c);
                {
                        restack();
                        resizemouse(c);
@@ -181,7 +181,7 @@ configurerequest(XEvent *e) {
                c->ismax = False;
                if(ev->value_mask & CWBorderWidth)
                        c->border = ev->border_width;
                c->ismax = False;
                if(ev->value_mask & CWBorderWidth)
                        c->border = ev->border_width;
-               if(c->isfixed || c->isfloat || (lt->arrange == dofloat)) {
+               if(c->isfixed || c->swimming || (lt->arrange == swim)) {
                        if(ev->value_mask & CWX)
                                c->x = ev->x;
                        if(ev->value_mask & CWY)
                        if(ev->value_mask & CWX)
                                c->x = ev->x;
                        if(ev->value_mask & CWY)
@@ -309,7 +309,7 @@ propertynotify(XEvent *e) {
                        default: break;
                        case XA_WM_TRANSIENT_FOR:
                                XGetTransientForHint(dpy, c->win, &trans);
                        default: break;
                        case XA_WM_TRANSIENT_FOR:
                                XGetTransientForHint(dpy, c->win, &trans);
-                               if(!c->isfloat && (c->isfloat = (trans != 0)))
+                               if(!c->swimming && (c->swimming = (getclient(trans) != NULL)))
                                        lt->arrange();
                                break;
                        case XA_WM_NORMAL_HINTS:
                                        lt->arrange();
                                break;
                        case XA_WM_NORMAL_HINTS:
index 3f186e6..8086bd0 100644 (file)
--- a/screen.c
+++ b/screen.c
@@ -19,7 +19,7 @@ Layout *lt = NULL;
 typedef struct {
        const char *prop;
        const char *tags;
 typedef struct {
        const char *prop;
        const char *tags;
-       Bool isfloat;
+       Bool swimming;
 } Rule;
 
 typedef struct {
 } Rule;
 
 typedef struct {
@@ -27,7 +27,6 @@ typedef struct {
        regex_t *tagregex;
 } Regs;
 
        regex_t *tagregex;
 } Regs;
 
-LAYOUTS
 TAGS
 RULES
 
 TAGS
 RULES
 
@@ -35,60 +34,8 @@ static Regs *regs = NULL;
 static unsigned int nrules = 0;
 static unsigned int nlayouts = 0;
 
 static unsigned int nrules = 0;
 static unsigned int nlayouts = 0;
 
-/* extern */
-
-void
-compileregs(void) {
-       unsigned int i;
-       regex_t *reg;
-
-       if(regs)
-               return;
-       nrules = sizeof rule / sizeof rule[0];
-       regs = emallocz(nrules * sizeof(Regs));
-       for(i = 0; i < nrules; i++) {
-               if(rule[i].prop) {
-                       reg = emallocz(sizeof(regex_t));
-                       if(regcomp(reg, rule[i].prop, REG_EXTENDED))
-                               free(reg);
-                       else
-                               regs[i].propregex = reg;
-               }
-               if(rule[i].tags) {
-                       reg = emallocz(sizeof(regex_t));
-                       if(regcomp(reg, rule[i].tags, REG_EXTENDED))
-                               free(reg);
-                       else
-                               regs[i].tagregex = reg;
-               }
-       }
-}
-
-void
-dofloat(void) {
-       Client *c;
-
-       for(c = clients; c; c = c->next) {
-               if(isvisible(c)) {
-                       if(c->isbanned)
-                               XMoveWindow(dpy, c->win, c->x, c->y);
-                       c->isbanned = False;
-                       resize(c, c->x, c->y, c->w, c->h, True);
-               }
-               else {
-                       c->isbanned = True;
-                       XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
-               }
-       }
-       if(!sel || !isvisible(sel)) {
-               for(c = stack; c && !isvisible(c); c = c->snext);
-               focus(c);
-       }
-       restack();
-}
-
-void
-dotile(void) {
+static void
+tile(void) {
        unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
        Client *c;
 
        unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th;
        Client *c;
 
@@ -105,7 +52,7 @@ dotile(void) {
                        if(c->isbanned)
                                XMoveWindow(dpy, c->win, c->x, c->y);
                        c->isbanned = False;
                        if(c->isbanned)
                                XMoveWindow(dpy, c->win, c->x, c->y);
                        c->isbanned = False;
-                       if(c->isfloat)
+                       if(c->swimming)
                                continue;
                        c->ismax = False;
                        nx = wax;
                                continue;
                        c->ismax = False;
                        nx = wax;
@@ -139,9 +86,40 @@ dotile(void) {
        restack();
 }
 
        restack();
 }
 
+LAYOUTS
+
+/* extern */
+
+void
+compileregs(void) {
+       unsigned int i;
+       regex_t *reg;
+
+       if(regs)
+               return;
+       nrules = sizeof rule / sizeof rule[0];
+       regs = emallocz(nrules * sizeof(Regs));
+       for(i = 0; i < nrules; i++) {
+               if(rule[i].prop) {
+                       reg = emallocz(sizeof(regex_t));
+                       if(regcomp(reg, rule[i].prop, REG_EXTENDED))
+                               free(reg);
+                       else
+                               regs[i].propregex = reg;
+               }
+               if(rule[i].tags) {
+                       reg = emallocz(sizeof(regex_t));
+                       if(regcomp(reg, rule[i].tags, REG_EXTENDED))
+                               free(reg);
+                       else
+                               regs[i].tagregex = reg;
+               }
+       }
+}
+
 void
 incnmaster(Arg *arg) {
 void
 incnmaster(Arg *arg) {
-       if((lt->arrange == dofloat) || (nmaster + arg->i < 1)
+       if((lt->arrange != tile) || (nmaster + arg->i < 1)
        || (wah / (nmaster + arg->i) <= 2 * BORDERPX))
                return;
        nmaster += arg->i;
        || (wah / (nmaster + arg->i) <= 2 * BORDERPX))
                return;
        nmaster += arg->i;
@@ -176,7 +154,7 @@ isvisible(Client *c) {
 
 void
 resizemaster(Arg *arg) {
 
 void
 resizemaster(Arg *arg) {
-       if(lt->arrange != dotile)
+       if(lt->arrange != tile)
                return;
        if(arg->i == 0)
                master = MASTER;
                return;
        if(arg->i == 0)
                master = MASTER;
@@ -197,10 +175,10 @@ restack(void) {
        drawstatus();
        if(!sel)
                return;
        drawstatus();
        if(!sel)
                return;
-       if(sel->isfloat || lt->arrange == dofloat)
+       if(sel->swimming || lt->arrange == swim)
                XRaiseWindow(dpy, sel->win);
                XRaiseWindow(dpy, sel->win);
-       if(lt->arrange != dofloat) {
-               if(!sel->isfloat)
+       if(lt->arrange != swim) {
+               if(!sel->swimming)
                        XLowerWindow(dpy, sel->win);
                for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
                        if(c == sel)
                        XLowerWindow(dpy, sel->win);
                for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
                        if(c == sel)
@@ -230,7 +208,7 @@ settags(Client *c, Client *trans) {
                                ch.res_name ? ch.res_name : "", c->name);
                for(i = 0; i < nrules; i++)
                        if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) {
                                ch.res_name ? ch.res_name : "", c->name);
                for(i = 0; i < nrules; i++)
                        if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) {
-                               c->isfloat = rule[i].isfloat;
+                               c->swimming = rule[i].swimming;
                                for(j = 0; regs[i].tagregex && j < ntags; j++) {
                                        if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {
                                                matched = True;
                                for(j = 0; regs[i].tagregex && j < ntags; j++) {
                                        if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {
                                                matched = True;
@@ -249,6 +227,29 @@ settags(Client *c, Client *trans) {
 }
 
 void
 }
 
 void
+swim(void) {
+       Client *c;
+
+       for(c = clients; c; c = c->next) {
+               if(isvisible(c)) {
+                       if(c->isbanned)
+                               XMoveWindow(dpy, c->win, c->x, c->y);
+                       c->isbanned = False;
+                       resize(c, c->x, c->y, c->w, c->h, True);
+               }
+               else {
+                       c->isbanned = True;
+                       XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+               }
+       }
+       if(!sel || !isvisible(sel)) {
+               for(c = stack; c && !isvisible(c); c = c->snext);
+               focus(c);
+       }
+       restack();
+}
+
+void
 tag(Arg *arg) {
        unsigned int i;
 
 tag(Arg *arg) {
        unsigned int i;
 
@@ -262,10 +263,10 @@ tag(Arg *arg) {
 }
 
 void
 }
 
 void
-togglefloat(Arg *arg) {
-       if(!sel || lt->arrange == dofloat)
+toggleswimming(Arg *arg) {
+       if(!sel || lt->arrange == swim)
                return;
                return;
-       sel->isfloat = !sel->isfloat;
+       sel->swimming = !sel->swimming;
        lt->arrange();
 }
 
        lt->arrange();
 }