X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus.c;h=c990cf843303bb3b8acc01388eefc2d1baebd551;hb=e3786e64fb0786632b89ff086b818c0a3b0522b7;hp=3b4dd14537c6b641194ba73376b7355bc5066729;hpb=2aa5cd3574b2bbdc103cb7626aa1ff77ea2c0046;p=chaz%2Fopenbox diff --git a/openbox/focus.c b/openbox/focus.c index 3b4dd145..c990cf84 100644 --- a/openbox/focus.c +++ b/openbox/focus.c @@ -61,10 +61,10 @@ static void focus_cycle_destructor(ObClient *client, gpointer data) } static Window createWindow(Window parent, gulong mask, - XSetWindowAttributes *attrib) + XSetWindowAttributes *attrib) { return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0, - RrDepth(ob_rr_inst), InputOutput, + RrDepth(ob_rr_inst), InputOutput, RrVisual(ob_rr_inst), mask, attrib); } @@ -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; @@ -252,7 +252,7 @@ ObClient* focus_fallback_target(ObFocusFallbackType type) if (old->transient_for) { gboolean trans = FALSE; - if (!config_focus_follow) + if (!config_focus_follow || config_focus_last) trans = TRUE; else { if ((target = client_under_pointer()) && @@ -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 = @@ -284,7 +289,7 @@ ObClient* focus_fallback_target(ObFocusFallbackType type) } } - if (config_focus_follow) { + if (config_focus_follow && !config_focus_last) { if ((target = client_under_pointer())) if (client_normal(target) && client_can_focus(target)) return 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 : @@ -661,12 +666,14 @@ 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 { + 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 @@ -697,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); } } @@ -724,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); } }