+
+void actions_client_move(ObActionsData *data, gboolean start)
+{
+ static gulong ignore_start = 0;
+ if (start)
+ ignore_start = event_start_ignore_all_enters();
+ else if (config_focus_follow &&
+ data->context != OB_FRAME_CONTEXT_CLIENT)
+ {
+ if (data->uact == OB_USER_ACTION_MOUSE_PRESS) {
+ struct _ObClient *c;
+
+ /* usually this is sorta redundant, but with a press action
+ that moves windows our from under the cursor, the enter
+ event will come as a GrabNotify which is ignored, so this
+ makes a fake enter event
+
+ don't do this if there is a grab on the pointer. enter events
+ are ignored during a grab, so don't force fake ones when they
+ should be ignored
+ */
+ if (!grab_on_pointer()) {
+ if ((c = client_under_pointer()) && c != data->client) {
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "Generating fake enter because we did a "
+ "mouse-event action");
+ event_enter_client(c);
+ }
+ else if (!c && c != data->client) {
+ ob_debug_type(OB_DEBUG_FOCUS,
+ "Generating fake leave because we did a "
+ "mouse-event action");
+ event_enter_client(data->client);
+ }
+ }
+ }
+ else if (!data->button && !config_focus_under_mouse)
+ event_end_ignore_all_enters(ignore_start);
+ }
+}