X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=ce1c417fd0f8f73303f4b243de8cb8c93123901b;hb=de1559a09497ae4ead44a6e70b556123a5bab35c;hp=930f3ee4d174571bd5e2576383133dd66a6b6a14;hpb=1fad2da07f7fed1d640d57a2c7c2f666ebb409c4;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 930f3ee4..ce1c417f 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -204,6 +204,26 @@ void client_manage_all() XFree(children); } +/* This should possibly do something more interesting than just match + * against WM_CLASS literally. */ +static ObAppSetting *get_settings(ObClient *client) +{ + GSList *a = config_per_app_settings; + + while (a) { + ObAppSetting *app = (ObAppSetting *) a->data; + + if (!strcmp(app->name, client->name)) { + ob_debug("Window matching: %s\n", app->name); + + return (ObAppSetting *) a->data; + } + + a = a->next; + } + return NULL; +} + void client_manage(Window window) { ObClient *self; @@ -212,6 +232,7 @@ void client_manage(Window window) XSetWindowAttributes attrib_set; XWMHints *wmhint; gboolean activate = FALSE; + ObAppSetting *settings; grab_server(TRUE); @@ -292,12 +313,29 @@ void client_manage(Window window) client_apply_startup_state(self); + /* get and set application level settings */ + settings = get_settings(self); + + if (settings) { + if (settings->shade && !settings->decor) + settings->decor = TRUE; + + client_shade(self, settings->shade); + client_set_undecorated(self, !settings->decor); + + if (settings->desktop != -1) + client_set_desktop(self, settings->desktop, FALSE); + + 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)) && + (config_focus_new || client_search_focus_parent(self)) || + (settings && settings->focus) && /* note the check against Type_Normal/Dialog, not client_normal(self), which would also include other types. in this case we want more strict rules for focus */ @@ -342,7 +380,7 @@ void client_manage(Window window) gint x = self->area.x, ox = x; gint y = self->area.y, oy = y; - place_client(self, &x, &y); + place_client(self, &x, &y, settings); /* make sure the window is visible. */ client_find_onscreen(self, &x, &y, @@ -1228,7 +1266,7 @@ 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 = 0; + self->decorations = config_theme_keepborder ? OB_FRAME_DECOR_BORDER : 0; } }