From c80b496bf407d73bea169058abfcda44effad0dd Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 14 Mar 2007 21:07:30 +0000 Subject: make focus_order into one long list instead of having one per desktop. this actually fixes bugs with omnipresent windows and adding desktops. it is just overall a little nicer i think. also this is not tested. sorry if it breaks everything. --- openbox/screen.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'openbox/screen.c') diff --git a/openbox/screen.c b/openbox/screen.c index 70de299d..8f1f9396 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -372,7 +372,7 @@ void screen_resize() void screen_set_num_desktops(guint num) { - guint i, old; + guint old; gulong *viewport; GList *it; @@ -410,16 +410,6 @@ void screen_set_num_desktops(guint num) /* change our desktop if we're on one that no longer exists! */ if (screen_desktop >= screen_num_desktops) screen_set_desktop(num - 1); - - /* update the focus lists */ - /* free our lists for the desktops which have disappeared */ - for (i = num; i < old; ++i) - g_list_free(focus_order[i]); - /* realloc the array */ - focus_order = g_renew(GList*, focus_order, num); - /* set the new lists to be empty */ - for (i = old; i < num; ++i) - focus_order[i] = NULL; } void screen_set_desktop(guint num) @@ -888,10 +878,13 @@ void screen_show_desktop(gboolean show) if (show) { /* focus desktop */ - for (it = focus_order[screen_desktop]; it; it = g_list_next(it)) - if (((ObClient*)it->data)->type == OB_CLIENT_TYPE_DESKTOP && + for (it = focus_order; it; it = g_list_next(it)) { + ObClient *c = it->data; + if (c->type == OB_CLIENT_TYPE_DESKTOP && + (c->desktop == screen_desktop || c->desktop == DESKTOP_ALL) && client_validate(it->data) && client_focus(it->data)) break; + } } else { focus_fallback(TRUE); } -- cgit v1.2.3