grab_server(TRUE);
- /* check if it has already been unmapped by the time we started mapping
+ /* check if it has already been unmapped by the time we started mapping.
the grab does a sync so we don't have to here */
if (XCheckTypedWindowEvent(ob_display, window, DestroyNotify, &e) ||
XCheckTypedWindowEvent(ob_display, window, UnmapNotify, &e))
{
XPutBackEvent(ob_display, &e);
+ ob_debug("Trying to manage unmapped window. Aborting that.\n");
grab_server(FALSE);
return; /* don't manage it */
}
self->window = window;
/* non-zero defaults */
- self->title_count = 1;
self->wmstate = WithdrawnState; /* make sure it gets updated first time */
self->layer = -1;
self->desktop = screen_num_desktops; /* always an invalid value */
won't be all wacko!!
also, this moves the window to the position where it has been placed
*/
+ ob_debug("placing window 0x%x at %d, %d with size %d x %d\n",
+ self->window, newx, newy, self->area.width, self->area.height);
client_apply_startup_state(self, newx, newy);
keyboard_grab_for_client(self, TRUE);
/* Don't steal focus from globally active clients.
I stole this idea from KWin. It seems nice.
*/
- if (!focus_client->can_focus && focus_client->focus_notify)
+ if (!(focus_client->can_focus || focus_client->focus_notify))
activate = FALSE;
}
void client_update_title(ObClient *self)
{
- GList *it;
- guint32 nums;
- guint i;
gchar *data = NULL;
- gboolean read_title;
- gchar *old_title;
- old_title = self->title;
+ g_free(self->title);
/* 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)
|| PROP_GETS(self->window, wm_name, utf8, &data))) {
- // http://developer.gnome.org/projects/gup/hig/draft_hig_new/windows-alert.html
if (self->transient) {
+ /*
+ GNOME alert windows are not given titles:
+ http://developer.gnome.org/projects/gup/hig/draft_hig_new/windows-alert.html
+ */
data = g_strdup("");
- goto no_number;
} else
data = g_strdup("Unnamed Window");
}
}
- if (config_title_number) {
-
- /* 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 (c->title_count == 1) {
- if (!strcmp(c->title, data))
- nums |= 1 << c->title_count;
- } else {
- size_t len;
- gchar *end;
-
- /* find the beginning of our " - [%u]", this relies on
- that syntax being used */
- end = strrchr(c->title, '-') - 1;
- len = end - c->title;
- if (!strncmp(c->title, data, len))
- 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;
- }
- } else
- self->title_count = 1;
-
-no_number:
PROP_SETS(self->window, net_wm_visible_name, data);
self->title = data;
if (self->frame)
frame_adjust_title(self->frame);
- g_free(old_title);
-
/* update the icon title */
data = NULL;
g_free(self->icon_title);
- read_title = TRUE;
/* 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)
- || PROP_GETS(self->window, wm_icon_name, utf8, &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.
- * 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 *newdata;
- newdata = g_strdup_printf("%s - [%u]", data, self->title_count);
- g_free(data);
- data = newdata;
- }
PROP_SETS(self->window, net_wm_visible_icon_name, data);
-
self->icon_title = data;
}
if (new_event)
client_last_user_time = time;
- /*ob_debug("window 0x%x user time %u\n", self->window, time);*/
+ /*
+ ob_debug("window %s user time %u\n", self->title, time);
+ ob_debug("last user time %u\n", client_last_user_time);
+ */
}
}
}
}
-void client_activate(ObClient *self, gboolean here, gboolean user, Time time)
+void client_activate(ObClient *self, gboolean here, gboolean user)
{
/* XXX do some stuff here if user is false to determine if we really want
to activate it or not (a parent or group member is currently
*/
ob_debug("Want to activate window 0x%x with time %u (last time %u), "
"source=%s\n",
- self->window, time, client_last_user_time,
+ self->window, event_curtime, client_last_user_time,
(user ? "user" : "application"));
- if (!user && time && time < client_last_user_time)
+ if (!user && event_curtime && event_curtime < client_last_user_time)
client_hilite(self, TRUE);
else {
if (client_normal(self) && screen_showing_desktop)