forked from enlightenment/efl
fix evil scroller self-feeing loop scrollbar sizing issues.
SVN revision: 74041
This commit is contained in:
parent
3250310508
commit
e73440197e
|
@ -312,3 +312,9 @@
|
|||
|
||||
* Disable html mode pastes from cnp to work around thunderbird.
|
||||
|
||||
2012-07-18 Carsten Haitzler (The Rasterman)
|
||||
|
||||
* Fix evil little bug where scrolelrs with scrollbars make
|
||||
self-feeding loops expecially with min size hints on scrollers (which
|
||||
the change in smart object infra broke too - fixed here).
|
||||
|
||||
|
|
|
@ -576,45 +576,56 @@ _elm_scroll_scroll_bar_h_visibility_adjust(
|
|||
evas_object_geometry_get(sid->pan_obj, NULL, NULL, &vw, &vh);
|
||||
if (sid->hbar_visible)
|
||||
{
|
||||
if (sid->hbar_flags == ELM_SCROLLER_POLICY_AUTO)
|
||||
if (sid->min_w)
|
||||
{
|
||||
if ((sid->content) || (sid->extern_pan))
|
||||
scroll_h_vis_change = 1;
|
||||
sid->hbar_visible = EINA_FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sid->hbar_flags == ELM_SCROLLER_POLICY_AUTO)
|
||||
{
|
||||
if (w <= vw)
|
||||
if ((sid->content) || (sid->extern_pan))
|
||||
{
|
||||
if (w <= vw)
|
||||
{
|
||||
scroll_h_vis_change = 1;
|
||||
sid->hbar_visible = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
scroll_h_vis_change = 1;
|
||||
sid->hbar_visible = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (sid->hbar_flags == ELM_SCROLLER_POLICY_OFF)
|
||||
{
|
||||
scroll_h_vis_change = 1;
|
||||
sid->hbar_visible = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
else if (sid->hbar_flags == ELM_SCROLLER_POLICY_OFF)
|
||||
{
|
||||
scroll_h_vis_change = 1;
|
||||
sid->hbar_visible = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sid->hbar_flags == ELM_SCROLLER_POLICY_AUTO)
|
||||
if (!sid->min_w)
|
||||
{
|
||||
if ((sid->content) || (sid->extern_pan))
|
||||
if (sid->hbar_flags == ELM_SCROLLER_POLICY_AUTO)
|
||||
{
|
||||
if (w > vw)
|
||||
if ((sid->content) || (sid->extern_pan))
|
||||
{
|
||||
scroll_h_vis_change = 1;
|
||||
sid->hbar_visible = EINA_TRUE;
|
||||
if (w > vw)
|
||||
{
|
||||
scroll_h_vis_change = 1;
|
||||
sid->hbar_visible = EINA_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (sid->hbar_flags == ELM_SCROLLER_POLICY_ON)
|
||||
{
|
||||
scroll_h_vis_change = 1;
|
||||
sid->hbar_visible = EINA_TRUE;
|
||||
else if (sid->hbar_flags == ELM_SCROLLER_POLICY_ON)
|
||||
{
|
||||
scroll_h_vis_change = 1;
|
||||
sid->hbar_visible = EINA_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (scroll_h_vis_change)
|
||||
|
@ -627,13 +638,13 @@ _elm_scroll_scroll_bar_h_visibility_adjust(
|
|||
else
|
||||
edje_object_signal_emit
|
||||
(sid->edje_obj, "elm,action,hide,hbar", "elm");
|
||||
edje_object_message_signal_process(sid->edje_obj);
|
||||
_elm_scroll_scroll_bar_size_adjust(sid);
|
||||
}
|
||||
else
|
||||
edje_object_signal_emit
|
||||
(sid->edje_obj, "elm,action,hide,hbar", "elm");
|
||||
edje_object_message_signal_process(sid->edje_obj);
|
||||
_elm_scroll_scroll_bar_size_adjust(sid);
|
||||
elm_layout_sizing_eval(sid->obj);
|
||||
}
|
||||
|
||||
return scroll_h_vis_change;
|
||||
|
@ -653,45 +664,56 @@ _elm_scroll_scroll_bar_v_visibility_adjust(
|
|||
evas_object_geometry_get(sid->pan_obj, NULL, NULL, &vw, &vh);
|
||||
if (sid->vbar_visible)
|
||||
{
|
||||
if (sid->vbar_flags == ELM_SCROLLER_POLICY_AUTO)
|
||||
if (sid->min_h)
|
||||
{
|
||||
if ((sid->content) || (sid->extern_pan))
|
||||
scroll_v_vis_change = 1;
|
||||
sid->vbar_visible = EINA_FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sid->vbar_flags == ELM_SCROLLER_POLICY_AUTO)
|
||||
{
|
||||
if (h <= vh)
|
||||
if ((sid->content) || (sid->extern_pan))
|
||||
{
|
||||
if (h <= vh)
|
||||
{
|
||||
scroll_v_vis_change = 1;
|
||||
sid->vbar_visible = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
scroll_v_vis_change = 1;
|
||||
sid->vbar_visible = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (sid->vbar_flags == ELM_SCROLLER_POLICY_OFF)
|
||||
{
|
||||
scroll_v_vis_change = 1;
|
||||
sid->vbar_visible = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
else if (sid->vbar_flags == ELM_SCROLLER_POLICY_OFF)
|
||||
{
|
||||
scroll_v_vis_change = 1;
|
||||
sid->vbar_visible = EINA_FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sid->vbar_flags == ELM_SCROLLER_POLICY_AUTO)
|
||||
if (!sid->min_h)
|
||||
{
|
||||
if ((sid->content) || (sid->extern_pan))
|
||||
if (sid->vbar_flags == ELM_SCROLLER_POLICY_AUTO)
|
||||
{
|
||||
if (h > vh)
|
||||
if ((sid->content) || (sid->extern_pan))
|
||||
{
|
||||
scroll_v_vis_change = 1;
|
||||
sid->vbar_visible = EINA_TRUE;
|
||||
if (h > vh)
|
||||
{
|
||||
scroll_v_vis_change = 1;
|
||||
sid->vbar_visible = EINA_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (sid->vbar_flags == ELM_SCROLLER_POLICY_ON)
|
||||
{
|
||||
scroll_v_vis_change = 1;
|
||||
sid->vbar_visible = EINA_TRUE;
|
||||
else if (sid->vbar_flags == ELM_SCROLLER_POLICY_ON)
|
||||
{
|
||||
scroll_v_vis_change = 1;
|
||||
sid->vbar_visible = EINA_TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (scroll_v_vis_change)
|
||||
|
@ -704,13 +726,13 @@ _elm_scroll_scroll_bar_v_visibility_adjust(
|
|||
else
|
||||
edje_object_signal_emit
|
||||
(sid->edje_obj, "elm,action,hide,vbar", "elm");
|
||||
|
||||
edje_object_message_signal_process(sid->edje_obj);
|
||||
_elm_scroll_scroll_bar_size_adjust(sid);
|
||||
}
|
||||
else
|
||||
edje_object_signal_emit
|
||||
(sid->edje_obj, "elm,action,hide,vbar", "elm");
|
||||
edje_object_message_signal_process(sid->edje_obj);
|
||||
_elm_scroll_scroll_bar_size_adjust(sid);
|
||||
elm_layout_sizing_eval(sid->obj);
|
||||
}
|
||||
|
||||
return scroll_v_vis_change;
|
||||
|
@ -990,8 +1012,8 @@ _elm_scroll_content_min_limit(Evas_Object *obj,
|
|||
{
|
||||
ELM_SCROLL_IFACE_DATA_GET_OR_RETURN(obj, sid);
|
||||
|
||||
if (!sid->pan_obj || !sid->edje_obj) return;
|
||||
|
||||
if (!sid->edje_obj) return;
|
||||
|
||||
if (!sid->cb_func.content_min_limit)
|
||||
{
|
||||
ERR("Content minimim size limiting is unimplemented -- you "
|
||||
|
@ -999,6 +1021,8 @@ _elm_scroll_content_min_limit(Evas_Object *obj,
|
|||
return;
|
||||
}
|
||||
|
||||
sid->min_w = !!w;
|
||||
sid->min_h = !!h;
|
||||
sid->cb_func.content_min_limit(obj, w, h);
|
||||
}
|
||||
|
||||
|
@ -3537,8 +3561,9 @@ _elm_scroll_policy_set(Evas_Object *obj,
|
|||
else
|
||||
edje_object_signal_emit
|
||||
(sid->edje_obj, "elm,action,show_notalways,vbar", "elm");
|
||||
|
||||
edje_object_message_signal_process(sid->edje_obj);
|
||||
_elm_scroll_scroll_bar_size_adjust(sid);
|
||||
elm_layout_sizing_eval(sid->obj);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -301,6 +301,8 @@ struct _Elm_Scrollable_Smart_Interface_Data
|
|||
Eina_Bool bouncemex : 1;
|
||||
Eina_Bool freeze : 1;
|
||||
Eina_Bool hold : 1;
|
||||
Eina_Bool min_w : 1;
|
||||
Eina_Bool min_h : 1;
|
||||
};
|
||||
|
||||
typedef struct _Elm_Scrollable_Smart_Interface Elm_Scrollable_Smart_Interface;
|
||||
|
|
|
@ -341,7 +341,7 @@ _elm_scroller_smart_sizing_eval(Evas_Object *obj)
|
|||
|
||||
if (sd->min_w) w = vmw + minw;
|
||||
if (sd->min_h) h = vmh + minh;
|
||||
|
||||
|
||||
evas_object_size_hint_max_get(obj, &maxw, &maxh);
|
||||
if ((maxw > 0) && (w > maxw)) w = maxw;
|
||||
if ((maxh > 0) && (h > maxh)) h = maxh;
|
||||
|
|
Loading…
Reference in New Issue