forked from enlightenment/enlightenment
finally fix insanely long-lived bug where pointer warp would end abruptly if the timer was called again before the X cursor move had occurred
SVN revision: 81469
This commit is contained in:
parent
6267cbd223
commit
72a901f954
|
@ -246,8 +246,8 @@ static int focus_track_frozen = 0;
|
||||||
static int warp_to = 0;
|
static int warp_to = 0;
|
||||||
static int warp_to_x = 0;
|
static int warp_to_x = 0;
|
||||||
static int warp_to_y = 0;
|
static int warp_to_y = 0;
|
||||||
static int warp_x = 0;
|
static int warp_x[2] = {0}; //{cur,prev}
|
||||||
static int warp_y = 0;
|
static int warp_y[2] = {0}; //{cur,prev}
|
||||||
static Ecore_X_Window warp_to_win;
|
static Ecore_X_Window warp_to_win;
|
||||||
static Ecore_Timer *warp_timer = NULL;
|
static Ecore_Timer *warp_timer = NULL;
|
||||||
|
|
||||||
|
@ -2145,7 +2145,7 @@ e_border_focus_set_with_pointer(E_Border *bd)
|
||||||
if ((!bd->client.icccm.accepts_focus) &&
|
if ((!bd->client.icccm.accepts_focus) &&
|
||||||
(!bd->client.icccm.take_focus)) return;
|
(!bd->client.icccm.take_focus)) return;
|
||||||
if (bd->lock_focus_out) return;
|
if (bd->lock_focus_out) return;
|
||||||
|
if (bd == focused) return;
|
||||||
e_border_focus_set(bd, 1, 1);
|
e_border_focus_set(bd, 1, 1);
|
||||||
|
|
||||||
if (e_config->focus_policy == E_FOCUS_CLICK) return;
|
if (e_config->focus_policy == E_FOCUS_CLICK) return;
|
||||||
|
@ -4496,10 +4496,10 @@ _e_border_reset_lost_window(E_Border *bd)
|
||||||
if (!bd->moving) e_border_center(bd);
|
if (!bd->moving) e_border_center(bd);
|
||||||
|
|
||||||
e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
|
e_zone_useful_geometry_get(bd->zone, &x, &y, &w, &h);
|
||||||
ecore_x_pointer_xy_get(bd->zone->container->win, &warp_x, &warp_y);
|
ecore_x_pointer_xy_get(bd->zone->container->win, &warp_x[0], &warp_y[0]);
|
||||||
|
|
||||||
warp_to_x = x + ((w / 2) - (bd->w / 2)) + (warp_x - bd->x);
|
warp_to_x = x + ((w / 2) - (bd->w / 2)) + (warp_x[0] - bd->x);
|
||||||
warp_to_y = y + ((h / 2) - (bd->h / 2)) + (warp_y - bd->y);
|
warp_to_y = y + ((h / 2) - (bd->h / 2)) + (warp_y[0] - bd->y);
|
||||||
|
|
||||||
warp_to = 1;
|
warp_to = 1;
|
||||||
warp_to_win = bd->zone->container->win;
|
warp_to_win = bd->zone->container->win;
|
||||||
|
@ -10154,8 +10154,9 @@ _e_border_pointer_warp_to_center_timer(void *data __UNUSED__)
|
||||||
double spd;
|
double spd;
|
||||||
|
|
||||||
ecore_x_pointer_xy_get(warp_to_win, &x, &y);
|
ecore_x_pointer_xy_get(warp_to_win, &x, &y);
|
||||||
if ((x - warp_x) > 5 || (x - warp_x) < -5 ||
|
/* move hasn't happened yet */
|
||||||
(y - warp_y) > 5 || (y - warp_y) < -5)
|
if ((x == warp_x[1]) && (y == warp_y[1])) return EINA_TRUE;
|
||||||
|
if ((abs(x - warp_x[0]) > 5) || (abs(y - warp_y[0]) > 5))
|
||||||
{
|
{
|
||||||
/* User moved the mouse, so stop warping */
|
/* User moved the mouse, so stop warping */
|
||||||
warp_to = 0;
|
warp_to = 0;
|
||||||
|
@ -10165,18 +10166,18 @@ _e_border_pointer_warp_to_center_timer(void *data __UNUSED__)
|
||||||
/* We just use the same warp speed as configured
|
/* We just use the same warp speed as configured
|
||||||
* for the windowlist */
|
* for the windowlist */
|
||||||
spd = e_config->winlist_warp_speed;
|
spd = e_config->winlist_warp_speed;
|
||||||
x = warp_x;
|
warp_x[1] = x = warp_x[0];
|
||||||
y = warp_y;
|
warp_y[1] = y = warp_y[0];
|
||||||
warp_x = (x * (1.0 - spd)) + (warp_to_x * spd);
|
warp_x[0] = (x * (1.0 - spd)) + (warp_to_x * spd);
|
||||||
warp_y = (y * (1.0 - spd)) + (warp_to_y * spd);
|
warp_y[0] = (y * (1.0 - spd)) + (warp_to_y * spd);
|
||||||
if (warp_x == x && warp_y == y)
|
if ((warp_x[0] == x) && (warp_y[0] == y))
|
||||||
{
|
{
|
||||||
warp_x = warp_to_x;
|
warp_x[0] = warp_to_x;
|
||||||
warp_y = warp_to_y;
|
warp_y[0] = warp_to_y;
|
||||||
warp_to = 0;
|
warp_to = 0;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
ecore_x_pointer_warp(warp_to_win, warp_x, warp_y);
|
ecore_x_pointer_warp(warp_to_win, warp_x[0], warp_y[0]);
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
}
|
}
|
||||||
cleanup:
|
cleanup:
|
||||||
|
@ -10216,7 +10217,7 @@ e_border_pointer_warp_to_center(E_Border *bd)
|
||||||
|
|
||||||
warp_to = 1;
|
warp_to = 1;
|
||||||
warp_to_win = bd->zone->container->win;
|
warp_to_win = bd->zone->container->win;
|
||||||
ecore_x_pointer_xy_get(bd->zone->container->win, &warp_x, &warp_y);
|
ecore_x_pointer_xy_get(bd->zone->container->win, &warp_x[0], &warp_y[0]);
|
||||||
if (warp_timer) ecore_timer_del(warp_timer);
|
if (warp_timer) ecore_timer_del(warp_timer);
|
||||||
warp_timer = ecore_timer_add(0.01, _e_border_pointer_warp_to_center_timer, bd);
|
warp_timer = ecore_timer_add(0.01, _e_border_pointer_warp_to_center_timer, bd);
|
||||||
warp_timer_border = bd;
|
warp_timer_border = bd;
|
||||||
|
|
Loading…
Reference in New Issue