make GtkContainer use RI

Use min/max for GtkContainer

fixed gtkcontainer.c
This commit is contained in:
David Zeuthen
2008-08-12 17:46:15 -04:00
committed by Davyd Madeley
parent c07c77a489
commit 954890278f
4 changed files with 70 additions and 13 deletions

View File

@@ -1033,6 +1033,7 @@ gtk_container_unset_focus_chain
gtk_container_class_find_child_property
gtk_container_class_install_child_property
gtk_container_class_list_child_properties
gtk_container_get_border_width_unit
<SUBSECTION Standard>
GTK_CONTAINER
GTK_IS_CONTAINER

View File

@@ -1006,6 +1006,7 @@ gtk_container_set_focus_vadjustment
gtk_container_set_reallocate_redraws
gtk_container_set_resize_mode
gtk_container_unset_focus_chain
gtk_container_get_border_width_unit
#endif
#endif

View File

@@ -58,6 +58,13 @@ enum {
PROP_CHILD
};
#define GTK_CONTAINER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_CONTAINER, GtkContainerPrivate))
struct _GtkContainerPrivate
{
GtkUSize border_width_unit;
};
#define PARAM_SPEC_PARAM_ID(pspec) ((pspec)->param_id)
#define PARAM_SPEC_SET_PARAM_ID(pspec, id) ((pspec)->param_id = (id))
@@ -101,6 +108,8 @@ static void gtk_container_unmap (GtkWidget *widget);
static gchar* gtk_container_child_default_composite_name (GtkContainer *container,
GtkWidget *child);
static void gtk_container_unit_changed (GtkWidget *widget);
/* GtkBuildable */
static void gtk_container_buildable_init (GtkBuildableIface *iface);
static void gtk_container_buildable_add_child (GtkBuildable *buildable,
@@ -223,6 +232,7 @@ gtk_container_class_init (GtkContainerClass *class)
widget_class->map = gtk_container_map;
widget_class->unmap = gtk_container_unmap;
widget_class->focus = gtk_container_focus;
widget_class->unit_changed = gtk_container_unit_changed;
class->add = gtk_container_add_unimplemented;
class->remove = gtk_container_remove_unimplemented;
@@ -242,13 +252,11 @@ gtk_container_class_init (GtkContainerClass *class)
GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_BORDER_WIDTH,
g_param_spec_uint ("border-width",
P_("Border width"),
P_("The width of the empty border outside the containers children"),
0,
G_MAXINT,
0,
GTK_PARAM_READWRITE));
gtk_param_spec_usize ("border-width",
P_("Border width"),
P_("The width of the empty border outside the containers children"),
0, G_MAXINT, 0,
GTK_PARAM_READWRITE));
g_object_class_install_property (gobject_class,
PROP_CHILD,
g_param_spec_object ("child",
@@ -291,6 +299,8 @@ gtk_container_class_init (GtkContainerClass *class)
_gtk_marshal_VOID__OBJECT,
G_TYPE_NONE, 1,
GTK_TYPE_WIDGET);
g_type_class_add_private (gobject_class, sizeof (GtkContainerPrivate));
}
static void
@@ -1042,8 +1052,10 @@ gtk_container_remove_unimplemented (GtkContainer *container,
static void
gtk_container_init (GtkContainer *container)
{
GtkContainerPrivate *priv = GTK_CONTAINER_GET_PRIVATE (container);
container->focus_child = NULL;
container->border_width = 0;
priv->border_width_unit = 0;
container->need_resize = FALSE;
container->resize_mode = GTK_RESIZE_PARENT;
container->reallocate_redraws = FALSE;
@@ -1079,7 +1091,7 @@ gtk_container_set_property (GObject *object,
switch (prop_id)
{
case PROP_BORDER_WIDTH:
gtk_container_set_border_width (container, g_value_get_uint (value));
gtk_container_set_border_width (container, gtk_value_get_usize (value));
break;
case PROP_RESIZE_MODE:
gtk_container_set_resize_mode (container, g_value_get_enum (value));
@@ -1100,11 +1112,12 @@ gtk_container_get_property (GObject *object,
GParamSpec *pspec)
{
GtkContainer *container = GTK_CONTAINER (object);
GtkContainerPrivate *priv = GTK_CONTAINER_GET_PRIVATE (container);
switch (prop_id)
{
case PROP_BORDER_WIDTH:
g_value_set_uint (value, container->border_width);
gtk_value_set_usize (value, priv->border_width_unit, container);
break;
case PROP_RESIZE_MODE:
g_value_set_enum (value, container->resize_mode);
@@ -1134,13 +1147,18 @@ gtk_container_get_property (GObject *object,
**/
void
gtk_container_set_border_width (GtkContainer *container,
guint border_width)
GtkUSize border_width)
{
GtkContainerPrivate *priv;
g_return_if_fail (GTK_IS_CONTAINER (container));
if (container->border_width != border_width)
priv = GTK_CONTAINER_GET_PRIVATE (container);
if (priv->border_width_unit != border_width)
{
container->border_width = border_width;
container->border_width = gtk_widget_size_to_pixel (container, border_width);
priv->border_width_unit = border_width;
g_object_notify (G_OBJECT (container), "border-width");
if (GTK_WIDGET_REALIZED (container))
@@ -1165,6 +1183,28 @@ gtk_container_get_border_width (GtkContainer *container)
return container->border_width;
}
/**
* gtk_container_get_border_width_unit:
* @container: a #GtkContainer
*
* Like gtk_container_get_border_width() but preserves the unit.
*
* Return value: the current border width
*
* Since: 2.14
**/
GtkUSize
gtk_container_get_border_width_unit (GtkContainer *container)
{
GtkContainerPrivate *priv;
g_return_val_if_fail (GTK_IS_CONTAINER (container), 0);
priv = GTK_CONTAINER_GET_PRIVATE (container);
return priv->border_width_unit;
}
/**
* gtk_container_add:
* @container: a #GtkContainer
@@ -2734,5 +2774,18 @@ gtk_container_propagate_expose (GtkContainer *container,
}
}
static void
gtk_container_unit_changed (GtkWidget *widget)
{
GtkContainer *container = GTK_CONTAINER (widget);
GtkContainerPrivate *priv = GTK_CONTAINER_GET_PRIVATE (container);
container->border_width = gtk_widget_size_to_pixel (container, priv->border_width_unit);
/* must chain up */
if (GTK_WIDGET_CLASS (parent_class)->unit_changed != NULL)
GTK_WIDGET_CLASS (parent_class)->unit_changed (widget);
}
#define __GTK_CONTAINER_C__
#include "gtkaliasdef.c"

View File

@@ -50,6 +50,7 @@ G_BEGIN_DECLS
typedef struct _GtkContainer GtkContainer;
typedef struct _GtkContainerClass GtkContainerClass;
typedef struct _GtkContainerPrivate GtkContainerPrivate;
struct _GtkContainer
{
@@ -106,8 +107,9 @@ struct _GtkContainerClass
GType gtk_container_get_type (void) G_GNUC_CONST;
void gtk_container_set_border_width (GtkContainer *container,
guint border_width);
GtkUSize border_width);
guint gtk_container_get_border_width (GtkContainer *container);
GtkUSize gtk_container_get_border_width_unit (GtkContainer *container);
void gtk_container_add (GtkContainer *container,
GtkWidget *widget);
void gtk_container_remove (GtkContainer *container,