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");
}
/* 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 (self->user_time && last_time &&
@ -2367,19 +2368,20 @@ ObClient *client_search_focus_tree(ObClient *self)
ObClient *client_search_focus_tree_full(ObClient *self)
{
GSList *it;
ObClient *c;
if (self->transient_for) {
if (self->transient_for != OB_TRAN_GROUP) {
return client_search_focus_tree_full(self->transient_for);
} else {
GSList *it;
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)) {
if (it->data != self) {
ObClient *c = it->data;
for (it = self->group->members; it; it = g_slist_next(it)) {
if (it->data != self) {
c = it->data;
if (client_focused(c)) return c;
if ((c = client_search_focus_tree(it->data))) return c;
if (client_focused(c)) return c;
if ((c = client_search_focus_tree(it->data))) return c;
}
}
}
}
@ -2390,6 +2392,18 @@ ObClient *client_search_focus_tree_full(ObClient *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)
{
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);
/*! 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, or 0 if
none was found.