fix focus_revert_on_hide_or_close option to work correctly with mouse focus, also fix annoying pointer warp focus bug which erroneously focused windows while moving the pointer for pointer_slide warps on new windows

SVN revision: 80174
This commit is contained in:
Mike Blumenkrantz 2012-12-04 15:11:53 +00:00
parent 3bd8f4dd81
commit 17c9b707d5
1 changed files with 12 additions and 16 deletions

View File

@ -1047,22 +1047,15 @@ e_border_hide(E_Border *bd,
e_border_focus_set(bd->parent, 1, 1);
else if (e_config->focus_revert_on_hide_or_close)
{
/* When using pointer focus, the border under the
* pointer (if any) gets focused, in sloppy/click
* focus the last focused window on the current
* desk gets focus */
if (e_config->focus_policy == E_FOCUS_MOUSE)
{
pbd = e_border_under_pointer_get(desk, bd);
if (pbd)
e_border_focus_set(pbd, 1, 1);
}
else
{
e_desk_last_focused_focus(desk);
if ((pbd = eina_list_data_get(focus_next)))
e_border_pointer_warp_to_center(pbd);
}
e_desk_last_focused_focus(desk);
if ((pbd = eina_list_data_get(focus_next)))
e_border_pointer_warp_to_center(pbd);
}
else if (e_config->focus_policy == E_FOCUS_MOUSE)
{
pbd = e_border_under_pointer_get(desk, bd);
if (pbd)
e_border_focus_set(pbd, 1, 1);
}
}
}
@ -4470,6 +4463,7 @@ _e_border_reset_lost_window(E_Border *bd)
e_border_focus_set(bd, 1, 1);
bd->during_lost = EINA_FALSE;
e_border_focus_lock_set(EINA_TRUE);
}
EAPI void
@ -9910,6 +9904,7 @@ _e_border_pointer_warp_to_center_timer(void *data __UNUSED__)
cleanup:
ecore_timer_del(warp_timer);
warp_timer = NULL;
e_border_focus_lock_set(EINA_FALSE);
return ECORE_CALLBACK_CANCEL;
}
@ -9945,6 +9940,7 @@ e_border_pointer_warp_to_center(E_Border *bd)
ecore_x_pointer_xy_get(bd->zone->container->win, &warp_x, &warp_y);
if (warp_timer) ecore_timer_del(warp_timer);
warp_timer = ecore_timer_add(0.01, _e_border_pointer_warp_to_center_timer, (const void *)bd);
e_border_focus_lock_set(EINA_TRUE);
return 1;
}