summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2016-05-10 12:11:43 -0400
committerMike Blumenkrantz <zmike@osg.samsung.com>2016-05-10 12:13:12 -0400
commit16797009c01e743085a9fe50c8559cafbd5189d8 (patch)
tree4465f080fff77faf0bc1707f7fbc6ffa62b7fbad
parentac86429a2c878d688ff280720126e2c38baa9d3f (diff)
downloadenlightenment-16797009c01e743085a9fe50c8559cafbd5189d8.tar.gz
ensure child windows are placed on screen
when centering a child over its parent, checks were not made to ensure that by centering the child it had not gone offscreen
-rw-r--r--src/bin/e_client.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/bin/e_client.c b/src/bin/e_client.c
index d3a00a3e69..15a32ba74c 100644
--- a/src/bin/e_client.c
+++ b/src/bin/e_client.c
@@ -1604,6 +1604,7 @@ _e_client_eval(E_Client *ec)
{
if (ec->parent)
{
+ Eina_Bool centered = EINA_FALSE;
if (ec->parent->zone != e_zone_current_get())
{
e_client_zone_set(ec, ec->parent->zone);
@@ -1630,6 +1631,7 @@ _e_client_eval(E_Client *ec)
{
e_comp_object_util_center_on(ec->frame,
ec->parent->frame);
+ centered = 1;
}
}
ec->changes.pos = 1;
@@ -1639,7 +1641,22 @@ _e_client_eval(E_Client *ec)
{
e_comp_object_util_center_on(ec->frame,
ec->parent->frame);
- ec->changes.pos = 1;
+ centered = 1;
+ }
+ if (centered) //test for offscreen
+ {
+ if (!E_CONTAINS(ec->x, ec->y, ec->w, ec->h, zx, zy, zw, zh))
+ {
+ if (ec->x < zx)
+ ec->x = ec->parent->x;
+ if (ec->y < zy)
+ ec->y = ec->parent->y;
+ if (ec->x + ec->w > zx + zw)
+ ec->x = ec->parent->x + ec->parent->w - ec->w;
+ if (ec->y + ec->h > zy + zh)
+ ec->y = ec->parent->y + ec->parent->h - ec->h;
+ ec->changes.pos = 1;
+ }
}
ec->placed = 1;
ec->pre_cb.x = ec->x; ec->pre_cb.y = ec->y;