hm, initital refcount revolution commit ;)

still some gnits left, but keep working on it ;)
-timj
This commit is contained in:
Tim Janik
1998-01-30 23:47:09 +00:00
parent ee7038f9fd
commit 4af33fa24d
56 changed files with 2030 additions and 1661 deletions

View File

@ -71,6 +71,7 @@ static void gtk_container_marshal_signal_4 (GtkObject *object,
static void gtk_container_class_init (GtkContainerClass *klass);
static void gtk_container_init (GtkContainer *container);
static void gtk_container_destroy (GtkObject *object);
static void gtk_container_get_arg (GtkContainer *container,
GtkArg *arg,
guint arg_id);
@ -101,6 +102,7 @@ static void gtk_container_hide_all (GtkWidget *widget);
static gint container_signals[LAST_SIGNAL] = { 0 };
static GtkWidgetClass *parent_class = NULL;
guint
gtk_container_get_type ()
@ -134,7 +136,8 @@ gtk_container_class_init (GtkContainerClass *class)
object_class = (GtkObjectClass*) class;
widget_class = (GtkWidgetClass*) class;
parent_class = gtk_type_class (gtk_widget_get_type ());
gtk_object_add_arg_type ("GtkContainer::border_width", GTK_TYPE_LONG, ARG_BORDER_WIDTH);
gtk_object_add_arg_type ("GtkContainer::auto_resize", GTK_TYPE_BOOL, ARG_AUTO_RESIZE);
gtk_object_add_arg_type ("GtkContainer::block_resize", GTK_TYPE_BOOL, ARG_BLOCK_RESIZE);
@ -182,10 +185,12 @@ gtk_container_class_init (GtkContainerClass *class)
GTK_TYPE_DIRECTION_TYPE);
gtk_object_class_add_signals (object_class, container_signals, LAST_SIGNAL);
object_class->destroy = gtk_container_destroy;
/* Other container classes should overwrite show_all and hide_all,
unless they make all their children accessable
through gtk_container_foreach.
* for the purpose of showing internal children also, which are not
* accessable through gtk_container_foreach.
*/
widget_class->show_all = gtk_container_show_all;
widget_class->hide_all = gtk_container_hide_all;
@ -202,6 +207,29 @@ gtk_container_init (GtkContainer *container)
container->auto_resize = TRUE;
container->need_resize = FALSE;
container->block_resize = FALSE;
container->resize_widgets = NULL;
}
static void
gtk_container_destroy (GtkObject *object)
{
GSList *node;
for (node = GTK_CONTAINER (object)->resize_widgets; node; node = node->next)
{
GtkWidget *child;
child = (GtkWidget*) node->data;
GTK_WIDGET_UNSET_FLAGS (child, GTK_RESIZE_NEEDED);
}
g_slist_free (GTK_CONTAINER (object)->resize_widgets);
GTK_CONTAINER (object)->resize_widgets = NULL;
gtk_container_foreach (GTK_CONTAINER (object),
(GtkCallback) gtk_widget_destroy, NULL);
if (GTK_OBJECT_CLASS (parent_class)->destroy)
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
}
static void
@ -330,7 +358,7 @@ gtk_container_unblock_resize (GtkContainer *container)
{
g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_CONTAINER (container));
container->block_resize = FALSE;
}
@ -338,12 +366,12 @@ gint
gtk_container_need_resize (GtkContainer *container)
{
gint return_val;
g_return_val_if_fail (container != NULL, FALSE);
g_return_val_if_fail (GTK_IS_CONTAINER (container), FALSE);
return_val = FALSE;
if (!container->block_resize)
{
if (container->auto_resize)
@ -353,7 +381,7 @@ gtk_container_need_resize (GtkContainer *container)
else
container->need_resize = TRUE;
}
return return_val;
}
@ -367,12 +395,56 @@ gtk_container_foreach (GtkContainer *container,
callback, callback_data);
}
typedef struct _GtkForeachData GtkForeachData;
struct _GtkForeachData
{
GtkObject *container;
GtkCallbackMarshal callback;
gpointer callback_data;
};
static void
gtk_container_foreach_unmarshal (GtkWidget *child,
gpointer data)
{
GtkForeachData *fdata = (GtkForeachData*) data;
GtkArg args[2];
/* first argument */
args[0].name = NULL;
args[0].type = GTK_OBJECT(child)->klass->type;
GTK_VALUE_OBJECT(args[0]) = GTK_OBJECT (child);
/* location for return value */
args[1].name = NULL;
args[1].type = GTK_TYPE_NONE;
fdata->callback (fdata->container, fdata->callback_data, 1, args);
}
void
gtk_container_foreach_interp (GtkContainer *container,
GtkCallbackMarshal callback,
gpointer callback_data,
GtkDestroyNotify notify)
{
GtkForeachData fdata;
fdata.container = GTK_OBJECT (container);
fdata.callback = callback;
fdata.callback_data = callback_data;
gtk_container_foreach (container, gtk_container_foreach_unmarshal, &fdata);
notify (callback_data);
}
gint
gtk_container_focus (GtkContainer *container,
GtkDirectionType direction)
{
gint return_val;
gtk_signal_emit (GTK_OBJECT (container),
container_signals[FOCUS],
direction, &return_val);