all repos — openbox @ d0bde36aa7a898c4ff4206b82dfcac4ab8466cb4

openbox fork - make it a bit more like ryudo

better code for the last commit. let transients get focus when a group member is focused too.
Dana Jansens danakj@orodu.net
commit

d0bde36aa7a898c4ff4206b82dfcac4ab8466cb4

parent

7a13f918758f5426d1115b7992bbb4bd7be17c0b

2 files changed, 32 insertions(+), 13 deletions(-)

jump to
M openbox/client.copenbox/client.c

@@ -489,7 +489,8 @@ "Not focusing the window because its on another "

"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_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; + + for (it = self->group->members; it; it = g_slist_next(it)) { + if (it->data != self) { + ObClient *c = it->data; - 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) { - 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; + } + } } }

@@ -2388,6 +2390,18 @@ does not, so we need to check this window */

if (client_focused(self)) return 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)
M openbox/client.hopenbox/client.h

@@ -635,6 +635,11 @@ If no focused client is found, NULL is returned.

*/ 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.