There's a bug in cwm that screws up alt-tab if you follow the set of events
described in the next paragraph.  To regain alt-tab functionality you need
to jerk the mouse around to focus clients and then it usually comes back to
its senses again.

So, start with a clean root window.  Spawn two xterms, A and B, and place
them side-by-side at the top of the screen.  Focus B and vertically maximize
it.  Move ptr *near* bottom of B (below its original bottom y position).
Alt-tab to focus A.  Alt-tab to focus B.  Vertically unmaximize B (ptr will
now be over the root window) and alt-tab to A.  Now alt-tab will not focus B
and the ptr will be somewhere at the bottom of the root window.  Can anyone
else reproduce this?

It took a while to figure out the sequence of events that triggered this
problem and there might be other ways it can be triggered.  The same
happens if you maximize (fullscreen) or horizontally maximize the window
and move the ptr.

This patch fixes the problem for me.

Index: client.c
===================================================================
RCS file: /cvs/xenocara/app/cwm/client.c,v
retrieving revision 1.76
diff -u -p -r1.76 client.c
--- client.c    22 May 2010 22:10:31 -0000      1.76
+++ client.c    14 Jan 2011 17:27:39 -0000
@@ -273,6 +273,7 @@ client_maximize(struct client_ctx *cc)
 
        if (cc->flags & CLIENT_MAXIMIZED) {
                cc->geom = cc->savegeom;
+               cc->ptr.x = cc->ptr.y = -1;
        } else {
                if (!(cc->flags & (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED)))
                        cc->savegeom = cc->geom;
@@ -312,6 +313,7 @@ client_vertmaximize(struct client_ctx *c
 
        if (cc->flags & CLIENT_VMAXIMIZED) {
                cc->geom = cc->savegeom;
+               cc->ptr.x = cc->ptr.y = -1;
        } else {
                if (!(cc->flags & (CLIENT_MAXIMIZED | CLIENT_HMAXIMIZED)))
                        cc->savegeom = cc->geom;
@@ -343,6 +345,7 @@ client_horizmaximize(struct client_ctx *
 
        if (cc->flags & CLIENT_HMAXIMIZED) {
                cc->geom = cc->savegeom;
+               cc->ptr.x = cc->ptr.y = -1;
        } else {
                if (!(cc->flags & (CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED)))
                        cc->savegeom = cc->geom;

Reply via email to