guint32 nums;
guint i;
char *data = NULL;
+ gboolean read_title;
g_free(self->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))
- data = g_strdup("Unnamed Window");
+ if (!PROP_GETS(self->window, wm_icon_name, locale, &data)) {
+ data = g_strdup(self->title);
+ read_title = FALSE;
+ }
/* append the title count, dont display the number for the first window */
- if (self->title_count > 1) {
+ if (read_title && self->title_count > 1) {
char *vdata, *ndata;
ndata = g_strdup_printf(" - [%u]", self->title_count);
vdata = g_strconcat(data, ndata, NULL);
focus_fallback(Fallback_Unfocusing);
}
+void client_activate(Client *self)
+{
+ if (client_normal(self) && screen_showing_desktop)
+ screen_show_desktop(FALSE);
+ if (self->iconic)
+ client_iconify(self, FALSE, TRUE);
+ else if (!self->frame->visible)
+ /* if its not visible for other reasons, then don't mess
+ with it */
+ return;
+ if (self->shaded)
+ client_shade(self, FALSE);
+ client_focus(self);
+ stacking_raise(self);
+}
+
gboolean client_focused(Client *self)
{
return self == focus_client;
/*! Remove focus from the client window */
void client_unfocus(Client *self);
+/*! Activates the client for use, focusing, uniconifying it, etc. To be used
+ when the user deliberately selects a window for use. */
+void client_activate(Client *self);
+
/*! Calculates the stacking layer for the client window */
void client_calc_layer(Client *self);
client_close(client);
} else if (msgtype == prop_atoms.net_active_window) {
g_message("net_active_window for 0x%lx", client->window);
- if (screen_showing_desktop)
- screen_show_desktop(FALSE);
- if (client->iconic)
- client_iconify(client, FALSE, TRUE);
- else if (!client->frame->visible)
- /* if its not visible for other reasons, then don't mess
- with it */
- break;
- if (client->shaded)
- client_shade(client, FALSE);
- client_focus(client);
- stacking_raise(client);
+ client_activate(client);
} else if (msgtype == prop_atoms.net_wm_moveresize) {
g_message("net_wm_moveresize for 0x%lx", client->window);
if ((Atom)e->xclient.data.l[2] ==
frame_adjust_focus(focus_client->frame, TRUE);
goto done_cycle;
} else if (done) {
- if (focus_cycle_target) {
- if (focus_cycle_target->iconic)
- client_iconify(focus_cycle_target, FALSE, FALSE);
- if (focus_cycle_target->shaded)
- client_shade(focus_cycle_target, FALSE);
- client_focus(focus_cycle_target);
- stacking_raise(focus_cycle_target);
- }
+ if (focus_cycle_target)
+ client_activate(focus_cycle_target);
goto done_cycle;
}
if (!first) first = focus_client;