e_comp_wl: fix not sending a mouse enter event to client.

Summary:
First of all, currently cdata->ptr.x,y contains e_client related pos.
But, cdata is owned by e_comp, not per e_client. So cdata->ptr.x,y should contain
absolute pos.
And, when a pointer resource is created, enter event should be sent to client.

Change-Id: I21cb031e293fe281e35ba89f3a96116a28a48856
Signed-off-by: Boram Park <boram1288.park@samsung.com>

Test Plan:
1. run e as wayland server
2. move cursor to around 50,50
3. run elementary_test
4. click the mouse left button on slide toggle widget.
   (Don't move a cursor out of elementary_test. If you do, you can't find bug)

Reviewers: gwanglim, raster, devilhorns, ManMower, zmike

Reviewed By: zmike

Subscribers: cedric

Differential Revision: https://phab.enlightenment.org/D2330
This commit is contained in:
Boram Park 2015-05-18 11:53:05 -04:00 committed by Chris Michael
parent a2d22437fd
commit 5c46de06c6
2 changed files with 31 additions and 22 deletions

View File

@ -164,8 +164,8 @@ _e_comp_wl_evas_cb_mouse_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj
if (!e_comp_wl_input_pointer_check(res)) continue;
if (wl_resource_get_client(res) != wc) continue;
wl_pointer_send_enter(res, serial, ec->comp_data->surface,
wl_fixed_from_int(ev->canvas.x),
wl_fixed_from_int(ev->canvas.y));
wl_fixed_from_int(ev->canvas.x - ec->client.x),
wl_fixed_from_int(ev->canvas.y - ec->client.y));
}
}
@ -218,12 +218,6 @@ _e_comp_wl_evas_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
if (ec->cur_mouse_action) return;
if (e_object_is_del(E_OBJECT(ec))) return;
if (e_client_util_ignored_get(ec)) return;
e_comp->wl_comp_data->ptr.x =
wl_fixed_from_int(ev->cur.canvas.x - ec->client.x);
e_comp->wl_comp_data->ptr.y =
wl_fixed_from_int(ev->cur.canvas.y - ec->client.y);
if (!ec->comp_data->surface) return;
wc = wl_resource_get_client(ec->comp_data->surface);
@ -232,8 +226,8 @@ _e_comp_wl_evas_cb_mouse_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *o
if (!e_comp_wl_input_pointer_check(res)) continue;
if (wl_resource_get_client(res) != wc) continue;
wl_pointer_send_motion(res, ev->timestamp,
e_comp->wl_comp_data->ptr.x,
e_comp->wl_comp_data->ptr.y);
wl_fixed_from_int(ev->cur.canvas.x - ec->client.x),
wl_fixed_from_int(ev->cur.canvas.y - ec->client.y));
}
}
@ -962,6 +956,19 @@ _e_comp_wl_cb_key_up(void *event)
}
}
static void
_e_comp_wl_cb_mouse_move(void *event)
{
E_Comp_Data *cdata;
Ecore_Event_Mouse_Move *ev;
if (!(cdata = e_comp->wl_comp_data)) return;
ev = event;
cdata->ptr.x = wl_fixed_from_int(ev->x);
cdata->ptr.y = wl_fixed_from_int(ev->y);
}
static Eina_Bool
_e_comp_wl_cb_input_event(void *data EINA_UNUSED, int type, void *ev)
{
@ -971,6 +978,8 @@ _e_comp_wl_cb_input_event(void *data EINA_UNUSED, int type, void *ev)
_e_comp_wl_cb_key_down(ev);
else if (type == ECORE_EVENT_KEY_UP)
_e_comp_wl_cb_key_up(ev);
else if (type == ECORE_EVENT_MOUSE_MOVE)
_e_comp_wl_cb_mouse_move(ev);
return ECORE_CALLBACK_RENEW;
}

View File

@ -175,8 +175,8 @@ _e_shell_surface_cb_move(struct wl_client *client EINA_UNUSED, struct wl_resourc
}
e_comp_object_frame_xy_unadjust(ec->frame,
wl_fixed_to_int(cdata->ptr.x) + ec->client.x,
wl_fixed_to_int(cdata->ptr.y) + ec->client.y,
wl_fixed_to_int(cdata->ptr.x),
wl_fixed_to_int(cdata->ptr.y),
&ev.canvas.x, &ev.canvas.y);
_e_shell_surface_mouse_down_helper(ec, &ev, EINA_TRUE);
@ -209,8 +209,8 @@ _e_shell_surface_cb_resize(struct wl_client *client EINA_UNUSED, struct wl_resou
cdata->resize.resource = resource;
cdata->resize.edges = edges;
cdata->ptr.grab_x = cdata->ptr.x;
cdata->ptr.grab_y = cdata->ptr.y;
cdata->ptr.grab_x = cdata->ptr.x - wl_fixed_from_int(ec->client.x);
cdata->ptr.grab_y = cdata->ptr.y - wl_fixed_from_int(ec->client.y);
switch (cdata->ptr.button)
{
@ -229,8 +229,8 @@ _e_shell_surface_cb_resize(struct wl_client *client EINA_UNUSED, struct wl_resou
}
e_comp_object_frame_xy_unadjust(ec->frame,
wl_fixed_to_int(cdata->ptr.x) + ec->client.x,
wl_fixed_to_int(cdata->ptr.y) + ec->client.y,
wl_fixed_to_int(cdata->ptr.x),
wl_fixed_to_int(cdata->ptr.y),
&ev.canvas.x, &ev.canvas.y);
_e_shell_surface_mouse_down_helper(ec, &ev, EINA_FALSE);
@ -754,8 +754,8 @@ _e_xdg_shell_surface_cb_move(struct wl_client *client EINA_UNUSED, struct wl_res
}
e_comp_object_frame_xy_unadjust(ec->frame,
wl_fixed_to_int(cdata->ptr.x) + ec->client.x,
wl_fixed_to_int(cdata->ptr.y) + ec->client.y,
wl_fixed_to_int(cdata->ptr.x),
wl_fixed_to_int(cdata->ptr.y),
&ev.canvas.x, &ev.canvas.y);
_e_shell_surface_mouse_down_helper(ec, &ev, EINA_TRUE);
@ -788,8 +788,8 @@ _e_xdg_shell_surface_cb_resize(struct wl_client *client EINA_UNUSED, struct wl_r
cdata = e_comp->wl_comp_data;
cdata->resize.resource = resource;
cdata->resize.edges = edges;
cdata->ptr.grab_x = cdata->ptr.x;
cdata->ptr.grab_y = cdata->ptr.y;
cdata->ptr.grab_x = cdata->ptr.x - wl_fixed_from_int(ec->client.x);
cdata->ptr.grab_y = cdata->ptr.y - wl_fixed_from_int(ec->client.y);
switch (cdata->ptr.button)
{
@ -808,8 +808,8 @@ _e_xdg_shell_surface_cb_resize(struct wl_client *client EINA_UNUSED, struct wl_r
}
e_comp_object_frame_xy_unadjust(ec->frame,
wl_fixed_to_int(cdata->ptr.x) + ec->client.x,
wl_fixed_to_int(cdata->ptr.y) + ec->client.y,
wl_fixed_to_int(cdata->ptr.x),
wl_fixed_to_int(cdata->ptr.y),
&ev.canvas.x, &ev.canvas.y);
_e_shell_surface_mouse_down_helper(ec, &ev, EINA_FALSE);