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.

-And I am facing system hang when using only the focus groups. and
still only cycling between all windows

-focus previous window doesn't work after patch.

I will investigate later about it but a confirmation of these symptoms
would be cool. Maybe I missed something.

regards.


2008/12/26 Samir SAADA <[email protected]>:
> neat I was thinking to implement it myself;
> but here it is :D
> thanks Tamas.
>
> On Fri, Dec 26, 2008 at 8:29 AM, Tamas TEVESZ <[email protected]> wrote:
>>
>> excerpts from my local tree, part 3
>>
>> tree f1f97620d28a
>> parent 3eb00561166f
>> author Tamas TEVESZ <[email protected]> 1230230431 -3600
>> committer Tamas TEVESZ <[email protected]> 1230230431 -3600
>> revision 1618
>> branch ice
>>
>> Applied Mac OS X-style windows cycling from
>> http://iain.cx/wm/patches/cycling-osx/0.92.0/cycling-osx.diff
>>
>>  For those not familiar with the way Macs cycle windows, the Command-Tab
>>  sequence (Alt-Tab elsewhere) switches between DIFFERENT application windows
>>  and Command-Grave (key above tab) switches between windows owned by the
>>  SAME application as is currently focused. So if you had three Safari and
>>  two Finder windows open, and Safari had focus, Command-Tab would switch to
>>  Finder; Command-Tab would switch back to Safari; Command-Grave would switch
>>  to a different Safari window etc.
>>
>>  This patch implements "something like" the above by only populating the
>>  switchpanel with windows matching the currently-focused WWindow's
>>  wm_instance and wm_class when the new cycling mode is activated. In
>>  practice this means you can switch to The Next XTerm or The Next Mozilla
>>  Window using this method.
>>
>>  The configuration names for these new shortcuts are GroupNext and
>>  GroupPrev. The patch tells WPrefs.app about them. Of course switching to
>>  The Next Window is still possible with the (unchanged) FocusNext and
>>  FocusPrev keys.
>>
>>  Opinion: I find the Mac way of doing things annoying (because cycling to
>>  The Last Window requires you to remember which key to use depending on what
>>  type of application has focus) but at the same time very useful (because
>>  easily switching to The Next Terminal.app is nice). With this patch you can
>>  switch to The Next Window or The Next XTerm - the best of both worlds!
>> diff --git a/WPrefs.app/KeyboardShortcuts.c b/WPrefs.app/KeyboardShortcuts.c
>> --- a/WPrefs.app/KeyboardShortcuts.c
>> +++ b/WPrefs.app/KeyboardShortcuts.c
>> @@ -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 --git a/src/cycling.c b/src/cycling.c
>> --- a/src/cycling.c
>> +++ b/src/cycling.c
>> @@ -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) {
>> diff --git a/src/defaults.c b/src/defaults.c
>> --- a/src/defaults.c
>> +++ b/src/defaults.c
>> @@ -732,6 +732,12 @@
>>     {"FocusPrevKey", "None",                   (void*)WKBD_FOCUSPREV,
>>     NULL,                              getKeybind,     setKeyGrab
>>     },
>> +    {"GroupNextKey", "None",                   (void*)WKBD_FOCUSPREV,
>> +    NULL,                              getKeybind,     setKeyGrab
>> +    },
>> +    {"GroupPrevKey", "None",                   (void*)WKBD_GROUPPREV,
>> +    NULL,                              getKeybind,     setKeyGrab
>> +    },
>>     {"NextWorkspaceKey", "None",               (void*)WKBD_NEXTWORKSPACE,
>>     NULL,                              getKeybind,     setKeyGrab
>>     },
>> diff --git a/src/event.c b/src/event.c
>> --- a/src/event.c
>> +++ b/src/event.c
>> @@ -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 --git a/src/funcs.h b/src/funcs.h
>> --- a/src/funcs.h
>> +++ b/src/funcs.h
>> @@ -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 --git a/src/keybind.h b/src/keybind.h
>> --- a/src/keybind.h
>> +++ b/src/keybind.h
>> @@ -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 --git a/src/switchpanel.c b/src/switchpanel.c
>> --- a/src/switchpanel.c
>> +++ b/src/switchpanel.c
>> @@ -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 --git a/src/switchpanel.h b/src/switchpanel.h
>> --- a/src/switchpanel.h
>> +++ b/src/switchpanel.h
>> @@ -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);
>>
>>
>> --
>> [-]
>>
>> mkdir /nonexistent
>>
>>
>> --
>> To unsubscribe, send mail to [email protected].
>>
>


-- 
To unsubscribe, send mail to [email protected].

Reply via email to