static gboolean focus_under_pointer()
{
- int x, y;
- GList *it;
+ ObClient *c;
- if (screen_pointer_pos(&x, &y)) {
- for (it = stacking_list; it != NULL; it = it->next) {
- if (WINDOW_IS_CLIENT(it->data)) {
- ObClient *c = WINDOW_AS_CLIENT(it->data);
- if (c->desktop == screen_desktop &&
- RECT_CONTAINS(c->frame->area, x, y))
- break;
- }
- }
- if (it != NULL) {
- g_assert(WINDOW_IS_CLIENT(it->data));
- return client_normal(it->data) && client_focus(it->data);
- }
- }
+ if ((c = client_under_pointer()))
+ return client_normal(c) && client_focus(c);
return FALSE;
}
*/
focus_set_client(NULL);
- if (config_focus_follow && focus_under_pointer())
- return;
+ if (!config_focus_last && config_focus_follow)
+ if (focus_under_pointer())
+ return;
if (type == OB_FOCUS_FALLBACK_UNFOCUSING && old) {
/* try for transient relations */
focus_cycle_target = ft;
frame_adjust_focus(focus_cycle_target->frame, TRUE);
}
- popup_cycle(ft, dialog);
+ }
+ if (focus_cycle_target) {
+ popup_cycle(focus_cycle_target, dialog);
if (dialog)
return;
}
+
done_cycle:
if (done && focus_cycle_target)
client_activate(focus_cycle_target, FALSE);