Introduction
Introduction Statistics Contact Development Disclaimer Help
tadded mini stuff - dwm - [fork] customized build of dwm, the dynamic window ma…
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit 66da15324eef4f85c6dda13eba80430dc4cc97bb
parent 7fe717c29f9dafc4fc38313adbbb7c85619dec69
Author: Anselm R. Garbe <[email protected]>
Date: Thu, 13 Jul 2006 21:42:17 +0200
added mini stuff
Diffstat:
M client.c | 51 +++++++++++++++++++----------…
M dev.c | 48 +++++++++++++++++------------…
M dwm.h | 9 ++++++---
M event.c | 7 +++++--
4 files changed, 69 insertions(+), 46 deletions(-)
---
diff --git a/client.c b/client.c
t@@ -11,10 +11,11 @@
#include "dwm.h"
-static void (*arrange)(Arg *) = tiling;
+void (*arrange)(Arg *) = tiling;
static Rule rule[] = {
- { "Firefox-bin", "Gecko", { [Twww] = "www" } },
+ /* class instance tags …
+ { "Firefox-bin", "Gecko", { [Twww] = "www" }, …
};
static Client *
t@@ -64,27 +65,27 @@ view(Arg *arg)
}
void
-tag(Arg *arg)
+tappend(Arg *arg)
{
- int i, n;
if(!sel)
return;
- if(arg->i == tsel) {
- for(n = i = 0; i < TLast; i++)
- if(sel->tags[i])
- n++;
- if(n < 2)
- return;
- }
-
- if(sel->tags[arg->i])
- sel->tags[arg->i] = NULL; /* toggle tag */
- else
- sel->tags[arg->i] = tags[arg->i];
+ sel->tags[arg->i] = tags[arg->i];
arrange(NULL);
}
+void
+ttrunc(Arg *arg)
+{
+ int i;
+ if(!sel)
+ return;
+
+ for(i = 0; i < TLast; i++)
+ sel->tags[i] = NULL;
+ tappend(arg);
+}
+
static void
ban_client(Client *c)
{
t@@ -122,13 +123,18 @@ tiling(Arg *arg)
w = sw - mw;
arrange = tiling;
for(n = 0, c = clients; c; c = c->next)
- if(c->tags[tsel])
+ if(c->tags[tsel] && !c->floating)
n++;
h = (n > 1) ? sh / (n - 1) : sh;
for(i = 0, c = clients; c; c = c->next) {
if(c->tags[tsel]) {
+ if(c->floating) {
+ craise(c);
+ resize(c, True);
+ continue;
+ }
if(n == 1) {
c->x = sx;
c->y = sy;
t@@ -330,14 +336,13 @@ init_tags(Client *c)
if(XGetClassHint(dpy, c->win, &ch)) {
if(ch.res_class && ch.res_name) {
- fprintf(stderr, "%s:%s\n", ch.res_class, ch.res_name);
for(i = 0; i < len; i++)
if(!strncmp(rule[i].class, ch.res_class, sizeo…
&& !strncmp(rule[i].instance, ch.res_n…
{
- fprintf(stderr, "->>>%s:%s\n", ch.res_class, ch.res_na…
for(j = 0; j < TLast; j++)
c->tags[j] = rule[i].tags[j];
+ c->floating = rule[i].floating;
matched = True;
break;
}
t@@ -357,6 +362,7 @@ manage(Window w, XWindowAttributes *wa)
{
Client *c, **l;
XSetWindowAttributes twa;
+ Window trans;
c = emallocz(sizeof(Client));
c->win = w;
t@@ -370,7 +376,7 @@ manage(Window w, XWindowAttributes *wa)
update_size(c);
XSelectInput(dpy, c->win,
StructureNotifyMask | PropertyChangeMask | EnterWindow…
- XGetTransientForHint(dpy, c->win, &c->trans);
+ XGetTransientForHint(dpy, c->win, &trans);
twa.override_redirect = 1;
twa.background_pixmap = ParentRelative;
twa.event_mask = ExposureMask;
t@@ -396,6 +402,11 @@ manage(Window w, XWindowAttributes *wa)
GrabModeAsync, GrabModeSync, None, None);
XGrabButton(dpy, Button3, Mod1Mask, c->win, False, ButtonPressMask,
GrabModeAsync, GrabModeSync, None, None);
+
+ if(!c->floating)
+ c->floating = trans
+ || ((c->maxw == c->minw) && (c->maxh == c->minh));
+
arrange(NULL);
if(c->tags[tsel])
focus(c);
diff --git a/dev.c b/dev.c
t@@ -20,27 +20,33 @@ const char *browse[] = { "firefox", NULL };
const char *xlock[] = { "xlock", NULL };
static Key key[] = {
- { Mod1Mask, XK_Return, spawn, { .argv = term } },
- { Mod1Mask, XK_w, spawn, { .argv = browse } },
- { Mod1Mask, XK_l, spawn, { .argv = xlock } },
- { Mod1Mask, XK_k, prevc, { 0 } },
- { Mod1Mask, XK_j, nextc, { 0 } },
- { Mod1Mask, XK_m, max, { 0 } },
- { Mod1Mask, XK_0, view, { .i = Tscratch } },
- { Mod1Mask, XK_1, view, { .i = Tdev } },
- { Mod1Mask, XK_2, view, { .i = Tirc } },
- { Mod1Mask, XK_3, view, { .i = Twww } },
- { Mod1Mask, XK_4, view, { .i = Twork } },
- { Mod1Mask, XK_space, tiling, { 0 } },
- { Mod1Mask | ShiftMask, XK_Return, zoom, { 0 } },
- { Mod1Mask | ShiftMask, XK_space, floating, { 0 } },
- { Mod1Mask | ShiftMask, XK_0, tag, { .i = Tscratch } },
- { Mod1Mask | ShiftMask, XK_1, tag, { .i = Tdev } },
- { Mod1Mask | ShiftMask, XK_2, tag, { .i = Tirc } },
- { Mod1Mask | ShiftMask, XK_3, tag, { .i = Twww } },
- { Mod1Mask | ShiftMask, XK_4, tag, { .i = Twork } },
- { Mod1Mask | ShiftMask, XK_c, ckill, { 0 } },
- { Mod1Mask | ShiftMask, XK_q, quit, { 0 } },
+ /* modifier key …
+ { Mod1Mask, XK_Return, zoom, …
+ { Mod1Mask, XK_k, prevc,…
+ { Mod1Mask, XK_j, nextc,…
+ { Mod1Mask, XK_m, max, …
+ { Mod1Mask, XK_0, view, …
+ { Mod1Mask, XK_1, view, …
+ { Mod1Mask, XK_2, view, …
+ { Mod1Mask, XK_3, view, …
+ { Mod1Mask, XK_4, view, …
+ { Mod1Mask, XK_space, tiling, …
+ { Mod1Mask|ShiftMask, XK_space, floating, { 0 } }…
+ { Mod1Mask|ShiftMask, XK_0, ttrunc, …
+ { Mod1Mask|ShiftMask, XK_1, ttrunc, …
+ { Mod1Mask|ShiftMask, XK_2, ttrunc, …
+ { Mod1Mask|ShiftMask, XK_3, ttrunc, …
+ { Mod1Mask|ShiftMask, XK_4, ttrunc, …
+ { Mod1Mask|ShiftMask, XK_c, ckill, …
+ { Mod1Mask|ShiftMask, XK_q, quit, …
+ { Mod1Mask|ShiftMask, XK_Return, spawn, {…
+ { Mod1Mask|ShiftMask, XK_w, spawn, …
+ { Mod1Mask|ShiftMask, XK_l, spawn, …
+ { ControlMask, XK_0, tappend, …
+ { ControlMask, XK_1, tappend, …
+ { ControlMask, XK_2, tappend, …
+ { ControlMask, XK_3, tappend, …
+ { ControlMask, XK_4, tappend, …
};
/********** CUSTOMIZE **********/
diff --git a/dwm.h b/dwm.h
t@@ -66,8 +66,8 @@ struct Client {
int grav;
unsigned int border;
long flags;
+ Bool floating;
Window win;
- Window trans;
Window title;
Client *next;
Client *revert;
t@@ -77,6 +77,7 @@ struct Rule {
const char *class;
const char *instance;
char *tags[TLast];
+ Bool floating;
};
struct Key {
t@@ -91,7 +92,8 @@ extern Window root;
extern Atom wm_atom[WMLast], net_atom[NetLast];
extern Cursor cursor[CurLast];
extern Bool running, issel;
-extern void (*handler[LASTEvent]) (XEvent *);
+extern void (*handler[LASTEvent])(XEvent *);
+extern void (*arrange)(Arg *);
extern int tsel, screen, sx, sy, sw, sh, mw, th;
extern char *tags[TLast];
t@@ -117,7 +119,8 @@ extern void prevc(Arg *arg);
extern void max(Arg *arg);
extern void floating(Arg *arg);
extern void tiling(Arg *arg);
-extern void tag(Arg *arg);
+extern void ttrunc(Arg *arg);
+extern void tappend(Arg *arg);
extern void view(Arg *arg);
extern void zoom(Arg *arg);
extern void gravitate(Client *c, Bool invert);
diff --git a/event.c b/event.c
t@@ -89,6 +89,7 @@ configurerequest(XEvent *e)
if(ev->value_mask & CWBorderWidth)
c->border = ev->border_width;
gravitate(c, False);
+ resize(c, True);
}
wc.x = ev->x;
t@@ -179,6 +180,7 @@ static void
propertynotify(XEvent *e)
{
XPropertyEvent *ev = &e->xproperty;
+ Window trans;
Client *c;
if(ev->state == PropertyDelete)
t@@ -192,9 +194,10 @@ propertynotify(XEvent *e)
switch (ev->atom) {
default: break;
case XA_WM_TRANSIENT_FOR:
- XGetTransientForHint(dpy, c->win, &c->trans);
+ XGetTransientForHint(dpy, c->win, &trans);
+ if(!c->floating && (c->floating = (trans != 0)…
+ arrange(NULL);
break;
- update_size(c);
case XA_WM_NORMAL_HINTS:
update_size(c);
break;
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.