[hackers] [dwm] changed ban/unban implementation to not move the windows anymore, but map/unmap them instead - PLEASE TEST THIS

From: Anselm R. Garbe <garbeam_AT_gmail.com>
Date: Sat Jul 28 17:21:46 2007

changeset: 927:60d5a92ce85c
tag: tip
user: Anselm R. Garbe <garbeam_AT_gmail.com>
date: Sat Jul 28 17:18:45 2007 +0200
summary: changed ban/unban implementation to not move the windows anymore, but map/unmap them instead - PLEASE TEST THIS

diff -r 6f9cf0cfe278 -r 60d5a92ce85c client.c
--- a/client.c Sat Jul 28 12:58:56 2007 +0200
+++ b/client.c Sat Jul 28 17:18:45 2007 +0200
@@ -98,10 +98,12 @@ attach(Client *c) {
 
 void
 ban(Client *c) {
- if (c->isbanned)
- return;
- XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+ if(c->isbanned)
+ return;
+ XUnmapWindow(dpy, c->win);
+ setclientstate(c, IconicState);
         c->isbanned = True;
+ c->unmapped++;
 }
 
 void
@@ -135,7 +137,7 @@ detach(Client *c) {
 
 void
 focus(Client *c) {
- if((!c && selscreen)|| (c && !isvisible(c)))
+ if((!c && selscreen) || (c && !isvisible(c)))
                 for(c = stack; c && !isvisible(c); c = c->snext);
         if(sel && sel != c) {
                 grabbuttons(sel, False);
@@ -224,9 +226,7 @@ manage(Window w, XWindowAttributes *wa)
                 c->isfloating = (rettrans == Success) || c->isfixed;
         attach(c);
         attachstack(c);
- ban(c);
- XMapWindow(dpy, w);
- setclientstate(c, NormalState);
+ c->isbanned = True;
         focus(c);
         lt->arrange();
 }
@@ -308,9 +308,10 @@ togglefloating(const char *arg) {
 
 void
 unban(Client *c) {
- if (!c->isbanned)
- return;
- XMoveWindow(dpy, c->win, c->x, c->y);
+ if(!c->isbanned)
+ return;
+ XMapWindow(dpy, c->win);
+ setclientstate(c, NormalState);
         c->isbanned = False;
 }
 
diff -r 6f9cf0cfe278 -r 60d5a92ce85c config.mk
--- a/config.mk Sat Jul 28 12:58:56 2007 +0200
+++ b/config.mk Sat Jul 28 17:18:45 2007 +0200
@@ -1,5 +1,5 @@
 # dwm version
-VERSION = 4.3
+VERSION = 4.4
 
 # Customize below to fit your system
 
diff -r 6f9cf0cfe278 -r 60d5a92ce85c dwm.h
--- a/dwm.h Sat Jul 28 12:58:56 2007 +0200
+++ b/dwm.h Sat Jul 28 17:18:45 2007 +0200
@@ -48,6 +48,7 @@ struct Client {
         int rx, ry, rw, rh; /* revert geometry */
         int basew, baseh, incw, inch, maxw, maxh, minw, minh;
         int minax, maxax, minay, maxay;
+ int unmapped;
         long flags;
         unsigned int border, oldborder;
         Bool isbanned, isfixed, ismax, isfloating;
diff -r 6f9cf0cfe278 -r 60d5a92ce85c event.c
--- a/event.c Sat Jul 28 12:58:56 2007 +0200
+++ b/event.c Sat Jul 28 17:18:45 2007 +0200
@@ -336,8 +336,10 @@ unmapnotify(XEvent *e) {
         Client *c;
         XUnmapEvent *ev = &e->xunmap;
 
- if((c = getclient(ev->window)))
- unmanage(c);
+ if((c = getclient(ev->window)) && (ev->event == root)) {
+ if(ev->send_event || c->unmapped-- == 0)
+ unmanage(c);
+ }
 }
 
 /* extern */
Received on Sat Jul 28 2007 - 17:21:46 UTC

This archive was generated by hypermail 2.2.0 : Sun Jul 13 2008 - 15:57:41 UTC