summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2017-06-24 12:18:04 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2017-06-24 12:34:12 -0400
commit63f3fe949cb4f2169a7b9ba74a96df701617b1de (patch)
tree971b20610b1f59d66c672ba807be437adf36b67f
parent0a67a96df31beb0e2b70d484880d2d9778251fa3 (diff)
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
-rw-r--r--src/bin/e_client.c1
-rw-r--r--src/bin/e_comp.c2
-rw-r--r--src/bin/e_comp.h1
3 files changed, 4 insertions, 0 deletions
diff --git a/src/bin/e_client.c b/src/bin/e_client.c
index 81dd185f9..1d18877b9 100644
--- a/src/bin/e_client.c
+++ b/src/bin/e_client.c
@@ -988,6 +988,7 @@ _e_client_resize_handle(E_Client *ec)
988 int tw, th; 988 int tw, th;
989 Eina_List *skiplist = NULL; 989 Eina_List *skiplist = NULL;
990 990
991 if (e_comp->updating) return;
991 x = ec->x; 992 x = ec->x;
992 y = ec->y; 993 y = ec->y;
993 w = ec->w; 994 w = ec->w;
diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c
index c87822c1a..a4c5250ca 100644
--- a/src/bin/e_comp.c
+++ b/src/bin/e_comp.c
@@ -376,6 +376,7 @@ _e_comp_cb_update(void)
376 if (e_comp->grab_cb) e_comp->grab_cb(); 376 if (e_comp->grab_cb) e_comp->grab_cb();
377 e_comp->grabbed = 1; 377 e_comp->grabbed = 1;
378 } 378 }
379 e_comp->updating = 1;
379 l = e_comp->updates; 380 l = e_comp->updates;
380 e_comp->updates = NULL; 381 e_comp->updates = NULL;
381 EINA_LIST_FREE(l, ec) 382 EINA_LIST_FREE(l, ec)
@@ -384,6 +385,7 @@ _e_comp_cb_update(void)
384 e_comp_object_render_update_del(ec->frame); 385 e_comp_object_render_update_del(ec->frame);
385 _e_comp_client_update(ec); 386 _e_comp_client_update(ec);
386 } 387 }
388 e_comp->updating = 0;
387 _e_comp_fps_update(); 389 _e_comp_fps_update();
388 if (conf->fps_show) 390 if (conf->fps_show)
389 { 391 {
diff --git a/src/bin/e_comp.h b/src/bin/e_comp.h
index f0c9737a5..745550d22 100644
--- a/src/bin/e_comp.h
+++ b/src/bin/e_comp.h
@@ -170,6 +170,7 @@ struct _E_Comp
170 Eina_Bool shape_queue_blocked : 1; //x11 input shape updates are blocked 170 Eina_Bool shape_queue_blocked : 1; //x11 input shape updates are blocked
171 171
172 Eina_Bool rendering : 1; // we've received a pre-render callback but no post-render yet. 172 Eina_Bool rendering : 1; // we've received a pre-render callback but no post-render yet.
173 Eina_Bool updating : 1; // running client updates
173}; 174};
174 175
175 176