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;
|
guint32 nums;
|
||||||
guint i;
|
guint i;
|
||||||
char *data = NULL;
|
char *data = NULL;
|
||||||
|
gboolean read_title;
|
||||||
|
|
||||||
g_free(self->title);
|
g_free(self->title);
|
||||||
|
|
||||||
|
@ -1236,15 +1237,18 @@ void client_update_title(Client *self)
|
||||||
/* update the icon title */
|
/* update the icon title */
|
||||||
data = NULL;
|
data = NULL;
|
||||||
g_free(self->icon_title);
|
g_free(self->icon_title);
|
||||||
|
|
||||||
|
read_title = TRUE;
|
||||||
/* try netwm */
|
/* try netwm */
|
||||||
if (!PROP_GETS(self->window, net_wm_icon_name, utf8, &data))
|
if (!PROP_GETS(self->window, net_wm_icon_name, utf8, &data))
|
||||||
/* try old x stuff */
|
/* try old x stuff */
|
||||||
if (!PROP_GETS(self->window, wm_icon_name, locale, &data))
|
if (!PROP_GETS(self->window, wm_icon_name, locale, &data)) {
|
||||||
data = g_strdup("Unnamed Window");
|
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 */
|
||||||
if (self->title_count > 1) {
|
if (read_title && self->title_count > 1) {
|
||||||
char *vdata, *ndata;
|
char *vdata, *ndata;
|
||||||
ndata = g_strdup_printf(" - [%u]", self->title_count);
|
ndata = g_strdup_printf(" - [%u]", self->title_count);
|
||||||
vdata = g_strconcat(data, ndata, NULL);
|
vdata = g_strconcat(data, ndata, NULL);
|
||||||
|
@ -2292,6 +2296,22 @@ void client_unfocus(Client *self)
|
||||||
focus_fallback(Fallback_Unfocusing);
|
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)
|
gboolean client_focused(Client *self)
|
||||||
{
|
{
|
||||||
return self == focus_client;
|
return self == focus_client;
|
||||||
|
|
|
@ -427,6 +427,10 @@ gboolean client_focus(Client *self);
|
||||||
/*! Remove focus from the client window */
|
/*! Remove focus from the client window */
|
||||||
void client_unfocus(Client *self);
|
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 */
|
/*! Calculates the stacking layer for the client window */
|
||||||
void client_calc_layer(Client *self);
|
void client_calc_layer(Client *self);
|
||||||
|
|
||||||
|
|
|
@ -731,18 +731,7 @@ static void event_handle_client(Client *client, XEvent *e)
|
||||||
client_close(client);
|
client_close(client);
|
||||||
} else if (msgtype == prop_atoms.net_active_window) {
|
} else if (msgtype == prop_atoms.net_active_window) {
|
||||||
g_message("net_active_window for 0x%lx", client->window);
|
g_message("net_active_window for 0x%lx", client->window);
|
||||||
if (screen_showing_desktop)
|
client_activate(client);
|
||||||
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);
|
|
||||||
} else if (msgtype == prop_atoms.net_wm_moveresize) {
|
} else if (msgtype == prop_atoms.net_wm_moveresize) {
|
||||||
g_message("net_wm_moveresize for 0x%lx", client->window);
|
g_message("net_wm_moveresize for 0x%lx", client->window);
|
||||||
if ((Atom)e->xclient.data.l[2] ==
|
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);
|
frame_adjust_focus(focus_client->frame, TRUE);
|
||||||
goto done_cycle;
|
goto done_cycle;
|
||||||
} else if (done) {
|
} else if (done) {
|
||||||
if (focus_cycle_target) {
|
if (focus_cycle_target)
|
||||||
if (focus_cycle_target->iconic)
|
client_activate(focus_cycle_target);
|
||||||
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);
|
|
||||||
}
|
|
||||||
goto done_cycle;
|
goto done_cycle;
|
||||||
}
|
}
|
||||||
if (!first) first = focus_client;
|
if (!first) first = focus_client;
|
||||||
|
|
Loading…
Reference in a new issue