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;
XSetWindowAttributes attrib_set;
XWMHints *wmhint;
gboolean activate = FALSE;
+ ObAppSetting *settings;
grab_server(TRUE);
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 */
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,
(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;
}
}