reject x11 NotifyVirtual and NotifyInferior mouse in events

these are triggered "in passing" when mouse in events occur and do
not necessarily indicate that the mouse has entered this specific window

failing to reject such events can cause mouse-based focus policies to
attempt to set focus onto windows which are not visible, resulting in
an infinite loop where no window is actually focused
This commit is contained in:
Mike Blumenkrantz 2015-07-27 13:25:01 -04:00
parent 0a8ee7b5ad
commit c2ecadae14
1 changed files with 3 additions and 0 deletions

View File

@ -2178,6 +2178,9 @@ _e_comp_x_mouse_in(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_M
{
E_Client *ec;
if ((ev->mode == ECORE_X_EVENT_MODE_NORMAL) &&
((ev->detail == ECORE_X_EVENT_DETAIL_INFERIOR) || (ev->detail == ECORE_X_EVENT_DETAIL_VIRTUAL)))
return ECORE_CALLBACK_PASS_ON;
ec = _e_comp_x_client_find_by_window(ev->win);
if (!ec) return ECORE_CALLBACK_RENEW;
if (_e_comp_x_client_data_get(ec)->deleted) return ECORE_CALLBACK_RENEW;