From 0e416648df05ce76fe6a5d7869a75d569c7f9157 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 7 Jun 2016 11:23:24 -0400 Subject: [PATCH] optimize e_client_res_change_geometry_restore() performing the entire unfullscreen/unmaximize routine causes a significant amount of overhead, and it also breaks window geometries in wayland due to synchronization --- src/bin/e_client.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index b1b126080..427940ca9 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -2949,16 +2949,32 @@ e_client_res_change_geometry_restore(E_Client *ec) if (ec->fullscreen) { - e_client_unfullscreen(ec); - e_client_fullscreen(ec, e_config->fullscreen_policy); + if ((eina_list_count(e_comp->zones) > 1) || + (e_config->fullscreen_policy == E_FULLSCREEN_RESIZE)) + evas_object_geometry_set(ec->frame, ec->zone->x, ec->zone->y, ec->zone->w, ec->zone->h); + else + { + e_client_unfullscreen(ec); + e_client_fullscreen(ec, e_config->fullscreen_policy); + } } else if (ec->maximized != E_MAXIMIZE_NONE) { - E_Maximize max; + int x, y, w, h; - max = ec->maximized; - e_client_unmaximize(ec, E_MAXIMIZE_BOTH); - e_client_maximize(ec, max); + if (e_client_maximize_geometry_get(ec, ec->maximized, &x, &y, &w, &h)) + { + Eina_Bool override = ec->maximize_override; + ec->maximize_override = 1; + evas_object_geometry_set(ec->frame, x, y, w, h); + ec->maximize_override = override; + } + else + { + E_Maximize max = ec->maximized; + e_client_unmaximize(ec, E_MAXIMIZE_BOTH); + e_client_maximize(ec, max); + } } else {