From db086ef336e01ee23c777f3dc6678568565d44ef Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 7 Apr 2003 03:46:41 +0000 Subject: 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. --- openbox/action.c | 51 ++------------------------------------------------- 1 file changed, 2 insertions(+), 49 deletions(-) (limited to 'openbox/action.c') 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); } -- cgit v1.2.3