forked from enlightenment/enlightenment
block "user" client resizes during comp client updating phase
resizing objects triggers clip resizes and further event feeding which can propagate mouse events such that clients try to resize themselves during the update phase, resulting in illegal compositor behavior
This commit is contained in:
parent
0a67a96df3
commit
63f3fe949c
|
@ -988,6 +988,7 @@ _e_client_resize_handle(E_Client *ec)
|
||||||
int tw, th;
|
int tw, th;
|
||||||
Eina_List *skiplist = NULL;
|
Eina_List *skiplist = NULL;
|
||||||
|
|
||||||
|
if (e_comp->updating) return;
|
||||||
x = ec->x;
|
x = ec->x;
|
||||||
y = ec->y;
|
y = ec->y;
|
||||||
w = ec->w;
|
w = ec->w;
|
||||||
|
|
|
@ -376,6 +376,7 @@ _e_comp_cb_update(void)
|
||||||
if (e_comp->grab_cb) e_comp->grab_cb();
|
if (e_comp->grab_cb) e_comp->grab_cb();
|
||||||
e_comp->grabbed = 1;
|
e_comp->grabbed = 1;
|
||||||
}
|
}
|
||||||
|
e_comp->updating = 1;
|
||||||
l = e_comp->updates;
|
l = e_comp->updates;
|
||||||
e_comp->updates = NULL;
|
e_comp->updates = NULL;
|
||||||
EINA_LIST_FREE(l, ec)
|
EINA_LIST_FREE(l, ec)
|
||||||
|
@ -384,6 +385,7 @@ _e_comp_cb_update(void)
|
||||||
e_comp_object_render_update_del(ec->frame);
|
e_comp_object_render_update_del(ec->frame);
|
||||||
_e_comp_client_update(ec);
|
_e_comp_client_update(ec);
|
||||||
}
|
}
|
||||||
|
e_comp->updating = 0;
|
||||||
_e_comp_fps_update();
|
_e_comp_fps_update();
|
||||||
if (conf->fps_show)
|
if (conf->fps_show)
|
||||||
{
|
{
|
||||||
|
|
|
@ -170,6 +170,7 @@ struct _E_Comp
|
||||||
Eina_Bool shape_queue_blocked : 1; //x11 input shape updates are blocked
|
Eina_Bool shape_queue_blocked : 1; //x11 input shape updates are blocked
|
||||||
|
|
||||||
Eina_Bool rendering : 1; // we've received a pre-render callback but no post-render yet.
|
Eina_Bool rendering : 1; // we've received a pre-render callback but no post-render yet.
|
||||||
|
Eina_Bool updating : 1; // running client updates
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue