use evas object callbacks for fwin mouse in/out, don't use ecore-x handlers in wayland

improve compatibility with wayland compositors
This commit is contained in:
Mike Blumenkrantz 2015-07-06 14:23:54 -04:00
parent 703199ef88
commit d2a9596753
1 changed files with 30 additions and 38 deletions

View File

@ -745,6 +745,24 @@ _e_fwin_new(const char *dev,
return fwin;
}
static Eina_Bool
_e_fwin_icon_popup_handler(void *data, ...)
{
E_Fwin *fwin = data;
E_FREE_FUNC(fwin->popup_timer, ecore_timer_del);
if (fwin->popup)
{
evas_object_hide(fwin->popup);
E_FREE_FUNC(fwin->popup, evas_object_del);
}
evas_object_event_callback_del(fwin->win, EVAS_CALLBACK_MOUSE_IN, (Evas_Object_Event_Cb)_e_fwin_icon_popup_handler);
evas_object_event_callback_del(fwin->win, EVAS_CALLBACK_MOUSE_OUT, (Evas_Object_Event_Cb)_e_fwin_icon_popup_handler);
E_FREE_LIST(fwin->popup_handlers, ecore_event_handler_del);
fwin->popup_icon = NULL;
return ECORE_CALLBACK_RENEW;
}
static void
_e_fwin_free(E_Fwin *fwin)
{
@ -782,6 +800,8 @@ _e_fwin_free(E_Fwin *fwin)
}
if (fwin->popup_timer) ecore_timer_del(fwin->popup_timer);
fwin->popup_timer = NULL;
evas_object_event_callback_del(fwin->win, EVAS_CALLBACK_MOUSE_IN, (Evas_Object_Event_Cb)_e_fwin_icon_popup_handler);
evas_object_event_callback_del(fwin->win, EVAS_CALLBACK_MOUSE_OUT, (Evas_Object_Event_Cb)_e_fwin_icon_popup_handler);
E_FREE_LIST(fwin->popup_handlers, ecore_event_handler_del);
if (fwin->spring_parent) fwin->spring_parent->spring_child = NULL;
if (fwin->win)
@ -792,34 +812,6 @@ _e_fwin_free(E_Fwin *fwin)
free(fwin);
}
static Eina_Bool
_e_fwin_icon_popup_handler(void *data, int type, void *event)
{
E_Fwin *fwin = data;
Ecore_Event_Mouse_IO *ev = event;
if (type == ECORE_EVENT_MOUSE_IN)
{
if (fwin->zone)
{
if (ev->event_window == e_comp->ee_win) return ECORE_CALLBACK_RENEW;
}
else
{
if (ev->event_window == elm_win_window_id_get(fwin->win)) return ECORE_CALLBACK_RENEW;
}
}
E_FREE_FUNC(fwin->popup_timer, ecore_timer_del);
if (fwin->popup)
{
evas_object_hide(fwin->popup);
E_FREE_FUNC(fwin->popup, evas_object_del);
}
E_FREE_LIST(fwin->popup_handlers, ecore_event_handler_del);
fwin->popup_icon = NULL;
return ECORE_CALLBACK_RENEW;
}
static void
_e_fwin_icon_hints(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
@ -913,11 +905,11 @@ _e_fwin_icon_popup(void *data)
#ifndef HAVE_WAYLAND_ONLY
if (!fwin->popup_handlers)
{
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_XDND_ENTER, _e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_XDND_POSITION, _e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_MOUSE_IN, _e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_EVENT_MOUSE_BUTTON_DOWN, _e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_MOUSE_OUT, _e_fwin_icon_popup_handler, fwin);
evas_object_event_callback_add(fwin->win, EVAS_CALLBACK_MOUSE_IN, (Evas_Object_Event_Cb)_e_fwin_icon_popup_handler, fwin);
evas_object_event_callback_add(fwin->win, EVAS_CALLBACK_MOUSE_OUT, (Evas_Object_Event_Cb)_e_fwin_icon_popup_handler, fwin);
if (e_comp_util_has_x())
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_XDND_POSITION, (Ecore_Event_Handler_Cb)_e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_EVENT_MOUSE_BUTTON_DOWN, (Ecore_Event_Handler_Cb)_e_fwin_icon_popup_handler, fwin);
}
#endif
evas_object_show(fwin->popup);
@ -955,11 +947,11 @@ _e_fwin_icon_mouse_in(void *data, Evas_Object *obj EINA_UNUSED, void *event_info
#ifndef HAVE_WAYLAND_ONLY
if (!fwin->popup_handlers)
{
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_XDND_ENTER, _e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_XDND_POSITION, _e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_MOUSE_IN, _e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_EVENT_MOUSE_BUTTON_DOWN, _e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_MOUSE_OUT, _e_fwin_icon_popup_handler, fwin);
evas_object_event_callback_add(fwin->win, EVAS_CALLBACK_MOUSE_IN, (Evas_Object_Event_Cb)_e_fwin_icon_popup_handler, fwin);
evas_object_event_callback_add(fwin->win, EVAS_CALLBACK_MOUSE_OUT, (Evas_Object_Event_Cb)_e_fwin_icon_popup_handler, fwin);
if (e_comp_util_has_x())
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_X_EVENT_XDND_POSITION, (Ecore_Event_Handler_Cb)_e_fwin_icon_popup_handler, fwin);
E_LIST_HANDLER_APPEND(fwin->popup_handlers, ECORE_EVENT_MOUSE_BUTTON_DOWN, (Ecore_Event_Handler_Cb)_e_fwin_icon_popup_handler, fwin);
}
#endif
}