X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fstacking.c;h=35b2c1a713af6283b5e6f81438231a15aef04d39;hb=abe258be1d7e7a6e9881a3e654d7e69994498c62;hp=287de4f0658ed01cf62ccb844cf15c21a529ab5c;hpb=322fc41e496022b1fdfc4753424146496148f232;p=chaz%2Fopenbox diff --git a/openbox/stacking.c b/openbox/stacking.c index 287de4f0..35b2c1a7 100644 --- a/openbox/stacking.c +++ b/openbox/stacking.c @@ -41,7 +41,7 @@ void stacking_set_list() /* create an array of the window ids (from bottom to top, reverse order!) */ if (stacking_list) { - windows = g_new(Window, g_list_length(stacking_list)); + windows = g_new(Window, g_list_length(stacking_list)); for (it = g_list_last(stacking_list); it; it = g_list_previous(it)) { if (WINDOW_IS_CLIENT(it->data)) windows[i++] = WINDOW_AS_CLIENT(it->data)->window; @@ -58,7 +58,7 @@ static void do_restack(GList *wins, GList *before) { GList *it, *next; Window *win; - int i; + gint i; #ifdef DEBUG /* pls only restack stuff in the same layer at a time */ @@ -106,7 +106,7 @@ static void do_raise(GList *wins) { GList *it; GList *layer[OB_NUM_STACKING_LAYERS] = {NULL}; - int i; + gint i; for (it = wins; it; it = g_list_next(it)) { ObStackingLayer l; @@ -133,7 +133,7 @@ static void do_lower(GList *wins) { GList *it; GList *layer[OB_NUM_STACKING_LAYERS] = {NULL}; - int i; + gint i; for (it = wins; it; it = g_list_next(it)) { ObStackingLayer l; @@ -161,7 +161,7 @@ static GList *pick_windows(ObClient *top, ObClient *selected, gboolean raise) GList *ret = NULL; GList *it, *next, *prev; GSList *sit; - int i, n; + gint i, n; GList *modals = NULL; GList *trans = NULL; GList *modal_sel = NULL; /* the selected guys if modal */ @@ -229,12 +229,12 @@ static GList *pick_windows(ObClient *top, ObClient *selected, gboolean raise) } static GList *pick_group_windows(ObClient *top, ObClient *selected, - gboolean raise) + gboolean raise, gboolean normal) { GList *ret = NULL; GList *it, *next, *prev; GSList *sit; - int i, n; + gint i, n; /* add group members in their stacking order */ if (top->group) { @@ -256,7 +256,8 @@ static GList *pick_group_windows(ObClient *top, ObClient *selected, c->desktop == DESKTOP_ALL) && (t == OB_CLIENT_TYPE_TOOLBAR || t == OB_CLIENT_TYPE_MENU || - t == OB_CLIENT_TYPE_UTILITY)) + t == OB_CLIENT_TYPE_UTILITY || + (normal && t == OB_CLIENT_TYPE_NORMAL))) { ret = g_list_concat(ret, pick_windows(sit->data, @@ -271,7 +272,7 @@ static GList *pick_group_windows(ObClient *top, ObClient *selected, return ret; } -void stacking_raise(ObWindow *window) +void stacking_raise(ObWindow *window, gboolean group) { GList *wins; @@ -281,7 +282,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, group)); } else { wins = g_list_append(NULL, window); stacking_list = g_list_remove(stacking_list, window); @@ -290,7 +291,7 @@ void stacking_raise(ObWindow *window) g_list_free(wins); } -void stacking_lower(ObWindow *window) +void stacking_lower(ObWindow *window, gboolean group) { GList *wins; @@ -300,7 +301,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, group), wins); } else { wins = g_list_append(NULL, window); stacking_list = g_list_remove(stacking_list, window); @@ -329,13 +330,13 @@ void stacking_add(ObWindow *win) GList *wins; g_assert(screen_support_win != None); /* make sure I dont break this in the - future */ + future */ l = window_layer(win); wins = g_list_append(NULL, win); /* list of 1 element */ stacking_list = g_list_append(stacking_list, win); - stacking_raise(win); + stacking_raise(win, FALSE); } void stacking_add_nonintrusive(ObWindow *win) @@ -360,10 +361,11 @@ void stacking_add_nonintrusive(ObWindow *win) GList *it; if (client->group) - for (it = stacking_list; !parent && it; it = it->next) { + for (it = stacking_list; !parent && it; it = g_list_next(it)) { if ((sit = g_slist_find(client->group->members, it->data))) for (sit = client->group->members; !parent && sit; - sit = sit->next) { + sit = g_slist_next(sit)) + { ObClient *c = sit->data; /* checking transient_for prevents infinate loops! */ if (sit->data == it->data && !c->transient_for)