X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=457a0f6ad03e2292406335d7d49d552b20cf5fb2;hb=b276ff81a125e31b11db2632928355433965c4a1;hp=21673535d06f3a505323d3bed5afc4d94593e846;hpb=1de9c1901cf7e95ace3f934f97ceff7cf77801a9;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 21673535..457a0f6a 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1,7 +1,7 @@ /* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*- client.c for the Openbox window manager - Copyright (c) 2004 Mikael Magnusson + Copyright (c) 2006 Mikael Magnusson Copyright (c) 2003 Ben Jansens This program is free software; you can redistribute it and/or modify @@ -322,6 +322,9 @@ void client_manage(Window window) /* get and set application level settings */ settings = get_settings(self); + stacking_add(CLIENT_AS_WINDOW(self)); + client_restore_session_stacking(self); + if (settings) { /* Don't worry, we won't actually both shade and undecorate the * window when push comes to shove. */ @@ -356,17 +359,15 @@ void client_manage(Window window) if (settings->fullscreen != -1) client_fullscreen(self, !!settings->fullscreen, TRUE); - if (settings->desktop < screen_num_desktops) - client_set_desktop(self, settings->desktop, FALSE); + if (settings->desktop < screen_num_desktops + || settings->desktop == DESKTOP_ALL) + client_set_desktop(self, settings->desktop, TRUE); if (settings->layer > -2 && settings->layer < 2) client_set_layer(self, settings->layer); } - stacking_add(CLIENT_AS_WINDOW(self)); - client_restore_session_stacking(self); - /* focus the new window? */ if (ob_state() != OB_STATE_STARTING && (config_focus_new || client_search_focus_parent(self)) || @@ -414,8 +415,9 @@ void client_manage(Window window) if (ob_state() == OB_STATE_RUNNING) { gint x = self->area.x, ox = x; gint y = self->area.y, oy = y; + gboolean transient; - place_client(self, &x, &y, settings); + transient = place_client(self, &x, &y, settings); /* make sure the window is visible. */ client_find_onscreen(self, &x, &y, @@ -431,10 +433,11 @@ void client_manage(Window window) off-screen and on xinerama divides (ie, it is up to the placement routines to avoid the xinerama divides) */ - ((self->positioned & PPosition) && - !(self->positioned & USPosition)) && - client_normal(self) && - !self->session); + transient || + (((self->positioned & PPosition) && + !(self->positioned & USPosition)) && + client_normal(self) && + !self->session)); if (x != ox || y != oy) client_move(self, x, y); } @@ -1301,7 +1304,8 @@ void client_setup_decor_and_functions(ObClient *self) (self->mwmhints.decorations & OB_MWM_DECOR_TITLE))) /* if the mwm hints request no handle or title, then all decorations are disabled */ - self->decorations = config_theme_keepborder ? OB_FRAME_DECOR_BORDER : 0; + self->decorations = config_theme_keepborder ? + self->decorations & OB_FRAME_DECOR_BORDER : 0; } } @@ -2855,9 +2859,6 @@ void client_unfocus(ObClient *self) void client_activate(ObClient *self, gboolean here) { - /* This check is for the client_list_menu trying to activate - * a closed client. */ - if (!g_list_find(client_list, self)) return; if (client_normal(self) && screen_showing_desktop) screen_show_desktop(FALSE); if (self->iconic)