screen_install_colormap(client, TRUE);
/* in the middle of cycling..? kill it. */
- focus_cycle_stop();
+ focus_cycle_stop(focus_client);
+ focus_cycle_stop(client);
focus_client = client;
}
}
-static ObClient* focus_fallback_target(gboolean allow_refocus, ObClient *old)
+static ObClient* focus_fallback_target(gboolean allow_refocus,
+ gboolean allow_pointer,
+ ObClient *old)
{
GList *it;
ObClient *c;
ob_debug_type(OB_DEBUG_FOCUS, "trying pointer stuff\n");
- if (config_focus_follow && !config_focus_last)
+ if (allow_pointer && config_focus_follow)
if ((c = client_under_pointer()) &&
(allow_refocus || c != old) &&
(client_normal(c) &&
return NULL;
}
-ObClient* focus_fallback(gboolean allow_refocus)
+ObClient* focus_fallback(gboolean allow_refocus, gboolean allow_pointer)
{
ObClient *new;
ObClient *old = focus_client;
event at all for them. */
focus_nothing();
- new = focus_fallback_target(allow_refocus, old);
+ new = focus_fallback_target(allow_refocus, allow_pointer, old);
return new;
}
}
/* in the middle of cycling..? kill it. */
- focus_cycle_stop();
+ focus_cycle_stop(c);
}
void focus_order_remove(ObClient *c)
focus_order = g_list_remove(focus_order, c);
/* in the middle of cycling..? kill it. */
- focus_cycle_stop();
+ focus_cycle_stop(c);
}
void focus_order_to_top(ObClient *c)