better code for the last commit. let transients get focus when a group member is focused too.

This commit is contained in:
Dana Jansens 2007-06-06 14:34:22 +00:00
parent 7a13f91875
commit d0bde36aa7
2 changed files with 32 additions and 13 deletions

View file

@ -489,7 +489,8 @@ void client_manage(Window window)
"desktop\n"); "desktop\n");
} }
/* If something is focused, and it's not our relative... */ /* If something is focused, and it's not our relative... */
else if (focus_client && client_search_focus_tree_full(self) == NULL) else if (focus_client && client_search_focus_tree_full(self) == NULL &&
client_search_focus_group_full(self) == NULL)
{ {
/* If time stamp is old, don't steal focus */ /* If time stamp is old, don't steal focus */
if (self->user_time && last_time && if (self->user_time && last_time &&
@ -2367,21 +2368,22 @@ ObClient *client_search_focus_tree(ObClient *self)
ObClient *client_search_focus_tree_full(ObClient *self) ObClient *client_search_focus_tree_full(ObClient *self)
{ {
if (self->transient_for) {
if (self->transient_for != OB_TRAN_GROUP) {
return client_search_focus_tree_full(self->transient_for);
} else {
GSList *it; GSList *it;
ObClient *c;
if (self->transient_for && self->transient_for != OB_TRAN_GROUP) {
if ((c = client_search_focus_tree_full(self->transient_for)))
return c;
}
for (it = self->group->members; it; it = g_slist_next(it)) { for (it = self->group->members; it; it = g_slist_next(it)) {
if (it->data != self) { if (it->data != self) {
c = it->data; ObClient *c = it->data;
if (client_focused(c)) return c; if (client_focused(c)) return c;
if ((c = client_search_focus_tree(it->data))) return c; if ((c = client_search_focus_tree(it->data))) return c;
} }
} }
}
}
/* this function checks the whole tree, the client_search_focus_tree /* this function checks the whole tree, the client_search_focus_tree
does not, so we need to check this window */ does not, so we need to check this window */
@ -2390,6 +2392,18 @@ ObClient *client_search_focus_tree_full(ObClient *self)
return client_search_focus_tree(self); return client_search_focus_tree(self);
} }
ObClient *client_search_focus_group_full(ObClient *self)
{
GSList *it;
for (it = self->group->members; it; it = g_slist_next(it)) {
ObClient *c = it->data;
if (client_focused(c)) return c;
if ((c = client_search_focus_tree(it->data))) return c;
}
}
gboolean client_has_parent(ObClient *self) gboolean client_has_parent(ObClient *self)
{ {
if (self->transient_for) { if (self->transient_for) {

View file

@ -635,6 +635,11 @@ ObClient *client_search_focus_tree(ObClient *self);
*/ */
ObClient *client_search_focus_tree_full(ObClient *self); ObClient *client_search_focus_tree_full(ObClient *self);
/*! Searches a client's group and each member's transients for a focused
window. This doesn't go up the window's transient tree at all. If no
focused client is found, NULL is returned. */
ObClient *client_search_focus_group_full(ObClient *self);
/*! Return a modal child of the client window that can be focused. /*! Return a modal child of the client window that can be focused.
@return A modal child of the client window that can be focused, or 0 if @return A modal child of the client window that can be focused, or 0 if
none was found. none was found.