+2008-12-09 Alejandro G. Castro <alex@igalia.com>
+
+ * src/hildon-pannable_area.h:
+ * src/hildon-pannable_area.c:
+ (hildon_pannable_area_class_init),
+ (hildon_pannable_area_set_property),
+ (hildon_pannable_area_get_property),
+ (hildon_pannable_area_size_request),
+ (hildon_pannable_area_get_size_request_policy),
+ (hildon_pannable_area_set_size_request_policy): Added new API
+ allowing applications to control the request policy. Now they can
+ choose to use the minimum (HILDON_MOVEMENT_MINIMUM) size or the
+ children allocation (HILDON_MOVEMENT_CHILDREN).
+
2008-12-09 Alberto Garcia <agarcia@igalia.com>
* src/hildon-gtk.h
gboolean initial_effect;
gboolean first_drag;
+ gboolean size_request_policy;
gboolean hscroll_visible;
gboolean vscroll_visible;
GdkRectangle hscroll_rect;
PROP_VOVERSHOOT_MAX,
PROP_HOVERSHOOT_MAX,
PROP_SCROLL_TIME,
- PROP_INITIAL_HINT
+ PROP_INITIAL_HINT,
+ PROP_SIZE_REQUEST_POLICY,
+ PROP_LAST
};
static void hildon_pannable_area_class_init (HildonPannableAreaClass * klass);
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
+ g_object_class_install_property (object_class,
+ PROP_SIZE_REQUEST_POLICY,
+ g_param_spec_enum ("size-request-policy",
+ "Size Requisition policy",
+ "Controls the size request policy of the widget",
+ HILDON_TYPE_SIZE_REQUEST_POLICY,
+ HILDON_SIZE_REQUEST_MINIMUM,
+ G_PARAM_READWRITE|
+ G_PARAM_CONSTRUCT));
+
gtk_widget_class_install_style_property (widget_class,
g_param_spec_uint
("indicator-width",
case PROP_INITIAL_HINT:
g_value_set_boolean (value, priv->initial_hint);
break;
+ case PROP_SIZE_REQUEST_POLICY:
+ g_value_set_enum (value, priv->size_request_policy);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
case PROP_INITIAL_HINT:
priv->initial_hint = g_value_get_boolean (value);
break;
+ case PROP_SIZE_REQUEST_POLICY:
+ hildon_pannable_area_set_size_request_policy (HILDON_PANNABLE_AREA (object),
+ g_value_get_enum (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
if (priv->hscrollbar_policy == GTK_POLICY_NEVER) {
requisition->width = child_requisition.width;
} else {
- requisition->width = priv->area_width;
+ switch (priv->size_request_policy) {
+ case HILDON_SIZE_REQUEST_CHILDREN:
+ requisition->width = child_requisition.width;
+ break;
+ case HILDON_SIZE_REQUEST_MINIMUM:
+ default:
+ requisition->width = priv->area_width;
+ }
}
if (priv->vscrollbar_policy == GTK_POLICY_NEVER) {
requisition->height = child_requisition.height;
} else {
- requisition->height = priv->area_width;
+ switch (priv->size_request_policy) {
+ case HILDON_SIZE_REQUEST_CHILDREN:
+ requisition->height = child_requisition.height;
+ break;
+ case HILDON_SIZE_REQUEST_MINIMUM:
+ default:
+ requisition->height = priv->area_width;
+ }
}
requisition->width += 2 * GTK_CONTAINER (widget)->border_width;
return child_widget;
}
+
+/**
+ * hildon_pannable_area_get_size_request_policy:
+ * @area: A #HildonPannableArea.
+ *
+ * This function returns the current size request policy of the
+ * widget. That policy controls the way the size_request is done in
+ * the pannable area. Check
+ * hildon_pannable_area_set_size_request_policy() for a more detailed
+ * explanation.
+ *
+ * returns: the policy is currently being used in the widget
+ * #HildonSizeRequestPolicy.
+ **/
+HildonSizeRequestPolicy
+hildon_pannable_area_get_size_request_policy (HildonPannableArea *area)
+{
+ HildonPannableAreaPrivate *priv;
+
+ g_return_val_if_fail (HILDON_IS_PANNABLE_AREA (area), FALSE);
+
+ priv = area->priv;
+
+ return priv->size_request_policy;
+}
+
+/**
+ * hildon_pannable_area_set_size_request_policy:
+ * @area: A #HildonPannableArea.
+ * @size_request_policy: One of the allowed policies
+ * #HildonSizeRequestPolicy
+ *
+ * This function sets the pannable area size request policy. That
+ * policy controls the way the size_request is done in the pannable
+ * area. Pannable can use the size request of its children
+ * (#HILDON_SIZE_REQUEST_CHILDREN) or the minimum size required for
+ * the area itself (#HILDON_SIZE_REQUEST_MINIMUM), the latter is the
+ * default. Recall this size depends on the scrolling policy you are
+ * requesting to the pannable area, if you set #GTK_POLICY_NEVER this
+ * parameter will not have any effect with
+ * #HILDON_SIZE_REQUEST_MINIMUM set.
+ *
+ **/
+void
+hildon_pannable_area_set_size_request_policy (HildonPannableArea *area,
+ HildonSizeRequestPolicy size_request_policy)
+{
+ HildonPannableAreaPrivate *priv;
+
+ g_return_if_fail (HILDON_IS_PANNABLE_AREA (area));
+
+ priv = area->priv;
+
+ if (priv->size_request_policy == size_request_policy)
+ return;
+
+ priv->size_request_policy = size_request_policy;
+
+ gtk_widget_queue_resize (GTK_WIDGET (area));
+
+ g_object_notify (G_OBJECT (area), "size-request-policy");
+}
+