add/use helper function for rescaling individual clients

in any case where client needs to be rescaled to use new screen geometry
certain things must happen, such as handling shaded state and forcing the
new geometry to be applied
This commit is contained in:
Mike Blumenkrantz 2017-09-12 13:21:09 -04:00
parent 4f28e49f46
commit 20ea0ed150
4 changed files with 23 additions and 15 deletions

View File

@ -2868,11 +2868,7 @@ e_client_desk_set(E_Client *ec, E_Desk *desk)
ecore_event_add(E_EVENT_CLIENT_DESK_SET, ev, (Ecore_End_Cb)_e_client_event_desk_set_free, NULL);
if (old_desk->zone == ec->zone)
{
e_client_res_change_geometry_save(ec);
e_client_res_change_geometry_restore(ec);
ec->pre_res_change.valid = 0;
}
e_client_rescale(ec);
}
if (ec->stack.prev || ec->stack.next)
@ -3321,6 +3317,23 @@ e_client_res_change_geometry_restore(E_Client *ec)
memcpy(&ec->pre_res_change, &pre_res_change, sizeof(pre_res_change));
}
E_API void
e_client_rescale(E_Client *ec)
{
Eina_Bool shaded;
int shade_dir;
E_OBJECT_CHECK(ec);
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
shaded = ec->shaded;
shade_dir = ec->shade_dir;
if (shaded) e_client_unshade(ec, shade_dir);
ec->pre_res_change.valid = 0;
e_client_res_change_geometry_save(ec);
e_client_res_change_geometry_restore(ec);
if (shaded) e_client_shade(ec, shade_dir);
}
E_API void
e_client_zone_set(E_Client *ec, E_Zone *zone)
{
@ -3380,9 +3393,7 @@ e_client_zone_set(E_Client *ec, E_Zone *zone)
ecore_event_add(E_EVENT_CLIENT_ZONE_SET, ev, (Ecore_End_Cb)_e_client_event_zone_set_free, NULL);
e_remember_update(ec);
e_client_res_change_geometry_save(ec);
e_client_res_change_geometry_restore(ec);
ec->pre_res_change.valid = 0;
e_client_rescale(ec);
}
E_API void
@ -3866,7 +3877,7 @@ e_client_shade(E_Client *ec, E_Direction dir)
{
E_OBJECT_CHECK(ec);
E_OBJECT_TYPE_CHECK(ec, E_CLIENT_TYPE);
if ((ec->shaded) || (ec->shading) || (ec->fullscreen) ||
if (((!ec->shaded) && ec->shading) || (ec->shaded && (!ec->shading)) || (ec->fullscreen) ||
((ec->maximized) && (!e_config->allow_manip))) return;
if (!e_util_strcmp("borderless", ec->bordername)) return;
if (!e_comp_object_frame_allowed(ec->frame)) return;

View File

@ -785,6 +785,7 @@ E_API void e_client_mouse_up(E_Client *ec, int button, Evas_Point *output, E_Bin
E_API void e_client_mouse_move(E_Client *ec, Evas_Point *output);
E_API void e_client_res_change_geometry_save(E_Client *bd);
E_API void e_client_res_change_geometry_restore(E_Client *ec);
E_API void e_client_rescale(E_Client *ec);
E_API void e_client_zone_set(E_Client *ec, E_Zone *zone);
E_API void e_client_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h);
E_API E_Client *e_client_above_get(const E_Client *ec);

View File

@ -1829,8 +1829,7 @@ e_comp_clients_rescale(void)
EINA_LIST_FREE(tmp, ec)
{
ec->pre_res_change.valid = 0;
e_client_res_change_geometry_save(ec);
e_client_res_change_geometry_restore(ec);
e_client_rescale(ec);
}
}
}

View File

@ -3871,10 +3871,7 @@ _e_comp_x_hook_client_fetch(void *d EINA_UNUSED, E_Client *ec)
}
}
if (ec->placed && (!e_client_util_resizing_get(ec)) && (!ec->override))
{
e_client_res_change_geometry_save(ec);
e_client_res_change_geometry_restore(ec);
}
e_client_rescale(ec);
}
if (ec->icccm.min_w > 32767) ec->icccm.min_w = 32767;
if (ec->icccm.min_h > 32767) ec->icccm.min_h = 32767;