ok here is a quick fix for this patch:

1. previous window cycling, it's a simple mistake (maybe was a bad
copy paste) in src/defaults.c

2. the other problem was what I called hanging; in fact it's a blocked
state. The switchpanel is not destroyed (in case of 'same app window
cycling'/ group cycling) until a key is hitten.

I should notice that this cycling way applies only for one workspace,
so it cycles between the windows of the same application but only in
the current workspace.

I am certainly not well organized in using wmaker but I have big
problems to find efficiently my windows (I have a lot of them in
different workspaces :D), this patch will help me a little bit, but I
think more work should be done on this issue ie organize find windows
etc...


regards.



2008/12/26 Tamas TEVESZ <[email protected]>:
> On Fri, 26 Dec 2008, Samir SAADA wrote:
>
>  > I applied the 'same app window cycling'.
>  >
>  > My shortcuts: focus next window, focus prev window, focus next group,
>  > focus prev group: Mod1+Tab, Shift+Mod1+Tab, Control+Mod1+Tab,
>  > Control+Shift+Mod1+Tab
>  >
>  > -It doesn't work for me untill now.
>
> true

? I mean it doesn't work.


>
>  > -And I am facing system hang when using only the focus groups. and
>  > still only cycling between all windows
>
> this doesn't happen for me
>
>  > -focus previous window doesn't work after patch.
>
> seems so. i've only ever used foxusnext, so didn't even realize that..
>
>  > I will investigate later about it but a confirmation of these symptoms
>  > would be cool. Maybe I missed something.
>
> thanks. fwiw where i'm at is that in src/events.c, of the
> WKBD_FOCUSNEXT, WKBD_FOCUSPREV, WKBD_GROUPNEXT and WKBD_GROUPPREV
> cases (in handlekeypress) only WKBD_FOCUSPREV occurs, the other three
> seem to vanish somewhere. other than that, osx cycling works fine (if
> you can tolerate not to be able to actually trigger it, that is:)
>
> i'll try to look into this, but is not of high priority for me, so if
> someone manages to trip over it, all the better.
>
> --
> [-]
>
> mkdir /nonexistent
>
>
> --
> To unsubscribe, send mail to [email protected].
>
# HG changeset patch
# User Samir SAADA <[email protected]>
# Date 1230366552 -3600
# Node ID cd9b105aaff165fcfefe9255afa8d828987764dd
# Parent  5a2507602c48324fba0f07754a442a8cc6ab967c
Cycle between windows of the 'current' application.
This is a modified patch.
Original patch author: Iain Patterson.

diff -r 5a2507602c48 -r cd9b105aaff1 WPrefs.app/KeyboardShortcuts.c
--- a/WPrefs.app/KeyboardShortcuts.c	Sun Dec 14 19:59:05 2008 -0800
+++ b/WPrefs.app/KeyboardShortcuts.c	Sat Dec 27 09:29:12 2008 +0100
@@ -87,6 +87,8 @@
     "SelectKey",
     "FocusNextKey",
     "FocusPrevKey",
+    "GroupNextKey",
+    "GroupPrevKey",
     "NextWorkspaceKey",
     "PrevWorkspaceKey",
     "NextWorkspaceLayerKey",
@@ -515,6 +517,8 @@
     WMAddListItem(panel->actLs, _("Select active window"));
     WMAddListItem(panel->actLs, _("Focus next window"));
     WMAddListItem(panel->actLs, _("Focus previous window"));
+    WMAddListItem(panel->actLs, _("Focus next group window"));
+    WMAddListItem(panel->actLs, _("Focus previous group window"));
     WMAddListItem(panel->actLs, _("Switch to next workspace"));
     WMAddListItem(panel->actLs, _("Switch to previous workspace"));
     WMAddListItem(panel->actLs, _("Switch to next ten workspaces"));
diff -r 5a2507602c48 -r cd9b105aaff1 src/cycling.c
--- a/src/cycling.c	Sun Dec 14 19:59:05 2008 -0800
+++ b/src/cycling.c	Sat Dec 27 09:29:12 2008 +0100
@@ -65,7 +65,7 @@
 
 
 void
-StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
+StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next, Bool osx_cycling)
 {
     WScreen *scr = wScreenForRootWindow(event->xkey.root);
     Bool done = False;
@@ -106,7 +106,7 @@
 
     scr->flags.doing_alt_tab = 1;
 
-    swpanel =  wInitSwitchPanel(scr, wwin, scr->current_workspace);
+    swpanel =  wInitSwitchPanel(scr, wwin, scr->current_workspace, osx_cycling);
     oldFocused = wwin;
   
     if (swpanel) {
@@ -142,7 +142,9 @@
             printf("Got key press\n");
 #endif
             if ((wKeyBindings[WKBD_FOCUSNEXT].keycode == ev.xkey.keycode
-                 && wKeyBindings[WKBD_FOCUSNEXT].modifier == modifiers)
+                && wKeyBindings[WKBD_FOCUSNEXT].modifier == modifiers)
+                || (wKeyBindings[WKBD_GROUPNEXT].keycode == ev.xkey.keycode
+                && wKeyBindings[WKBD_GROUPNEXT].modifier == modifiers)
                 || ev.xkey.keycode == rightKey) {
 
                 if (swpanel) {
@@ -158,7 +160,9 @@
                     }
                 }
             } else if ((wKeyBindings[WKBD_FOCUSPREV].keycode == ev.xkey.keycode
-                        && wKeyBindings[WKBD_FOCUSPREV].modifier == modifiers)
+                       && wKeyBindings[WKBD_FOCUSPREV].modifier == modifiers)
+                       || (wKeyBindings[WKBD_GROUPPREV].keycode == ev.xkey.keycode
+                       && wKeyBindings[WKBD_GROUPPREV].modifier == modifiers)
                        || ev.xkey.keycode == leftKey) {
 
                 if (swpanel) {
@@ -201,6 +205,7 @@
             for (i = 0; i < 8 * keymap->max_keypermod; i++) {
                 if (keymap->modifiermap[i] == ev.xkey.keycode &&
                     wKeyBindings[WKBD_FOCUSNEXT].modifier
+                    | wKeyBindings[WKBD_GROUPNEXT].modifier
                     & 1<<(i/keymap->max_keypermod)) {
                     done = True;
                     break;
diff -r 5a2507602c48 -r cd9b105aaff1 src/defaults.c
--- a/src/defaults.c	Sun Dec 14 19:59:05 2008 -0800
+++ b/src/defaults.c	Sat Dec 27 09:29:12 2008 +0100
@@ -732,6 +732,12 @@
     {"FocusPrevKey", "None",			(void*)WKBD_FOCUSPREV,
     NULL,				getKeybind,	setKeyGrab
     },
+    {"GroupNextKey", "None",			(void*)WKBD_GROUPNEXT,
+    NULL,				getKeybind,	setKeyGrab
+    },
+    {"GroupPrevKey", "None",			(void*)WKBD_GROUPPREV,
+    NULL,				getKeybind,	setKeyGrab
+    },
     {"NextWorkspaceKey", "None",		(void*)WKBD_NEXTWORKSPACE,
     NULL,				getKeybind,	setKeyGrab
     },
diff -r 5a2507602c48 -r cd9b105aaff1 src/event.c
--- a/src/event.c	Sun Dec 14 19:59:05 2008 -0800
+++ b/src/event.c	Sat Dec 27 09:29:12 2008 +0100
@@ -1535,11 +1535,19 @@
         }
         break;
     case WKBD_FOCUSNEXT:
-        StartWindozeCycle(wwin, event, True);
+        StartWindozeCycle(wwin, event, True, False);
         break;
 
     case WKBD_FOCUSPREV:
-        StartWindozeCycle(wwin, event, False);
+        StartWindozeCycle(wwin, event, False, False);
+        break;
+
+    case WKBD_GROUPNEXT:
+        StartWindozeCycle(wwin, event, True, True);
+        break;
+
+    case WKBD_GROUPPREV:
+        StartWindozeCycle(wwin, event, False, True);
         break;
 
 #if (defined(__STDC__) && !defined(UNIXCPP)) || defined(ANSICPP)
diff -r 5a2507602c48 -r cd9b105aaff1 src/funcs.h
--- a/src/funcs.h	Sun Dec 14 19:59:05 2008 -0800
+++ b/src/funcs.h	Sat Dec 27 09:29:12 2008 +0100
@@ -92,7 +92,7 @@
                  unsigned int width, unsigned int height);
 
 
-void StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next);
+void StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next, Bool osx_cycling);
 
 #ifdef USECPP
 char *MakeCPPArgs(char *path);
diff -r 5a2507602c48 -r cd9b105aaff1 src/keybind.h
--- a/src/keybind.h	Sun Dec 14 19:59:05 2008 -0800
+++ b/src/keybind.h	Sat Dec 27 09:29:12 2008 +0100
@@ -48,41 +48,43 @@
 /* window */
 #define WKBD_FOCUSNEXT		19
 #define WKBD_FOCUSPREV          20
+#define WKBD_GROUPNEXT		21
+#define WKBD_GROUPPREV		22
 
-#define WKBD_WORKSPACE1		21
-#define WKBD_WORKSPACE2		22
-#define WKBD_WORKSPACE3		23
-#define WKBD_WORKSPACE4		24
-#define WKBD_WORKSPACE5		25
-#define WKBD_WORKSPACE6		26
-#define WKBD_WORKSPACE7		27
-#define WKBD_WORKSPACE8		28
-#define WKBD_WORKSPACE9		29
-#define WKBD_WORKSPACE10	30
-#define WKBD_NEXTWORKSPACE	31
-#define WKBD_PREVWORKSPACE	32
-#define WKBD_NEXTWSLAYER	33
-#define WKBD_PREVWSLAYER	34
+#define WKBD_WORKSPACE1		23
+#define WKBD_WORKSPACE2		24
+#define WKBD_WORKSPACE3		25
+#define WKBD_WORKSPACE4		26
+#define WKBD_WORKSPACE5		27
+#define WKBD_WORKSPACE6		28
+#define WKBD_WORKSPACE7		29
+#define WKBD_WORKSPACE8		30
+#define WKBD_WORKSPACE9		31
+#define WKBD_WORKSPACE10	32
+#define WKBD_NEXTWORKSPACE	33
+#define WKBD_PREVWORKSPACE	34
+#define WKBD_NEXTWSLAYER	35
+#define WKBD_PREVWSLAYER	36
 
 /* window shortcuts */
-#define WKBD_WINDOW1		35
-#define WKBD_WINDOW2		36
-#define WKBD_WINDOW3		37
-#define WKBD_WINDOW4		38
-#define WKBD_WINDOW5		39
-#define WKBD_WINDOW6		40
-#define WKBD_WINDOW7		41
-#define WKBD_WINDOW8		42
-#define WKBD_WINDOW9		43
-#define WKBD_WINDOW10		44
+#define WKBD_WINDOW1		37
+#define WKBD_WINDOW2		38
+#define WKBD_WINDOW3		39
+#define WKBD_WINDOW4		40
+#define WKBD_WINDOW5		41
+#define WKBD_WINDOW6		42
+#define WKBD_WINDOW7		43
+#define WKBD_WINDOW8		44
+#define WKBD_WINDOW9		45
+#define WKBD_WINDOW10		46
 
-#define WKBD_SWITCH_SCREEN      45
+#define WKBD_SWITCH_SCREEN      47
 
 #ifdef KEEP_XKB_LOCK_STATUS
-# define WKBD_TOGGLE		46
-# define WKBD_TMP		47
+# define WKBD_TOGGLE		48
+# define WKBD_TMP		49
 #else
-# define WKBD_TMP		46
+# define WKBD_TMP		48
 #endif
 
 #ifdef VIRTUAL_DESKTOP
diff -r 5a2507602c48 -r cd9b105aaff1 src/switchpanel.c
--- a/src/switchpanel.c	Sun Dec 14 19:59:05 2008 -0800
+++ b/src/switchpanel.c	Sat Dec 27 09:29:12 2008 +0100
@@ -399,7 +399,7 @@
 
 
 static WMArray *makeWindowListArray(WScreen *scr, WWindow *curwin, int workspace,
-                                    int include_unmapped)
+                                    int include_unmapped, Bool osx_cycling)
 {
     WMArray *windows= WMCreateArray(10);
     int fl;
@@ -410,6 +410,16 @@
             if (((!fl && canReceiveFocus(wwin) > 0) || (fl && canReceiveFocus(wwin) < 0)) &&
                 (!WFLAGP(wwin, skip_window_list) || wwin->flags.internal_window) &&
                 (wwin->flags.mapped || include_unmapped)) {
+                if (osx_cycling) {
+                    if (!wwin->wm_instance || !curwin->wm_instance)
+                        continue;
+                    if (strcmp(wwin->wm_instance, curwin->wm_instance))
+                        continue;
+                    if (!wwin->wm_class || !curwin->wm_class)
+                        continue;
+                    if (strcmp(wwin->wm_class, curwin->wm_class))
+                        continue;
+                }
                 WMAddToArray(windows, wwin);
             }
         }
@@ -422,6 +432,16 @@
             if (((!fl && canReceiveFocus(wwin) > 0) || (fl && canReceiveFocus(wwin) < 0)) &&
                 (!WFLAGP(wwin, skip_window_list) || wwin->flags.internal_window) &&
                 (wwin->flags.mapped || include_unmapped)) {
+                if (osx_cycling) {
+                    if (!wwin->wm_instance || !curwin->wm_instance)
+                        continue;
+                    if (strcmp(wwin->wm_instance, curwin->wm_instance))
+                        continue;
+                    if (!wwin->wm_class || !curwin->wm_class)
+                        continue;
+                    if (strcmp(wwin->wm_class, curwin->wm_class))
+                        continue;
+                }
                 WMAddToArray(windows, wwin);
             }
         }
@@ -434,7 +454,7 @@
 
 
 
-WSwitchPanel *wInitSwitchPanel(WScreen *scr, WWindow *curwin, int workspace)
+WSwitchPanel *wInitSwitchPanel(WScreen *scr, WWindow *curwin, int workspace, Bool osx_cycling)
 {
     WWindow *wwin;
     WSwitchPanel *panel= wmalloc(sizeof(WSwitchPanel));
@@ -451,7 +471,7 @@
     panel->scr= scr;
 
     panel->windows= makeWindowListArray(scr, curwin, workspace,
-                                        wPreferences.swtileImage!=0);
+                                        wPreferences.swtileImage!=0, osx_cycling);
     count= WMGetArrayItemCount(panel->windows);
     
     if (count == 0) {
diff -r 5a2507602c48 -r cd9b105aaff1 src/switchpanel.h
--- a/src/switchpanel.h	Sun Dec 14 19:59:05 2008 -0800
+++ b/src/switchpanel.h	Sat Dec 27 09:29:12 2008 +0100
@@ -24,7 +24,7 @@
 
 typedef struct SwitchPanel WSwitchPanel;
 
-WSwitchPanel *wInitSwitchPanel(WScreen *scr, WWindow *curwin, int workspace);
+WSwitchPanel *wInitSwitchPanel(WScreen *scr, WWindow *curwin, int workspace, Bool osx_cycling);
 
 void wSwitchPanelDestroy(WSwitchPanel *panel);
 

Reply via email to