elementary/gengrid - fixed a bug by jh0506.yun@samsung.com
authorhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 3 Mar 2011 13:01:39 +0000 (13:01 +0000)
committerhermet <hermet@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 3 Mar 2011 13:01:39 +0000 (13:01 +0000)
Hello.

I attached the modified patch about calc_job problem.

When I tested gengrid, sometimes gengrid renderd two times in different
shape in a moment.
So I checked gengrid code, I found cause in calc_job function.

calc_job added to ecore job after elm_gengrid_item_size_set and
elm_gengrid_item_append(,prepend,insert_before,insert_after) and etc.
Sometimes pan_smart's cvw and cvh is 0 at this time.

I think, No need to calc_job when pan_smart's cvw and cvh is 0.

Please check about this patch.

Thanks.

git-svn-id: https://svn.enlightenment.org/svn/e/trunk/elementary@57491 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_gengrid.c

index 0a65596..5227363 100644 (file)
@@ -1281,36 +1281,39 @@ _calc_job(void *data)
    int count;
 
    evas_object_geometry_get(wd->pan_smart, NULL, NULL, &cvw, &cvh);
-   if ((wd->horizontal) && (wd->item_height > 0))
-     nmax = cvh / wd->item_height;
-   else if (wd->item_width > 0)
-     nmax = cvw / wd->item_width;
+   if ((cvw != 0) || (cvh != 0))
+     {
+        if ((wd->horizontal) && (wd->item_height > 0))
+          nmax = cvh / wd->item_height;
+        else if (wd->item_width > 0)
+          nmax = cvw / wd->item_width;
 
-   if (nmax < 1)
-     nmax = 1;
+        if (nmax < 1)
+          nmax = 1;
 
-   count = wd->count;
-   if (wd->horizontal)
-     {
-        minw = ceil(count / (float)nmax) * wd->item_width;
-        minh = nmax * wd->item_height;
-     }
-   else
-     {
-        minw = nmax * wd->item_width;
-        minh = ceil(count / (float)nmax) * wd->item_height;
-     }
+        count = wd->count;
+        if (wd->horizontal)
+          {
+             minw = ceil(count / (float)nmax) * wd->item_width;
+             minh = nmax * wd->item_height;
+          }
+        else
+          {
+             minw = nmax * wd->item_width;
+             minh = ceil(count / (float)nmax) * wd->item_height;
+          }
 
-   if ((minw != wd->minw) || (minh != wd->minh))
-     {
-        wd->minh = minh;
-        wd->minw = minw;
-        evas_object_smart_callback_call(wd->pan_smart, "changed", NULL);
-     }
+        if ((minw != wd->minw) || (minh != wd->minh))
+          {
+             wd->minh = minh;
+             wd->minw = minw;
+             evas_object_smart_callback_call(wd->pan_smart, "changed", NULL);
+          }
 
-   wd->nmax = nmax;
-   wd->calc_job = NULL;
-   evas_object_smart_changed(wd->pan_smart);
+        wd->nmax = nmax;
+        wd->calc_job = NULL;
+        evas_object_smart_changed(wd->pan_smart);
+     }
 }
 
 static void