From 1a134ae16d407a11fdf1189c8d24cf5e0ecda386 Mon Sep 17 00:00:00 2001 From: sebastid Date: Fri, 22 Apr 2005 09:23:00 +0000 Subject: [PATCH] Pointer wrapping. Needs updated ecore. SVN revision: 14297 --- src/bin/e_zone.c | 38 ++++++++++++++++++++++++++++++++------ src/bin/e_zone.h | 1 + 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/bin/e_zone.c b/src/bin/e_zone.c index 99d24d8a4..ddea19263 100644 --- a/src/bin/e_zone.c +++ b/src/bin/e_zone.c @@ -450,27 +450,31 @@ _e_zone_cb_mouse_in(void *data, int type, void *event) if (ev->win == zone->flip.top) { - zone->flip.timer = ecore_timer_add(1, _e_zone_cb_timer, zone); + zone->flip.timer = ecore_timer_add(0.5, _e_zone_cb_timer, zone); zone->flip.x = zone->desk_x_current; zone->flip.y = zone->desk_y_current - 1; + zone->flip.direction = E_DIRECTION_UP; } else if (ev->win == zone->flip.right) { - zone->flip.timer = ecore_timer_add(1, _e_zone_cb_timer, zone); + zone->flip.timer = ecore_timer_add(0.5, _e_zone_cb_timer, zone); zone->flip.x = zone->desk_x_current + 1; zone->flip.y = zone->desk_y_current; + zone->flip.direction = E_DIRECTION_RIGHT; } else if (ev->win == zone->flip.bottom) { - zone->flip.timer = ecore_timer_add(1, _e_zone_cb_timer, zone); + zone->flip.timer = ecore_timer_add(0.5, _e_zone_cb_timer, zone); zone->flip.x = zone->desk_x_current; zone->flip.y = zone->desk_y_current + 1; + zone->flip.direction = E_DIRECTION_DOWN; } else if (ev->win == zone->flip.left) { - zone->flip.timer = ecore_timer_add(1, _e_zone_cb_timer, zone); + zone->flip.timer = ecore_timer_add(0.5, _e_zone_cb_timer, zone); zone->flip.x = zone->desk_x_current - 1; zone->flip.y = zone->desk_y_current; + zone->flip.direction = E_DIRECTION_LEFT; } return 1; } @@ -500,8 +504,30 @@ _e_zone_cb_timer(void *data) zone = data; desk = e_desk_at_xy_get(zone, zone->flip.x, zone->flip.y); if (desk) - e_desk_show(desk); - _e_zone_update_flip(zone); + { + int x, y; + + e_desk_show(desk); + _e_zone_update_flip(zone); + + ecore_x_pointer_last_xy_get(&x, &y); + + switch (zone->flip.direction) + { + case E_DIRECTION_UP: + ecore_x_pointer_warp(zone->container->manager->win, x, zone->h - 2); + break; + case E_DIRECTION_RIGHT: + ecore_x_pointer_warp(zone->container->manager->win, 2, y); + break; + case E_DIRECTION_DOWN: + ecore_x_pointer_warp(zone->container->manager->win, x, 2); + break; + case E_DIRECTION_LEFT: + ecore_x_pointer_warp(zone->container->manager->win, zone->w - 2, y); + break; + } + } zone->flip.timer = NULL; diff --git a/src/bin/e_zone.h b/src/bin/e_zone.h index 0b5d5b6ee..f43f93727 100644 --- a/src/bin/e_zone.h +++ b/src/bin/e_zone.h @@ -38,6 +38,7 @@ struct _E_Zone Ecore_X_Window top, right, bottom, left; Ecore_Timer *timer; int x, y; + E_Direction direction; } flip; };