/* 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. */
}
/* 1 && -1 shouldn't be possible by the code in config.c */
- if (settings->max_vert == 1 && self->max_horz == 1)
+ if (settings->max_vert == 1 && settings->max_horz == 1)
client_maximize(self, TRUE, 0, TRUE);
- else if (settings->max_vert == 0 && self->max_horz == 0)
+ else if (settings->max_vert == 0 && settings->max_horz == 0)
client_maximize(self, FALSE, 0, TRUE);
- else if (settings->max_vert == 1 && self->max_horz == 0) {
+ else if (settings->max_vert == 1 && settings->max_horz == 0) {
client_maximize(self, TRUE, 2, TRUE);
client_maximize(self, FALSE, 1, TRUE);
- } else if (settings->max_vert == 0 && self->max_horz == 1) {
+ } else if (settings->max_vert == 0 && settings->max_horz == 1) {
client_maximize(self, TRUE, 1, TRUE);
client_maximize(self, FALSE, 2, TRUE);
}
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)) ||
if (size.flags & PBaseSize)
SIZE_SET(self->base_size, size.base_width, size.base_height);
- if (size.flags & PResizeInc)
+ if (size.flags & PResizeInc && size.width_inc && size.height_inc)
SIZE_SET(self->size_inc, size.width_inc, size.height_inc);
}
}
/* start with everything (cept fullscreen) */
self->decorations =
(OB_FRAME_DECOR_TITLEBAR |
- (ob_rr_theme->show_handle ? OB_FRAME_DECOR_HANDLE : 0) |
+ OB_FRAME_DECOR_HANDLE |
OB_FRAME_DECOR_GRIPS |
OB_FRAME_DECOR_BORDER |
OB_FRAME_DECOR_ICON |
/* try netwm */
if (!PROP_GETS(self->window, net_wm_name, utf8, &data)) {
/* try old x stuff */
- if (!PROP_GETS(self->window, wm_name, locale, &data)) {
+ if (!(PROP_GETS(self->window, wm_name, locale, &data)
+ || PROP_GETS(self->window, wm_name, utf8, &data))) {
// http://developer.gnome.org/projects/gup/hig/draft_hig_new/windows-alert.html
if (self->transient) {
data = g_strdup("");
}
}
- /* did the title change? then reset the title_count */
- if (old_title && 0 != strncmp(old_title, data, strlen(data)))
- self->title_count = 1;
+ if (config_title_number) {
- /* look for duplicates and append a number */
- nums = 0;
- for (it = client_list; it; it = g_list_next(it))
- if (it->data != self) {
- ObClient *c = it->data;
- if (0 == strncmp(c->title, data, strlen(data)))
- nums |= 1 << c->title_count;
- }
- /* find first free number */
- for (i = 1; i <= 32; ++i)
- if (!(nums & (1 << i))) {
- if (self->title_count == 1 || i == 1)
- self->title_count = i;
- break;
+ /* did the title change? then reset the title_count */
+ if (old_title && 0 != strncmp(old_title, data, strlen(data)))
+ self->title_count = 1;
+
+ /* look for duplicates and append a number */
+ nums = 0;
+ for (it = client_list; it; it = g_list_next(it))
+ if (it->data != self) {
+ ObClient *c = it->data;
+ if (0 == strncmp(c->title, data, strlen(data)))
+ nums |= 1 << c->title_count;
+ }
+ /* find first free number */
+ for (i = 1; i <= 32; ++i)
+ if (!(nums & (1 << i))) {
+ if (self->title_count == 1 || i == 1)
+ self->title_count = i;
+ break;
+ }
+ /* dont display the number for the first window */
+ if (self->title_count > 1) {
+ gchar *ndata;
+ ndata = g_strdup_printf("%s - [%u]", data, self->title_count);
+ g_free(data);
+ data = ndata;
}
- /* dont display the number for the first window */
- if (self->title_count > 1) {
- gchar *ndata;
- ndata = g_strdup_printf("%s - [%u]", data, self->title_count);
- g_free(data);
- data = ndata;
- }
+ } else
+ self->title_count = 1;
- PROP_SETS(self->window, net_wm_visible_name, data);
no_number:
+ PROP_SETS(self->window, net_wm_visible_name, data);
self->title = data;
if (self->frame)
/* try netwm */
if (!PROP_GETS(self->window, net_wm_icon_name, utf8, &data))
/* try old x stuff */
- if (!PROP_GETS(self->window, wm_icon_name, locale, &data)) {
+ if (!(PROP_GETS(self->window, wm_icon_name, locale, &data)
+ || PROP_GETS(self->window, wm_icon_name, utf8, &data))) {
data = g_strdup(self->title);
read_title = FALSE;
}
- /* append the title count, dont display the number for the first window */
+ /* append the title count, dont display the number for the first window.
+ * We don't need to check for config_title_number here since title_count
+ * is not set above 1 then. */
if (read_title && self->title_count > 1) {
gchar *vdata, *ndata;
ndata = g_strdup_printf(" - [%u]", self->title_count);
return TRUE;
}
+/* Used when the current client is closed, focus_last will then prevent
+ * focus from going to the mouse pointer */
void client_unfocus(ObClient *self)
{
if (focus_client == self) {
#ifdef DEBUG_FOCUS
ob_debug("client_unfocus for %lx\n", self->window);
#endif
- focus_fallback(OB_FOCUS_FALLBACK_UNFOCUSING);
+ focus_fallback(OB_FOCUS_FALLBACK_CLOSED);
}
}
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)