2010-01-07 11:26:52 -08:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include <config.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <string.h>
|
2011-12-06 08:09:05 -08:00
|
|
|
#include <stdlib.h>
|
2010-01-07 11:26:52 -08:00
|
|
|
|
|
|
|
#include "Ecore.h"
|
|
|
|
#include "Ecore_Input.h"
|
2010-04-05 01:26:48 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
#include "Ecore_Input_Evas.h"
|
2010-04-05 01:26:48 -07:00
|
|
|
#include "ecore_input_evas_private.h"
|
2010-01-07 11:26:52 -08:00
|
|
|
|
|
|
|
int _ecore_input_evas_log_dom = -1;
|
|
|
|
|
|
|
|
typedef struct _Ecore_Input_Window Ecore_Input_Window;
|
|
|
|
struct _Ecore_Input_Window
|
|
|
|
{
|
|
|
|
Evas *evas;
|
|
|
|
void *window;
|
|
|
|
Ecore_Event_Mouse_Move_Cb move_mouse;
|
2010-12-07 19:25:23 -08:00
|
|
|
Ecore_Event_Multi_Move_Cb move_multi;
|
|
|
|
Ecore_Event_Multi_Down_Cb down_multi;
|
|
|
|
Ecore_Event_Multi_Up_Cb up_multi;
|
2010-01-07 11:26:52 -08:00
|
|
|
int ignore_event;
|
|
|
|
};
|
|
|
|
|
|
|
|
static int _ecore_event_evas_init_count = 0;
|
|
|
|
static Ecore_Event_Handler *ecore_event_evas_handlers[8];
|
|
|
|
static Eina_Hash *_window_hash = NULL;
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
ecore_event_evas_modifier_lock_update(Evas *e, unsigned int modifiers)
|
|
|
|
{
|
|
|
|
if (modifiers & ECORE_EVENT_MODIFIER_SHIFT)
|
|
|
|
evas_key_modifier_on(e, "Shift");
|
|
|
|
else evas_key_modifier_off(e, "Shift");
|
|
|
|
|
|
|
|
if (modifiers & ECORE_EVENT_MODIFIER_CTRL)
|
|
|
|
evas_key_modifier_on(e, "Control");
|
|
|
|
else evas_key_modifier_off(e, "Control");
|
|
|
|
|
|
|
|
if (modifiers & ECORE_EVENT_MODIFIER_ALT)
|
|
|
|
evas_key_modifier_on(e, "Alt");
|
|
|
|
else evas_key_modifier_off(e, "Alt");
|
|
|
|
|
|
|
|
if (modifiers & ECORE_EVENT_MODIFIER_WIN)
|
|
|
|
{
|
2010-09-30 00:31:11 -07:00
|
|
|
evas_key_modifier_on(e, "Super");
|
|
|
|
evas_key_modifier_on(e, "Hyper");
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-09-30 00:31:11 -07:00
|
|
|
evas_key_modifier_off(e, "Super");
|
|
|
|
evas_key_modifier_off(e, "Hyper");
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
2012-06-28 00:30:32 -07:00
|
|
|
if (modifiers & ECORE_EVENT_MODIFIER_ALTGR)
|
|
|
|
evas_key_modifier_on(e, "AltGr");
|
|
|
|
else evas_key_modifier_off(e, "AltGr");
|
2012-06-27 03:47:57 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
if (modifiers & ECORE_EVENT_LOCK_SCROLL)
|
|
|
|
evas_key_lock_on(e, "Scroll_Lock");
|
|
|
|
else evas_key_lock_off(e, "Scroll_Lock");
|
|
|
|
|
|
|
|
if (modifiers & ECORE_EVENT_LOCK_NUM)
|
|
|
|
evas_key_lock_on(e, "Num_Lock");
|
|
|
|
else evas_key_lock_off(e, "Num_Lock");
|
|
|
|
|
|
|
|
if (modifiers & ECORE_EVENT_LOCK_CAPS)
|
|
|
|
evas_key_lock_on(e, "Caps_Lock");
|
|
|
|
else evas_key_lock_off(e, "Caps_Lock");
|
2011-07-14 08:38:09 -07:00
|
|
|
|
|
|
|
if (modifiers & ECORE_EVENT_LOCK_SHIFT)
|
|
|
|
evas_key_lock_on(e, "Shift_Lock");
|
|
|
|
else evas_key_lock_off(e, "Shift_Lock");
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
2010-12-07 19:25:23 -08:00
|
|
|
ecore_event_window_register(Ecore_Window id, void *window, Evas *evas,
|
|
|
|
Ecore_Event_Mouse_Move_Cb move_mouse,
|
|
|
|
Ecore_Event_Multi_Move_Cb move_multi,
|
|
|
|
Ecore_Event_Multi_Down_Cb down_multi,
|
|
|
|
Ecore_Event_Multi_Up_Cb up_multi)
|
2010-01-07 11:26:52 -08:00
|
|
|
{
|
2010-03-22 02:20:33 -07:00
|
|
|
Ecore_Input_Window *w;
|
2010-01-07 11:26:52 -08:00
|
|
|
|
2010-03-22 02:20:33 -07:00
|
|
|
w = calloc(1, sizeof(Ecore_Input_Window));
|
|
|
|
if (!w) return;
|
2010-01-07 11:26:52 -08:00
|
|
|
|
2010-03-22 02:20:33 -07:00
|
|
|
w->evas = evas;
|
|
|
|
w->window = window;
|
|
|
|
w->move_mouse = move_mouse;
|
2010-12-07 19:25:23 -08:00
|
|
|
w->move_multi = move_multi;
|
|
|
|
w->down_multi = down_multi;
|
|
|
|
w->up_multi = up_multi;
|
2010-03-22 02:20:33 -07:00
|
|
|
w->ignore_event = 0;
|
2010-01-07 11:26:52 -08:00
|
|
|
|
2010-03-22 02:20:33 -07:00
|
|
|
eina_hash_add(_window_hash, &id, w);
|
2010-01-07 11:26:52 -08:00
|
|
|
|
|
|
|
evas_key_modifier_add(evas, "Shift");
|
|
|
|
evas_key_modifier_add(evas, "Control");
|
|
|
|
evas_key_modifier_add(evas, "Alt");
|
|
|
|
evas_key_modifier_add(evas, "Meta");
|
|
|
|
evas_key_modifier_add(evas, "Hyper");
|
|
|
|
evas_key_modifier_add(evas, "Super");
|
2012-06-28 00:30:32 -07:00
|
|
|
evas_key_modifier_add(evas, "AltGr");
|
2010-01-07 11:26:52 -08:00
|
|
|
evas_key_lock_add(evas, "Caps_Lock");
|
|
|
|
evas_key_lock_add(evas, "Num_Lock");
|
|
|
|
evas_key_lock_add(evas, "Scroll_Lock");
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
ecore_event_window_unregister(Ecore_Window id)
|
|
|
|
{
|
|
|
|
eina_hash_del(_window_hash, &id, NULL);
|
|
|
|
}
|
|
|
|
|
2010-03-22 02:20:33 -07:00
|
|
|
EAPI void *
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_window_match(Ecore_Window id)
|
|
|
|
{
|
|
|
|
Ecore_Input_Window *lookup;
|
|
|
|
|
|
|
|
lookup = eina_hash_find(_window_hash, &id);
|
|
|
|
if (lookup) return lookup->window;
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI void
|
|
|
|
ecore_event_window_ignore_events(Ecore_Window id, int ignore_event)
|
|
|
|
{
|
|
|
|
Ecore_Input_Window *lookup;
|
|
|
|
|
|
|
|
lookup = eina_hash_find(_window_hash, &id);
|
2010-03-22 02:37:27 -07:00
|
|
|
if (!lookup) return;
|
2010-01-07 11:26:52 -08:00
|
|
|
lookup->ignore_event = ignore_event;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Ecore_Input_Window*
|
|
|
|
_ecore_event_window_match(Ecore_Window id)
|
|
|
|
{
|
|
|
|
Ecore_Input_Window *lookup;
|
|
|
|
|
|
|
|
lookup = eina_hash_find(_window_hash, &id);
|
|
|
|
if (!lookup) return NULL;
|
|
|
|
if (lookup->ignore_event) return NULL; /* Pass on event. */
|
|
|
|
return lookup;
|
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
static Eina_Bool
|
2010-01-07 11:26:52 -08:00
|
|
|
_ecore_event_evas_key(Ecore_Event_Key *e, Ecore_Event_Press press)
|
|
|
|
{
|
|
|
|
Ecore_Input_Window *lookup;
|
|
|
|
|
2010-11-08 05:29:18 -08:00
|
|
|
lookup = _ecore_event_window_match(e->event_window);
|
2010-06-24 09:15:56 -07:00
|
|
|
if (!lookup) return ECORE_CALLBACK_RENEW;
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers);
|
|
|
|
if (press == ECORE_DOWN)
|
|
|
|
evas_event_feed_key_down(lookup->evas, e->keyname, e->key, e->string, e->compose, e->timestamp, NULL);
|
|
|
|
else
|
|
|
|
evas_event_feed_key_up(lookup->evas, e->keyname, e->key, e->string, e->compose, e->timestamp, NULL);
|
2010-06-24 09:15:56 -07:00
|
|
|
return ECORE_CALLBACK_RENEW;
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
static Eina_Bool
|
2010-01-07 11:26:52 -08:00
|
|
|
_ecore_event_evas_mouse_button(Ecore_Event_Mouse_Button *e, Ecore_Event_Press press)
|
|
|
|
{
|
|
|
|
Ecore_Input_Window *lookup;
|
|
|
|
Evas_Button_Flags flags = EVAS_BUTTON_NONE;
|
|
|
|
|
2010-11-08 05:29:18 -08:00
|
|
|
lookup = _ecore_event_window_match(e->event_window);
|
2010-06-24 09:15:56 -07:00
|
|
|
if (!lookup) return ECORE_CALLBACK_RENEW;
|
2010-01-07 11:26:52 -08:00
|
|
|
if (e->double_click) flags |= EVAS_BUTTON_DOUBLE_CLICK;
|
|
|
|
if (e->triple_click) flags |= EVAS_BUTTON_TRIPLE_CLICK;
|
2010-01-17 00:52:38 -08:00
|
|
|
if (e->multi.device == 0)
|
2010-01-16 04:20:56 -08:00
|
|
|
{
|
|
|
|
ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers);
|
|
|
|
if (press == ECORE_DOWN)
|
2011-04-20 07:15:33 -07:00
|
|
|
evas_event_feed_mouse_down(lookup->evas, e->buttons, flags,
|
2010-12-07 19:25:23 -08:00
|
|
|
e->timestamp, NULL);
|
2010-01-16 04:20:56 -08:00
|
|
|
else
|
2011-04-20 07:15:33 -07:00
|
|
|
evas_event_feed_mouse_up(lookup->evas, e->buttons, flags,
|
2010-12-07 19:25:23 -08:00
|
|
|
e->timestamp, NULL);
|
2010-01-16 04:20:56 -08:00
|
|
|
}
|
2010-01-07 11:26:52 -08:00
|
|
|
else
|
2010-01-16 04:20:56 -08:00
|
|
|
{
|
2010-01-17 00:52:38 -08:00
|
|
|
if (press == ECORE_DOWN)
|
2010-12-07 19:25:23 -08:00
|
|
|
{
|
|
|
|
if (lookup->down_multi)
|
2011-04-20 07:15:33 -07:00
|
|
|
lookup->down_multi(lookup->window, e->multi.device,
|
|
|
|
e->x, e->y, e->multi.radius,
|
|
|
|
e->multi.radius_x, e->multi.radius_y,
|
|
|
|
e->multi.pressure, e->multi.angle,
|
|
|
|
e->multi.x, e->multi.y, flags,
|
2010-12-07 19:25:23 -08:00
|
|
|
e->timestamp);
|
|
|
|
else
|
2011-04-20 07:15:33 -07:00
|
|
|
evas_event_feed_multi_down(lookup->evas, e->multi.device,
|
|
|
|
e->x, e->y, e->multi.radius,
|
|
|
|
e->multi.radius_x, e->multi.radius_y,
|
|
|
|
e->multi.pressure, e->multi.angle,
|
|
|
|
e->multi.x, e->multi.y, flags,
|
2010-12-07 19:25:23 -08:00
|
|
|
e->timestamp, NULL);
|
|
|
|
}
|
2010-01-17 00:52:38 -08:00
|
|
|
else
|
2010-12-07 19:25:23 -08:00
|
|
|
{
|
|
|
|
if (lookup->up_multi)
|
2011-04-20 07:15:33 -07:00
|
|
|
lookup->up_multi(lookup->window, e->multi.device,
|
|
|
|
e->x, e->y, e->multi.radius,
|
|
|
|
e->multi.radius_x, e->multi.radius_y,
|
|
|
|
e->multi.pressure, e->multi.angle,
|
|
|
|
e->multi.x, e->multi.y, flags,
|
2010-12-07 19:25:23 -08:00
|
|
|
e->timestamp);
|
|
|
|
else
|
2011-04-20 07:15:33 -07:00
|
|
|
evas_event_feed_multi_up(lookup->evas, e->multi.device,
|
|
|
|
e->x, e->y, e->multi.radius,
|
|
|
|
e->multi.radius_x, e->multi.radius_y,
|
|
|
|
e->multi.pressure, e->multi.angle,
|
|
|
|
e->multi.x, e->multi.y, flags,
|
2010-12-07 19:25:23 -08:00
|
|
|
e->timestamp, NULL);
|
|
|
|
}
|
2010-01-17 00:52:38 -08:00
|
|
|
}
|
2010-06-24 09:15:56 -07:00
|
|
|
return ECORE_CALLBACK_RENEW;
|
2010-01-17 00:52:38 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
EAPI Eina_Bool
|
2010-01-17 00:52:38 -08:00
|
|
|
ecore_event_evas_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|
|
|
{
|
|
|
|
Ecore_Event_Mouse_Move *e;
|
|
|
|
Ecore_Input_Window *lookup;
|
|
|
|
|
|
|
|
e = event;
|
2010-11-08 05:29:18 -08:00
|
|
|
lookup = _ecore_event_window_match(e->event_window);
|
2010-06-24 09:15:56 -07:00
|
|
|
if (!lookup) return ECORE_CALLBACK_RENEW;
|
2010-01-17 00:52:38 -08:00
|
|
|
if (e->multi.device == 0)
|
|
|
|
{
|
|
|
|
ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers);
|
2010-12-07 19:25:23 -08:00
|
|
|
if (lookup->move_mouse)
|
|
|
|
lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp);
|
|
|
|
else
|
2011-04-20 07:15:33 -07:00
|
|
|
evas_event_feed_mouse_move(lookup->evas, e->x, e->y, e->timestamp,
|
2010-12-07 19:25:23 -08:00
|
|
|
NULL);
|
2010-01-17 00:52:38 -08:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2010-12-07 19:25:23 -08:00
|
|
|
if (lookup->move_multi)
|
2011-04-20 07:15:33 -07:00
|
|
|
lookup->move_multi(lookup->window, e->multi.device,
|
|
|
|
e->x, e->y, e->multi.radius,
|
|
|
|
e->multi.radius_x, e->multi.radius_y,
|
|
|
|
e->multi.pressure, e->multi.angle,
|
2010-12-07 19:25:23 -08:00
|
|
|
e->multi.x, e->multi.y, e->timestamp);
|
|
|
|
else
|
2011-04-20 07:15:33 -07:00
|
|
|
evas_event_feed_multi_move(lookup->evas, e->multi.device,
|
|
|
|
e->x, e->y, e->multi.radius,
|
|
|
|
e->multi.radius_x, e->multi.radius_y,
|
|
|
|
e->multi.pressure, e->multi.angle,
|
|
|
|
e->multi.x, e->multi.y, e->timestamp,
|
2010-12-07 19:25:23 -08:00
|
|
|
NULL);
|
2010-01-16 04:20:56 -08:00
|
|
|
}
|
2010-06-24 09:15:56 -07:00
|
|
|
return ECORE_CALLBACK_RENEW;
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
EAPI Eina_Bool
|
2010-01-17 00:52:38 -08:00
|
|
|
ecore_event_evas_mouse_button_down(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|
|
|
{
|
|
|
|
return _ecore_event_evas_mouse_button((Ecore_Event_Mouse_Button *)event, ECORE_DOWN);
|
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
EAPI Eina_Bool
|
2010-01-17 00:52:38 -08:00
|
|
|
ecore_event_evas_mouse_button_up(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|
|
|
{
|
|
|
|
return _ecore_event_evas_mouse_button((Ecore_Event_Mouse_Button *)event, ECORE_UP);
|
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
static Eina_Bool
|
2010-01-07 11:26:52 -08:00
|
|
|
_ecore_event_evas_mouse_io(Ecore_Event_Mouse_IO *e, Ecore_Event_IO io)
|
|
|
|
{
|
|
|
|
Ecore_Input_Window *lookup;
|
|
|
|
|
2010-11-08 05:29:18 -08:00
|
|
|
lookup = _ecore_event_window_match(e->event_window);
|
2010-06-24 09:15:56 -07:00
|
|
|
if (!lookup) return ECORE_CALLBACK_RENEW;
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers);
|
|
|
|
switch (io)
|
|
|
|
{
|
|
|
|
case ECORE_IN:
|
2010-09-30 00:31:11 -07:00
|
|
|
evas_event_feed_mouse_in(lookup->evas, e->timestamp, NULL);
|
|
|
|
break;
|
2010-01-07 11:26:52 -08:00
|
|
|
case ECORE_OUT:
|
2010-09-30 00:31:11 -07:00
|
|
|
evas_event_feed_mouse_out(lookup->evas, e->timestamp, NULL);
|
|
|
|
break;
|
2010-01-07 11:26:52 -08:00
|
|
|
default:
|
2010-09-30 00:31:11 -07:00
|
|
|
break;
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
lookup->move_mouse(lookup->window, e->x, e->y, e->timestamp);
|
2010-06-24 09:15:56 -07:00
|
|
|
return ECORE_CALLBACK_RENEW;
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
EAPI Eina_Bool
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|
|
|
{
|
2010-03-22 02:20:33 -07:00
|
|
|
return _ecore_event_evas_key((Ecore_Event_Key *)event, ECORE_DOWN);
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
EAPI Eina_Bool
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_key_up(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|
|
|
{
|
2010-03-22 02:20:33 -07:00
|
|
|
return _ecore_event_evas_key((Ecore_Event_Key *)event, ECORE_UP);
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
EAPI Eina_Bool
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_mouse_wheel(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|
|
|
{
|
|
|
|
Ecore_Event_Mouse_Wheel *e;
|
|
|
|
Ecore_Input_Window *lookup;
|
|
|
|
|
|
|
|
e = event;
|
2010-11-08 05:29:18 -08:00
|
|
|
lookup = _ecore_event_window_match(e->event_window);
|
2010-06-24 09:15:56 -07:00
|
|
|
if (!lookup) return ECORE_CALLBACK_RENEW;
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_modifier_lock_update(lookup->evas, e->modifiers);
|
|
|
|
evas_event_feed_mouse_wheel(lookup->evas, e->direction, e->z, e->timestamp, NULL);
|
2010-06-24 09:15:56 -07:00
|
|
|
return ECORE_CALLBACK_RENEW;
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
EAPI Eina_Bool
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_mouse_in(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|
|
|
{
|
2010-03-22 02:20:33 -07:00
|
|
|
return _ecore_event_evas_mouse_io((Ecore_Event_Mouse_IO *)event, ECORE_IN);
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
2010-06-24 09:15:56 -07:00
|
|
|
EAPI Eina_Bool
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_mouse_out(void *data __UNUSED__, int type __UNUSED__, void *event)
|
|
|
|
{
|
2010-03-22 02:20:33 -07:00
|
|
|
return _ecore_event_evas_mouse_io((Ecore_Event_Mouse_IO *)event, ECORE_OUT);
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
EAPI int
|
|
|
|
ecore_event_evas_init(void)
|
|
|
|
{
|
2010-03-22 02:20:33 -07:00
|
|
|
if (++_ecore_event_evas_init_count != 1)
|
2010-01-07 11:26:52 -08:00
|
|
|
return _ecore_event_evas_init_count;
|
|
|
|
|
2010-10-07 15:31:46 -07:00
|
|
|
_ecore_input_evas_log_dom = eina_log_domain_register
|
|
|
|
("ecore_input_evas", ECORE_INPUT_EVAS_DEFAULT_LOG_COLOR);
|
2010-03-22 02:20:33 -07:00
|
|
|
if (_ecore_input_evas_log_dom < 0)
|
2010-01-07 11:26:52 -08:00
|
|
|
{
|
2010-03-22 02:20:33 -07:00
|
|
|
EINA_LOG_ERR("Impossible to create a log domain for the ecore input evas_module.");
|
|
|
|
return --_ecore_event_evas_init_count;
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!ecore_init())
|
|
|
|
{
|
2010-09-30 00:31:11 -07:00
|
|
|
return --_ecore_event_evas_init_count;
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!ecore_event_init())
|
|
|
|
{
|
2010-09-30 00:31:11 -07:00
|
|
|
goto shutdown_ecore;
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
ecore_event_evas_handlers[0] = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
|
2010-09-30 00:31:11 -07:00
|
|
|
ecore_event_evas_key_down,
|
|
|
|
NULL);
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_handlers[1] = ecore_event_handler_add(ECORE_EVENT_KEY_UP,
|
2010-09-30 00:31:11 -07:00
|
|
|
ecore_event_evas_key_up,
|
|
|
|
NULL);
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_handlers[2] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
|
2010-09-30 00:31:11 -07:00
|
|
|
ecore_event_evas_mouse_button_down,
|
|
|
|
NULL);
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_handlers[3] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
|
2010-09-30 00:31:11 -07:00
|
|
|
ecore_event_evas_mouse_button_up,
|
|
|
|
NULL);
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_handlers[4] = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
|
2010-09-30 00:31:11 -07:00
|
|
|
ecore_event_evas_mouse_move,
|
|
|
|
NULL);
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_handlers[5] = ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL,
|
2010-09-30 00:31:11 -07:00
|
|
|
ecore_event_evas_mouse_wheel,
|
|
|
|
NULL);
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_handlers[6] = ecore_event_handler_add(ECORE_EVENT_MOUSE_IN,
|
2010-09-30 00:31:11 -07:00
|
|
|
ecore_event_evas_mouse_in,
|
|
|
|
NULL);
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_evas_handlers[7] = ecore_event_handler_add(ECORE_EVENT_MOUSE_OUT,
|
2010-09-30 00:31:11 -07:00
|
|
|
ecore_event_evas_mouse_out,
|
|
|
|
NULL);
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
_window_hash = eina_hash_pointer_new(free);
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
return _ecore_event_evas_init_count;
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2010-03-22 02:20:33 -07:00
|
|
|
shutdown_ecore:
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_shutdown();
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
return --_ecore_event_evas_init_count;
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI int
|
|
|
|
ecore_event_evas_shutdown(void)
|
|
|
|
{
|
2010-02-28 15:27:47 -08:00
|
|
|
size_t i;
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
if (--_ecore_event_evas_init_count != 0)
|
|
|
|
return _ecore_event_evas_init_count;
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
eina_hash_free(_window_hash);
|
|
|
|
_window_hash = NULL;
|
2010-03-22 02:20:33 -07:00
|
|
|
for (i = 0; i < sizeof(ecore_event_evas_handlers) / sizeof(Ecore_Event_Handler *); i++)
|
2010-01-07 11:26:52 -08:00
|
|
|
{
|
2010-09-30 00:31:11 -07:00
|
|
|
ecore_event_handler_del(ecore_event_evas_handlers[i]);
|
|
|
|
ecore_event_evas_handlers[i] = NULL;
|
2010-01-07 11:26:52 -08:00
|
|
|
}
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
ecore_event_shutdown();
|
|
|
|
ecore_shutdown();
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
eina_log_domain_unregister(_ecore_input_evas_log_dom);
|
|
|
|
_ecore_input_evas_log_dom = -1;
|
2011-04-20 07:15:33 -07:00
|
|
|
|
2010-01-07 11:26:52 -08:00
|
|
|
return _ecore_event_evas_init_count;
|
|
|
|
}
|