better code for the last commit. let transients get focus when a group member is focused too.
This commit is contained in:
parent
7a13f91875
commit
d0bde36aa7
2 changed files with 32 additions and 13 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue