summaryrefslogtreecommitdiff
path: root/gtk/gtkbox.c
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>2001-06-19 12:54:10 +0000
committerTim Janik <timj@src.gnome.org>2001-06-19 12:54:10 +0000
commit5ebd1d022ac2fa4f32f4cdf218efd62c7ffaf323 (patch)
tree7591b5b7e706dde79cd2f8bd62f2eb98d0c3baa6 /gtk/gtkbox.c
parent07ddd35c5710631b349c4517b4be4705b4438d08 (diff)
downloadgtk+-5ebd1d022ac2fa4f32f4cdf218efd62c7ffaf323.tar.gz
fix PROP_EVENTS.
Mon Jun 18 02:00:49 2001 Tim Janik <timj@gtk.org> * gtk/gtkwidget.c (gtk_widget_get_property): fix PROP_EVENTS. * gtk/Makefile.am: * gtk/gtk.h: disabled GtkPacker compilation. * gtk/gtkarg.[hc], gtk/gtkargcollector.c: got rid of these. * gtk/gtknotebook.c: * gtk/gtktable.c: * gtk/gtkbox.c: ported this over to child properties. * gtk/gtksettings.c: fetch class properties via g_object_class_list_properties(). * gtk/gtkcontainer.[hc]: implemented child properties, got rid of the child arg interface. use gobjectnotifyqueue.c for child property notification. * gtk/gtkwidget.[hc]: provide necessary means for container child properties, i.e. ::child_notify signal, gtk_widget_freeze_child_notify(), gtk_widget_child_notify(), gtk_widget_thaw_child_notify(). * tests/testgtk.c: removed inferior property handling code, for property editing, a generic module should be used, and GLE coincidentally fullfills that purpose. * docs/reference/Makefile.am: disabled gtk docs building, gtk-doc needs to be adapted to g_object_class_list_properties() before this builds again.
Diffstat (limited to 'gtk/gtkbox.c')
-rw-r--r--gtk/gtkbox.c200
1 files changed, 120 insertions, 80 deletions
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
index 4e5493156b..969d358f86 100644
--- a/gtk/gtkbox.c
+++ b/gtk/gtkbox.c
@@ -34,12 +34,12 @@ enum {
};
enum {
- CHILD_ARG_0,
- CHILD_ARG_EXPAND,
- CHILD_ARG_FILL,
- CHILD_ARG_PADDING,
- CHILD_ARG_PACK_TYPE,
- CHILD_ARG_POSITION
+ CHILD_PROP_0,
+ CHILD_PROP_EXPAND,
+ CHILD_PROP_FILL,
+ CHILD_PROP_PADDING,
+ CHILD_PROP_PACK_TYPE,
+ CHILD_PROP_POSITION
};
static void gtk_box_class_init (GtkBoxClass *klass);
@@ -62,14 +62,16 @@ static void gtk_box_forall (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
gpointer callback_data);
-static void gtk_box_set_child_arg (GtkContainer *container,
- GtkWidget *child,
- GtkArg *arg,
- guint arg_id);
-static void gtk_box_get_child_arg (GtkContainer *container,
- GtkWidget *child,
- GtkArg *arg,
- guint arg_id);
+static void gtk_box_set_child_property (GtkContainer *container,
+ GtkWidget *child,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gtk_box_get_child_property (GtkContainer *container,
+ GtkWidget *child,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec);
static GtkType gtk_box_child_type (GtkContainer *container);
@@ -104,21 +106,25 @@ gtk_box_get_type (void)
static void
gtk_box_class_init (GtkBoxClass *class)
{
- GObjectClass *gobject_class;
- GtkObjectClass *object_class;
- GtkWidgetClass *widget_class;
- GtkContainerClass *container_class;
+ GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+ GtkContainerClass *container_class = GTK_CONTAINER_CLASS (class);
- gobject_class = (GObjectClass*) class;
- object_class = (GtkObjectClass*) class;
- widget_class = (GtkWidgetClass*) class;
- container_class = (GtkContainerClass*) class;
-
- parent_class = gtk_type_class (GTK_TYPE_CONTAINER);
+ parent_class = g_type_class_peek_parent (class);
gobject_class->set_property = gtk_box_set_property;
gobject_class->get_property = gtk_box_get_property;
+ widget_class->map = gtk_box_map;
+ widget_class->unmap = gtk_box_unmap;
+
+ container_class->add = gtk_box_add;
+ container_class->remove = gtk_box_remove;
+ container_class->forall = gtk_box_forall;
+ container_class->child_type = gtk_box_child_type;
+ container_class->set_child_property = gtk_box_set_child_property;
+ container_class->get_child_property = gtk_box_get_child_property;
+
g_object_class_install_property (gobject_class,
PROP_SPACING,
g_param_spec_int ("spacing",
@@ -137,21 +143,31 @@ gtk_box_class_init (GtkBoxClass *class)
FALSE,
G_PARAM_READABLE | G_PARAM_WRITABLE));
- gtk_container_add_child_arg_type ("GtkBox::expand", GTK_TYPE_BOOL, GTK_ARG_READWRITE, CHILD_ARG_EXPAND);
- gtk_container_add_child_arg_type ("GtkBox::fill", GTK_TYPE_BOOL, GTK_ARG_READWRITE, CHILD_ARG_FILL);
- gtk_container_add_child_arg_type ("GtkBox::padding", GTK_TYPE_UINT, GTK_ARG_READWRITE, CHILD_ARG_PADDING);
- gtk_container_add_child_arg_type ("GtkBox::pack_type", GTK_TYPE_PACK_TYPE, GTK_ARG_READWRITE, CHILD_ARG_PACK_TYPE);
- gtk_container_add_child_arg_type ("GtkBox::position", GTK_TYPE_INT, GTK_ARG_READWRITE, CHILD_ARG_POSITION);
-
- widget_class->map = gtk_box_map;
- widget_class->unmap = gtk_box_unmap;
-
- container_class->add = gtk_box_add;
- container_class->remove = gtk_box_remove;
- container_class->forall = gtk_box_forall;
- container_class->child_type = gtk_box_child_type;
- container_class->set_child_arg = gtk_box_set_child_arg;
- container_class->get_child_arg = gtk_box_get_child_arg;
+ gtk_container_class_install_child_property (container_class,
+ CHILD_PROP_EXPAND,
+ g_param_spec_boolean ("expand", NULL, NULL,
+ TRUE,
+ G_PARAM_READWRITE));
+ gtk_container_class_install_child_property (container_class,
+ CHILD_PROP_FILL,
+ g_param_spec_boolean ("fill", NULL, NULL,
+ TRUE,
+ G_PARAM_READWRITE));
+ gtk_container_class_install_child_property (container_class,
+ CHILD_PROP_PADDING,
+ g_param_spec_uint ("padding", NULL, NULL,
+ 0, G_MAXINT, 0,
+ G_PARAM_READWRITE));
+ gtk_container_class_install_child_property (container_class,
+ CHILD_PROP_PACK_TYPE,
+ g_param_spec_enum ("pack_type", NULL, NULL,
+ GTK_TYPE_PACK_TYPE, GTK_PACK_START,
+ G_PARAM_READWRITE));
+ gtk_container_class_install_child_property (container_class,
+ CHILD_PROP_POSITION,
+ g_param_spec_int ("position", NULL, NULL,
+ -1, G_MAXINT, 0,
+ G_PARAM_READWRITE));
}
static void
@@ -218,73 +234,75 @@ gtk_box_child_type (GtkContainer *container)
}
static void
-gtk_box_set_child_arg (GtkContainer *container,
- GtkWidget *child,
- GtkArg *arg,
- guint arg_id)
+gtk_box_set_child_property (GtkContainer *container,
+ GtkWidget *child,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
gboolean expand = 0;
gboolean fill = 0;
guint padding = 0;
GtkPackType pack_type = 0;
- if (arg_id != CHILD_ARG_POSITION)
+ if (property_id != CHILD_PROP_POSITION)
gtk_box_query_child_packing (GTK_BOX (container),
child,
&expand,
&fill,
&padding,
&pack_type);
-
- switch (arg_id)
+ switch (property_id)
{
- case CHILD_ARG_EXPAND:
+ case CHILD_PROP_EXPAND:
gtk_box_set_child_packing (GTK_BOX (container),
child,
- GTK_VALUE_BOOL (*arg),
+ g_value_get_boolean (value),
fill,
padding,
pack_type);
break;
- case CHILD_ARG_FILL:
+ case CHILD_PROP_FILL:
gtk_box_set_child_packing (GTK_BOX (container),
child,
expand,
- GTK_VALUE_BOOL (*arg),
+ g_value_get_boolean (value),
padding,
pack_type);
break;
- case CHILD_ARG_PADDING:
+ case CHILD_PROP_PADDING:
gtk_box_set_child_packing (GTK_BOX (container),
child,
expand,
fill,
- GTK_VALUE_UINT (*arg),
+ g_value_get_uint (value),
pack_type);
break;
- case CHILD_ARG_PACK_TYPE:
+ case CHILD_PROP_PACK_TYPE:
gtk_box_set_child_packing (GTK_BOX (container),
child,
expand,
fill,
padding,
- GTK_VALUE_ENUM (*arg));
+ g_value_get_enum (value));
break;
- case CHILD_ARG_POSITION:
+ case CHILD_PROP_POSITION:
gtk_box_reorder_child (GTK_BOX (container),
child,
- GTK_VALUE_INT (*arg));
+ g_value_get_int (value));
break;
default:
+ GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
break;
}
}
static void
-gtk_box_get_child_arg (GtkContainer *container,
- GtkWidget *child,
- GtkArg *arg,
- guint arg_id)
+gtk_box_get_child_property (GtkContainer *container,
+ GtkWidget *child,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
{
gboolean expand = 0;
gboolean fill = 0;
@@ -292,30 +310,30 @@ gtk_box_get_child_arg (GtkContainer *container,
GtkPackType pack_type = 0;
GList *list;
- if (arg_id != CHILD_ARG_POSITION)
+ if (property_id != CHILD_PROP_POSITION)
gtk_box_query_child_packing (GTK_BOX (container),
child,
&expand,
&fill,
&padding,
&pack_type);
-
- switch (arg_id)
+ switch (property_id)
{
- case CHILD_ARG_EXPAND:
- GTK_VALUE_BOOL (*arg) = expand;
+ guint i;
+ case CHILD_PROP_EXPAND:
+ g_value_set_boolean (value, expand);
break;
- case CHILD_ARG_FILL:
- GTK_VALUE_BOOL (*arg) = fill;
+ case CHILD_PROP_FILL:
+ g_value_set_boolean (value, fill);
break;
- case CHILD_ARG_PADDING:
- GTK_VALUE_UINT (*arg) = padding;
+ case CHILD_PROP_PADDING:
+ g_value_set_uint (value, padding);
break;
- case CHILD_ARG_PACK_TYPE:
- GTK_VALUE_ENUM (*arg) = pack_type;
+ case CHILD_PROP_PACK_TYPE:
+ g_value_set_enum (value, pack_type);
break;
- case CHILD_ARG_POSITION:
- GTK_VALUE_INT (*arg) = 0;
+ case CHILD_PROP_POSITION:
+ i = 0;
for (list = GTK_BOX (container)->children; list; list = list->next)
{
GtkBoxChild *child_entry;
@@ -323,13 +341,12 @@ gtk_box_get_child_arg (GtkContainer *container,
child_entry = list->data;
if (child_entry->widget == child)
break;
- GTK_VALUE_INT (*arg)++;
+ i++;
}
- if (!list)
- GTK_VALUE_INT (*arg) = -1;
+ g_value_set_int (value, list ? i : -1);
break;
default:
- arg->type = GTK_TYPE_INVALID;
+ GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
break;
}
}
@@ -357,6 +374,8 @@ gtk_box_pack_start (GtkBox *box,
box->children = g_list_append (box->children, child_info);
+ gtk_widget_freeze_child_notify (child);
+
gtk_widget_set_parent (child, GTK_WIDGET (box));
if (GTK_WIDGET_REALIZED (box))
@@ -369,6 +388,12 @@ gtk_box_pack_start (GtkBox *box,
gtk_widget_queue_resize (child);
}
+ gtk_widget_child_notify (child, "expand");
+ gtk_widget_child_notify (child, "fill");
+ gtk_widget_child_notify (child, "padding");
+ gtk_widget_child_notify (child, "pack_type");
+ gtk_widget_child_notify (child, "position");
+ gtk_widget_thaw_child_notify (child);
}
void
@@ -394,6 +419,8 @@ gtk_box_pack_end (GtkBox *box,
box->children = g_list_append (box->children, child_info);
+ gtk_widget_freeze_child_notify (child);
+
gtk_widget_set_parent (child, GTK_WIDGET (box));
if (GTK_WIDGET_REALIZED (box))
@@ -406,6 +433,12 @@ gtk_box_pack_end (GtkBox *box,
gtk_widget_queue_resize (child);
}
+ gtk_widget_child_notify (child, "expand");
+ gtk_widget_child_notify (child, "fill");
+ gtk_widget_child_notify (child, "padding");
+ gtk_widget_child_notify (child, "pack_type");
+ gtk_widget_child_notify (child, "position");
+ gtk_widget_thaw_child_notify (child);
}
void
@@ -477,9 +510,9 @@ gtk_box_get_spacing (GtkBox *box)
}
void
-gtk_box_reorder_child (GtkBox *box,
- GtkWidget *child,
- gint position)
+gtk_box_reorder_child (GtkBox *box,
+ GtkWidget *child,
+ gint position)
{
GList *list;
@@ -534,6 +567,7 @@ gtk_box_reorder_child (GtkBox *box,
list->next = tmp_list;
}
+ gtk_widget_child_notify (child, "position");
if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_VISIBLE (box))
gtk_widget_queue_resize (child);
}
@@ -602,19 +636,25 @@ gtk_box_set_child_packing (GtkBox *box,
list = list->next;
}
+ gtk_widget_freeze_child_notify (child);
if (list)
{
child_info->expand = expand != FALSE;
+ gtk_widget_child_notify (child, "expand");
child_info->fill = fill != FALSE;
+ gtk_widget_child_notify (child, "fill");
child_info->padding = padding;
+ gtk_widget_child_notify (child, "padding");
if (pack_type == GTK_PACK_END)
child_info->pack = GTK_PACK_END;
else
child_info->pack = GTK_PACK_START;
+ gtk_widget_child_notify (child, "pack_type");
if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_VISIBLE (box))
gtk_widget_queue_resize (child);
}
+ gtk_widget_thaw_child_notify (child);
}
static void