Bugfix: e fileman: Correct automagic window size computation.
authorChidambar Zinnoury <chidambar.zinnoury@zefla.fr>
Mon, 21 Apr 2014 19:54:15 +0000 (21:54 +0200)
committerChidambar Zinnoury <chidambar.zinnoury@zefla.fr>
Mon, 21 Apr 2014 19:54:15 +0000 (21:54 +0200)
 When available width is less than minimum width, the height was computed according to the available width, but the window width was effectively the minimum width: its height was thus more than needed.

 The function now takes the minimum dimensions so that correct height and width are computed.

src/bin/e_fm.c
src/bin/e_fm.h
src/modules/fileman/e_fwin.c

index 0028ae2..7d5c20a 100644 (file)
@@ -11470,34 +11470,39 @@ e_fm2_operation_abort(int id)
 }
 
 EAPI Eina_Bool
-e_fm2_optimal_size_calc(Evas_Object *obj, int maxw, int maxh, int *w, int *h)
+e_fm2_optimal_size_calc(Evas_Object *obj, int minw, int minh, int maxw, int maxh, int *w, int *h)
 {
-   int x, y, minw, minh;
+   int x, y, step_w, step_h;
    EFM_SMART_CHECK(EINA_FALSE);
    if ((!w) || (!h)) return EINA_FALSE;
    if (!sd->icons) return EINA_FALSE;
    if (maxw < 0) maxw = 0;
    if (maxh < 0) maxh = 0;
-   minw = sd->min.w + 5, minh = sd->min.h + 5;
+   step_w = sd->min.w + 5, step_h = sd->min.h + 5;
    switch (_e_fm2_view_mode_get(sd))
      {
       case E_FM2_VIEW_MODE_LIST:
-        *w = MIN(minw, maxw);
-        *h = MIN(minh * eina_list_count(sd->icons), (unsigned int)maxh);
+        *w = MIN(step_w, maxw);
+        *h = MIN(step_h * eina_list_count(sd->icons), (unsigned int)maxh);
         return EINA_TRUE;
 
       default:
         break;
      }
    y = x = (int)sqrt(eina_list_count(sd->icons));
-   if (maxw && (x * minw > maxw))
+   if (maxw && (x * step_w > maxw))
      {
-        x = maxw / minw;
-        y = (eina_list_count(sd->icons) / x) + ((maxw % minw) ? 1 : 0);
+        x = maxw / step_w;
+        y = (eina_list_count(sd->icons) / x) + ((maxw % step_w) ? 1 : 0);
      }
-   *w = minw * x;
+   if (minw && (x * step_w < minw))
+     {
+        x = minw / step_w;
+        y = (eina_list_count(sd->icons) / x) + ((minw % step_w) ? 1 : 0);
+     }
+   *w = step_w * x;
    *w = MIN(*w, maxw);
-   *h = minh * y;
+   *h = step_h * y;
    *h = MIN(*h, maxh);
    return EINA_TRUE;
 }
index ed66421..2a07d54 100644 (file)
@@ -203,7 +203,7 @@ EAPI void             e_fm2_overlay_clip_to(Evas_Object *fm, Evas_Object *clip);
 EAPI void             e_fm2_client_data(Ecore_Ipc_Event_Client_Data *e);
 EAPI void             e_fm2_client_del(Ecore_Ipc_Event_Client_Del *e);
 EAPI E_Fm2_View_Mode  e_fm2_view_mode_get(Evas_Object *obj);
-EAPI Eina_Bool        e_fm2_optimal_size_calc(Evas_Object *obj, int maxw, int maxh, int *w, int *h);
+EAPI Eina_Bool        e_fm2_optimal_size_calc(Evas_Object *obj, int minw, int minh, int maxw, int maxh, int *w, int *h);
 EAPI const char      *e_fm2_real_path_map(const char *dev, const char *path);
 EAPI void             e_fm2_favorites_init(void);
 EAPI unsigned int     e_fm2_selected_count(Evas_Object *obj);
index ab31ad5..6203ef5 100644 (file)
@@ -654,7 +654,7 @@ _e_fwin_bg_mouse_down(E_Fwin *fwin, Evas_Object *obj __UNUSED__, void *event __U
    if (fwin->win->client->fullscreen) e_client_unfullscreen(fwin->win->client);
    e_zone_useful_geometry_get(fwin->win->client->zone, &zx, &zy, &zw, &zh);
    x = fwin->win->client->x, y = fwin->win->client->y;
-   if (!e_fm2_optimal_size_calc(fwin->cur_page->fm_obj, zw + zx - x, zh + zy - y, &w, &h)) return;
+   if (!e_fm2_optimal_size_calc(fwin->cur_page->fm_obj, MINIMUM_WIDTH, MINIMUM_HEIGHT, zw + zx - x, zh + zy - y, &w, &h)) return;
    evas_object_geometry_get(fwin->cur_page->fm_obj, &cx, &cy, &cw, &ch);
    if (x + w > zx + zw)
      w = zx + zw - x;