aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.arg.h2
-rw-r--r--config.default.h6
-rw-r--r--dwm.h2
-rw-r--r--event.c3
-rw-r--r--screen.c37
5 files changed, 29 insertions, 21 deletions
diff --git a/config.arg.h b/config.arg.h
index 0e044bf..423e935 100644
--- a/config.arg.h
+++ b/config.arg.h
@@ -63,7 +63,7 @@ static Key key[] = { \
{ MODKEY|ControlMask|ShiftMask, XK_8, toggletag, { .i = 7 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_9, toggletag, { .i = 8 } }, \
{ MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \
- { MODKEY, XK_space, togglelayout, { 0 } }, \
+ { MODKEY, XK_space, setlayout, { .i = -1 } }, \
{ MODKEY|ShiftMask, XK_space, toggleversatile,{ 0 } }, \
{ MODKEY, XK_0, view, { .i = -1 } }, \
{ MODKEY, XK_1, view, { .i = 0 } }, \
diff --git a/config.default.h b/config.default.h
index 8bf674f..b29d1a4 100644
--- a/config.default.h
+++ b/config.default.h
@@ -58,8 +58,8 @@ static Key key[] = { \
{ MODKEY|ControlMask|ShiftMask, XK_8, toggletag, { .i = 7 } }, \
{ MODKEY|ControlMask|ShiftMask, XK_9, toggletag, { .i = 8 } }, \
{ MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \
- { MODKEY, XK_space, togglelayout, { 0 } }, \
- { MODKEY|ShiftMask, XK_space, toggleversatile { 0 } }, \
+ { MODKEY, XK_space, setlayout, { .i = -1 } }, \
+ { MODKEY|ShiftMask, XK_space, toggleversatile,{ 0 } }, \
{ 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[] = { \
- /* class:instance:title regex tags regex versatile */ \
+ /* class:instance:title regex tags regex isversatile */ \
{ "Gimp", NULL, True }, \
{ "MPlayer", NULL, True }, \
{ "Acroread", NULL, True }, \
diff --git a/dwm.h b/dwm.h
index c8546d8..d4cc1fa 100644
--- a/dwm.h
+++ b/dwm.h
@@ -134,10 +134,10 @@ 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 setlayout(Arg *arg); /* sets layout, -1 toggles */
extern void settags(Client *c, Client *trans); /* sets tags of c */
extern void tag(Arg *arg); /* tags c with arg's index */
extern void toggleversatile(Arg *arg); /* toggles focusesd client between versatile/and non-versatile 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 versatile(void); /* arranges all windows versatile */
diff --git a/event.c b/event.c
index b6a77fd..3086284 100644
--- a/event.c
+++ b/event.c
@@ -140,7 +140,8 @@ buttonpress(XEvent *e) {
if(ev->x < x + blw)
switch(ev->button) {
case Button1:
- togglelayout(NULL);
+ a.i = -1;
+ setlayout(&a);
break;
case Button4:
a.i = 1;
diff --git a/screen.c b/screen.c
index 5907ba7..8abe3d7 100644
--- a/screen.c
+++ b/screen.c
@@ -191,6 +191,28 @@ restack(void) {
}
void
+setlayout(Arg *arg) {
+ unsigned int i;
+
+ if(arg->i == -1) {
+ for(i = 0; i < nlayouts && lt != &layout[i]; i++);
+ if(i == nlayouts - 1)
+ lt = &layout[0];
+ else
+ lt = &layout[++i];
+ }
+ else {
+ if(arg->i < 0 || arg->i >= nlayouts)
+ return;
+ lt = &layout[arg->i];
+ }
+ if(sel)
+ lt->arrange();
+ else
+ drawstatus();
+}
+
+void
settags(Client *c, Client *trans) {
char prop[512];
unsigned int i, j;
@@ -253,21 +275,6 @@ toggletag(Arg *arg) {
}
void
-togglelayout(Arg *arg) {
- unsigned int i;
-
- for(i = 0; i < nlayouts && lt != &layout[i]; i++);
- if(i == nlayouts - 1)
- lt = &layout[0];
- else
- lt = &layout[++i];
- if(sel)
- lt->arrange();
- else
- drawstatus();
-}
-
-void
toggleversatile(Arg *arg) {
if(!sel || lt->arrange == versatile)
return;