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