add a client_activate function, use it for net_wm_active mesgs and for focus cycling.
This commit is contained in:
parent
380ddd2b9c
commit
d5eacc5642
4 changed files with 31 additions and 24 deletions
|
@ -1192,6 +1192,7 @@ void client_update_title(Client *self)
|
|||
guint32 nums;
|
||||
guint i;
|
||||
char *data = NULL;
|
||||
gboolean read_title;
|
||||
|
||||
g_free(self->title);
|
||||
|
||||
|
@ -1236,15 +1237,18 @@ void client_update_title(Client *self)
|
|||
/* 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);
|
||||
|
@ -2292,6 +2296,22 @@ void client_unfocus(Client *self)
|
|||
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;
|
||||
|
|
|
@ -427,6 +427,10 @@ gboolean client_focus(Client *self);
|
|||
/*! 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);
|
||||
|
||||
|
|
|
@ -731,18 +731,7 @@ static void event_handle_client(Client *client, XEvent *e)
|
|||
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] ==
|
||||
|
|
|
@ -268,14 +268,8 @@ Client *focus_cycle(gboolean forward, gboolean linear, gboolean done,
|
|||
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;
|
||||
|
|
Loading…
Reference in a new issue