[patch] [FIX] Reverse Task Switch (Alt+Shift+Tab)

Olivier Fourdan fourdan at xfce.org
Wed Oct 29 22:39:06 CET 2003


Dan,

The rest looks ok and is comitted :)

Cheers,
Olivier.

On Wed, 2003-10-29 at 21:52, Dan Compton wrote:
> Olivier,
> 
> Oh I'm sorry, I forgot to mention that.  I thought it was an error 
> because usually developers comment that they want the fall-through to 
> happen on purpose.  I'm going to remove that.  What about the other changes?
> 
> Dan
> 
> Olivier Fourdan wrote:
> 
> >Dan,
> >
> >Why do you add the "break" in the case switches? By adding those, you
> >break the logic and that won't work... The walkthru is on purpose.
> >
> >Cheers,
> >Olivier.
> >
> >On Wed, 2003-10-29 at 19:58, Dan Compton wrote:
> >  
> >
> >>I'm sorry but the previous patch had a small bug if your 
> >>cycle_windows_key included the Shift key (Mainly, when you let go of 
> >>Shift, the cycle windows window would not be relinguished).  This is a 
> >>replacement patch, it doesn't patch on top of the last patch because I 
> >>assume almost no one or no one has actually tried the original since 
> >>there have been no responses yet.
> >>
> >>This applies to xfwm4-4.0.0.  Apply it by "patch -p0 < 
> >>xfwm4-4.0.0.shiftalttab-0.1.patch" above the xfwm4-4.0.0 directory.
> >>
> >>Dan Compton
> >>
> >>______________________________________________________________________
> >>diff -aur xfwm4-4.0.0/src/client.c xfwm4-4.0.0.new/src/client.c
> >>--- xfwm4-4.0.0/src/client.c	2003-09-21 17:39:55.000000000 -0400
> >>+++ xfwm4-4.0.0.new/src/client.c	2003-10-29 13:43:50.000000000 -0500
> >>@@ -3547,6 +3547,33 @@
> >>     return NULL;
> >> }
> >> 
> >>+Client *
> >>+clientGetPrevious (Client * c, int mask)
> >>+{
> >>+    Client *c2;
> >>+    unsigned int i;
> >>+
> >>+    TRACE ("entering clientGetPrevious");
> >>+
> >>+    if (c)
> >>+    {
> >>+        for (c2 = c->prev, i = 0; (c2) && (i < client_count);
> >>+            c2 = c2->prev, i++)
> >>+        {
> >>+            if ((c2->type == WINDOW_SPLASHSCREEN)
> >>+                || (c2->type == WINDOW_DESKTOP))
> >>+            {
> >>+                continue;
> >>+            }
> >>+            if (clientSelectMask (c2, mask))
> >>+            {
> >>+                return c2;
> >>+            }
> >>+        }
> >>+    }
> >>+    return NULL;
> >>+}
> >>+
> >> /* Build a GList of clients that have a transient relationship */
> >> static GList *
> >> clientListTransient (Client * c)
> >>@@ -5617,12 +5644,14 @@
> >>                 clientGetFromWindow (((XDestroyWindowEvent *) xevent)->window,
> >>                     WINDOW));
> >>             status = XEV_FILTER_CONTINUE;
> >>+            break;
> >>         case UnmapNotify:
> >>             gone |=
> >>                 (passdata->c ==
> >>                 clientGetFromWindow (((XUnmapEvent *) xevent)->window,
> >>                     WINDOW));
> >>             status = XEV_FILTER_CONTINUE;
> >>+            break;
> >>         case KeyPress:
> >>             if (gone
> >>                 || (xevent->xkey.keycode ==
> >>@@ -5630,8 +5659,19 @@
> >>             {
> >>                 /* Hide frame draw */
> >>                 clientDrawOutline (passdata->c);
> >>-                passdata->c =
> >>-                    clientGetNext (passdata->c, passdata->cycle_range);
> >>+
> >>+                /* If KEY_CYCLE_WINDOWS has Shift, then do not reverse */
> >>+                if (!(params.keys[KEY_CYCLE_WINDOWS].modifier & ShiftMask)
> >>+                        && xevent->xkey.state & ShiftMask) {
> >>+                    passdata->c =
> >>+                        clientGetPrevious (passdata->c, passdata->cycle_range);
> >>+                }
> >>+                else
> >>+                {
> >>+                    passdata->c =
> >>+                        clientGetNext (passdata->c, passdata->cycle_range);
> >>+                }
> >>+
> >>                 if (passdata->c)
> >>                 {
> >>                     /* Redraw frame draw */
> >>@@ -5645,10 +5685,19 @@
> >>             }
> >>             break;
> >>         case KeyRelease:
> >>-            if (IsModifierKey (XKeycodeToKeysym (dpy, xevent->xkey.keycode,
> >>-                        0)))
> >>             {
> >>-                cycling = FALSE;
> >>+                int keysym = XKeycodeToKeysym (dpy, xevent->xkey.keycode, 0);
> >>+
> >>+                /* If KEY_CYCE_WINDOWS has Shift, then stop cycling on Shift
> >>+                 * release.
> >>+                 */
> >>+                if (IsModifierKey (keysym)
> >>+                        && ( (params.keys[KEY_CYCLE_WINDOWS].modifier
> >>+                             & ShiftMask)
> >>+                        || (keysym != XK_Shift_L && keysym != XK_Shift_R) ) )
> >>+                {
> >>+                    cycling = FALSE;
> >>+                }
> >>             }
> >>             break;
> >>         case ButtonPress:
> >>diff -aur xfwm4-4.0.0/src/client.h xfwm4-4.0.0.new/src/client.h
> >>--- xfwm4-4.0.0/src/client.h	2003-09-12 16:28:30.000000000 -0400
> >>+++ xfwm4-4.0.0.new/src/client.h	2003-10-29 01:38:51.000000000 -0500
> >>@@ -263,6 +263,7 @@
> >> Client *clientGetFromWindow (Window, int);
> >> Client *clientAtPosition (int, int, Client *);
> >> Client *clientGetNext (Client *, int);
> >>+Client *clientGetPrevious (Client *, int);
> >> void clientPassFocus (Client *);
> >> void clientShow (Client *, gboolean);
> >> void clientHide (Client *, int, gboolean);
> >>
> >>______________________________________________________________________
> >>_______________________________________________
> >>Xfce4-dev mailing list
> >>Xfce4-dev at xfce.org
> >>http://moongroup.com/mailman/listinfo/xfce4-dev
> >>    
> >>
> 
> 
> _______________________________________________
> Xfce4-dev mailing list
> Xfce4-dev at xfce.org
> http://moongroup.com/mailman/listinfo/xfce4-dev
-- 
Olivier Fourdan - fourdan at xfce.org
   
   Interoperability is the keyword, uniformity is a dead end. 
   http://www.xfce.org






More information about the Xfce4-dev mailing list