diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-04-07 03:46:41 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-04-07 03:46:41 +0000 |
| commit | db086ef336e01ee23c777f3dc6678568565d44ef (patch) | |
| tree | 2cc04723f59aff38de8065eb92d1bcab1d33b5f8 /openbox/action.c | |
| parent | 1f775fdd864715abb622070a9b4dd38341d6da79 (diff) | |
put focus_cycle into focus.c, use it there in the action. improved it as well to handle odd cases like modal windows. added functions to client.c which are needed by the focus cycling routine.
Diffstat (limited to 'openbox/action.c')
| -rw-r--r-- | openbox/action.c | 51 |
1 files changed, 2 insertions, 49 deletions
diff --git a/openbox/action.c b/openbox/action.c index cc934206..8196ef67 100644 --- a/openbox/action.c +++ b/openbox/action.c @@ -716,54 +716,7 @@ void action_showmenu(union ActionData *data) void action_cycle_windows(union ActionData *data) { - static Client *first = NULL; - static Client *t = NULL; - static GList *order = NULL; - GList *it, *start, *list; - - if (data->cycle.cancel) { - if (first) client_focus(first); - goto done_cycle; - } - if (!first) first = focus_client; - - if (data->cycle.linear) - list = client_list; - else { - if (!order) order = g_list_copy(focus_order[screen_desktop]); - list = order; - } - start = it = g_list_find(list, data->cycle.c); - if (!start) goto done_cycle; - - if (!data->cycle.final) { - t = NULL; - if (!start) /* switched desktops or something? */ - goto done_cycle; - - do { - if (data->cycle.forward) { - it = it->next; - if (it == NULL) it = list; - } else { - it = it->prev; - if (it == NULL) it = g_list_last(list); - } - if (client_focus(it->data)) { - t = it->data; - focus_ignore_in++; - break; - } - } while (it != start); - } else { - if (t) stacking_raise(t); - goto done_cycle; - } - return; - - done_cycle: - first = NULL; - g_list_free(order); - order = NULL; + focus_cycle(data->cycle.forward, data->cycle.linear, data->cycle.final, + data->cycle.cancel); } |
