Introduction
Introduction Statistics Contact Development Disclaimer Help
tseveral other focus fixes, introduced unfocus() - dwm - [fork] customized buil…
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit 18b1312449531c7b77403aafb71611e9e48500ec
parent 80ee95473b8b2fd44262029d35fe25e175e9765f
Author: Anselm R Garbe <[email protected]>
Date: Wed, 24 Jun 2009 19:45:47 +0100
several other focus fixes, introduced unfocus()
Diffstat:
M dwm.c | 38 +++++++++++++++++++++++------…
1 file changed, 29 insertions(+), 9 deletions(-)
---
diff --git a/dwm.c b/dwm.c
t@@ -1,4 +1,4 @@
-//#define XINULATOR /* debug, simulates dual head */
+#define XINULATOR /* debug, simulates dual head */
/* See LICENSE file for copyright and license details.
*
* dynamic window manager is designed like any other X client as well. It is
t@@ -211,6 +211,7 @@ static void togglebar(const Arg *arg);
static void togglefloating(const Arg *arg);
static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg);
+static void unfocus(Client *c);
static void unmanage(Client *c);
static void unmapnotify(XEvent *e);
static void updategeom(void);
t@@ -391,9 +392,23 @@ buttonpress(XEvent *e) {
unsigned int i, x, click;
Arg arg = {0};
Client *c;
+ Monitor *m;
XButtonPressedEvent *ev = &e->xbutton;
click = ClkRootWin;
+ /* focus monitor if necessary */
+ for(m = mons; m; m = m->next)
+ if(ev->window == m->barwin) {
+ if(m != selmon) {
+ if(selmon->stack)
+ focus(selmon->stack);
+ else {
+ selmon = m;
+ focus(NULL);
+ }
+ }
+ break;
+ }
if(ev->window == selmon->barwin && ev->x >= selmon->btx) {
i = 0;
x = selmon->btx;
t@@ -757,10 +772,8 @@ void
focus(Client *c) {
if(!c || !ISVISIBLE(c))
for(c = selmon->stack; c && !ISVISIBLE(c); c = c->snext);
- if(selmon->sel && selmon->sel != c) {
- grabbuttons(selmon->sel, False);
- XSetWindowBorder(dpy, selmon->sel->win, dc.norm[ColBorder]);
- }
+ if(selmon->sel)
+ unfocus(selmon->sel);
if(c) {
if(c->mon != selmon)
selmon = c->mon;
t@@ -797,6 +810,7 @@ focusmon(const Arg *arg) {
if(m->stack)
focus(m->stack);
else {
+ unfocus(selmon->stack);
selmon = m;
focus(NULL);
}
t@@ -1219,8 +1233,7 @@ resize(Client *c, int x, int y, int w, int h) {
c->w = wc.width = w;
c->h = wc.height = h;
wc.border_width = c->bw;
- XConfigureWindow(dpy, c->win,
- CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
+ XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorde…
configure(c);
XSync(dpy, False);
}
t@@ -1590,6 +1603,14 @@ toggleview(const Arg *arg) {
}
void
+unfocus(Client *c) {
+ if(!c)
+ return;
+ grabbuttons(c, False);
+ XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
+}
+
+void
unmanage(Client *c) {
XWindowChanges wc;
t@@ -1732,7 +1753,7 @@ updategeom(void) {
}
/* reassign left over clients of disappeared monitors */
- for(tm = mons; tm; tm = tm->next) {
+ for(tm = mons; tm; tm = tm->next)
while(tm->clients) {
c = tm->clients;
tm->clients = c->next;
t@@ -1741,7 +1762,6 @@ updategeom(void) {
attach(c);
attachstack(c);
}
- }
/* select focused monitor */
selmon = newmons;
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.