forked from enlightenment/enlightenment
this is ugly - but it reduces trails from dropshadow or desktop redraws on
slow boxes. i had to 1. use bg pixmaps 2. defer window moves until idle enterer that runs AFTER the rendering 3. simple resizes from top-left are handled, but if top-left of frame needs to mvoe all bets are off and its not deferred anymore. SVN revision: 31945
This commit is contained in:
parent
3cdccdeb42
commit
8b7a332c73
|
@ -761,6 +761,7 @@ e_border_hide(E_Border *bd, int manage)
|
||||||
// e_object_breadcrumb_add(E_OBJECT(bd), "border_hide_event");
|
// e_object_breadcrumb_add(E_OBJECT(bd), "border_hide_event");
|
||||||
ecore_event_add(E_EVENT_BORDER_HIDE, ev, _e_border_event_border_hide_free, NULL);
|
ecore_event_add(E_EVENT_BORDER_HIDE, ev, _e_border_event_border_hide_free, NULL);
|
||||||
}
|
}
|
||||||
|
bd->post_show = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
|
@ -2380,7 +2381,17 @@ e_border_idler_before(void)
|
||||||
(!bd->changes.size))
|
(!bd->changes.size))
|
||||||
{
|
{
|
||||||
ecore_evas_show(bd->bg_ecore_evas);
|
ecore_evas_show(bd->bg_ecore_evas);
|
||||||
ecore_x_window_show(bd->win);
|
if ((1) &&
|
||||||
|
((bd->changes.pos && !bd->changes.size) ||
|
||||||
|
(!bd->changes.pos && bd->changes.size) ||
|
||||||
|
(bd->post_job)))
|
||||||
|
{
|
||||||
|
bd->post_show = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_x_window_show(bd->win);
|
||||||
|
}
|
||||||
bd->changes.visible = 0;
|
bd->changes.visible = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2414,7 +2425,17 @@ e_border_idler_before(void)
|
||||||
(!bd->new_client))
|
(!bd->new_client))
|
||||||
{
|
{
|
||||||
ecore_evas_show(bd->bg_ecore_evas);
|
ecore_evas_show(bd->bg_ecore_evas);
|
||||||
ecore_x_window_show(bd->win);
|
if ((1) &&
|
||||||
|
((bd->changes.pos && !bd->changes.size) ||
|
||||||
|
(!bd->changes.pos && bd->changes.size) ||
|
||||||
|
(bd->post_job)))
|
||||||
|
{
|
||||||
|
bd->post_show = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_x_window_show(bd->win);
|
||||||
|
}
|
||||||
bd->changes.visible = 0;
|
bd->changes.visible = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3061,6 +3082,11 @@ e_border_resize_limit(E_Border *bd, int *w, int *h)
|
||||||
static void
|
static void
|
||||||
_e_border_free(E_Border *bd)
|
_e_border_free(E_Border *bd)
|
||||||
{
|
{
|
||||||
|
if (bd->post_job)
|
||||||
|
{
|
||||||
|
ecore_idle_enterer_del(bd->post_job);
|
||||||
|
bd->post_job = NULL;
|
||||||
|
}
|
||||||
if (bd->pointer)
|
if (bd->pointer)
|
||||||
{
|
{
|
||||||
e_object_del(E_OBJECT(bd->pointer));
|
e_object_del(E_OBJECT(bd->pointer));
|
||||||
|
@ -4897,6 +4923,38 @@ _e_border_cb_grab_replay(void *data, int type, void *event)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_border_post_move_resize_job(void *data)
|
||||||
|
{
|
||||||
|
E_Border *bd;
|
||||||
|
|
||||||
|
bd = (E_Border *)data;
|
||||||
|
if ((bd->post_move) && (bd->post_resize))
|
||||||
|
{
|
||||||
|
ecore_x_window_move_resize(bd->win,
|
||||||
|
bd->x + bd->fx.x,
|
||||||
|
bd->y + bd->fx.y,
|
||||||
|
bd->w, bd->h);
|
||||||
|
}
|
||||||
|
else if (bd->post_move)
|
||||||
|
{
|
||||||
|
ecore_x_window_move(bd->win, bd->x + bd->fx.x, bd->y + bd->fx.y);
|
||||||
|
}
|
||||||
|
else if (bd->post_resize)
|
||||||
|
{
|
||||||
|
ecore_x_window_resize(bd->win, bd->w, bd->h);
|
||||||
|
}
|
||||||
|
if (bd->post_show)
|
||||||
|
{
|
||||||
|
if (bd->visible) ecore_x_window_show(bd->win);
|
||||||
|
}
|
||||||
|
bd->post_show = 0;
|
||||||
|
bd->post_move = 0;
|
||||||
|
bd->post_resize = 0;
|
||||||
|
bd->post_job = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_border_eval(E_Border *bd)
|
_e_border_eval(E_Border *bd)
|
||||||
{
|
{
|
||||||
|
@ -6122,10 +6180,21 @@ _e_border_eval(E_Border *bd)
|
||||||
if ((bd->shaded) && (!bd->shading))
|
if ((bd->shaded) && (!bd->shading))
|
||||||
{
|
{
|
||||||
evas_obscured_clear(bd->bg_evas);
|
evas_obscured_clear(bd->bg_evas);
|
||||||
ecore_x_window_move_resize(bd->win,
|
if (0)
|
||||||
bd->x + bd->fx.x,
|
{
|
||||||
bd->y + bd->fx.y,
|
if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
|
||||||
bd->w, bd->h);
|
bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job,
|
||||||
|
bd);
|
||||||
|
bd->post_move = 1;
|
||||||
|
bd->post_resize = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_x_window_move_resize(bd->win,
|
||||||
|
bd->x + bd->fx.x,
|
||||||
|
bd->y + bd->fx.y,
|
||||||
|
bd->w, bd->h);
|
||||||
|
}
|
||||||
ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
|
ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
|
||||||
if (bd->internal_ecore_evas)
|
if (bd->internal_ecore_evas)
|
||||||
ecore_evas_move_resize(bd->internal_ecore_evas, 0, 0, bd->client.w, bd->client.h);
|
ecore_evas_move_resize(bd->internal_ecore_evas, 0, 0, bd->client.w, bd->client.h);
|
||||||
|
@ -6145,10 +6214,21 @@ _e_border_eval(E_Border *bd)
|
||||||
bd->client_inset.l, bd->client_inset.t,
|
bd->client_inset.l, bd->client_inset.t,
|
||||||
bd->w - (bd->client_inset.l + bd->client_inset.r),
|
bd->w - (bd->client_inset.l + bd->client_inset.r),
|
||||||
bd->h - (bd->client_inset.t + bd->client_inset.b));
|
bd->h - (bd->client_inset.t + bd->client_inset.b));
|
||||||
ecore_x_window_move_resize(bd->win,
|
if (0)
|
||||||
bd->x + bd->fx.x,
|
{
|
||||||
bd->y + bd->fx.y,
|
if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
|
||||||
bd->w, bd->h);
|
bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job,
|
||||||
|
bd);
|
||||||
|
bd->post_move = 1;
|
||||||
|
bd->post_resize = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_x_window_move_resize(bd->win,
|
||||||
|
bd->x + bd->fx.x,
|
||||||
|
bd->y + bd->fx.y,
|
||||||
|
bd->w, bd->h);
|
||||||
|
}
|
||||||
ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
|
ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
|
||||||
ecore_x_window_move_resize(bd->client.shell_win,
|
ecore_x_window_move_resize(bd->client.shell_win,
|
||||||
bd->client_inset.l, bd->client_inset.t,
|
bd->client_inset.l, bd->client_inset.t,
|
||||||
|
@ -6218,8 +6298,18 @@ _e_border_eval(E_Border *bd)
|
||||||
if (bd->internal_ecore_evas)
|
if (bd->internal_ecore_evas)
|
||||||
ecore_evas_managed_move(bd->internal_ecore_evas,
|
ecore_evas_managed_move(bd->internal_ecore_evas,
|
||||||
bd->x + bd->fx.x + bd->client_inset.l,
|
bd->x + bd->fx.x + bd->client_inset.l,
|
||||||
bd->y + bd->fx.x + bd->client_inset.t);
|
bd->y + bd->fx.y + bd->client_inset.t);
|
||||||
ecore_x_window_move(bd->win, bd->x + bd->fx.x, bd->y + bd->fx.y);
|
if (1)
|
||||||
|
{
|
||||||
|
if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
|
||||||
|
bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job,
|
||||||
|
bd);
|
||||||
|
bd->post_move = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_x_window_move(bd->win, bd->x + bd->fx.x, bd->y + bd->fx.y);
|
||||||
|
}
|
||||||
e_container_shape_move(bd->shape, bd->x + bd->fx.x, bd->y + bd->fx.y);
|
e_container_shape_move(bd->shape, bd->x + bd->fx.x, bd->y + bd->fx.y);
|
||||||
bd->changes.pos = 0;
|
bd->changes.pos = 0;
|
||||||
rem_change = 1;
|
rem_change = 1;
|
||||||
|
@ -6236,7 +6326,17 @@ _e_border_eval(E_Border *bd)
|
||||||
{
|
{
|
||||||
evas_obscured_clear(bd->bg_evas);
|
evas_obscured_clear(bd->bg_evas);
|
||||||
ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
|
ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
|
||||||
ecore_x_window_resize(bd->win, bd->w, bd->h);
|
if (1)
|
||||||
|
{
|
||||||
|
if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
|
||||||
|
bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job,
|
||||||
|
bd);
|
||||||
|
bd->post_resize = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_x_window_resize(bd->win, bd->w, bd->h);
|
||||||
|
}
|
||||||
if (bd->internal_ecore_evas)
|
if (bd->internal_ecore_evas)
|
||||||
ecore_evas_move_resize(bd->internal_ecore_evas, 0, 0, bd->client.w, bd->client.h);
|
ecore_evas_move_resize(bd->internal_ecore_evas, 0, 0, bd->client.w, bd->client.h);
|
||||||
else
|
else
|
||||||
|
@ -6253,7 +6353,17 @@ _e_border_eval(E_Border *bd)
|
||||||
bd->w - (bd->client_inset.l + bd->client_inset.r),
|
bd->w - (bd->client_inset.l + bd->client_inset.r),
|
||||||
bd->h - (bd->client_inset.t + bd->client_inset.b));
|
bd->h - (bd->client_inset.t + bd->client_inset.b));
|
||||||
ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
|
ecore_x_window_move_resize(bd->event_win, 0, 0, bd->w, bd->h);
|
||||||
ecore_x_window_resize(bd->win, bd->w, bd->h);
|
if (1)
|
||||||
|
{
|
||||||
|
if (bd->post_job) ecore_idle_enterer_del(bd->post_job);
|
||||||
|
bd->post_job = ecore_idle_enterer_add(_e_border_post_move_resize_job,
|
||||||
|
bd);
|
||||||
|
bd->post_resize = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_x_window_resize(bd->win, bd->w, bd->h);
|
||||||
|
}
|
||||||
ecore_x_window_move_resize(bd->client.shell_win,
|
ecore_x_window_move_resize(bd->client.shell_win,
|
||||||
bd->client_inset.l, bd->client_inset.t,
|
bd->client_inset.l, bd->client_inset.t,
|
||||||
bd->w - (bd->client_inset.l + bd->client_inset.r),
|
bd->w - (bd->client_inset.l + bd->client_inset.r),
|
||||||
|
@ -6488,7 +6598,14 @@ _e_border_eval(E_Border *bd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ecore_evas_show(bd->bg_ecore_evas);
|
ecore_evas_show(bd->bg_ecore_evas);
|
||||||
ecore_x_window_show(bd->win);
|
if (bd->post_job)
|
||||||
|
{
|
||||||
|
bd->post_show = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ecore_x_window_show(bd->win);
|
||||||
|
}
|
||||||
if (bd->cur_mouse_action)
|
if (bd->cur_mouse_action)
|
||||||
{
|
{
|
||||||
bd->moveinfo.down.x = bd->x + bd->fx.x;
|
bd->moveinfo.down.x = bd->x + bd->fx.x;
|
||||||
|
|
|
@ -477,6 +477,11 @@ struct _E_Border
|
||||||
|
|
||||||
Efreet_Desktop *desktop;
|
Efreet_Desktop *desktop;
|
||||||
E_Pointer *pointer;
|
E_Pointer *pointer;
|
||||||
|
|
||||||
|
unsigned char post_move : 1;
|
||||||
|
unsigned char post_resize : 1;
|
||||||
|
unsigned char post_show : 1;
|
||||||
|
Ecore_Idle_Enterer *post_job;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _E_Border_Pending_Move_Resize
|
struct _E_Border_Pending_Move_Resize
|
||||||
|
|
|
@ -101,7 +101,7 @@ e_container_new(E_Manager *man)
|
||||||
if (getenv("REDRAW_DEBUG"))
|
if (getenv("REDRAW_DEBUG"))
|
||||||
ecore_evas_avoid_damage_set(con->bg_ecore_evas, !atoi(getenv("REDRAW_DEBUG")));
|
ecore_evas_avoid_damage_set(con->bg_ecore_evas, !atoi(getenv("REDRAW_DEBUG")));
|
||||||
else
|
else
|
||||||
ecore_evas_avoid_damage_set(con->bg_ecore_evas, 1);
|
ecore_evas_avoid_damage_set(con->bg_ecore_evas, ECORE_EVAS_AVOID_DAMAGE_BUILT_IN);
|
||||||
ecore_x_window_lower(con->bg_win);
|
ecore_x_window_lower(con->bg_win);
|
||||||
|
|
||||||
o = evas_object_rectangle_add(con->bg_evas);
|
o = evas_object_rectangle_add(con->bg_evas);
|
||||||
|
|
Loading…
Reference in New Issue