forked from enlightenment/enlightenment
parent
458ec6aefc
commit
9ce26d3202
|
@ -91,6 +91,69 @@ _mouse_in_win_get(Cover *cov, int x, int y)
|
||||||
(cov->zone->container->manager->root, x, y, skip, i);
|
(cov->zone->container->manager->root, x, y, skip, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int
|
||||||
|
_win_angle_get(Ecore_X_Window win)
|
||||||
|
{
|
||||||
|
Ecore_X_Window root;
|
||||||
|
|
||||||
|
if (!win) return 0;
|
||||||
|
|
||||||
|
int ret;
|
||||||
|
int count;
|
||||||
|
int angle = 0;
|
||||||
|
unsigned char *prop_data = NULL;
|
||||||
|
|
||||||
|
root = ecore_x_window_root_get(win);
|
||||||
|
ret = ecore_x_window_prop_property_get(root,
|
||||||
|
ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE,
|
||||||
|
ECORE_X_ATOM_CARDINAL,
|
||||||
|
32, &prop_data, &count);
|
||||||
|
|
||||||
|
if (ret && prop_data)
|
||||||
|
memcpy (&angle, prop_data, sizeof (int));
|
||||||
|
|
||||||
|
if (prop_data) free (prop_data);
|
||||||
|
|
||||||
|
return angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_coordinate_calibrate(Ecore_X_Window win, int *x, int *y)
|
||||||
|
{
|
||||||
|
int tx, ty, w, h;
|
||||||
|
unsigned int angle;
|
||||||
|
|
||||||
|
if (!x) return;
|
||||||
|
if (!y) return;
|
||||||
|
|
||||||
|
angle = _win_angle_get(win);
|
||||||
|
ecore_x_window_geometry_get(win, NULL, NULL, &w, &h);
|
||||||
|
|
||||||
|
tx = *x;
|
||||||
|
ty = *y;
|
||||||
|
|
||||||
|
switch (angle)
|
||||||
|
{
|
||||||
|
case 90:
|
||||||
|
*x = h - ty;
|
||||||
|
*y = tx;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 180:
|
||||||
|
*x = w - tx;
|
||||||
|
*y = h - ty;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 270:
|
||||||
|
*x = ty;
|
||||||
|
*y = w - tx;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_mouse_win_fake_tap(Cover *cov, Ecore_Event_Mouse_Button *ev)
|
_mouse_win_fake_tap(Cover *cov, Ecore_Event_Mouse_Button *ev)
|
||||||
{
|
{
|
||||||
|
@ -116,6 +179,8 @@ _messsage_read_send(Cover *cov)
|
||||||
_mouse_in_win_get(cov, cov->x, cov->y);
|
_mouse_in_win_get(cov, cov->x, cov->y);
|
||||||
|
|
||||||
ecore_x_pointer_xy_get(target_win, &x, &y);
|
ecore_x_pointer_xy_get(target_win, &x, &y);
|
||||||
|
_coordinate_calibrate(target_win, &x, &y);
|
||||||
|
|
||||||
ecore_x_client_message32_send(target_win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
|
ecore_x_client_message32_send(target_win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
|
||||||
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
|
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
|
||||||
target_win,
|
target_win,
|
||||||
|
@ -244,6 +309,7 @@ _mouse_up(Cover *cov, Ecore_Event_Mouse_Button *ev)
|
||||||
int distance = 40;
|
int distance = 40;
|
||||||
int dx, dy;
|
int dx, dy;
|
||||||
int x, y;
|
int x, y;
|
||||||
|
int angle = 0;
|
||||||
|
|
||||||
// for two finger panning
|
// for two finger panning
|
||||||
if (cov->two_finger_down)
|
if (cov->two_finger_down)
|
||||||
|
@ -298,17 +364,47 @@ _mouse_up(Cover *cov, Ecore_Event_Mouse_Button *ev)
|
||||||
else if (((dx * dx) + (dy * dy)) > (4 * distance * distance)
|
else if (((dx * dx) + (dy * dy)) > (4 * distance * distance)
|
||||||
&& ((ev->timestamp - cov->dt) < (timeout * 1000)))
|
&& ((ev->timestamp - cov->dt) < (timeout * 1000)))
|
||||||
{
|
{
|
||||||
|
/* get root window rotation */
|
||||||
|
angle = _win_angle_get(target_win);
|
||||||
|
|
||||||
if (abs(dx) > abs(dy)) // left or right
|
if (abs(dx) > abs(dy)) // left or right
|
||||||
{
|
{
|
||||||
if (dx > 0) // right
|
if (dx > 0) // right
|
||||||
{
|
{
|
||||||
INFO(cov, "single flick right");
|
INFO(cov, "single flick right");
|
||||||
ecore_x_e_illume_access_action_read_next_send(target_win);
|
switch (angle)
|
||||||
|
{
|
||||||
|
case 180:
|
||||||
|
case 270:
|
||||||
|
ecore_x_e_illume_access_action_read_prev_send
|
||||||
|
(target_win);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 90:
|
||||||
|
default:
|
||||||
|
ecore_x_e_illume_access_action_read_next_send
|
||||||
|
(target_win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else // left
|
else // left
|
||||||
{
|
{
|
||||||
INFO(cov, "single flick left");
|
INFO(cov, "single flick left");
|
||||||
ecore_x_e_illume_access_action_read_prev_send(target_win);
|
switch (angle)
|
||||||
|
{
|
||||||
|
case 180:
|
||||||
|
case 270:
|
||||||
|
ecore_x_e_illume_access_action_read_next_send
|
||||||
|
(target_win);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 90:
|
||||||
|
default:
|
||||||
|
ecore_x_e_illume_access_action_read_prev_send
|
||||||
|
(target_win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // up or down
|
else // up or down
|
||||||
|
@ -316,12 +412,38 @@ _mouse_up(Cover *cov, Ecore_Event_Mouse_Button *ev)
|
||||||
if (dy > 0) // down
|
if (dy > 0) // down
|
||||||
{
|
{
|
||||||
INFO(cov, "single flick down");
|
INFO(cov, "single flick down");
|
||||||
ecore_x_e_illume_access_action_next_send(target_win);
|
switch (angle)
|
||||||
|
{
|
||||||
|
case 90:
|
||||||
|
case 180:
|
||||||
|
ecore_x_e_illume_access_action_read_prev_send
|
||||||
|
(target_win);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 270:
|
||||||
|
default:
|
||||||
|
ecore_x_e_illume_access_action_read_next_send
|
||||||
|
(target_win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // up
|
else // up
|
||||||
{
|
{
|
||||||
INFO(cov, "single flick up");
|
INFO(cov, "single flick up");
|
||||||
ecore_x_e_illume_access_action_prev_send(target_win);
|
switch (angle)
|
||||||
|
{
|
||||||
|
case 90:
|
||||||
|
case 180:
|
||||||
|
ecore_x_e_illume_access_action_read_next_send
|
||||||
|
(target_win);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 270:
|
||||||
|
default:
|
||||||
|
ecore_x_e_illume_access_action_read_prev_send
|
||||||
|
(target_win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -454,6 +576,7 @@ _cb_mouse_move(void *data __UNUSED__,
|
||||||
Ecore_Event_Mouse_Move *ev = event;
|
Ecore_Event_Mouse_Move *ev = event;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
Cover *cov;
|
Cover *cov;
|
||||||
|
int angle = 0;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(covers, l, cov)
|
EINA_LIST_FOREACH(covers, l, cov)
|
||||||
{
|
{
|
||||||
|
@ -481,6 +604,10 @@ _cb_mouse_move(void *data __UNUSED__,
|
||||||
{
|
{
|
||||||
dx = ev->x - cov->mx;
|
dx = ev->x - cov->mx;
|
||||||
dy = ev->y - cov->my;
|
dy = ev->y - cov->my;
|
||||||
|
|
||||||
|
/* get root window rotation */
|
||||||
|
angle = _win_angle_get(target_win);
|
||||||
|
|
||||||
if (((dx * dx) + (dy * dy)) > (distance * distance))
|
if (((dx * dx) + (dy * dy)) > (distance * distance))
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -489,12 +616,34 @@ _cb_mouse_move(void *data __UNUSED__,
|
||||||
if (dx > 0) // right
|
if (dx > 0) // right
|
||||||
{
|
{
|
||||||
INFO(cov, "mouse double down and move - right");
|
INFO(cov, "mouse double down and move - right");
|
||||||
ecore_x_e_illume_access_action_up_send(target_win);
|
switch (angle)
|
||||||
|
{
|
||||||
|
case 180:
|
||||||
|
case 270:
|
||||||
|
ecore_x_e_illume_access_action_down_send(target_win);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 90:
|
||||||
|
default:
|
||||||
|
ecore_x_e_illume_access_action_up_send(target_win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // left
|
else // left
|
||||||
{
|
{
|
||||||
INFO(cov, "mouse double down and move - left");
|
INFO(cov, "mouse double down and move - left");
|
||||||
ecore_x_e_illume_access_action_down_send(target_win);
|
switch (angle)
|
||||||
|
{
|
||||||
|
case 180:
|
||||||
|
case 270:
|
||||||
|
ecore_x_e_illume_access_action_up_send(target_win);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 90:
|
||||||
|
default:
|
||||||
|
ecore_x_e_illume_access_action_down_send(target_win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // up or down
|
else // up or down
|
||||||
|
@ -502,12 +651,34 @@ _cb_mouse_move(void *data __UNUSED__,
|
||||||
if (dy > 0) // down
|
if (dy > 0) // down
|
||||||
{
|
{
|
||||||
INFO(cov, "mouse double down and move - down");
|
INFO(cov, "mouse double down and move - down");
|
||||||
ecore_x_e_illume_access_action_down_send(target_win);
|
switch (angle)
|
||||||
|
{
|
||||||
|
case 90:
|
||||||
|
case 180:
|
||||||
|
ecore_x_e_illume_access_action_up_send(target_win);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 270:
|
||||||
|
default:
|
||||||
|
ecore_x_e_illume_access_action_down_send(target_win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // up
|
else // up
|
||||||
{
|
{
|
||||||
INFO(cov, "mouse double down and move - up");
|
INFO(cov, "mouse double down and move - up");
|
||||||
ecore_x_e_illume_access_action_up_send(target_win);
|
switch (angle)
|
||||||
|
{
|
||||||
|
case 90:
|
||||||
|
case 180:
|
||||||
|
ecore_x_e_illume_access_action_down_send(target_win);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 270:
|
||||||
|
default:
|
||||||
|
ecore_x_e_illume_access_action_up_send(target_win);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue