- if (old->transient_for == OB_TRAN_GROUP) {
- for (it = focus_order[screen_desktop]; it; it = it->next) {
- GSList *sit;
-
- for (sit = old->group->members; sit; sit = sit->next)
- if (sit->data == it->data)
- if (focus_fallback_transient(sit->data, old))
- return;
+ gboolean trans = FALSE;
+
+ if (!config_focus_follow)
+ trans = TRUE;
+ else {
+ if ((target = client_under_pointer()) &&
+ client_search_transient
+ (client_search_top_transient(target), old))
+ {
+ trans = TRUE;
+ }
+ }
+
+ /* try for transient relations */
+ if (trans) {
+ if (old->transient_for == OB_TRAN_GROUP) {
+ for (it = focus_order[screen_desktop]; it; it = it->next) {
+ GSList *sit;
+
+ for (sit = old->group->members; sit; sit = sit->next)
+ if (sit->data == it->data)
+ if ((target =
+ focus_fallback_transient(sit->data, old)))
+ return target;
+ }
+ } else {
+ if ((target =
+ focus_fallback_transient(old->transient_for, old)))
+ return target;