Bugfix: e fileman: Correct automagic window size computation.

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.
This commit is contained in:
Chidambar Zinnoury 2014-04-21 21:54:15 +02:00
parent 233347209d
commit b4a58ad874
3 changed files with 17 additions and 12 deletions

View 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;
}

View 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);

View 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;