X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fstacking.c;h=29b3d1a9b064a65679668b90e4f46da6df201114;hb=81743b0529a74982cfcc9e89854d900aeedb686a;hp=d053bec4ddce53e2f39c29c4f100a8fb4e9ba55f;hpb=335e8acbfc5d2824f1fd2cb67a5add8e1ed40b06;p=chaz%2Fopenbox diff --git a/openbox/stacking.c b/openbox/stacking.c index d053bec4..29b3d1a9 100644 --- a/openbox/stacking.c +++ b/openbox/stacking.c @@ -1,6 +1,7 @@ /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- stacking.c for the Openbox window manager + Copyright (c) 2006 Mikael Magnusson Copyright (c) 2003 Ben Jansens This program is free software; you can redistribute it and/or modify @@ -49,18 +50,19 @@ void stacking_set_list() } PROP_SETA32(RootWindow(ob_display, ob_screen), - net_client_list_stacking, window, (guint32*)windows, i); + net_client_list_stacking, window, (gulong*)windows, i); g_free(windows); } static void do_restack(GList *wins, GList *before) { - GList *it, *next; + GList *it; Window *win; gint i; #ifdef DEBUG + GList *next; /* pls only restack stuff in the same layer at a time */ for (it = wins; it; it = next) { next = g_list_next(it); @@ -229,7 +231,7 @@ 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; @@ -256,7 +258,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 +274,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 +284,8 @@ 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 +294,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 +304,8 @@ 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); @@ -325,17 +330,11 @@ void stacking_below(ObWindow *window, ObWindow *below) void stacking_add(ObWindow *win) { - ObStackingLayer l; - GList *wins; - g_assert(screen_support_win != None); /* make sure I dont break this in the - future */ - - l = window_layer(win); - wins = g_list_append(NULL, win); /* list of 1 element */ + future */ stacking_list = g_list_append(stacking_list, win); - stacking_raise(win); + stacking_raise(win, FALSE); } void stacking_add_nonintrusive(ObWindow *win)