Introduction
Introduction Statistics Contact Development Disclaimer Help
tseparated several functions into view.c - dwm - [fork] customized build of dwm…
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit aa13727067af829b94461eb36aa029297ed8e6b9
parent 595028614bc94c1733b28725dcf9777b0a47ad24
Author: Anselm R. Garbe <[email protected]>
Date: Tue, 22 Aug 2006 16:50:21 +0200
separated several functions into view.c
Diffstat:
M Makefile | 2 +-
M client.c | 61 -----------------------------…
M dwm.h | 22 ++++++++++++----------
M tag.c | 186 -----------------------------…
A view.c | 253 +++++++++++++++++++++++++++++…
5 files changed, 266 insertions(+), 258 deletions(-)
---
diff --git a/Makefile b/Makefile
t@@ -3,7 +3,7 @@
include config.mk
-SRC = client.c draw.c event.c main.c tag.c util.c
+SRC = client.c draw.c event.c main.c tag.c util.c view.c
OBJ = ${SRC:.c=.o}
all: options dwm
diff --git a/client.c b/client.c
t@@ -89,40 +89,6 @@ focus(Client *c)
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
}
-void
-focusnext(Arg *arg)
-{
- Client *c;
-
- if(!sel)
- return;
-
- if(!(c = getnext(sel->next)))
- c = getnext(clients);
- if(c) {
- focus(c);
- restack();
- }
-}
-
-void
-focusprev(Arg *arg)
-{
- Client *c;
-
- if(!sel)
- return;
-
- if(!(c = getprev(sel->prev))) {
- for(c = clients; c && c->next; c = c->next);
- c = getprev(c);
- }
- if(c) {
- focus(c);
- restack();
- }
-}
-
Client *
getclient(Window w)
{
t@@ -446,30 +412,3 @@ unmanage(Client *c)
focus(sel);
arrange(NULL);
}
-
-void
-zoom(Arg *arg)
-{
- Client *c;
-
- if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax)
- return;
-
- if(sel == getnext(clients)) {
- if((c = getnext(sel->next)))
- sel = c;
- else
- return;
- }
-
- /* pop */
- sel->prev->next = sel->next;
- if(sel->next)
- sel->next->prev = sel->prev;
- sel->prev = NULL;
- clients->prev = sel;
- sel->next = clients;
- clients = sel;
- focus(sel);
- arrange(NULL);
-}
diff --git a/dwm.h b/dwm.h
t@@ -84,8 +84,6 @@ extern Window root, barwin;
/* client.c */
extern void ban(Client *c);
extern void focus(Client *c);
-extern void focusnext(Arg *arg);
-extern void focusprev(Arg *arg);
extern Client *getclient(Window w);
extern Client *getctitle(Window w);
extern void gravitate(Client *c, Bool invert);
t@@ -96,7 +94,6 @@ extern void setsize(Client *c);
extern void settitle(Client *c);
extern void togglemax(Arg *arg);
extern void unmanage(Client *c);
-extern void zoom(Arg *arg);
/* draw.c */
extern void drawall();
t@@ -117,22 +114,27 @@ extern void sendevent(Window w, Atom a, long value);
extern int xerror(Display *dsply, XErrorEvent *ee);
/* tag.c */
-extern void dofloat(Arg *arg);
-extern void dotile(Arg *arg);
extern void initrregs();
-extern Bool isvisible(Client *c);
extern Client *getnext(Client *c);
extern Client *getprev(Client *c);
-extern void restack();
extern void settags(Client *c);
extern void tag(Arg *arg);
-extern void togglemode(Arg *arg);
extern void toggletag(Arg *arg);
-extern void toggleview(Arg *arg);
-extern void view(Arg *arg);
/* util.c */
extern void *emallocz(unsigned int size);
extern void eprint(const char *errstr, ...);
extern void *erealloc(void *ptr, unsigned int size);
extern void spawn(Arg *arg);
+
+/* view.c */
+extern void dofloat(Arg *arg);
+extern void dotile(Arg *arg);
+extern void focusnext(Arg *arg);
+extern void focusprev(Arg *arg);
+extern Bool isvisible(Client *c);
+extern void restack();
+extern void togglemode(Arg *arg);
+extern void toggleview(Arg *arg);
+extern void view(Arg *arg);
+extern void zoom(Arg *arg);
diff --git a/tag.c b/tag.c
t@@ -30,97 +30,8 @@ RULES
static RReg *rreg = NULL;
static unsigned int len = 0;
-void (*arrange)(Arg *) = DEFMODE;
-
/* extern */
-void
-dofloat(Arg *arg)
-{
- Client *c;
-
- for(c = clients; c; c = c->next) {
- c->ismax = False;
- if(isvisible(c)) {
- resize(c, True, TopLeft);
- }
- else
- ban(c);
- }
- if(!sel || !isvisible(sel))
- sel = getnext(clients);
- if(sel)
- focus(sel);
- else
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
- restack();
-}
-
-void
-dotile(Arg *arg)
-{
- int h, i, n, w;
- Client *c;
-
- w = sw - mw;
- for(n = 0, c = clients; c; c = c->next)
- if(isvisible(c) && !c->isfloat)
- n++;
-
- if(n > 1)
- h = (sh - bh) / (n - 1);
- else
- h = sh - bh;
-
- for(i = 0, c = clients; c; c = c->next) {
- c->ismax = False;
- if(isvisible(c)) {
- if(c->isfloat) {
- resize(c, True, TopLeft);
- continue;
- }
- if(n == 1) {
- c->x = sx;
- c->y = sy + bh;
- c->w = sw - 2;
- c->h = sh - 2 - bh;
- }
- else if(i == 0) {
- c->x = sx;
- c->y = sy + bh;
- c->w = mw - 2;
- c->h = sh - 2 - bh;
- }
- else if(h > bh) {
- c->x = sx + mw;
- c->y = sy + (i - 1) * h + bh;
- c->w = w - 2;
- if(i + 1 == n)
- c->h = sh - c->y - 2;
- else
- c->h = h - 2;
- }
- else { /* fallback if h < bh */
- c->x = sx + mw;
- c->y = sy + bh;
- c->w = w - 2;
- c->h = sh - 2 - bh;
- }
- resize(c, False, TopLeft);
- i++;
- }
- else
- ban(c);
- }
- if(!sel || !isvisible(sel))
- sel = getnext(clients);
- if(sel)
- focus(sel);
- else
- XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
- restack();
-}
-
Client *
getnext(Client *c)
{
t@@ -164,69 +75,6 @@ initrregs()
}
}
-Bool
-isvisible(Client *c)
-{
- unsigned int i;
-
- for(i = 0; i < ntags; i++)
- if(c->tags[i] && seltag[i])
- return True;
- return False;
-}
-
-void
-restack()
-{
- static unsigned int nwins = 0;
- static Window *wins = NULL;
- unsigned int f, fi, m, mi, n;
- Client *c;
- XEvent ev;
-
- for(f = 0, m = 0, c = clients; c; c = c->next)
- if(isvisible(c)) {
- if(c->isfloat || arrange == dofloat)
- f++;
- else
- m++;
- }
- if(!(n = 2 * (f + m))) {
- drawstatus();
- return;
- }
- if(nwins < n) {
- nwins = n;
- wins = erealloc(wins, nwins * sizeof(Window));
- }
-
- fi = 0;
- mi = 2 * f;
- if(sel->isfloat || arrange == dofloat) {
- wins[fi++] = sel->title;
- wins[fi++] = sel->win;
- }
- else {
- wins[mi++] = sel->title;
- wins[mi++] = sel->win;
- }
- for(c = clients; c; c = c->next)
- if(isvisible(c) && c != sel) {
- if(c->isfloat || arrange == dofloat) {
- wins[fi++] = c->title;
- wins[fi++] = c->win;
- }
- else {
- wins[mi++] = c->title;
- wins[mi++] = c->win;
- }
- }
- XRestackWindows(dpy, wins, n);
- drawall();
- XSync(dpy, False);
- while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
-}
-
void
settags(Client *c)
{
t@@ -277,16 +125,6 @@ tag(Arg *arg)
}
void
-togglemode(Arg *arg)
-{
- arrange = arrange == dofloat ? dotile : dofloat;
- if(sel)
- arrange(NULL);
- else
- drawstatus();
-}
-
-void
toggletag(Arg *arg)
{
unsigned int i;
t@@ -302,27 +140,3 @@ toggletag(Arg *arg)
if(!isvisible(sel))
arrange(NULL);
}
-
-
-void
-toggleview(Arg *arg)
-{
- unsigned int i;
-
- seltag[arg->i] = !seltag[arg->i];
- for(i = 0; i < ntags && !seltag[i]; i++);
- if(i == ntags)
- seltag[arg->i] = True; /* cannot toggle last view */
- arrange(NULL);
-}
-
-void
-view(Arg *arg)
-{
- unsigned int i;
-
- for(i = 0; i < ntags; i++)
- seltag[i] = False;
- seltag[arg->i] = True;
- arrange(NULL);
-}
diff --git a/view.c b/view.c
t@@ -0,0 +1,253 @@
+/*
+ * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>
+ * See LICENSE file for license details.
+ */
+#include "dwm.h"
+
+/* extern */
+
+void (*arrange)(Arg *) = DEFMODE;
+
+void
+dofloat(Arg *arg)
+{
+ Client *c;
+
+ for(c = clients; c; c = c->next) {
+ c->ismax = False;
+ if(isvisible(c)) {
+ resize(c, True, TopLeft);
+ }
+ else
+ ban(c);
+ }
+ if(!sel || !isvisible(sel))
+ sel = getnext(clients);
+ if(sel)
+ focus(sel);
+ else
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ restack();
+}
+
+void
+dotile(Arg *arg)
+{
+ int h, i, n, w;
+ Client *c;
+
+ w = sw - mw;
+ for(n = 0, c = clients; c; c = c->next)
+ if(isvisible(c) && !c->isfloat)
+ n++;
+
+ if(n > 1)
+ h = (sh - bh) / (n - 1);
+ else
+ h = sh - bh;
+
+ for(i = 0, c = clients; c; c = c->next) {
+ c->ismax = False;
+ if(isvisible(c)) {
+ if(c->isfloat) {
+ resize(c, True, TopLeft);
+ continue;
+ }
+ if(n == 1) {
+ c->x = sx;
+ c->y = sy + bh;
+ c->w = sw - 2;
+ c->h = sh - 2 - bh;
+ }
+ else if(i == 0) {
+ c->x = sx;
+ c->y = sy + bh;
+ c->w = mw - 2;
+ c->h = sh - 2 - bh;
+ }
+ else if(h > bh) {
+ c->x = sx + mw;
+ c->y = sy + (i - 1) * h + bh;
+ c->w = w - 2;
+ if(i + 1 == n)
+ c->h = sh - c->y - 2;
+ else
+ c->h = h - 2;
+ }
+ else { /* fallback if h < bh */
+ c->x = sx + mw;
+ c->y = sy + bh;
+ c->w = w - 2;
+ c->h = sh - 2 - bh;
+ }
+ resize(c, False, TopLeft);
+ i++;
+ }
+ else
+ ban(c);
+ }
+ if(!sel || !isvisible(sel))
+ sel = getnext(clients);
+ if(sel)
+ focus(sel);
+ else
+ XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ restack();
+}
+
+void
+focusnext(Arg *arg)
+{
+ Client *c;
+
+ if(!sel)
+ return;
+
+ if(!(c = getnext(sel->next)))
+ c = getnext(clients);
+ if(c) {
+ focus(c);
+ restack();
+ }
+}
+
+void
+focusprev(Arg *arg)
+{
+ Client *c;
+
+ if(!sel)
+ return;
+
+ if(!(c = getprev(sel->prev))) {
+ for(c = clients; c && c->next; c = c->next);
+ c = getprev(c);
+ }
+ if(c) {
+ focus(c);
+ restack();
+ }
+}
+
+Bool
+isvisible(Client *c)
+{
+ unsigned int i;
+
+ for(i = 0; i < ntags; i++)
+ if(c->tags[i] && seltag[i])
+ return True;
+ return False;
+}
+
+void
+restack()
+{
+ static unsigned int nwins = 0;
+ static Window *wins = NULL;
+ unsigned int f, fi, m, mi, n;
+ Client *c;
+ XEvent ev;
+
+ for(f = 0, m = 0, c = clients; c; c = c->next)
+ if(isvisible(c)) {
+ if(c->isfloat || arrange == dofloat)
+ f++;
+ else
+ m++;
+ }
+ if(!(n = 2 * (f + m))) {
+ drawstatus();
+ return;
+ }
+ if(nwins < n) {
+ nwins = n;
+ wins = erealloc(wins, nwins * sizeof(Window));
+ }
+
+ fi = 0;
+ mi = 2 * f;
+ if(sel->isfloat || arrange == dofloat) {
+ wins[fi++] = sel->title;
+ wins[fi++] = sel->win;
+ }
+ else {
+ wins[mi++] = sel->title;
+ wins[mi++] = sel->win;
+ }
+ for(c = clients; c; c = c->next)
+ if(isvisible(c) && c != sel) {
+ if(c->isfloat || arrange == dofloat) {
+ wins[fi++] = c->title;
+ wins[fi++] = c->win;
+ }
+ else {
+ wins[mi++] = c->title;
+ wins[mi++] = c->win;
+ }
+ }
+ XRestackWindows(dpy, wins, n);
+ drawall();
+ XSync(dpy, False);
+ while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+}
+
+void
+togglemode(Arg *arg)
+{
+ arrange = arrange == dofloat ? dotile : dofloat;
+ if(sel)
+ arrange(NULL);
+ else
+ drawstatus();
+}
+
+void
+toggleview(Arg *arg)
+{
+ unsigned int i;
+
+ seltag[arg->i] = !seltag[arg->i];
+ for(i = 0; i < ntags && !seltag[i]; i++);
+ if(i == ntags)
+ seltag[arg->i] = True; /* cannot toggle last view */
+ arrange(NULL);
+}
+
+void
+view(Arg *arg)
+{
+ unsigned int i;
+
+ for(i = 0; i < ntags; i++)
+ seltag[i] = False;
+ seltag[arg->i] = True;
+ arrange(NULL);
+}
+
+void
+zoom(Arg *arg)
+{
+ Client *c;
+
+ if(!sel || (arrange != dotile) || sel->isfloat || sel->ismax)
+ return;
+
+ if(sel == getnext(clients)) {
+ if((c = getnext(sel->next)))
+ sel = c;
+ else
+ return;
+ }
+
+ /* pop */
+ sel->prev->next = sel->next;
+ if(sel->next)
+ sel->next->prev = sel->prev;
+ sel->prev = NULL;
+ clients->prev = sel;
+ sel->next = clients;
+ clients = sel;
+ focus(sel);
+ arrange(NULL);
+}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.