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);
