don't give focus to transient when it is ambiguous, but only if they have a parent

This commit is contained in:
Dana Jansens 2007-05-28 02:12:36 +00:00
parent e9f6255b18
commit 301016fd2b
2 changed files with 13 additions and 1 deletions

View file

@ -498,7 +498,7 @@ void client_manage(Window window)
is ambiguous (either the current focus target doesn't have
a timestamp, or they are the same (we probably inherited it
from them) */
else if (self->transient_for != NULL &&
else if (client_has_parent(self) &&
(!last_time || self->user_time == last_time))
{
activate = FALSE;
@ -2374,6 +2374,13 @@ ObClient *client_search_focus_tree_full(ObClient *self)
return client_search_focus_tree(self);
}
gboolean client_has_parent(ObClient *self)
{
return (self->transient_for &&
(self->transient_for != TRAN_GROUP ||
self->group && self->group->members->next));
}
static ObStackingLayer calc_layer(ObClient *self)
{
ObStackingLayer l;

View file

@ -612,6 +612,11 @@ void client_get_type_and_transientness(ObClient *self);
const ObClientIcon *client_icon(ObClient *self, gint w, gint h);
/*! Return TRUE if the client is transient for some other window. Return
FALSE if it's not transient or there is no window for it to be
transient for */
gboolean client_has_parent(ObClient *self);
/*! Searches a client's direct parents for a focused window. The function does
not check for the passed client, only for *ONE LEVEL* of its parents.
If no focused parentt is found, NULL is returned.