X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=ba6b7b67d74a2b6aaab578988205515d10c1af92;hb=174de91c343dfbdfe866e566393bf4790ae22596;hp=ff1386bce332da334451e96d641887c2dc9fc33f;hpb=740c5b2a20d5110435d0874f8cc6a4c9dfd14777;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index ff1386bc..ba6b7b67 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -216,7 +216,7 @@ static ObClient *find_transient_recursive(ObClient *c, ObClient *top, GSList *it; ObClient *ret; - for (it = c->transients; it; it = it->next) { + for (it = c->transients; it; it = g_slist_next(it)) { if (it->data == top) return NULL; ret = find_transient_recursive(it->data, top, skip); if (ret && ret != skip && client_normal(ret)) return ret; @@ -266,14 +266,19 @@ ObClient* focus_fallback_target(ObFocusFallbackType type) /* try for transient relations */ if (trans) { if (old->transient_for == OB_TRAN_GROUP) { - for (it = focus_order[screen_desktop]; it; it = it->next) { + for (it = focus_order[screen_desktop]; it; + it = g_list_next(it)) + { GSList *sit; - for (sit = old->group->members; sit; sit = sit->next) + for (sit = old->group->members; sit; + sit = g_slist_next(sit)) + { if (sit->data == it->data) if ((target = focus_fallback_transient(sit->data, old))) return target; + } } } else { if ((target = @@ -295,8 +300,8 @@ ObClient* focus_fallback_target(ObFocusFallbackType type) if (old->group) { GSList *sit; - for (it = focus_order[screen_desktop]; it != NULL; it = it->next) - for (sit = old->group->members; sit; sit = sit->next) + for (it = focus_order[screen_desktop]; it; it = g_list_next(it)) + for (sit = old->group->members; sit; sit = g_slist_next(sit)) if (sit->data == it->data) if (sit->data != old && client_normal(sit->data)) if (client_can_focus(sit->data)) @@ -304,7 +309,7 @@ ObClient* focus_fallback_target(ObFocusFallbackType type) } #endif - for (it = focus_order[screen_desktop]; it != NULL; it = it->next) + for (it = focus_order[screen_desktop]; it; it = g_list_next(it)) if (type != OB_FOCUS_FALLBACK_UNFOCUSING || it->data != old) if (client_normal(it->data) && client_can_focus(it->data)) return it->data; @@ -333,7 +338,7 @@ static void popup_cycle(ObClient *c, gboolean show) } else { Rect *a; ObClient *p = c; - gchar *title; + gchar *title = NULL; a = screen_physical_area_monitor(0); icon_popup_position(focus_cycle_popup, CenterGravity, @@ -350,13 +355,13 @@ static void popup_cycle(ObClient *c, gboolean show) while (p->transient_for && p->transient_for != OB_TRAN_GROUP) p = p->transient_for; - if (p == c) - title = NULL; - else +/* + if (p != c) title = g_strconcat((c->iconic ? c->icon_title : c->title), " - ", (p->iconic ? p->icon_title : p->title), NULL); +*/ icon_popup_show(focus_cycle_popup, (title ? title : @@ -513,7 +518,10 @@ static gboolean valid_focus_target(ObClient *ft) ft->type == OB_CLIENT_TYPE_UTILITY))) && ((ft->can_focus || ft->focus_notify) && !ft->skip_taskbar && - (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL))) + (ft->desktop == screen_desktop || ft->desktop == DESKTOP_ALL)) && + ft == client_focus_target(ft)) + return TRUE; +/* { GSList *it; @@ -525,6 +533,7 @@ static gboolean valid_focus_target(ObClient *ft) } return TRUE; } +*/ return FALSE; } @@ -657,16 +666,19 @@ void focus_order_add_new(ObClient *c) d = c->desktop; if (d == DESKTOP_ALL) { for (i = 0; i < screen_num_desktops; ++i) { + g_assert(!g_list_find(focus_order[i], c)); if (focus_order[i] && ((ObClient*)focus_order[i]->data)->iconic) focus_order[i] = g_list_insert(focus_order[i], c, 0); else focus_order[i] = g_list_insert(focus_order[i], c, 1); } - } else - if (focus_order[d] && ((ObClient*)focus_order[d]->data)->iconic) + } else { + g_assert(!g_list_find(focus_order[d], c)); + if (focus_order[d] && ((ObClient*)focus_order[d]->data)->iconic) focus_order[d] = g_list_insert(focus_order[d], c, 0); else focus_order[d] = g_list_insert(focus_order[d], c, 1); + } } } @@ -692,7 +704,7 @@ static void to_top(ObClient *c, guint d) /* insert before first iconic window */ for (it = focus_order[d]; - it && !((ObClient*)it->data)->iconic; it = it->next); + it && !((ObClient*)it->data)->iconic; it = g_list_next(it)); focus_order[d] = g_list_insert_before(focus_order[d], it, c); } } @@ -719,7 +731,7 @@ static void to_bottom(ObClient *c, guint d) /* insert before first iconic window */ for (it = focus_order[d]; - it && !((ObClient*)it->data)->iconic; it = it->next); + it && !((ObClient*)it->data)->iconic; it = g_list_next(it)); g_list_insert_before(focus_order[d], it, c); } }