* Fix range of issues with ecore_fb and even ecore_evas where

it didn't work right on the fb. (timestamps wrong, focus
handling etc.). This makes it work fully again.
                        


SVN revision: 69715
This commit is contained in:
Carsten Haitzler 2012-03-29 05:57:41 +00:00
parent 31ee93cf63
commit f62daabcb9
6 changed files with 80 additions and 25 deletions

View File

@ -605,3 +605,9 @@
* scim-immodule: fix bug candidate window covers the preedit string when preedit string appears in 2 line. * scim-immodule: fix bug candidate window covers the preedit string when preedit string appears in 2 line.
2012-03-29 Carsten Haitzler (The Rasterman)
* Fix range of issues with ecore_fb and even ecore_evas where
it didn't work right on the fb. (timestamps wrong, focus
handling etc.). This makes it work fully again.

View File

@ -377,6 +377,17 @@ _ecore_evas_show(Ecore_Evas *ee)
if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee); if (ee->func.fn_focus_in) ee->func.fn_focus_in(ee);
} }
static void
_ecore_evas_hide(Ecore_Evas *ee)
{
if (ee->prop.focused)
{
ee->prop.focused = 0;
evas_focus_out(ee->evas);
if (ee->func.fn_focus_out) ee->func.fn_focus_out(ee);
}
}
static void static void
_ecore_evas_object_cursor_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) _ecore_evas_object_cursor_del(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{ {
@ -516,7 +527,7 @@ static Ecore_Evas_Engine_Func _ecore_fb_engine_func =
_ecore_evas_rotation_set, _ecore_evas_rotation_set,
NULL, NULL,
_ecore_evas_show, _ecore_evas_show,
NULL, _ecore_evas_hide,
NULL, NULL,
NULL, NULL,
NULL, NULL,
@ -600,7 +611,7 @@ ecore_evas_fb_new(const char *disp_name, int rotation, int w, int h)
ee->prop.max.w = 0; ee->prop.max.w = 0;
ee->prop.max.h = 0; ee->prop.max.h = 0;
ee->prop.layer = 0; ee->prop.layer = 0;
ee->prop.focused = 1; ee->prop.focused = 0;
ee->prop.borderless = 1; ee->prop.borderless = 1;
ee->prop.override = 1; ee->prop.override = 1;
ee->prop.maximized = 1; ee->prop.maximized = 1;

View File

@ -190,6 +190,11 @@ _ecore_fb_kbd_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __U
free(e); free(e);
goto retry; goto retry;
} }
e->window = 1;
e->event_window = e->window;
e->root_window = e->window;
e->same_screen = 1;
e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_FB_EVENT_KEY_DOWN, e, _ecore_fb_event_free_key_down, NULL); ecore_event_add(ECORE_FB_EVENT_KEY_DOWN, e, _ecore_fb_event_free_key_down, NULL);
if (!strcmp(e->keyname, "Control_L")) if (!strcmp(e->keyname, "Control_L"))
_ecore_fb_ctrl++; _ecore_fb_ctrl++;
@ -248,6 +253,11 @@ _ecore_fb_kbd_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __U
free(e); free(e);
goto retry; goto retry;
} }
e->window = 1;
e->event_window = e->window;
e->root_window = e->window;
e->same_screen = 1;
e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_FB_EVENT_KEY_UP, e, _ecore_fb_event_free_key_up, NULL); ecore_event_add(ECORE_FB_EVENT_KEY_UP, e, _ecore_fb_event_free_key_up, NULL);
if (!strcmp(e->keyname, "Control_L")) if (!strcmp(e->keyname, "Control_L"))
_ecore_fb_ctrl--; _ecore_fb_ctrl--;

View File

@ -120,7 +120,7 @@ _ecore_fb_li_device_event_key(Ecore_Fb_Input_Device *dev, struct input_event *ie
if (dev->keyboard.alt) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT; if (dev->keyboard.alt) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
if (dev->keyboard.lock) e->modifiers |= ECORE_EVENT_LOCK_CAPS; if (dev->keyboard.lock) e->modifiers |= ECORE_EVENT_LOCK_CAPS;
e->timestamp = ecore_time_get(); e->timestamp = ecore_loop_time_get() * 1000.0;
e->window = (Ecore_Window)dev->window; e->window = (Ecore_Window)dev->window;
e->event_window = (Ecore_Window)dev->window; e->event_window = (Ecore_Window)dev->window;
e->root_window = (Ecore_Window)dev->window; e->root_window = (Ecore_Window)dev->window;
@ -136,7 +136,7 @@ _ecore_fb_li_device_event_key(Ecore_Fb_Input_Device *dev, struct input_event *ie
{ {
int button; int button;
Ecore_Event_Mouse_Button *e; Ecore_Event_Mouse_Button *e;
double current = ecore_time_get(); double current = ecore_loop_time_get();
button = ((iev->code & 0x00F) + 1); button = ((iev->code & 0x00F) + 1);
if (iev->value) if (iev->value)
@ -168,7 +168,7 @@ _ecore_fb_li_device_event_key(Ecore_Fb_Input_Device *dev, struct input_event *ie
if (!e) if (!e)
return; return;
e->timestamp = current; e->timestamp = current * 1000.0;
e->window = (Ecore_Window)dev->window; e->window = (Ecore_Window)dev->window;
e->event_window = (Ecore_Window)dev->window; e->event_window = (Ecore_Window)dev->window;
e->root_window = (Ecore_Window)dev->window; e->root_window = (Ecore_Window)dev->window;
@ -247,7 +247,7 @@ _ecore_fb_li_device_event_rel(Ecore_Fb_Input_Device *dev, struct input_event *ie
e->root.x = e->x; e->root.x = e->x;
e->root.y = e->y; e->root.y = e->y;
e->timestamp = ecore_time_get(); e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
@ -280,7 +280,7 @@ _ecore_fb_li_device_event_rel(Ecore_Fb_Input_Device *dev, struct input_event *ie
if (dev->keyboard.alt) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT; if (dev->keyboard.alt) e->modifiers |= ECORE_EVENT_MODIFIER_SHIFT;
if (dev->keyboard.lock) e->modifiers |= ECORE_EVENT_LOCK_CAPS; if (dev->keyboard.lock) e->modifiers |= ECORE_EVENT_LOCK_CAPS;
e->timestamp = ecore_time_get(); e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, e, NULL, NULL); ecore_event_add(ECORE_EVENT_MOUSE_WHEEL, e, NULL, NULL);
@ -356,7 +356,7 @@ _ecore_fb_li_device_event_syn(Ecore_Fb_Input_Device *dev, struct input_event *ie
ev->y = dev->mouse.y; ev->y = dev->mouse.y;
ev->root.x = ev->x; ev->root.x = ev->x;
ev->root.y = ev->y; ev->root.y = ev->y;
ev->timestamp = ecore_time_get(); ev->timestamp = ecore_loop_time_get() * 1000.0;
} }
else if (dev->mouse.event == ECORE_EVENT_MOUSE_BUTTON_DOWN) else if (dev->mouse.event == ECORE_EVENT_MOUSE_BUTTON_DOWN)
{ {
@ -367,7 +367,7 @@ _ecore_fb_li_device_event_syn(Ecore_Fb_Input_Device *dev, struct input_event *ie
ev->root.x = ev->x; ev->root.x = ev->x;
ev->root.y = ev->y; ev->root.y = ev->y;
ev->buttons = 1; ev->buttons = 1;
ev->timestamp = ecore_time_get(); ev->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL); ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, ev, NULL, NULL);
} }
else if (dev->mouse.event == ECORE_EVENT_MOUSE_BUTTON_UP) else if (dev->mouse.event == ECORE_EVENT_MOUSE_BUTTON_UP)
@ -379,7 +379,7 @@ _ecore_fb_li_device_event_syn(Ecore_Fb_Input_Device *dev, struct input_event *ie
ev->root.x = ev->x; ev->root.x = ev->x;
ev->root.y = ev->y; ev->root.y = ev->y;
ev->buttons = 1; ev->buttons = 1;
ev->timestamp = ecore_time_get(); ev->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL); ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, ev, NULL, NULL);
} }
} }

View File

@ -64,7 +64,7 @@ _ecore_fb_ps2_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __U
if (v < 0) return EINA_TRUE; if (v < 0) return EINA_TRUE;
_ecore_fb_ps2_event_byte_count += v; _ecore_fb_ps2_event_byte_count += v;
if (v < num) return EINA_TRUE; if (v < num) return EINA_TRUE;
t = ecore_time_get(); t = ecore_loop_time_get();
_ecore_fb_ps2_event_byte_count = 0; _ecore_fb_ps2_event_byte_count = 0;
if (_ecore_fb_ps2_event.button & 0x10) if (_ecore_fb_ps2_event.button & 0x10)
x = prev_x + (0xffffff00 | _ecore_fb_ps2_event.x); x = prev_x + (0xffffff00 | _ecore_fb_ps2_event.x);
@ -84,13 +84,20 @@ _ecore_fb_ps2_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __U
if (1) if (1)
{ {
/* MOVE: mouse is down and was */ /* 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_Fb_Event_Mouse_Move));
if (!e) goto retry; if (!e) goto retry;
e->x = x; e->x = x;
e->y = y; e->y = y;
ecore_event_add(ECORE_FB_EVENT_MOUSE_MOVE, e, NULL, NULL); e->root.x = e->x;
e->root.y = e->y;
e->window = 1;
e->event_window = e->window;
e->root_window = e->window;
e->same_screen = 1;
e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
} }
for (i = 1; i <= 3; i++) for (i = 1; i <= 3; i++)
{ {
@ -100,13 +107,19 @@ _ecore_fb_ps2_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __U
if (((button & mask)) && (!(prev_button & mask))) if (((button & mask)) && (!(prev_button & mask)))
{ {
/* DOWN: mouse is down, but was not now */ /* 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; if (!e) goto retry;
e->x = x; e->x = x;
e->y = y; e->y = y;
e->root.x = e->x;
e->root.y = e->y;
e->button = i; e->button = i;
e->window = 1;
e->event_window = e->window;
e->root_window = e->window;
e->same_screen = 1;
if ((t - last_time) <= _ecore_fb_double_click_time) if ((t - last_time) <= _ecore_fb_double_click_time)
{ {
e->double_click = 1; e->double_click = 1;
@ -126,23 +139,31 @@ _ecore_fb_ps2_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __U
{ {
did_triple = 0; did_triple = 0;
} }
ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL); e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL);
} }
else if ((!(button & mask)) && ((prev_button & mask))) else if ((!(button & mask)) && ((prev_button & mask)))
{ {
/* UP: mouse was down, but is not now */ /* 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; if (!e) goto retry;
e->x = x; e->x = x;
e->y = y; e->y = y;
e->root.x = e->x;
e->root.y = e->y;
e->button = i; e->button = i;
e->window = 1;
e->event_window = e->window;
e->root_window = e->window;
e->same_screen = 1;
if (did_double) if (did_double)
e->double_click = 1; e->double_click = 1;
if (did_triple) if (did_triple)
e->triple_click = 1; e->triple_click = 1;
ecore_event_add(ECORE_FB_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL); e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
} }
} }
if (did_triple) if (did_triple)

View File

@ -238,7 +238,6 @@ _ecore_fb_ts_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __UN
y = _ecore_fb_tslib_event.y; y = _ecore_fb_tslib_event.y;
pressure = _ecore_fb_tslib_event.pressure; pressure = _ecore_fb_tslib_event.pressure;
v = 1; /* loop, there might be more samples */ v = 1; /* loop, there might be more samples */
t = ecore_time_get();
#else #else
ptr = (char *)&(_ecore_fb_ts_event); ptr = (char *)&(_ecore_fb_ts_event);
ptr += _ecore_fb_ts_event_byte_count; ptr += _ecore_fb_ts_event_byte_count;
@ -260,6 +259,7 @@ _ecore_fb_ts_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __UN
} }
pressure = _ecore_fb_ts_event.pressure; pressure = _ecore_fb_ts_event.pressure;
#endif #endif
t = ecore_loop_time_get();
/* add event to queue */ /* add event to queue */
/* always add a move event */ /* always add a move event */
if ((pressure) || (prev_pressure)) if ((pressure) || (prev_pressure))
@ -271,12 +271,13 @@ _ecore_fb_ts_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __UN
if (!e) goto retry; if (!e) goto retry;
e->x = x; e->x = x;
e->y = y; e->y = y;
e->root.x = x; e->root.x = e->x;
e->root.y = y; e->root.y = e->y;
e->window = (Ecore_Window)_ecore_fb_ts_event_window; e->window = 1;
e->event_window = e->window; e->event_window = e->window;
e->root_window = e->window; e->root_window = e->window;
e->same_screen = 1; e->same_screen = 1;
e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL); ecore_event_add(ECORE_EVENT_MOUSE_MOVE, e, NULL, NULL);
} }
if ((pressure) && (!prev_pressure)) if ((pressure) && (!prev_pressure))
@ -288,6 +289,8 @@ _ecore_fb_ts_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __UN
if (!e) goto retry; if (!e) goto retry;
e->x = x; e->x = x;
e->y = y; e->y = y;
e->root.x = e->x;
e->root.y = e->y;
e->buttons = 1; e->buttons = 1;
if ((t - last_time) <= _ecore_fb_double_click_time) if ((t - last_time) <= _ecore_fb_double_click_time)
{ {
@ -308,10 +311,11 @@ _ecore_fb_ts_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __UN
{ {
did_triple = 0; did_triple = 0;
} }
e->window = (Ecore_Window)_ecore_fb_ts_event_window; e->window = 1;
e->event_window = e->window; e->event_window = e->window;
e->root_window = e->window; e->root_window = e->window;
e->same_screen = 1; e->same_screen = 1;
e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL); ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, e, NULL, NULL);
} }
else if ((!pressure) && (prev_pressure)) else if ((!pressure) && (prev_pressure))
@ -323,15 +327,18 @@ _ecore_fb_ts_fd_handler(void *data __UNUSED__, Ecore_Fd_Handler *fd_handler __UN
if (!e) goto retry; if (!e) goto retry;
e->x = prev_x; e->x = prev_x;
e->y = prev_y; e->y = prev_y;
e->root.x = e->x;
e->root.y = e->y;
e->buttons = 1; e->buttons = 1;
if (did_double) if (did_double)
e->double_click = 1; e->double_click = 1;
if (did_triple) if (did_triple)
e->triple_click = 1; e->triple_click = 1;
e->window = (Ecore_Window)_ecore_fb_ts_event_window; e->window = 1;
e->event_window = e->window; e->event_window = e->window;
e->root_window = e->window; e->root_window = e->window;
e->same_screen = 1; e->same_screen = 1;
e->timestamp = ecore_loop_time_get() * 1000.0;
ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL); ecore_event_add(ECORE_EVENT_MOUSE_BUTTON_UP, e, NULL, NULL);
} }
if (did_triple) if (did_triple)