EAPI void ecore_evas_manual_render_set(Ecore_Evas *ee, Eina_Bool manual_render);
EAPI Eina_Bool ecore_evas_manual_render_get(const Ecore_Evas *ee);
+/**
+ * @brief Registers an @c Ecore_Evas to receive events through ecore_input_evas.
+ *
+ * @param ee The @c Ecore_Evas handle.
+ *
+ * This function calls ecore_event_window_register() with the @p ee as its @c
+ * id argument, @c window argument, and uses its @c Evas too. It is useful when
+ * no @c window information is available on a given @c Ecore_Evas backend.
+ *
+ * @see ecore_evas_input_event_unregister()
+ * @since 1.1
+ */
+EAPI void ecore_evas_input_event_register(Ecore_Evas *ee);
+/**
+ * @brief Unregisters an @c Ecore_Evas receiving events through ecore_input_evas.
+ *
+ * @param ee The @c Ecore_Evas handle.
+ *
+ * @see ecore_evas_input_event_register()
+ * @since 1.1
+ */
+EAPI void ecore_evas_input_event_unregister(Ecore_Evas *ee);
/**
* @brief Force immediate rendering on a given @c Ecore_Evas window
return l;
}
+
+EAPI void
+ecore_evas_input_event_register(Ecore_Evas *ee)
+{
+ ecore_event_window_register((Ecore_Window)ee, ee, ee->evas,
+ (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
+ (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
+ (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
+ (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
+}
+
+EAPI void
+ecore_evas_input_event_unregister(Ecore_Evas *ee)
+{
+ ecore_event_window_unregister((Ecore_Window)ee);
+}
static char *ecore_evas_default_display = "0";
static Eina_List *ecore_evas_input_devices = NULL;
-static Ecore_Event_Handler *ecore_evas_event_handlers[6] = {NULL, NULL, NULL, NULL, NULL, NULL};
+static Ecore_Event_Handler *ecore_evas_event_handlers[4] = {NULL, NULL, NULL, NULL};
static void
-_ecore_evas_mouse_move_process_fb(Ecore_Evas *ee, int x, int y, unsigned int timestamp)
+_ecore_evas_mouse_move_process_fb(Ecore_Evas *ee, int x, int y)
{
int fbw, fbh;
y - ee->prop.cursor.hot.x,
(fbw - ee->w) + ee->w - x - 1 - ee->prop.cursor.hot.y);
}
- if (ee->rotation == 0)
- evas_event_feed_mouse_move(ee->evas, x, y, timestamp, NULL);
- else if (ee->rotation == 90)
- evas_event_feed_mouse_move(ee->evas, (fbh - ee->h) + ee->h - y - 1, x, timestamp, NULL);
- else if (ee->rotation == 180)
- evas_event_feed_mouse_move(ee->evas, (fbw - ee->w) + ee->w - x - 1, (fbh - ee->h) + ee->h - y - 1, timestamp, NULL);
- else if (ee->rotation == 270)
- evas_event_feed_mouse_move(ee->evas, y, (fbw - ee->w) + ee->w - x - 1, timestamp, NULL);
}
static Ecore_Evas *fb_ee = NULL;
}
static Eina_Bool
-_ecore_evas_event_key_down(void *data __UNUSED__, int type __UNUSED__, void *event)
-{
- Ecore_Evas *ee;
- Ecore_Fb_Event_Key_Down *e;
-
- e = event;
- ee = _ecore_evas_fb_match();
- if (!ee) return EINA_TRUE; /* pass on event */
- evas_event_feed_key_down(ee->evas, e->keyname, e->keysymbol, e->key_compose, NULL, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
- return EINA_FALSE; /* dont pass it on */
-}
-
-static Eina_Bool
-_ecore_evas_event_key_up(void *data __UNUSED__, int type __UNUSED__, void *event)
-{
- Ecore_Evas *ee;
- Ecore_Fb_Event_Key_Up *e;
-
- e = event;
- ee = _ecore_evas_fb_match();
- if (!ee) return EINA_TRUE; /* pass on event */
- evas_event_feed_key_up(ee->evas, e->keyname, e->keysymbol, e->key_compose, NULL, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
- return EINA_FALSE; /* dont pass it on */
-}
-
-static Eina_Bool
_ecore_evas_event_mouse_button_down(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_Evas *ee;
- Ecore_Fb_Event_Mouse_Button_Down *e;
- Evas_Button_Flags flags = EVAS_BUTTON_NONE;
+ Ecore_Event_Mouse_Button *e;
e = event;
ee = _ecore_evas_fb_match();
if (!ee) return EINA_TRUE; /* pass on event */
- _ecore_evas_mouse_move_process_fb(ee, e->x, e->y, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff));
- if (e->double_click) flags |= EVAS_BUTTON_DOUBLE_CLICK;
- if (e->triple_click) flags |= EVAS_BUTTON_TRIPLE_CLICK;
- evas_event_feed_mouse_down(ee->evas, e->button, flags, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
- return EINA_FALSE; /* dont pass it on */
+ _ecore_evas_mouse_move_process_fb(ee, e->x, e->y);
+ return EINA_TRUE; /* dont pass it on */
}
static Eina_Bool
_ecore_evas_event_mouse_button_up(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_Evas *ee;
- Ecore_Fb_Event_Mouse_Button_Up *e;
+ Ecore_Event_Mouse_Button *e;
e = event;
ee = _ecore_evas_fb_match();
if (!ee) return EINA_TRUE; /* pass on event */
- _ecore_evas_mouse_move_process_fb(ee, e->x, e->y, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff));
- evas_event_feed_mouse_up(ee->evas, e->button, EVAS_BUTTON_NONE, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL);
- return EINA_FALSE; /* dont pass it on */
+ _ecore_evas_mouse_move_process_fb(ee, e->x, e->y);
+ return EINA_TRUE; /* dont pass it on */
}
static Eina_Bool
_ecore_evas_event_mouse_move(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_Evas *ee;
- Ecore_Fb_Event_Mouse_Move *e;
+ Ecore_Event_Mouse_Move *e;
e = event;
ee = _ecore_evas_fb_match();
if (!ee) return EINA_TRUE; /* pass on event */
- _ecore_evas_mouse_move_process_fb(ee, e->x, e->y, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff));
- return EINA_FALSE; /* dont pass it on */
+ _ecore_evas_mouse_move_process_fb(ee, e->x, e->y);
+ return EINA_TRUE; /* dont pass it on */
}
static Eina_Bool
_ecore_evas_event_mouse_wheel(void *data __UNUSED__, int type __UNUSED__, void *event)
{
Ecore_Evas *ee;
- Ecore_Fb_Event_Mouse_Wheel *e;
- unsigned long long event_time;
+ Ecore_Event_Mouse_Wheel *e;
e = event;
ee = _ecore_evas_fb_match();
if (!ee) return EINA_TRUE; /* pass on event */
- event_time = (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff);
- _ecore_evas_mouse_move_process_fb(ee, e->x, e->y, event_time);
- evas_event_feed_mouse_wheel(ee->evas, e->direction, e->wheel, event_time, NULL);
- return EINA_FALSE; /* dont pass it on */
+ _ecore_evas_mouse_move_process_fb(ee, e->x, e->y);
+ return EINA_TRUE; /* dont pass it on */
}
static int
}
static int
-_ecore_evas_fb_init(int w, int h)
+_ecore_evas_fb_init(Ecore_Evas *ee, int w, int h)
{
Ecore_Fb_Input_Device *device;
Ecore_Fb_Input_Device_Cap caps;
int mouse_handled = 0;
- int keyboard_handled = 0;
DIR *input_dir;
struct dirent *input_entry;
_ecore_evas_init_count++;
if (_ecore_evas_init_count > 1) return _ecore_evas_init_count;
+ ecore_event_evas_init();
+
/* register all input devices */
input_dir = opendir("/dev/input/");
if (!input_dir) return _ecore_evas_init_count;
continue;
snprintf(device_path, 256, "/dev/input/%s", input_entry->d_name);
- if (!(device = ecore_fb_input_device_open(device_path)))
+ if (!(device = ecore_fb_input_device_open(ee, device_path)))
continue;
caps = ecore_fb_input_device_cap_get(device);
ecore_evas_input_devices = eina_list_append(ecore_evas_input_devices, device);
if (!mouse_handled)
{
- ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_FB_EVENT_MOUSE_BUTTON_DOWN, _ecore_evas_event_mouse_button_down, NULL);
- ecore_evas_event_handlers[3] = ecore_event_handler_add(ECORE_FB_EVENT_MOUSE_BUTTON_UP, _ecore_evas_event_mouse_button_up, NULL);
- ecore_evas_event_handlers[4] = ecore_event_handler_add(ECORE_FB_EVENT_MOUSE_MOVE, _ecore_evas_event_mouse_move, NULL);
- ecore_evas_event_handlers[5] = ecore_event_handler_add(ECORE_FB_EVENT_MOUSE_WHEEL, _ecore_evas_event_mouse_wheel, NULL);
+ ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _ecore_evas_event_mouse_button_down, NULL);
+ ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, _ecore_evas_event_mouse_button_up, NULL);
+ ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _ecore_evas_event_mouse_move, NULL);
+ ecore_evas_event_handlers[3] = ecore_event_handler_add(ECORE_EVENT_MOUSE_WHEEL, _ecore_evas_event_mouse_wheel, NULL);
mouse_handled = 1;
}
}
{
ecore_fb_input_device_listen(device,1);
ecore_evas_input_devices = eina_list_append(ecore_evas_input_devices, device);
- if (!keyboard_handled)
- {
- ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_FB_EVENT_KEY_DOWN, _ecore_evas_event_key_down, NULL);
- ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_FB_EVENT_KEY_UP, _ecore_evas_event_key_up, NULL);
- keyboard_handled = 1;
- }
}
}
closedir(input_dir);
{
if (ecore_fb_ts_init())
{
- ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_FB_EVENT_MOUSE_BUTTON_DOWN, _ecore_evas_event_mouse_button_down, NULL);
- ecore_evas_event_handlers[3] = ecore_event_handler_add(ECORE_FB_EVENT_MOUSE_BUTTON_UP, _ecore_evas_event_mouse_button_up, NULL);
- ecore_evas_event_handlers[4] = ecore_event_handler_add(ECORE_FB_EVENT_MOUSE_MOVE, _ecore_evas_event_mouse_move, NULL);
+ ecore_evas_event_handlers[0] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _ecore_evas_event_mouse_button_down, NULL);
+ ecore_evas_event_handlers[1] = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, _ecore_evas_event_mouse_button_up, NULL);
+ ecore_evas_event_handlers[2] = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, _ecore_evas_event_mouse_move, NULL);
mouse_handled = 1;
}
}
static void
_ecore_evas_fb_free(Ecore_Evas *ee)
{
+ ecore_evas_input_event_unregister(ee);
if (fb_ee == ee) fb_ee = NULL;
_ecore_evas_fb_shutdown();
ecore_fb_shutdown();
evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w);
else
evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
- _ecore_evas_mouse_move_process_fb(ee, ee->mouse.x, ee->mouse.y, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff));
+ _ecore_evas_mouse_move_process_fb(ee, ee->mouse.x, ee->mouse.y);
if (ee->func.fn_resize) ee->func.fn_resize(ee);
}
{
int i;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < 4; i++)
{
if (ecore_evas_event_handlers[i])
ecore_event_handler_del(ecore_evas_event_handlers[i]);
}
ecore_fb_ts_shutdown();
+ ecore_event_evas_shutdown();
}
if (_ecore_evas_init_count < 0) _ecore_evas_init_count = 0;
return _ecore_evas_init_count;
ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
- _ecore_evas_fb_init(w, h);
+ _ecore_evas_fb_init(ee, w, h);
ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_fb_engine_func;
ecore_evas_free(ee);
return NULL;
}
- evas_key_modifier_add(ee->evas, "Shift");
- evas_key_modifier_add(ee->evas, "Control");
- evas_key_modifier_add(ee->evas, "Alt");
- evas_key_modifier_add(ee->evas, "Meta");
- evas_key_modifier_add(ee->evas, "Hyper");
- evas_key_modifier_add(ee->evas, "Super");
- evas_key_lock_add(ee->evas, "Caps_Lock");
- evas_key_lock_add(ee->evas, "Num_Lock");
- evas_key_lock_add(ee->evas, "Scroll_Lock");
+
+ ecore_evas_input_event_register(ee);
ee->engine.func->fn_render = _ecore_evas_fb_render;
_ecore_evas_register(ee);
*/
typedef enum _Ecore_Fb_Input_Device_Cap Ecore_Fb_Input_Device_Cap;
-EAPI extern int ECORE_FB_EVENT_KEY_DOWN; /**< FB Key Down event */
-EAPI extern int ECORE_FB_EVENT_KEY_UP; /**< FB Key Up event */
-EAPI extern int ECORE_FB_EVENT_MOUSE_BUTTON_DOWN; /**< FB Mouse Down event */
-EAPI extern int ECORE_FB_EVENT_MOUSE_BUTTON_UP; /**< FB Mouse Up event */
-EAPI extern int ECORE_FB_EVENT_MOUSE_MOVE; /**< FB Mouse Move event */
-EAPI extern int ECORE_FB_EVENT_MOUSE_WHEEL; /**< FB Mouse Wheel event */
-
-typedef struct _Ecore_Fb_Event_Key_Down Ecore_Fb_Event_Key_Down; /**< FB Key Down event */
-typedef struct _Ecore_Fb_Event_Key_Up Ecore_Fb_Event_Key_Up; /**< FB Key Up event */
-typedef struct _Ecore_Fb_Event_Mouse_Button_Down Ecore_Fb_Event_Mouse_Button_Down; /**< FB Mouse Down event */
-typedef struct _Ecore_Fb_Event_Mouse_Button_Up Ecore_Fb_Event_Mouse_Button_Up; /**< FB Mouse Up event */
-typedef struct _Ecore_Fb_Event_Mouse_Move Ecore_Fb_Event_Mouse_Move; /**< FB Mouse Move event */
-typedef struct _Ecore_Fb_Event_Mouse_Wheel Ecore_Fb_Event_Mouse_Wheel; /**< FB Mouse Wheel event */
-
-/**
- * @struct _Ecore_Fb_Event_Key_Down
- * Framebuffer Key Down event.
- */
-struct _Ecore_Fb_Event_Key_Down
-{
- Ecore_Fb_Input_Device *dev; /**< The device associated with the event */
- char *keyname; /**< The name of the key that was pressed */
- char *keysymbol; /**< The logical symbol of the key that was pressed */
- char *key_compose; /**< The UTF-8 string conversion if any */
-};
-
-/**
- * @struct _Ecore_Fb_Event_Key_Up
- * Framebuffer Key Up event.
- */
-struct _Ecore_Fb_Event_Key_Up
-{
- Ecore_Fb_Input_Device *dev; /**< The device associated with the event */
- char *keyname; /**< The name of the key that was released */
- char *keysymbol; /**< The logical symbol of the key that was pressed */
- char *key_compose; /**< The UTF-8 string conversion if any */
-};
-
-/**
- * @struct _Ecore_Fb_Event_Mouse_Button_Down
- * Framebuffer Mouse Down event.
- */
-struct _Ecore_Fb_Event_Mouse_Button_Down
-{
- Ecore_Fb_Input_Device *dev; /**< The device associated with the event */
- int button; /**< Mouse button that was pressed (1 - 32) */
- int x; /**< Mouse co-ordinates when mouse button was pressed */
- int y; /**< Mouse co-ordinates when mouse button was pressed */
- int double_click : 1; /**< Set if click was a double click */
- int triple_click : 1; /**< Set if click was a triple click */
-};
-
-/**
- * @struct _Ecore_Fb_Event_Mouse_Button_Up
- * Framebuffer Mouse Up event.
- */
-struct _Ecore_Fb_Event_Mouse_Button_Up
-{
- Ecore_Fb_Input_Device *dev; /**< The device associated with the event */
- int button; /**< Mouse button that was released (1 - 32) */
- int x; /**< Mouse co-ordinates when mouse button was raised */
- int y; /**< Mouse co-ordinates when mouse button was raised */
- int double_click : 1; /**< Set if click was a double click */
- int triple_click : 1; /**< Set if click was a triple click */
-};
-
-/**
- * @struct _Ecore_Fb_Event_Mouse_Move
- * Framebuffer Mouse Move event.
- */
-struct _Ecore_Fb_Event_Mouse_Move
-{
- Ecore_Fb_Input_Device *dev; /**< The device associated with the event */
- int x; /**< Mouse co-ordinates where the mouse cursor moved to */
- int y; /**< Mouse co-ordinates where the mouse cursor moved to */
-};
-
-/**
- * @struct _Ecore_Fb_Event_Mouse_Wheel
- * Framebuffer Mouse Wheel event.
- */
-struct _Ecore_Fb_Event_Mouse_Wheel
-{
- Ecore_Fb_Input_Device *dev;
- int x,y;
- int direction; /* 0 = vertical, 1 = horizontal */
- int wheel; /* value 1 (left/up), -1 (right/down) */
-};
-
/* ecore_fb_vt.c */
EAPI void ecore_fb_callback_gain_set(void (*func) (void *data), void *data);
EAPI void ecore_fb_callback_lose_set(void (*func) (void *data), void *data);
/* ecore_fb_li.c */
-EAPI Ecore_Fb_Input_Device *ecore_fb_input_device_open(const char *dev);
+EAPI Ecore_Fb_Input_Device *ecore_fb_input_device_open(void *window, const char *dev);
EAPI void ecore_fb_input_device_close(Ecore_Fb_Input_Device *dev);
EAPI void ecore_fb_input_device_listen(Ecore_Fb_Input_Device *dev, Eina_Bool listen);
EAPI const char *ecore_fb_input_device_name_get(Ecore_Fb_Input_Device *dev);
AM_CPPFLAGS = \
-I$(top_srcdir)/src/lib/ecore \
-I$(top_builddir)/src/lib/ecore \
+-I$(top_srcdir)/src/lib/ecore_input \
@TSLIB_CFLAGS@ \
@EINA_CFLAGS@
static void _ecore_fb_size_get(int *w, int *h);
-EAPI int ECORE_FB_EVENT_KEY_DOWN = 0;
-EAPI int ECORE_FB_EVENT_KEY_UP = 0;
-EAPI int ECORE_FB_EVENT_MOUSE_BUTTON_DOWN = 0;
-EAPI int ECORE_FB_EVENT_MOUSE_BUTTON_UP = 0;
-EAPI int ECORE_FB_EVENT_MOUSE_MOVE = 0;
-EAPI int ECORE_FB_EVENT_MOUSE_WHEEL = 0;
-
static int _ecore_fb_init_count = 0;
static int _ecore_fb_console_w = 0;
static int _ecore_fb_console_h = 0;
if (!ecore_fb_vt_init())
return --_ecore_fb_init_count;
- ECORE_FB_EVENT_KEY_DOWN = ecore_event_type_new();
- ECORE_FB_EVENT_KEY_UP = ecore_event_type_new();
- ECORE_FB_EVENT_MOUSE_BUTTON_DOWN = ecore_event_type_new();
- ECORE_FB_EVENT_MOUSE_BUTTON_UP = ecore_event_type_new();
- ECORE_FB_EVENT_MOUSE_MOVE = ecore_event_type_new();
- ECORE_FB_EVENT_MOUSE_WHEEL = ecore_event_type_new();
_ecore_fb_size_get(&_ecore_fb_console_w, &_ecore_fb_console_h);
return _ecore_fb_init_count;
}
static void
-_ecore_fb_li_event_free_key_down(void *data __UNUSED__, void *ev)
-{
- Ecore_Fb_Event_Key_Up *e;
-
- e = ev;
- free(e->keyname);
- if (e->keysymbol) free(e->keysymbol);
- if (e->key_compose) free(e->key_compose);
- free(e);
-}
-
-static void
-_ecore_fb_li_event_free_key_up(void *data __UNUSED__, void *ev)
-{
- Ecore_Fb_Event_Key_Up *e;
-
- e = ev;
- free(e->keyname);
- if (e->keysymbol) free(e->keysymbol);
- if (e->key_compose) free(e->key_compose);
- free(e);
-}
-
-static void
_ecore_fb_li_device_event_key(Ecore_Fb_Input_Device *dev, struct input_event *iev)
{
if (!dev->listen) return;
/* check for basic keyboard keys */
if ((iev->code >= KEY_ESC) && (iev->code <= KEY_COMPOSE))
{
+ int offset = 0;
+ char *keyname = strdup(_ecore_fb_li_kbd_syms[iev->code * 6]);
/* check the key table */
if (iev->value)
{
- int offset = 0;
- Ecore_Fb_Event_Key_Down *ev;
-
- ev = calloc(1, sizeof(Ecore_Fb_Event_Key_Down));
- if (dev->keyboard.shift) offset = 1;
- else if (dev->keyboard.lock) offset = 2;
- ev->keyname = strdup(_ecore_fb_li_kbd_syms[iev->code * 6]);
-
- ev->keysymbol = strdup(_ecore_fb_li_kbd_syms[(iev->code * 6) + offset]);
- ev->key_compose = strdup(_ecore_fb_li_kbd_syms[(iev->code * 6) + 3 + offset]);
- ev->dev = dev;
- ecore_event_add(ECORE_FB_EVENT_KEY_DOWN, ev, _ecore_fb_li_event_free_key_down, NULL);
/* its a repeated key, dont increment */
if (iev->value == 2)
return;
- if (!strcmp(ev->keyname, "Control_L"))
+ if (!strcmp(keyname, "Control_L"))
dev->keyboard.ctrl++;
- else if (!strcmp(ev->keyname, "Control_R"))
+ else if (!strcmp(keyname, "Control_R"))
dev->keyboard.ctrl++;
- else if (!strcmp(ev->keyname, "Alt_L"))
+ else if (!strcmp(keyname, "Alt_L"))
dev->keyboard.alt++;
- else if (!strcmp(ev->keyname, "Alt_R"))
+ else if (!strcmp(keyname, "Alt_R"))
dev->keyboard.alt++;
- else if (!strcmp(ev->keyname, "Shift_L"))
+ else if (!strcmp(keyname, "Shift_L"))
dev->keyboard.shift++;
- else if (!strcmp(ev->keyname, "Shift_R"))
+ else if (!strcmp(keyname, "Shift_R"))
dev->keyboard.shift++;
- else if (!strcmp(ev->keyname, "Caps_Lock"))
- dev->keyboard.lock++;
+ else if (!strcmp(keyname, "Caps_Lock"))
+ dev->keyboard.lock = !dev->keyboard.lock;
if (dev->keyboard.ctrl > 2) dev->keyboard.ctrl = 2;
if (dev->keyboard.alt > 2) dev->keyboard.alt = 2;
if (dev->keyboard.shift > 2) dev->keyboard.shift = 2;
}
else
{
- int offset = 0;
- Ecore_Fb_Event_Key_Up *ev;
-
- ev = calloc(1, sizeof(Ecore_Fb_Event_Key_Up));
- if (dev->keyboard.shift) offset = 1;
- else if (dev->keyboard.lock) offset = 2;
- ev->keyname = strdup(_ecore_fb_li_kbd_syms[iev->code * 6]);
-
- ev->keysymbol = strdup(_ecore_fb_li_kbd_syms[(iev->code * 6) + offset]);
- ev->key_compose = strdup(_ecore_fb_li_kbd_syms[(iev->code * 6) + 3 + offset]);
- ev->dev = dev;
- ecore_event_add(ECORE_FB_EVENT_KEY_UP, ev, _ecore_fb_li_event_free_key_up, NULL);
- if (!strcmp(ev->keyname, "Control_L"))
+ if (!strcmp(keyname, "Control_L"))
dev->keyboard.ctrl--;
- else if (!strcmp(ev->keyname, "Control_R"))
+ else if (!strcmp(keyname, "Control_R"))
dev->keyboard.ctrl--;
- else if (!strcmp(ev->keyname, "Alt_L"))
+ else if (!strcmp(keyname, "Alt_L"))
dev->keyboard.alt--;
- else if (!strcmp(ev->keyname, "Alt_R"))
+ else if (!strcmp(keyname, "Alt_R"))
dev->keyboard.alt--;
- else if (!strcmp(ev->keyname, "Shift_L"))
+ else if (!strcmp(keyname, "Shift_L"))
dev->keyboard.shift--;
- else if (!strcmp(ev->keyname, "Shift_R"))
+ else if (!strcmp(keyname, "Shift_R"))
dev->keyboard.shift--;
- else if (!strcmp(ev->keyname, "Caps_Lock"))
- dev->keyboard.lock--;
if (dev->keyboard.ctrl < 0) dev->keyboard.ctrl = 0;
if (dev->keyboard.alt < 0) dev->keyboard.alt = 0;
if (dev->keyboard.shift < 0) dev->keyboard.shift = 0;
if (dev->keyboard.lock < 0) dev->keyboard.lock = 0;
}
+
+ /* sending ecore_input_evas events */
+ Ecore_Event_Key *e;
+
+ if (dev->keyboard.shift) offset = 1;
+ else if (dev->keyboard.lock) offset = 2;
+
+ char *key = strdup(_ecore_fb_li_kbd_syms[(iev->code * 6) + offset]);
+ char *compose = strdup(_ecore_fb_li_kbd_syms[(iev->code * 6) + 3 + offset]);
+
+ e = calloc(1, sizeof(Ecore_Event_Key) + strlen(key) +
+ strlen(keyname) + (compose ? strlen(compose) : 0) + 3);
+ e->keyname = (char *)(e + 1);
+ e->key = e->keyname + strlen(keyname) + 1;
+ e->compose = (compose) ? e->key + strlen(key) + 1 : NULL;
+ e->string = e->compose;
+
+ strcpy((char *)e->keyname, keyname);
+ strcpy((char *)e->key, key);
+ if (compose)
+ strcpy((char *)e->compose, compose);
+
+ e->modifiers = 0;
+ if (dev->keyboard.shift)
+ e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+ if (dev->keyboard.ctrl) e->modifiers |= ECORE_EVENT_MODIFIER_CTRL;
+ if (dev->keyboard.alt) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+ if (dev->keyboard.lock) e->modifiers |= ECORE_EVENT_LOCK_CAPS;
+
+ e->timestamp = ecore_time_get();
+ e->window = (Ecore_Window)dev->window;
+ e->event_window = (Ecore_Window)dev->window;
+ e->root_window = (Ecore_Window)dev->window;
+ e->same_screen = 0;
+
+ if (iev->value)
+ ecore_event_add(ECORE_EVENT_KEY_DOWN, e, NULL, NULL);
+ else
+ ecore_event_add(ECORE_EVENT_KEY_UP, e, NULL, NULL);
}
/* check for mouse button events */
else if ((iev->code >= BTN_MOUSE) && (iev->code < BTN_JOYSTICK))
{
int button;
+ Ecore_Event_Mouse_Button *e;
+ double current = ecore_time_get();
button = ((iev->code & 0x00F) + 1);
if (iev->value)
{
- Ecore_Fb_Event_Mouse_Button_Down *ev;
- double current;
-
- ev = calloc(1, sizeof(Ecore_Fb_Event_Mouse_Button_Down));
- ev->dev = dev;
- ev->button = button;
- ev->x = dev->mouse.x;
- ev->y = dev->mouse.y;
-
- current = ecore_time_get();
- if ((current - dev->mouse.prev) <= dev->mouse.threshold)
- ev->double_click = 1;
- if ((current - dev->mouse.last) <= (2 * dev->mouse.threshold))
- {
- ev->triple_click = 1;
- /* reset */
- dev->mouse.prev = 0;
- dev->mouse.last = 0;
- current = 0;
- }
- else
+ dev->mouse.did_double = EINA_FALSE;
+ dev->mouse.did_triple = EINA_FALSE;
+
+ if (((current - dev->mouse.prev) <= dev->mouse.threshold) &&
+ (button == dev->mouse.prev_button))
{
- /* update values */
- dev->mouse.last = dev->mouse.prev;
- dev->mouse.prev = current;
+ dev->mouse.did_double = EINA_TRUE;
+ if (((current - dev->mouse.last) <= (2 * dev->mouse.threshold)) &&
+ (button == dev->mouse.last_button))
+ {
+ dev->mouse.did_triple = EINA_TRUE;
+ /* reset */
+ dev->mouse.prev = 0;
+ dev->mouse.last = 0;
+ current = 0;
+ }
}
- ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_DOWN, ev, NULL ,NULL);
+ dev->mouse.last = dev->mouse.prev;
+ dev->mouse.prev = current;
+ dev->mouse.last_button = dev->mouse.prev_button;
+ dev->mouse.prev_button = button;
}
+
+ e = calloc(1, sizeof(Ecore_Event_Mouse_Button));
+ if (!e)
+ return;
+
+ e->timestamp = current;
+ e->window = (Ecore_Window)dev->window;
+ e->event_window = (Ecore_Window)dev->window;
+ e->root_window = (Ecore_Window)dev->window;
+ e->same_screen = 0;
+
+ e->modifiers = 0;
+ if (dev->keyboard.shift)
+ e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+ if (dev->keyboard.ctrl) e->modifiers |= ECORE_EVENT_MODIFIER_CTRL;
+ if (dev->keyboard.alt) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+ if (dev->keyboard.lock) e->modifiers |= ECORE_EVENT_LOCK_CAPS;
+
+ e->x = dev->mouse.x;
+ e->y = dev->mouse.y;
+ e->root.x = e->x;
+ e->root.y = e->y;
+ e->buttons = button;
+
+ if (dev->mouse.did_double)
+ e->double_click = 1;
+ if (dev->mouse.did_triple)
+ e->triple_click = 1;
+
+ if (iev->value)
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL);
else
- {
- Ecore_Fb_Event_Mouse_Button_Up *ev;
-
- ev = calloc(1,sizeof(Ecore_Fb_Event_Mouse_Button_Up));
- ev->dev = dev;
- ev->button = button;
- ev->x = dev->mouse.x;
- ev->y = dev->mouse.y;
- ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_UP, ev, NULL ,NULL);
- }
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
}
}
case REL_X:
case REL_Y:
{
- Ecore_Fb_Event_Mouse_Move *ev;
+ Ecore_Event_Mouse_Move *e;
if(iev->code == REL_X)
{
dev->mouse.x += iev->value;
else if(dev->mouse.y < 0)
dev->mouse.y = 0;
}
- ev = calloc(1,sizeof(Ecore_Fb_Event_Mouse_Move));
- ev->x = dev->mouse.x;
- ev->y = dev->mouse.y;
- ev->dev = dev;
- ecore_event_add(ECORE_FB_EVENT_MOUSE_MOVE,ev,NULL,NULL);
+ e = calloc(1, sizeof(Ecore_Event_Mouse_Move));
+ if (!e)
+ return;
+
+ e->window = (Ecore_Window)dev->window;
+ e->event_window = (Ecore_Window)dev->window;
+ e->root_window = (Ecore_Window)dev->window;
+ e->same_screen = 0;
+
+ e->modifiers = 0;
+ if (dev->keyboard.shift) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+ if (dev->keyboard.ctrl) e->modifiers |= ECORE_EVENT_MODIFIER_CTRL;
+ if (dev->keyboard.alt) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+ if (dev->keyboard.lock) e->modifiers |= ECORE_EVENT_LOCK_CAPS;
+
+ e->x = dev->mouse.x;
+ e->y = dev->mouse.y;
+ e->root.x = e->x;
+ e->root.y = e->y;
+
+ e->timestamp = ecore_time_get();
+
+ ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
+
break;
}
case REL_WHEEL:
case REL_HWHEEL:
{
- Ecore_Fb_Event_Mouse_Wheel *ev;
- ev = calloc(1, sizeof(Ecore_Fb_Event_Mouse_Wheel));
-
- ev->x = dev->mouse.x;
- ev->y = dev->mouse.y;
- if (iev->code == REL_HWHEEL) ev->direction = 1;
- ev->wheel = iev->value;
- ev->dev = dev;
- ecore_event_add(ECORE_FB_EVENT_MOUSE_WHEEL, ev, NULL, NULL);
+ Ecore_Event_Mouse_Wheel *e;
+
+ e = calloc(1, sizeof(Ecore_Event_Mouse_Wheel));
+ if (!e)
+ return;
+
+ e->x = dev->mouse.x;
+ e->y = dev->mouse.y;
+ if (iev->code == REL_HWHEEL) e->direction = 1;
+ e->z = iev->value;
+ e->root.x = dev->mouse.x;
+ e->root.y = dev->mouse.y;
+
+ e->window = (Ecore_Window)dev->window;
+ e->event_window = (Ecore_Window)dev->window;
+ e->root_window = (Ecore_Window)dev->window;
+ e->same_screen = 0;
+
+ e->modifiers = 0;
+ if (dev->keyboard.shift) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+ if (dev->keyboard.ctrl) e->modifiers |= ECORE_EVENT_MODIFIER_CTRL;
+ if (dev->keyboard.alt) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
+ if (dev->keyboard.lock) e->modifiers |= ECORE_EVENT_LOCK_CAPS;
+
+ e->timestamp = ecore_time_get();
+
+ ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, e, NULL, NULL);
+
break;
}
default:
if (tmp < 0) dev->mouse.x = 0;
else if (tmp > dev->mouse.w) dev->mouse.x = dev->mouse.w;
else dev->mouse.x = tmp;
- dev->mouse.event = ECORE_FB_EVENT_MOUSE_MOVE;
+ dev->mouse.event = ECORE_EVENT_MOUSE_MOVE;
}
break;
if (tmp < 0) dev->mouse.y = 0;
else if (tmp > dev->mouse.h) dev->mouse.y = dev->mouse.h;
else dev->mouse.y = tmp;
- dev->mouse.event = ECORE_FB_EVENT_MOUSE_MOVE;
+ dev->mouse.event = ECORE_EVENT_MOUSE_MOVE;
}
break;
pressure = iev->value;
if ((pressure) && (!prev_pressure))
{
- /* DOWN: mouse is down, but was not now */
- dev->mouse.event = ECORE_FB_EVENT_MOUSE_BUTTON_DOWN;
+ /* DOWN: mouse is down, but was not before */
+ dev->mouse.event = ECORE_EVENT_MOUSE_BUTTON_DOWN;
}
else if ((!pressure) && (prev_pressure))
{
/* UP: mouse was down, but is not now */
- dev->mouse.event = ECORE_FB_EVENT_MOUSE_BUTTON_UP;
+ dev->mouse.event = ECORE_EVENT_MOUSE_BUTTON_UP;
}
prev_pressure = pressure;
break;
{
if (!dev->listen) return;
- if (dev->mouse.event == ECORE_FB_EVENT_MOUSE_MOVE)
+ if (dev->mouse.event == ECORE_EVENT_MOUSE_MOVE)
{
- Ecore_Fb_Event_Mouse_Move *ev;
- ev = calloc(1,sizeof(Ecore_Fb_Event_Mouse_Move));
+ Ecore_Event_Mouse_Move *ev;
+ ev = calloc(1,sizeof(Ecore_Event_Mouse_Move));
ev->x = dev->mouse.x;
ev->y = dev->mouse.y;
- ev->dev = dev;
- ecore_event_add(ECORE_FB_EVENT_MOUSE_MOVE, ev, NULL, NULL);
+ ev->root.x = ev->x;
+ ev->root.y = ev->y;
+ ev->timestamp = ecore_time_get();
}
- else if (dev->mouse.event == ECORE_FB_EVENT_MOUSE_BUTTON_DOWN)
+ else if (dev->mouse.event == ECORE_EVENT_MOUSE_BUTTON_DOWN)
{
- Ecore_Fb_Event_Mouse_Button_Down *ev;
- ev = calloc(1, sizeof(Ecore_Fb_Event_Mouse_Button_Down));
+ Ecore_Event_Mouse_Button *ev;
+ ev = calloc(1, sizeof(Ecore_Event_Mouse_Button));
ev->x = dev->mouse.x;
ev->y = dev->mouse.y;
- ev->button = 1;
- ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL);
+ ev->root.x = ev->x;
+ ev->root.y = ev->y;
+ ev->buttons = 1;
+ ev->timestamp = ecore_time_get();
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL);
}
- else if (dev->mouse.event == ECORE_FB_EVENT_MOUSE_BUTTON_UP)
+ else if (dev->mouse.event == ECORE_EVENT_MOUSE_BUTTON_UP)
{
- Ecore_Fb_Event_Mouse_Button_Up *ev;
- ev = calloc(1, sizeof(Ecore_Fb_Event_Mouse_Button_Up));
+ Ecore_Event_Mouse_Button *ev;
+ ev = calloc(1, sizeof(Ecore_Event_Mouse_Button));
ev->x = dev->mouse.x;
ev->y = dev->mouse.y;
- ev->button = 1;
- ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL);
+ ev->root.x = ev->x;
+ ev->root.y = ev->y;
+ ev->buttons = 1;
+ ev->timestamp = ecore_time_get();
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL);
}
}
dev = (Ecore_Fb_Input_Device*)data;
/* read up to 64 events at once */
len = read(dev->fd, &ev, sizeof(ev));
- // printf("[ecore_fb_li_device:fd_callback] received %d data\n", len);
for(i = 0; i < (int)(len / sizeof(ev[0])); i++)
{
switch(ev[i].type)
* object for it, or returns @c NULL on failure.
*/
EAPI Ecore_Fb_Input_Device *
-ecore_fb_input_device_open(const char *dev)
+ecore_fb_input_device_open(void *ee, const char *dev)
{
Ecore_Fb_Input_Device *device;
unsigned long event_type_bitmask[EV_CNT / 32 + 1];
break;
}
}
+
+ device->window = ee;
_ecore_fb_li_devices = eina_list_append(_ecore_fb_li_devices, device);
return device;
#include "Ecore.h"
#include "ecore_private.h"
+#include "Ecore_Input.h"
#include <stdio.h>
#include <string.h>
double last;
double prev;
double threshold;
+ Eina_Bool did_double;
+ Eina_Bool did_triple;
/* absolute axis */
int min_w, min_h;
double rel_w, rel_h;
int event;
+ int prev_button;
+ int last_button;
} mouse;
struct
{
int alt;
int lock;
} keyboard;
+ void *window;
};
/* ecore_fb_ts.c */
if ((pressure) || (prev_pressure))
{
/* MOVE: mouse is down and was */
- Ecore_Fb_Event_Mouse_Move *e;
+ Ecore_Event_Mouse_Move *e;
- e = calloc(1, sizeof(Ecore_Fb_Event_Mouse_Move));
+ e = calloc(1, sizeof(Ecore_Event_Mouse_Move));
if (!e) goto retry;
e->x = x;
e->y = y;
- ecore_event_add(ECORE_FB_EVENT_MOUSE_MOVE, e, NULL, NULL);
+ e->root.x = x;
+ e->root.y = y;
+ ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
}
if ((pressure) && (!prev_pressure))
{
/* DOWN: mouse is down, but was not now */
- Ecore_Fb_Event_Mouse_Button_Down *e;
+ Ecore_Event_Mouse_Button *e;
- e = calloc(1, sizeof(Ecore_Fb_Event_Mouse_Button_Down));
+ e = calloc(1, sizeof(Ecore_Event_Mouse_Button));
if (!e) goto retry;
e->x = x;
e->y = y;
- e->button = 1;
+ e->buttons = 1;
if ((t - last_time) <= _ecore_fb_double_click_time)
{
e->double_click = 1;
{
did_triple = 0;
}
- ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL);
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL);
}
else if ((!pressure) && (prev_pressure))
{
/* UP: mouse was down, but is not now */
- Ecore_Fb_Event_Mouse_Button_Up *e;
+ Ecore_Event_Mouse_Button *e;
- e = calloc(1, sizeof(Ecore_Fb_Event_Mouse_Button_Up));
+ e = calloc(1, sizeof(Ecore_Event_Mouse_Button));
if (!e) goto retry;
e->x = prev_x;
e->y = prev_y;
- e->button = 1;
+ e->buttons = 1;
if (did_double)
e->double_click = 1;
if (did_triple)
e->triple_click = 1;
- ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
+ ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
}
if (did_triple)
{
filter_data = loop_data;
if (!filter_data) return EINA_TRUE;
- if (type == ECORE_FB_EVENT_MOUSE_MOVE)
+ if (type == ECORE_EVENT_MOUSE_MOVE)
{
- if ((filter_data->last_event_type) == ECORE_FB_EVENT_MOUSE_MOVE)
+ if ((filter_data->last_event_type) == ECORE_EVENT_MOUSE_MOVE)
{
filter_data->last_event_type = type;
return EINA_FALSE;