okra pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=18ce3e4d93e19ad70c097394d4d7e729f33aeabc
commit 18ce3e4d93e19ad70c097394d4d7e729f33aeabc Author: Stephen 'Okra' Houston <smhousto...@gmail.com> Date: Wed Aug 30 11:27:13 2017 -0500 Pager: Don't empty/fill pager unecessarily. --- src/modules/pager/gadget/pager.c | 79 +++++++++++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 10 deletions(-) diff --git a/src/modules/pager/gadget/pager.c b/src/modules/pager/gadget/pager.c index c371dec8a..35732ed31 100644 --- a/src/modules/pager/gadget/pager.c +++ b/src/modules/pager/gadget/pager.c @@ -317,12 +317,29 @@ static void _pager_gadget_anchor_change_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { Instance *inst = data; + Eina_Bool invert; if (inst->pager && inst->o_pager) { - _pager_orient(inst, e_gadget_site_orient_get(obj)); - _pager_empty(inst->pager); - _pager_fill(inst->pager); + switch (e_gadget_site_orient_get(obj)) + { + case E_GADGET_SITE_ORIENT_HORIZONTAL: + invert = EINA_FALSE; + break; + + case E_GADGET_SITE_ORIENT_VERTICAL: + invert = EINA_TRUE; + break; + + default: + invert = EINA_FALSE; + } + if (invert != inst->pager->invert) + { + _pager_orient(inst, e_gadget_site_orient_get(obj)); + _pager_empty(inst->pager); + _pager_fill(inst->pager); + } } } @@ -697,8 +714,11 @@ _pager_desk_free(Pager_Desk *pd) pd->drop_handler = NULL; evas_object_del(pd->o_desk); evas_object_del(pd->o_layout); - EINA_LIST_FREE(pd->wins, w) - _pager_window_free(w); + if (pd->wins) + { + EINA_LIST_FREE(pd->wins, w) + _pager_window_free(w); + } e_object_unref(E_OBJECT(pd->desk)); free(pd); } @@ -1754,18 +1774,57 @@ _pager_cb_event_client_property(void *data EINA_UNUSED, int type EINA_UNUSED, vo static Eina_Bool _pager_cb_event_zone_desk_count_set(void *data EINA_UNUSED, int type EINA_UNUSED, E_Event_Zone_Desk_Count_Set *ev) { + E_Desk *desk; Eina_List *l; Pager *p; + Pager_Desk *pd = NULL; + int x, y, xx, yy; + xx = ev->zone->desk_x_count; + yy = ev->zone->desk_y_count; EINA_LIST_FOREACH(pagers, l, p) { - if ((ev->zone->desk_x_count == p->xnum) && - (ev->zone->desk_y_count == p->ynum)) continue; - _pager_empty(p); - _pager_fill(p); + if ((xx == p->xnum) && (yy == p->ynum)) + continue; + for (x = 0; x < xx; x++) + { + for (y = 0; y < yy; y++) + { + if ((x >= p->xnum) || (y >= p->ynum)) + { + desk = e_desk_at_xy_get(p->zone, x, y); + if (desk) + pd = _pager_desk_new(p, desk, x, y, p->invert); + if (pd) + p->desks = eina_list_append(p->desks, pd); + } + } + } + if (xx < p->xnum) + { + for (y = 0; y < yy; y++) + { + for (x = xx; x < p->xnum; x++) + { + pd = eina_list_nth(p->desks, x + (y * p->xnum)); + _pager_desk_free(pd); + } + } + } + if (yy < p->ynum) + { + for (x = 0; x < xx; x++) + { + for (y = yy; y < p->ynum; y++) + { + pd = eina_list_nth(p->desks, x + (y * p->xnum)); + _pager_desk_free(pd); + } + } + } + e_zone_desk_count_get(p->zone, &(p->xnum), &(p->ynum)); if (p->inst) _pager_orient(p->inst, e_gadget_site_orient_get(e_gadget_site_get(p->inst->o_pager))); } - return ECORE_CALLBACK_PASS_ON; } --