e17: disable input events of windows while deskflip animation is going
- set focus at the end of deskflip animation - delay show after first move to not draw at final position first - move window further out to decrease the chance of having comp get border_hide event before final position.. SVN revision: 58092
This commit is contained in:
parent
a39d970c77
commit
8957ea6191
|
@ -576,6 +576,11 @@ _e_desk_show_begin(E_Desk *desk, int mode, int dx, int dy)
|
||||||
E_Border *bd;
|
E_Border *bd;
|
||||||
double t;
|
double t;
|
||||||
|
|
||||||
|
if (dx < 0) dx = -1;
|
||||||
|
if (dx > 0) dx = 1;
|
||||||
|
if (dy < 0) dy = -1;
|
||||||
|
if (dy > 0) dy = 1;
|
||||||
|
|
||||||
t = ecore_loop_time_get();
|
t = ecore_loop_time_get();
|
||||||
bl = e_container_border_list_first(desk->zone->container);
|
bl = e_container_border_list_first(desk->zone->container);
|
||||||
while ((bd = e_container_border_list_next(bl)))
|
while ((bd = e_container_border_list_next(bl)))
|
||||||
|
@ -595,8 +600,8 @@ _e_desk_show_begin(E_Desk *desk, int mode, int dx, int dy)
|
||||||
bd->fx.start.t = t;
|
bd->fx.start.t = t;
|
||||||
if (mode == 1)
|
if (mode == 1)
|
||||||
{
|
{
|
||||||
bd->fx.start.x = bd->zone->w * dx;
|
bd->fx.start.x = bd->zone->w * (dx * 1.5);
|
||||||
bd->fx.start.y = bd->zone->h * dy;
|
bd->fx.start.y = bd->zone->h * (dy * 1.5);
|
||||||
}
|
}
|
||||||
else if (mode == 2)
|
else if (mode == 2)
|
||||||
{
|
{
|
||||||
|
@ -633,13 +638,14 @@ _e_desk_show_begin(E_Desk *desk, int mode, int dx, int dy)
|
||||||
else
|
else
|
||||||
bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h);
|
bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h);
|
||||||
e_border_fx_offset(bd, bd->fx.start.x, bd->fx.start.y);
|
e_border_fx_offset(bd, bd->fx.start.x, bd->fx.start.y);
|
||||||
e_border_show(bd);
|
e_border_comp_hidden_set(bd, EINA_TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
e_container_border_list_free(bl);
|
e_container_border_list_free(bl);
|
||||||
if (desk->animator) ecore_animator_del(desk->animator);
|
if (desk->animator) ecore_animator_del(desk->animator);
|
||||||
desk->animator = ecore_animator_add(_e_desk_show_animator, desk);
|
desk->animator = ecore_animator_add(_e_desk_show_animator, desk);
|
||||||
|
desk->animating = EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -657,9 +663,19 @@ _e_desk_show_end(E_Desk *desk)
|
||||||
if (bd->moving)
|
if (bd->moving)
|
||||||
e_border_fx_offset(bd, 0, 0);
|
e_border_fx_offset(bd, 0, 0);
|
||||||
else if ((bd->desk == desk) && (!bd->sticky))
|
else if ((bd->desk == desk) && (!bd->sticky))
|
||||||
e_border_fx_offset(bd, 0, 0);
|
{
|
||||||
|
e_border_fx_offset(bd, 0, 0);
|
||||||
|
e_border_comp_hidden_set(bd, EINA_FALSE);
|
||||||
|
|
||||||
|
if (!bd->visible)
|
||||||
|
e_border_show(bd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (e_config->focus_last_focused_per_desktop)
|
||||||
|
e_desk_last_focused_focus(desk);
|
||||||
|
|
||||||
e_container_border_list_free(bl);
|
e_container_border_list_free(bl);
|
||||||
ecore_x_window_shadow_tree_flush();
|
ecore_x_window_shadow_tree_flush();
|
||||||
ev = E_NEW(E_Event_Desk_After_Show, 1);
|
ev = E_NEW(E_Event_Desk_After_Show, 1);
|
||||||
|
@ -678,6 +694,14 @@ _e_desk_show_animator(void *data)
|
||||||
double t, dt, spd;
|
double t, dt, spd;
|
||||||
|
|
||||||
desk = data;
|
desk = data;
|
||||||
|
|
||||||
|
if (!desk->animating)
|
||||||
|
{
|
||||||
|
_e_desk_show_end(desk);
|
||||||
|
desk->animator = NULL;
|
||||||
|
return ECORE_CALLBACK_CANCEL;
|
||||||
|
}
|
||||||
|
|
||||||
t = ecore_loop_time_get();
|
t = ecore_loop_time_get();
|
||||||
dt = -1.0;
|
dt = -1.0;
|
||||||
spd = e_config->desk_flip_animate_time;
|
spd = e_config->desk_flip_animate_time;
|
||||||
|
@ -691,11 +715,14 @@ _e_desk_show_animator(void *data)
|
||||||
}
|
}
|
||||||
else if ((bd->desk == desk) && (!bd->sticky))
|
else if ((bd->desk == desk) && (!bd->sticky))
|
||||||
{
|
{
|
||||||
|
if (!bd->visible)
|
||||||
|
e_border_show(bd);
|
||||||
|
|
||||||
dt = (t - bd->fx.start.t) / spd;
|
dt = (t - bd->fx.start.t) / spd;
|
||||||
if (dt > 1.0) dt = 1.0;
|
if (dt > 1.0) dt = 1.0;
|
||||||
dt = 1.0 - dt;
|
dt = 1.0 - dt;
|
||||||
dt *= dt; /* decelerate - could be a better hack */
|
dt *= dt; /* decelerate - could be a better hack */
|
||||||
e_border_fx_offset(bd,
|
e_border_fx_offset(bd,
|
||||||
((double)bd->fx.start.x * dt),
|
((double)bd->fx.start.x * dt),
|
||||||
((double)bd->fx.start.y * dt));
|
((double)bd->fx.start.y * dt));
|
||||||
}
|
}
|
||||||
|
@ -703,11 +730,8 @@ _e_desk_show_animator(void *data)
|
||||||
}
|
}
|
||||||
e_container_border_list_free(bl);
|
e_container_border_list_free(bl);
|
||||||
if (dt <= 0.0)
|
if (dt <= 0.0)
|
||||||
{
|
desk->animating = EINA_FALSE;
|
||||||
_e_desk_show_end(desk);
|
|
||||||
desk->animator = NULL;
|
|
||||||
return ECORE_CALLBACK_CANCEL;
|
|
||||||
}
|
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -718,6 +742,11 @@ _e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy)
|
||||||
E_Border *bd;
|
E_Border *bd;
|
||||||
double t;
|
double t;
|
||||||
|
|
||||||
|
if (dx < 0) dx = -1;
|
||||||
|
if (dx > 0) dx = 1;
|
||||||
|
if (dy < 0) dy = -1;
|
||||||
|
if (dy > 0) dy = 1;
|
||||||
|
|
||||||
t = ecore_loop_time_get();
|
t = ecore_loop_time_get();
|
||||||
bl = e_container_border_list_first(desk->zone->container);
|
bl = e_container_border_list_first(desk->zone->container);
|
||||||
while ((bd = e_container_border_list_next(bl)))
|
while ((bd = e_container_border_list_next(bl)))
|
||||||
|
@ -735,8 +764,8 @@ _e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy)
|
||||||
bd->fx.start.t = t;
|
bd->fx.start.t = t;
|
||||||
if (mode == 1)
|
if (mode == 1)
|
||||||
{
|
{
|
||||||
bd->fx.start.x = bd->zone->w * -dx;
|
bd->fx.start.x = bd->zone->w * (-dx * 1.5);
|
||||||
bd->fx.start.y = bd->zone->h * -dy;
|
bd->fx.start.y = bd->zone->h * (-dy * 1.5);
|
||||||
}
|
}
|
||||||
else if (mode == 2)
|
else if (mode == 2)
|
||||||
{
|
{
|
||||||
|
@ -773,12 +802,14 @@ _e_desk_hide_begin(E_Desk *desk, int mode, int dx, int dy)
|
||||||
else
|
else
|
||||||
bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h);
|
bd->fx.start.y += bd->zone->container->h - (bd->zone->y + bd->zone->h);
|
||||||
e_border_fx_offset(bd, 0, 0);
|
e_border_fx_offset(bd, 0, 0);
|
||||||
|
e_border_comp_hidden_set(bd, EINA_TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
e_container_border_list_free(bl);
|
e_container_border_list_free(bl);
|
||||||
if (desk->animator) ecore_animator_del(desk->animator);
|
if (desk->animator) ecore_animator_del(desk->animator);
|
||||||
desk->animator = ecore_animator_add(_e_desk_hide_animator, desk);
|
desk->animator = ecore_animator_add(_e_desk_hide_animator, desk);
|
||||||
|
desk->animating = EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -797,6 +828,7 @@ _e_desk_hide_end(E_Desk *desk)
|
||||||
else if ((bd->desk == desk) && (!bd->sticky))
|
else if ((bd->desk == desk) && (!bd->sticky))
|
||||||
{
|
{
|
||||||
e_border_fx_offset(bd, 0, 0);
|
e_border_fx_offset(bd, 0, 0);
|
||||||
|
e_border_comp_hidden_set(bd, EINA_FALSE);
|
||||||
e_border_hide(bd, 2);
|
e_border_hide(bd, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -814,6 +846,14 @@ _e_desk_hide_animator(void *data)
|
||||||
double t, dt, spd;
|
double t, dt, spd;
|
||||||
|
|
||||||
desk = data;
|
desk = data;
|
||||||
|
|
||||||
|
if (!desk->animating)
|
||||||
|
{
|
||||||
|
_e_desk_hide_end(desk);
|
||||||
|
desk->animator = NULL;
|
||||||
|
return ECORE_CALLBACK_CANCEL;
|
||||||
|
}
|
||||||
|
|
||||||
t = ecore_loop_time_get();
|
t = ecore_loop_time_get();
|
||||||
dt = -1.0;
|
dt = -1.0;
|
||||||
spd = e_config->desk_flip_animate_time;
|
spd = e_config->desk_flip_animate_time;
|
||||||
|
@ -837,11 +877,9 @@ _e_desk_hide_animator(void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
e_container_border_list_free(bl);
|
e_container_border_list_free(bl);
|
||||||
|
|
||||||
if ((dt < 0.0) || (dt >= 1.0))
|
if ((dt < 0.0) || (dt >= 1.0))
|
||||||
{
|
desk->animating = EINA_FALSE;
|
||||||
_e_desk_hide_end(desk);
|
|
||||||
desk->animator = NULL;
|
|
||||||
return ECORE_CALLBACK_CANCEL;
|
|
||||||
}
|
|
||||||
return ECORE_CALLBACK_RENEW;
|
return ECORE_CALLBACK_RENEW;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ struct _E_Desk
|
||||||
Evas_Object *bg_object;
|
Evas_Object *bg_object;
|
||||||
|
|
||||||
Ecore_Animator *animator;
|
Ecore_Animator *animator;
|
||||||
|
Eina_Bool animating;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _E_Event_Desk_Show
|
struct _E_Event_Desk_Show
|
||||||
|
|
Loading…
Reference in New Issue