summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2019-06-03 12:46:09 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2019-06-03 12:46:09 +0100
commit540db8bd413fb233a6b40042c2d773d0d34de76e (patch)
treed8802b9bb77c0c7e6f99f778b51170042fa4b99c
parent61d45313c4950be5cd0ccec04a2b05fb5e0349bf (diff)
e - fix stacking of transients to be in newness order bottom to top
so a parent transient shows 2 dialogs... both are transient for the parent. the newsewst one gets stacked below the older one. this leads to really bad things like a new "are you sure" or "have an error" modal dialog is not visible and things seemingly freeze in the client... so stack them in order they are created instead. also handle transients WITH transients of their own correctly this way too. @fix
-rw-r--r--src/bin/e_client.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/bin/e_client.c b/src/bin/e_client.c
index b12d79d6c..608968a76 100644
--- a/src/bin/e_client.c
+++ b/src/bin/e_client.c
@@ -5718,7 +5718,7 @@ E_API void
5718e_client_transients_restack(E_Client *ec) 5718e_client_transients_restack(E_Client *ec)
5719{ 5719{
5720 Eina_List *list; 5720 Eina_List *list;
5721 E_Client *child, *below = NULL; 5721 E_Client *child, *below = NULL, *last;
5722 5722
5723 E_OBJECT_CHECK(ec); 5723 E_OBJECT_CHECK(ec);
5724 E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE); 5724 E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
@@ -5732,7 +5732,19 @@ e_client_transients_restack(E_Client *ec)
5732 */ 5732 */
5733 if (child->iconic) continue; 5733 if (child->iconic) continue;
5734 if (below) 5734 if (below)
5735 evas_object_stack_below(child->frame, below->frame); 5735 {
5736 if (below->transients)
5737 {
5738 e_client_transients_restack(below);
5739 last = eina_list_last_data_get(below->transients);
5740 if (last)
5741 evas_object_stack_above(child->frame, last->frame);
5742 else
5743 evas_object_stack_above(child->frame, below->frame);
5744 }
5745 else
5746 evas_object_stack_above(child->frame, below->frame);
5747 }
5736 else 5748 else
5737 evas_object_stack_above(child->frame, ec->frame); 5749 evas_object_stack_above(child->frame, ec->frame);
5738 below = child; 5750 below = child;