X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fstacking.c;h=863263d21c781380ef238be3ad0509627fa25164;hb=79e189dbac9ec5ae5baed26515ee60b8dce9a079;hp=5b9b37b2958134e1a4d7dace6c466cc3206c1346;hpb=35418ca0fcd3fd28ef579f4435b8bad3b7c87f04;p=chaz%2Fopenbox diff --git a/openbox/stacking.c b/openbox/stacking.c index 5b9b37b2..863263d2 100644 --- a/openbox/stacking.c +++ b/openbox/stacking.c @@ -18,7 +18,7 @@ void stacking_set_list() /* on shutdown, don't update the properties, so that we can read it back in on startup and re-stack the windows as they were before we shut down */ - if (ob_state == OB_STATE_EXITING) return; + if (ob_state() == OB_STATE_EXITING) return; /* create an array of the window ids (from bottom to top, reverse order!) */ @@ -141,11 +141,14 @@ static GList *pick_windows(ObClient *top, ObClient *selected, gboolean raise) int i, n; GList *modals = NULL; GList *trans = NULL; - GList *modal_sel_it = NULL; /* the selected guy if modal */ - GList *trans_sel_it = NULL; /* the selected guy if not */ + GList *modal_sel = NULL; /* the selected guys if modal */ + GList *trans_sel = NULL; /* the selected guys if not */ /* remove first so we can't run into ourself */ - stacking_list = g_list_remove(stacking_list, top); + if ((it = g_list_find(stacking_list, top))) + stacking_list = g_list_delete_link(stacking_list, it); + else + return NULL; i = 0; n = g_slist_length(top->transients); @@ -155,26 +158,32 @@ static GList *pick_windows(ObClient *top, ObClient *selected, gboolean raise) if ((sit = g_slist_find(top->transients, it->data))) { ObClient *c = sit->data; + gboolean sel_child; ++i; + if (c == selected) + sel_child = TRUE; + else + sel_child = client_search_transient(c, selected) != NULL; + if (!c->modal) { - if (c != selected) { + if (!sel_child) { trans = g_list_concat(trans, - pick_windows(c, selected, raise)); + pick_windows(c, selected, raise)); } else { - g_assert(modal_sel_it == NULL); - g_assert(trans_sel_it == NULL); - trans_sel_it = pick_windows(c, selected, raise); + trans_sel = g_list_concat(trans_sel, + pick_windows(c, selected, + raise)); } } else { - if (c != selected) { + if (!sel_child) { modals = g_list_concat(modals, pick_windows(c, selected, raise)); } else { - g_assert(modal_sel_it == NULL); - g_assert(trans_sel_it == NULL); - modal_sel_it = pick_windows(c, selected, raise); + modal_sel = g_list_concat(modal_sel, + pick_windows(c, selected, + raise)); } } /* if we dont have a prev then start back at the beginning, @@ -183,11 +192,11 @@ static GList *pick_windows(ObClient *top, ObClient *selected, gboolean raise) } } - ret = g_list_concat((raise ? modal_sel_it : modals), - (raise ? modals : modal_sel_it)); + ret = g_list_concat((raise ? modal_sel : modals), + (raise ? modals : modal_sel)); - ret = g_list_concat(ret, (raise ? trans_sel_it : trans)); - ret = g_list_concat(ret, (raise ? trans : trans_sel_it)); + ret = g_list_concat(ret, (raise ? trans_sel : trans)); + ret = g_list_concat(ret, (raise ? trans : trans_sel)); /* add itself */ @@ -234,7 +243,7 @@ void stacking_raise(ObWindow *window) selected = WINDOW_AS_CLIENT(window); c = client_search_top_transient(selected); wins = pick_windows(c, selected, TRUE); - wins = g_list_concat(wins, pick_group_windows(c, selected, TRUE)); + /*wins = g_list_concat(wins, pick_group_windows(c, selected, TRUE));*/ } else { wins = g_list_append(NULL, window); stacking_list = g_list_remove(stacking_list, window); @@ -253,7 +262,7 @@ void stacking_lower(ObWindow *window) selected = WINDOW_AS_CLIENT(window); c = client_search_top_transient(selected); wins = pick_windows(c, selected, FALSE); - wins = g_list_concat(pick_group_windows(c, selected, FALSE), wins); + /*wins = g_list_concat(pick_group_windows(c, selected, FALSE), wins);*/ } else { wins = g_list_append(NULL, window); stacking_list = g_list_remove(stacking_list, window);