changeset 782:f1e806b34697

created separated floating space; added per space mode Eventually I realized the plans I had for so long.
author markus schnalke <meillo@marmaro.de>
date Mon, 05 Sep 2011 23:05:08 +0200 (2011-09-05)
parents 1ec698ca43c5
children 49a283c22ef4
files aewl.c config.h
diffstat 2 files changed, 50 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/aewl.c	Mon Sep 05 21:32:16 2011 +0200
+++ b/aewl.c	Mon Sep 05 23:05:08 2011 +0200
@@ -127,11 +127,14 @@
 unsigned int nmaster;		/* number of master clients */
 unsigned int numlockmask;		/* dynamic lock mask */
 void (*handler[LASTEvent])(XEvent *);	/* event handler */
-void (*arrange)(void);			/* arrange function, indicates mode  */
+void arrange(void);			/* arrange */
+void (*arrange1)(void);			/* arrange function, indicates mode  */
+void (*arrange2)(void);			/* arrange function, indicates mode  */
 Atom wmatom[WMLast], netatom[NetLast];
 Bool running = True;
 Bool selscreen = True;
 Bool seltag;
+Bool viewfloats;
 Client* clients = NULL;		/* global client list */
 Client* stack = NULL;		/* global client stack */
 Client* sel = NULL;		/* selected client */
@@ -179,11 +182,12 @@
 void restack(void);			/* restores z layers of all clients */
 
 void toggleview(void);			/* toggle the view */
+void floattoggle();			/* toggle floatsview */
 void focusnext(void);		/* focuses next visible client  */
 void zoom(void);			/* zooms the focused client to master area */
 void killclient(void);		/* kill c nicely */
 void quit(void);			/* quit nicely */
-void togglemode(void);		/* toggles global arrange function (dotile/domax) */
+void togglemode(void);		/* toggles arrange function (dotile/domax) */
 void togglefloat(void);		/* toggles focusesd client between floating/non-floating state */
 void incnmaster(void);		/* increments nmaster */
 void decnmaster(void);		/* decrements nmaster */
@@ -362,7 +366,10 @@
 
 Bool
 isvisible(Client *c) {
-	return (c->tag == seltag);
+	if (c->isfloat) {
+		return viewfloats;
+	}
+	return (!viewfloats && c->tag == seltag);
 }
 
 void
@@ -373,9 +380,10 @@
 	drawbar();
 	if(!sel)
 		return;
-	if(sel->isfloat)
+	/*if(sel->isfloat)*/
 		XRaiseWindow(dpy, sel->win);
 
+	/*
 	if(!sel->isfloat)
 		XLowerWindow(dpy, sel->win);
 	for(c = nexttiled(clients); c; c = nexttiled(c->next)) {
@@ -383,6 +391,7 @@
 			continue;
 		XLowerWindow(dpy, c->win);
 	}
+	*/
 
 	XSync(dpy, False);
 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
@@ -393,25 +402,50 @@
 	if (!sel)
 		return;
 	sel->isfloat = !sel->isfloat;
-	arrange();
+	floattoggle();
 }
 
 void
 togglemode() {
-  /* only toggle between tile and max - float is just available through togglefloat */
-  arrange = (arrange == dotile) ? domax : dotile;
+	/* toggle between tile and max */
+	if (viewfloats) {
+		return;
+	}
+	if (seltag) {
+		arrange1 = (arrange1 == dotile) ? domax : dotile;
+	} else {
+		arrange2 = (arrange2 == dotile) ? domax : dotile;
+	}
 	if(sel)
 		arrange();
 	zoom();
 }
 
 void
+arrange() {
+	if (seltag) {
+		arrange1();
+	} else {
+		arrange2();
+	}
+}
+
+void
 toggleview() {
+	if (viewfloats) {
+		return;
+	}
 	seltag = !seltag;
 	arrange();
 }
 
 void
+floattoggle() {
+	viewfloats = !viewfloats;
+	arrange();
+}
+
+void
 zoom() {
 	unsigned int n;
 	Client *c;
@@ -916,7 +950,7 @@
 	/* views */
 	dc.x = dc.y = 0;
 	dc.w = textw(NAMETAGGED);
-	drawtext(NAMETAGGED, ( seltag ? dc.sel : dc.norm ));
+	drawtext(NAMETAGGED, ( (seltag&&!viewfloats) ? dc.sel : dc.norm ));
 
 	dc.x += dc.w;
 	dc.w = BORDERPX;
@@ -924,7 +958,7 @@
 
 	dc.x += dc.w;
 	dc.w = textw(NAMEUNTAGGED);
-	drawtext(NAMEUNTAGGED, ( seltag ? dc.norm : dc.sel ));
+	drawtext(NAMEUNTAGGED, ( (!seltag&&!viewfloats) ? dc.sel : dc.norm ));
 
 	dc.x += dc.w;
 	dc.w = BORDERPX;
@@ -1447,6 +1481,7 @@
 	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
 	grabkeys();
 	seltag = True;
+	viewfloats = False;
 	/* style */
 	dc.norm[ColBG] = getcolor(NORMBGCOLOR);
 	dc.norm[ColFG] = getcolor(NORMFGCOLOR);
@@ -1458,7 +1493,8 @@
 	sw = DisplayWidth(dpy, screen);
 	sh = DisplayHeight(dpy, screen);
 	nmaster = NMASTER;
-	arrange = DEFMODE;
+	arrange1 = DEFMODE;
+	arrange2 = DEFMODE;
 	/* bar */
 	dc.h = bh = dc.font.height + 2;
 	wa.override_redirect = 1;
--- a/config.h	Mon Sep 05 21:32:16 2011 +0200
+++ b/config.h	Mon Sep 05 23:05:08 2011 +0200
@@ -24,8 +24,9 @@
 static Key key[] = { \
 	/* modifier		key		function	argument */ \
 	{ MODKEY|ShiftMask,	XK_Return,	spawn,		"exec urxvt" }, \
-	{ MODKEY,		XK_F1,		toggleview,		"" }, \
-	{ MODKEY,		XK_F2,		toggleview,		"" }, \
+	{ MODKEY,		XK_F1,		toggleview,	"" }, \
+	{ MODKEY,		XK_F2,		toggleview,	"" }, \
+	{ MODKEY,		XK_F3,		floattoggle,	"" }, \
 	{ MODKEY,		XK_Tab,		focusnext,	"" }, \
 	{ MODKEY,		XK_asciicircum,		spawn, "dmenu_run -fn '"FONT"' "\
 	         "-nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'"  }, \
@@ -38,7 +39,7 @@
 	{ MODKEY|ShiftMask,	XK_space,	togglefloat,	"" }, \
 	{ MODKEY,		XK_plus,	incnmaster,	"" }, \
 	{ MODKEY,		XK_minus,	decnmaster,	"" }, \
-	{ MODKEY,		XK_3,		toggletag,		"" }, \
+	{ MODKEY,		XK_3,		toggletag,	"" }, \
 };
 
 /* Query class:instance:title for regex matching info with following command: