forked from enlightenment/enlightenment
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:
parent
233347209d
commit
b4a58ad874
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue