This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository enlightenment.

View the commit online.

commit 880246a3141b5d6da91379b72dd4c06ef59ca358
Author: Carsten Haitzler <ras...@rasterman.com>
AuthorDate: Fri Feb 14 10:57:24 2025 +0000

    winlist - optimize layout impl to be a bit faster
---
 src/modules/winlist/e_winlist.c | 49 +++++++++++++++++++++++++++++++++++------
 1 file changed, 42 insertions(+), 7 deletions(-)

diff --git a/src/modules/winlist/e_winlist.c b/src/modules/winlist/e_winlist.c
index d997d5f54..0b7c3442f 100644
--- a/src/modules/winlist/e_winlist.c
+++ b/src/modules/winlist/e_winlist.c
@@ -743,12 +743,23 @@ _e_winlist_size_list_adjust(void)
    evas_object_geometry_set(_winlist, x, y, w, h);
 }
 
+typedef struct
+{
+  int padw, padh;
+} Calc_Pad;
+
+static void
+_cb_calcpad_del(void *data, Evas *e EINA_UNUSED, Evas_Object *o EINA_UNUSED, void *info EINA_UNUSED)
+{
+  free(data);
+}
+
 static int
 _e_winlist_large_item_height_set(Evas_Coord h)
 {
    E_Winlist_Win *ww;
    Eina_List *l, *boxes, *bl;
-   Evas_Coord mw, mh, lw, lh;
+   Evas_Coord mw, mh, mw2, mh2, lw, lh;
    Evas_Object *o, *box;
    int rows = 1;
    int rowlen = 0;
@@ -764,6 +775,8 @@ _e_winlist_large_item_height_set(Evas_Coord h)
    if (!bl) return 0;
    EINA_LIST_FOREACH(_wins, l, ww)
      {
+        Calc_Pad *calcpad;
+
         mh = h;
         if (mh > ww->client->h)
           mh = ww->client->h;
@@ -771,12 +784,34 @@ _e_winlist_large_item_height_set(Evas_Coord h)
           mw = (ww->client->w * mh) / ww->client->h;
         else
           mw = mh;
-        edje_object_part_unswallow(ww->bg_object, ww->win_object);
-        evas_object_size_hint_min_set(ww->win_object, mw, mh);
-        evas_object_size_hint_max_set(ww->win_object, mw, mh);
-        edje_object_part_swallow(ww->bg_object, "e.swallow.win", ww->win_object);
-        edje_object_size_min_calc(ww->bg_object, &mw, &mh);
-        evas_object_size_hint_min_set(ww->bg_object, mw, mh);
+        calcpad = evas_object_data_get(ww->bg_object, "cpad");
+        if (!calcpad)
+         {
+           evas_object_size_hint_min_set(ww->win_object, mw, mh);
+           evas_object_size_hint_max_set(ww->win_object, mw, mh);
+           edje_object_part_swallow(ww->bg_object, "e.swallow.win", ww->win_object);
+           edje_object_size_min_calc(ww->bg_object, &mw2, &mh2);
+           calcpad = malloc(sizeof(Calc_Pad));
+           if (calcpad)
+             {
+               calcpad->padw = mw2 - mw;
+               calcpad->padh = mh2 - mh;
+               evas_object_data_set(ww->bg_object, "cpad", calcpad);
+               evas_object_event_callback_add(ww->bg_object, EVAS_CALLBACK_DEL, _cb_calcpad_del, calcpad);
+             }
+           mw = mw2;
+           mh = mh2;
+           evas_object_size_hint_min_set(ww->bg_object, mw, mh);
+           evas_object_size_hint_min_set(ww->win_object, 0, 0);
+           evas_object_size_hint_max_set(ww->win_object, -1, -1);
+           edje_object_part_swallow(ww->bg_object, "e.swallow.win", ww->win_object);
+         }
+       else
+         {
+           mw += calcpad->padw;
+           mh += calcpad->padh;
+           evas_object_size_hint_min_set(ww->bg_object, mw, mh);
+         }
         rowlen += mw;
         if ((rowlen > lw) && (mw != rowlen))
           {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to