From: Tim Janik Date: Fri, 16 Jan 1998 00:49:51 +0000 (+0000) Subject: main part for GtkArgSetFunc/GtkArgGetFunc implementation. X-Git-Url: http://pileus.org/git/?a=commitdiff_plain;h=dd77b5db5a14ff3707a65e1ae3326b9a013ac9b5;p=~andy%2Fgtk main part for GtkArgSetFunc/GtkArgGetFunc implementation. -timj --- diff --git a/gtk/gtkadjustment.c b/gtk/gtkadjustment.c index ab6e63d21..47d422bc5 100644 --- a/gtk/gtkadjustment.c +++ b/gtk/gtkadjustment.c @@ -47,7 +47,8 @@ gtk_adjustment_get_type () sizeof (GtkAdjustmentClass), (GtkClassInitFunc) gtk_adjustment_class_init, (GtkObjectInitFunc) gtk_adjustment_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; adjustment_type = gtk_type_unique (gtk_data_get_type (), &adjustment_info); diff --git a/gtk/gtkalignment.c b/gtk/gtkalignment.c index b562cff77..2ea50ed58 100644 --- a/gtk/gtkalignment.c +++ b/gtk/gtkalignment.c @@ -40,7 +40,8 @@ gtk_alignment_get_type () sizeof (GtkAlignmentClass), (GtkClassInitFunc) gtk_alignment_class_init, (GtkObjectInitFunc) gtk_alignment_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; alignment_type = gtk_type_unique (gtk_bin_get_type (), &alignment_info); diff --git a/gtk/gtkarrow.c b/gtk/gtkarrow.c index b8bc2143e..5fb53f5e7 100644 --- a/gtk/gtkarrow.c +++ b/gtk/gtkarrow.c @@ -41,7 +41,8 @@ gtk_arrow_get_type () sizeof (GtkArrowClass), (GtkClassInitFunc) gtk_arrow_class_init, (GtkObjectInitFunc) gtk_arrow_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; arrow_type = gtk_type_unique (gtk_misc_get_type (), &arrow_info); diff --git a/gtk/gtkaspectframe.c b/gtk/gtkaspectframe.c index 870c0b2f5..16d60b0ec 100644 --- a/gtk/gtkaspectframe.c +++ b/gtk/gtkaspectframe.c @@ -50,7 +50,8 @@ gtk_aspect_frame_get_type () sizeof (GtkAspectFrameClass), (GtkClassInitFunc) gtk_aspect_frame_class_init, (GtkObjectInitFunc) gtk_aspect_frame_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; aspect_frame_type = gtk_type_unique (gtk_frame_get_type (), &aspect_frame_info); diff --git a/gtk/gtkbbox.c b/gtk/gtkbbox.c index 818493f9a..ed42cc129 100644 --- a/gtk/gtkbbox.c +++ b/gtk/gtkbbox.c @@ -42,7 +42,8 @@ gtk_button_box_get_type () sizeof (GtkButtonBoxClass), (GtkClassInitFunc) gtk_button_box_class_init, (GtkObjectInitFunc) gtk_button_box_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; button_box_type = gtk_type_unique (gtk_box_get_type (), &button_box_info); diff --git a/gtk/gtkbin.c b/gtk/gtkbin.c index 4cb7efcc1..3e60b5976 100644 --- a/gtk/gtkbin.c +++ b/gtk/gtkbin.c @@ -53,7 +53,8 @@ gtk_bin_get_type () sizeof (GtkBinClass), (GtkClassInitFunc) gtk_bin_class_init, (GtkObjectInitFunc) gtk_bin_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; bin_type = gtk_type_unique (gtk_container_get_type (), &bin_info); diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c index dfb2fed08..cda636429 100644 --- a/gtk/gtkbox.c +++ b/gtk/gtkbox.c @@ -53,7 +53,8 @@ gtk_box_get_type () sizeof (GtkBoxClass), (GtkClassInitFunc) gtk_box_class_init, (GtkObjectInitFunc) gtk_box_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; box_type = gtk_type_unique (gtk_container_get_type (), &box_info); diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c index 39fc468b7..f85ddf0fb 100644 --- a/gtk/gtkbutton.c +++ b/gtk/gtkbutton.c @@ -36,12 +36,18 @@ enum { LEAVE, LAST_SIGNAL }; +enum { + ARG_0, + ARG_LABEL +}; + static void gtk_button_class_init (GtkButtonClass *klass); static void gtk_button_init (GtkButton *button); -static void gtk_button_arg (GtkButton *button, - GtkArg *arg); +static void gtk_button_set_arg (GtkButton *button, + GtkArg *arg, + guint arg_id); static void gtk_button_destroy (GtkObject *object); static void gtk_button_map (GtkWidget *widget); static void gtk_button_unmap (GtkWidget *widget); @@ -101,7 +107,8 @@ gtk_button_get_type () sizeof (GtkButtonClass), (GtkClassInitFunc) gtk_button_class_init, (GtkObjectInitFunc) gtk_button_init, - (GtkArgFunc) gtk_button_arg, + (GtkArgSetFunc) gtk_button_set_arg, + (GtkArgGetFunc) NULL, }; button_type = gtk_type_unique (gtk_container_get_type (), &button_info); @@ -123,7 +130,7 @@ gtk_button_class_init (GtkButtonClass *klass) parent_class = gtk_type_class (gtk_container_get_type ()); - gtk_object_add_arg_type ("GtkButton::label", GTK_TYPE_STRING); + gtk_object_add_arg_type ("GtkButton::label", GTK_TYPE_STRING, ARG_LABEL); button_signals[PRESSED] = gtk_signal_new ("pressed", @@ -204,23 +211,28 @@ gtk_button_init (GtkButton *button) } static void -gtk_button_arg (GtkButton *button, - GtkArg *arg) +gtk_button_set_arg (GtkButton *button, + GtkArg *arg, + guint arg_id) { - if (strcmp (arg->name, "label") == 0) - { - GtkWidget *label; + GtkWidget *label; + switch (arg_id) + { + case ARG_LABEL: gtk_container_disable_resize (GTK_CONTAINER (button)); - + if (button->child) gtk_widget_destroy (button->child); - + label = gtk_label_new (GTK_VALUE_STRING(*arg)); gtk_widget_show (label); - + gtk_container_add (GTK_CONTAINER (button), label); gtk_container_enable_resize (GTK_CONTAINER (button)); + break; + default: + g_assert_not_reached (); } } diff --git a/gtk/gtkcheckbutton.c b/gtk/gtkcheckbutton.c index d7f72ce1c..926612017 100644 --- a/gtk/gtkcheckbutton.c +++ b/gtk/gtkcheckbutton.c @@ -59,7 +59,8 @@ gtk_check_button_get_type () sizeof (GtkCheckButtonClass), (GtkClassInitFunc) gtk_check_button_class_init, (GtkObjectInitFunc) gtk_check_button_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; check_button_type = gtk_type_unique (gtk_toggle_button_get_type (), &check_button_info); diff --git a/gtk/gtkcheckmenuitem.c b/gtk/gtkcheckmenuitem.c index bf5aa04c1..5319884d8 100644 --- a/gtk/gtkcheckmenuitem.c +++ b/gtk/gtkcheckmenuitem.c @@ -60,7 +60,8 @@ gtk_check_menu_item_get_type () sizeof (GtkCheckMenuItemClass), (GtkClassInitFunc) gtk_check_menu_item_class_init, (GtkObjectInitFunc) gtk_check_menu_item_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; check_menu_item_type = gtk_type_unique (gtk_menu_item_get_type (), &check_menu_item_info); diff --git a/gtk/gtkclist.c b/gtk/gtkclist.c index 8bfe13f6f..3b6595ea3 100644 --- a/gtk/gtkclist.c +++ b/gtk/gtkclist.c @@ -252,7 +252,8 @@ gtk_clist_get_type () sizeof (GtkCListClass), (GtkClassInitFunc) gtk_clist_class_init, (GtkObjectInitFunc) gtk_clist_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; clist_type = gtk_type_unique (gtk_container_get_type (), &clist_info); diff --git a/gtk/gtkcombobox.c b/gtk/gtkcombobox.c index d7e34e179..35ec14f50 100644 --- a/gtk/gtkcombobox.c +++ b/gtk/gtkcombobox.c @@ -82,7 +82,8 @@ gtk_combo_box_get_type () sizeof (GtkComboBoxClass), (GtkClassInitFunc) gtk_combo_box_class_init, (GtkObjectInitFunc) gtk_combo_box_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; combo_box_type = gtk_type_unique (gtk_entry_get_type (), &combo_box_info); diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c index 0e6672289..77bee5964 100644 --- a/gtk/gtkcontainer.c +++ b/gtk/gtkcontainer.c @@ -28,6 +28,13 @@ enum { FOCUS, LAST_SIGNAL }; +enum { + ARG_0, + ARG_BORDER_WIDTH, + ARG_AUTO_RESIZE, + ARG_BLOCK_RESIZE, + ARG_CHILD +}; typedef void (*GtkContainerSignal1) (GtkObject *object, @@ -64,8 +71,9 @@ 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_arg (GtkContainer *container, - GtkArg *arg); +static void gtk_container_set_arg (GtkContainer *container, + GtkArg *arg, + guint arg_id); static gint gtk_real_container_need_resize (GtkContainer *container); static gint gtk_real_container_focus (GtkContainer *container, GtkDirectionType direction); @@ -105,7 +113,8 @@ gtk_container_get_type () sizeof (GtkContainerClass), (GtkClassInitFunc) gtk_container_class_init, (GtkObjectInitFunc) gtk_container_init, - (GtkArgFunc) gtk_container_arg, + (GtkArgSetFunc) gtk_container_set_arg, + (GtkArgGetFunc) NULL, }; container_type = gtk_type_unique (gtk_widget_get_type (), &container_info); @@ -123,10 +132,10 @@ gtk_container_class_init (GtkContainerClass *class) object_class = (GtkObjectClass*) class; widget_class = (GtkWidgetClass*) class; - gtk_object_add_arg_type ("GtkContainer::border_width", GTK_TYPE_LONG); - gtk_object_add_arg_type ("GtkContainer::auto_resize", GTK_TYPE_BOOL); - gtk_object_add_arg_type ("GtkContainer::block_resize", GTK_TYPE_BOOL); - gtk_object_add_arg_type ("GtkContainer::child", GTK_TYPE_WIDGET); + 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); + gtk_object_add_arg_type ("GtkContainer::child", GTK_TYPE_WIDGET, ARG_CHILD); container_signals[ADD] = gtk_signal_new ("add", @@ -193,30 +202,32 @@ gtk_container_init (GtkContainer *container) } static void -gtk_container_arg (GtkContainer *container, - GtkArg *arg) +gtk_container_set_arg (GtkContainer *container, + GtkArg *arg, + guint arg_id) { - if (strcmp (arg->name, "border_width") == 0) + switch (arg_id) { + case ARG_BORDER_WIDTH: gtk_container_border_width (container, GTK_VALUE_LONG (*arg)); - } - else if (strcmp (arg->name, "auto_resize") == 0) - { + break; + case ARG_AUTO_RESIZE: if (GTK_VALUE_BOOL (*arg)) gtk_container_enable_resize (container); else gtk_container_disable_resize (container); - } - else if (strcmp (arg->name, "block_resize") == 0) - { + break; + case ARG_BLOCK_RESIZE: if (GTK_VALUE_BOOL (*arg)) gtk_container_block_resize (container); else gtk_container_unblock_resize (container); - } - else if (strcmp (arg->name, "child") == 0) - { + break; + case ARG_CHILD: gtk_container_add (container, GTK_WIDGET (GTK_VALUE_OBJECT (*arg))); + break; + default: + g_assert_not_reached (); } } diff --git a/gtk/gtkcurve.c b/gtk/gtkcurve.c index e71785c5a..a606dbd80 100644 --- a/gtk/gtkcurve.c +++ b/gtk/gtkcurve.c @@ -62,7 +62,8 @@ gtk_curve_get_type (void) sizeof (GtkCurveClass), (GtkClassInitFunc) gtk_curve_class_init, (GtkObjectInitFunc) gtk_curve_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; curve_type = gtk_type_unique (gtk_drawing_area_get_type (), &curve_info); diff --git a/gtk/gtkdata.c b/gtk/gtkdata.c index 63add29f3..512e62067 100644 --- a/gtk/gtkdata.c +++ b/gtk/gtkdata.c @@ -45,7 +45,8 @@ gtk_data_get_type () sizeof (GtkDataClass), (GtkClassInitFunc) gtk_data_class_init, (GtkObjectInitFunc) NULL, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; data_type = gtk_type_unique (gtk_object_get_type (), &data_info); diff --git a/gtk/gtkdialog.c b/gtk/gtkdialog.c index 55da2d137..693611cf2 100644 --- a/gtk/gtkdialog.c +++ b/gtk/gtkdialog.c @@ -40,7 +40,8 @@ gtk_dialog_get_type () sizeof (GtkDialogClass), (GtkClassInitFunc) gtk_dialog_class_init, (GtkObjectInitFunc) gtk_dialog_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; dialog_type = gtk_type_unique (gtk_window_get_type (), &dialog_info); diff --git a/gtk/gtkdrawingarea.c b/gtk/gtkdrawingarea.c index 3220446a5..8be0bc078 100644 --- a/gtk/gtkdrawingarea.c +++ b/gtk/gtkdrawingarea.c @@ -39,7 +39,8 @@ gtk_drawing_area_get_type () sizeof (GtkDrawingAreaClass), (GtkClassInitFunc) gtk_drawing_area_class_init, (GtkObjectInitFunc) gtk_drawing_area_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; drawing_area_type = gtk_type_unique (gtk_widget_get_type (), &drawing_area_info); diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index b84cc06eb..55492090e 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -227,7 +227,8 @@ gtk_entry_get_type () sizeof (GtkEntryClass), (GtkClassInitFunc) gtk_entry_class_init, (GtkObjectInitFunc) gtk_entry_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; entry_type = gtk_type_unique (gtk_widget_get_type (), &entry_info); diff --git a/gtk/gtkeventbox.c b/gtk/gtkeventbox.c index 44a0d7a9a..daec6c226 100644 --- a/gtk/gtkeventbox.c +++ b/gtk/gtkeventbox.c @@ -46,7 +46,8 @@ gtk_event_box_get_type () sizeof (GtkEventBoxClass), (GtkClassInitFunc) gtk_event_box_class_init, (GtkObjectInitFunc) gtk_event_box_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; event_box_type = gtk_type_unique (gtk_bin_get_type (), &event_box_info); diff --git a/gtk/gtkfilesel.c b/gtk/gtkfilesel.c index e5abad837..f0853cccd 100644 --- a/gtk/gtkfilesel.c +++ b/gtk/gtkfilesel.c @@ -308,7 +308,8 @@ gtk_file_selection_get_type () sizeof (GtkFileSelectionClass), (GtkClassInitFunc) gtk_file_selection_class_init, (GtkObjectInitFunc) gtk_file_selection_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; file_selection_type = gtk_type_unique (gtk_window_get_type (), &filesel_info); diff --git a/gtk/gtkfixed.c b/gtk/gtkfixed.c index 59eba1f46..467b15b6a 100644 --- a/gtk/gtkfixed.c +++ b/gtk/gtkfixed.c @@ -61,7 +61,8 @@ gtk_fixed_get_type () sizeof (GtkFixedClass), (GtkClassInitFunc) gtk_fixed_class_init, (GtkObjectInitFunc) gtk_fixed_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; fixed_type = gtk_type_unique (gtk_container_get_type (), &fixed_info); diff --git a/gtk/gtkframe.c b/gtk/gtkframe.c index ad01a879f..5f834cfa7 100644 --- a/gtk/gtkframe.c +++ b/gtk/gtkframe.c @@ -51,7 +51,8 @@ gtk_frame_get_type () sizeof (GtkFrameClass), (GtkClassInitFunc) gtk_frame_class_init, (GtkObjectInitFunc) gtk_frame_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; frame_type = gtk_type_unique (gtk_bin_get_type (), &frame_info); diff --git a/gtk/gtkgamma.c b/gtk/gtkgamma.c index 977aabe67..5812ec858 100644 --- a/gtk/gtkgamma.c +++ b/gtk/gtkgamma.c @@ -210,7 +210,8 @@ gtk_gamma_curve_get_type (void) sizeof (GtkGammaCurveClass), (GtkClassInitFunc) gtk_gamma_curve_class_init, (GtkObjectInitFunc) gtk_gamma_curve_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; gamma_curve_type = diff --git a/gtk/gtkhandlebox.c b/gtk/gtkhandlebox.c index 394529210..b91de2873 100644 --- a/gtk/gtkhandlebox.c +++ b/gtk/gtkhandlebox.c @@ -61,7 +61,8 @@ gtk_handle_box_get_type () sizeof (GtkHandleBoxClass), (GtkClassInitFunc) gtk_handle_box_class_init, (GtkObjectInitFunc) gtk_handle_box_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; handle_box_type = gtk_type_unique (gtk_event_box_get_type (), &handle_box_info); diff --git a/gtk/gtkhbbox.c b/gtk/gtkhbbox.c index 9d86c010e..40efc51af 100644 --- a/gtk/gtkhbbox.c +++ b/gtk/gtkhbbox.c @@ -43,7 +43,8 @@ gtk_hbutton_box_get_type () sizeof (GtkHButtonBoxClass), (GtkClassInitFunc) gtk_hbutton_box_class_init, (GtkObjectInitFunc) gtk_hbutton_box_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; hbutton_box_type = gtk_type_unique (gtk_button_box_get_type (), &hbutton_box_info); diff --git a/gtk/gtkhbox.c b/gtk/gtkhbox.c index 4cdc926cd..f8f8848ac 100644 --- a/gtk/gtkhbox.c +++ b/gtk/gtkhbox.c @@ -40,7 +40,8 @@ gtk_hbox_get_type () sizeof (GtkHBoxClass), (GtkClassInitFunc) gtk_hbox_class_init, (GtkObjectInitFunc) gtk_hbox_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; hbox_type = gtk_type_unique (gtk_box_get_type (), &hbox_info); diff --git a/gtk/gtkhpaned.c b/gtk/gtkhpaned.c index 23c50961e..bf132e992 100644 --- a/gtk/gtkhpaned.c +++ b/gtk/gtkhpaned.c @@ -49,7 +49,8 @@ gtk_hpaned_get_type () sizeof (GtkHPanedClass), (GtkClassInitFunc) gtk_hpaned_class_init, (GtkObjectInitFunc) gtk_hpaned_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; hpaned_type = gtk_type_unique (gtk_paned_get_type (), &hpaned_info); diff --git a/gtk/gtkhruler.c b/gtk/gtkhruler.c index 83f1c7a6e..990627d6e 100644 --- a/gtk/gtkhruler.c +++ b/gtk/gtkhruler.c @@ -51,7 +51,8 @@ gtk_hruler_get_type () sizeof (GtkHRulerClass), (GtkClassInitFunc) gtk_hruler_class_init, (GtkObjectInitFunc) gtk_hruler_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; hruler_type = gtk_type_unique (gtk_ruler_get_type (), &hruler_info); diff --git a/gtk/gtkhscale.c b/gtk/gtkhscale.c index 3bebd30fc..4771c2e1f 100644 --- a/gtk/gtkhscale.c +++ b/gtk/gtkhscale.c @@ -58,7 +58,8 @@ gtk_hscale_get_type () sizeof (GtkHScaleClass), (GtkClassInitFunc) gtk_hscale_class_init, (GtkObjectInitFunc) gtk_hscale_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; hscale_type = gtk_type_unique (gtk_scale_get_type (), &hscale_info); diff --git a/gtk/gtkhscrollbar.c b/gtk/gtkhscrollbar.c index 3b52a7a79..dcc056c8a 100644 --- a/gtk/gtkhscrollbar.c +++ b/gtk/gtkhscrollbar.c @@ -54,7 +54,8 @@ gtk_hscrollbar_get_type () sizeof (GtkHScrollbarClass), (GtkClassInitFunc) gtk_hscrollbar_class_init, (GtkObjectInitFunc) gtk_hscrollbar_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; hscrollbar_type = gtk_type_unique (gtk_scrollbar_get_type (), &hscrollbar_info); diff --git a/gtk/gtkhseparator.c b/gtk/gtkhseparator.c index 5f3a38c20..d0de76e47 100644 --- a/gtk/gtkhseparator.c +++ b/gtk/gtkhseparator.c @@ -38,7 +38,8 @@ gtk_hseparator_get_type () sizeof (GtkHSeparatorClass), (GtkClassInitFunc) gtk_hseparator_class_init, (GtkObjectInitFunc) gtk_hseparator_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; hseparator_type = gtk_type_unique (gtk_separator_get_type (), &hseparator_info); diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c index 98059a64f..caa5a188c 100644 --- a/gtk/gtkimage.c +++ b/gtk/gtkimage.c @@ -39,7 +39,8 @@ gtk_image_get_type () sizeof (GtkImageClass), (GtkClassInitFunc) gtk_image_class_init, (GtkObjectInitFunc) gtk_image_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; image_type = gtk_type_unique (gtk_misc_get_type (), &image_info); diff --git a/gtk/gtkinputdialog.c b/gtk/gtkinputdialog.c index d197fc8e0..709eb00c3 100644 --- a/gtk/gtkinputdialog.c +++ b/gtk/gtkinputdialog.c @@ -140,7 +140,8 @@ gtk_input_dialog_get_type () sizeof (GtkInputDialogClass), (GtkClassInitFunc) gtk_input_dialog_class_init, (GtkObjectInitFunc) gtk_input_dialog_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; input_dialog_type = gtk_type_unique (gtk_dialog_get_type (), diff --git a/gtk/gtkitem.c b/gtk/gtkitem.c index 6dd0ec8dd..ebf7a3756 100644 --- a/gtk/gtkitem.c +++ b/gtk/gtkitem.c @@ -51,7 +51,8 @@ gtk_item_get_type () sizeof (GtkItemClass), (GtkClassInitFunc) gtk_item_class_init, (GtkObjectInitFunc) gtk_item_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; item_type = gtk_type_unique (gtk_bin_get_type (), &item_info); diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 9fcdcc3e8..5d1213bfd 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -45,7 +45,8 @@ gtk_label_get_type () sizeof (GtkLabelClass), (GtkClassInitFunc) gtk_label_class_init, (GtkObjectInitFunc) gtk_label_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; label_type = gtk_type_unique (gtk_misc_get_type (), &label_info); diff --git a/gtk/gtklist.c b/gtk/gtklist.c index 7d7d4a66d..fc5aea67f 100644 --- a/gtk/gtklist.c +++ b/gtk/gtklist.c @@ -91,7 +91,8 @@ gtk_list_get_type () sizeof (GtkListClass), (GtkClassInitFunc) gtk_list_class_init, (GtkObjectInitFunc) gtk_list_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; list_type = gtk_type_unique (gtk_container_get_type (), &list_info); diff --git a/gtk/gtklistitem.c b/gtk/gtklistitem.c index 642027025..4e618f94b 100644 --- a/gtk/gtklistitem.c +++ b/gtk/gtklistitem.c @@ -59,7 +59,8 @@ gtk_list_item_get_type () sizeof (GtkListItemClass), (GtkClassInitFunc) gtk_list_item_class_init, (GtkObjectInitFunc) gtk_list_item_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; list_item_type = gtk_type_unique (gtk_item_get_type (), &list_item_info); diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index decf1e784..8a83154ca 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -65,7 +65,8 @@ gtk_menu_get_type () sizeof (GtkMenuClass), (GtkClassInitFunc) gtk_menu_class_init, (GtkObjectInitFunc) gtk_menu_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; menu_type = gtk_type_unique (gtk_menu_shell_get_type (), &menu_info); diff --git a/gtk/gtkmenubar.c b/gtk/gtkmenubar.c index 19f0aa3e7..49c7ec628 100644 --- a/gtk/gtkmenubar.c +++ b/gtk/gtkmenubar.c @@ -51,7 +51,8 @@ gtk_menu_bar_get_type () sizeof (GtkMenuBarClass), (GtkClassInitFunc) gtk_menu_bar_class_init, (GtkObjectInitFunc) gtk_menu_bar_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; menu_bar_type = gtk_type_unique (gtk_menu_shell_get_type (), &menu_bar_info); diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c index 9c0993fdb..d48693968 100644 --- a/gtk/gtkmenuitem.c +++ b/gtk/gtkmenuitem.c @@ -86,7 +86,8 @@ gtk_menu_item_get_type () sizeof (GtkMenuItemClass), (GtkClassInitFunc) gtk_menu_item_class_init, (GtkObjectInitFunc) gtk_menu_item_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; menu_item_type = gtk_type_unique (gtk_item_get_type (), &menu_item_info); diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index 6d3de5a7f..cf801afec 100644 --- a/gtk/gtkmenushell.c +++ b/gtk/gtkmenushell.c @@ -74,7 +74,8 @@ gtk_menu_shell_get_type () sizeof (GtkMenuShellClass), (GtkClassInitFunc) gtk_menu_shell_class_init, (GtkObjectInitFunc) gtk_menu_shell_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; menu_shell_type = gtk_type_unique (gtk_container_get_type (), &menu_shell_info); diff --git a/gtk/gtkmisc.c b/gtk/gtkmisc.c index 0ef8f0731..92ab64a49 100644 --- a/gtk/gtkmisc.c +++ b/gtk/gtkmisc.c @@ -38,7 +38,8 @@ gtk_misc_get_type () sizeof (GtkMiscClass), (GtkClassInitFunc) gtk_misc_class_init, (GtkObjectInitFunc) gtk_misc_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; misc_type = gtk_type_unique (gtk_widget_get_type (), &misc_info); diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index db6adce54..258d484f6 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -95,7 +95,8 @@ gtk_notebook_get_type () sizeof (GtkNotebookClass), (GtkClassInitFunc) gtk_notebook_class_init, (GtkObjectInitFunc) gtk_notebook_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; notebook_type = gtk_type_unique (gtk_container_get_type (), ¬ebook_info); diff --git a/gtk/gtkobject.c b/gtk/gtkobject.c index 38257b9b4..d61a73ede 100644 --- a/gtk/gtkobject.c +++ b/gtk/gtkobject.c @@ -28,6 +28,11 @@ enum { DESTROY, LAST_SIGNAL }; +enum { + ARG_0, + ARG_USER_DATA, + ARG_SIGNAL +}; typedef struct _GtkObjectData GtkObjectData; @@ -44,13 +49,16 @@ struct _GtkArgInfo { char *name; GtkType type; + GtkType class_type; + guint arg_id; }; static void gtk_object_class_init (GtkObjectClass *klass); static void gtk_object_init (GtkObject *object); -static void gtk_object_arg (GtkObject *object, - GtkArg *arg); +static void gtk_object_set_arg (GtkObject *object, + GtkArg *arg, + guint arg_id); static void gtk_real_object_destroy (GtkObject *object); static void gtk_object_data_init (void); static GtkObjectData* gtk_object_data_new (void); @@ -95,7 +103,8 @@ gtk_object_init_type () sizeof (GtkObjectClass), (GtkClassInitFunc) gtk_object_class_init, (GtkObjectInitFunc) gtk_object_init, - (GtkArgFunc) gtk_object_arg, + gtk_object_set_arg, + NULL, }; object_type = gtk_type_unique (0, &object_info); @@ -122,8 +131,8 @@ gtk_object_class_init (GtkObjectClass *class) class->signals = NULL; class->nsignals = 0; - gtk_object_add_arg_type ("GtkObject::user_data", GTK_TYPE_POINTER); - gtk_object_add_arg_type ("GtkObject::signal", GTK_TYPE_SIGNAL); + gtk_object_add_arg_type ("GtkObject::user_data", GTK_TYPE_POINTER, ARG_USER_DATA); + gtk_object_add_arg_type ("GtkObject::signal", GTK_TYPE_SIGNAL, ARG_SIGNAL); object_signals[DESTROY] = gtk_signal_new ("destroy", @@ -163,24 +172,27 @@ gtk_object_init (GtkObject *object) *****************************************/ static void -gtk_object_arg (GtkObject *object, - GtkArg *arg) +gtk_object_set_arg (GtkObject *object, + GtkArg *arg, + guint arg_id) { - if (strcmp (arg->name, "user_data") == 0) + switch (arg_id) { + case ARG_USER_DATA: gtk_object_set_user_data (object, GTK_VALUE_POINTER (*arg)); - } - else if (strncmp (arg->name, "signal", 6) == 0) - { - if ((arg->name[6] != ':') || (arg->name[7] != ':')) + break; + case ARG_SIGNAL: + if ((arg->name[11 + 6] != ':') || (arg->name[11 + 7] != ':')) { g_print ("invalid signal argument: \"%s\"\n", arg->name); return; } - - gtk_signal_connect (object, arg->name + 8, + gtk_signal_connect (object, arg->name + 11 + 8, (GtkSignalFunc) GTK_VALUE_SIGNAL (*arg).f, GTK_VALUE_SIGNAL (*arg).d); + break; + default: + g_assert_not_reached (); } } @@ -344,29 +356,40 @@ gtk_object_setv (GtkObject *obj, gint nargs, GtkArg *args) { - guint class_type; - char class_name[1024]; - char *arg_name; int i; g_return_if_fail (obj != NULL); + if (!arg_info_ht) + return; + for (i = 0; i < nargs; i++) { - arg_name = strchr (args[i].name, ':'); - if (!arg_name || (arg_name[0] != ':') || (arg_name[1] != ':')) + GtkArgInfo *info; + gchar *lookup_name; + gchar *d; + + lookup_name = g_strdup (args[i].name); + d = strchr (lookup_name, ':'); + if (d && d[1] == ':') { - g_print ("invalid arg name: \"%s\"\n", args[i].name); - continue; - } + d = strchr (d + 2, ':'); + if (d) + *d = 0; - strncpy (class_name, args[i].name, (long) (arg_name - args[i].name)); - class_name[(long) (arg_name - args[i].name)] = '\0'; + info = g_hash_table_lookup (arg_info_ht, lookup_name); + } + else + info = NULL; - args[i].name = arg_name + 2; + if (!info) + { + g_warning ("invalid arg name: \"%s\"\n", lookup_name); + continue; + } + g_free (lookup_name); - class_type = gtk_type_from_name (class_name); - gtk_type_set_arg (obj, class_type, &args[i]); + gtk_type_set_arg (obj, info->class_type, &args[i], info->arg_id); } } @@ -380,13 +403,38 @@ gtk_object_setv (GtkObject *obj, void gtk_object_add_arg_type (const char *arg_name, - GtkType arg_type) + GtkType arg_type, + guint arg_id) { GtkArgInfo *info; + gchar class_part[1024]; + gchar *arg_part; + GtkType class_type; + + g_return_if_fail (arg_id > 0); + + arg_part = strchr (arg_name, ':'); + if (!arg_part || (arg_part[0] != ':') || (arg_part[1] != ':')) + { + g_warning ("invalid arg name: \"%s\"\n", arg_name); + return; + } + + strncpy (class_part, arg_name, (glong) (arg_part - arg_name)); + class_part[(glong) (arg_part - arg_name)] = '\0'; + + class_type = gtk_type_from_name (class_part); + if (!class_type) + { + g_warning ("invalid class name in arg: \"%s\"\n", arg_name); + return; + } info = g_new (GtkArgInfo, 1); - info->name = g_strdup(arg_name); + info->name = g_strdup (arg_name); info->type = arg_type; + info->class_type = class_type; + info->arg_id = arg_id; if (!arg_info_ht) arg_info_ht = g_hash_table_new (g_string_hash, g_string_equal); @@ -415,7 +463,7 @@ gtk_object_get_arg_type (const char *arg_name) t = strchr (arg_name, ':'); if (!t || (t[0] != ':') || (t[1] != ':')) { - g_print ("invalid arg name: \"%s\"\n", arg_name); + g_warning ("invalid arg name: \"%s\"\n", arg_name); return GTK_TYPE_INVALID; } @@ -801,7 +849,7 @@ gtk_object_data_id_alloc () } /***************************************** - * gtk_object_data_id_alloc: + * gtk_object_collect_args: * * arguments: * @@ -836,7 +884,7 @@ gtk_object_collect_args (gint *nargs, switch (GTK_FUNDAMENTAL_TYPE (type)) { case GTK_TYPE_INVALID: - g_print ("invalid arg name: \"%s\" %x\n", name, type); + g_warning ("invalid arg name: \"%s\" %x\n", name, type); (void) va_arg (args1, long); continue; case GTK_TYPE_NONE: diff --git a/gtk/gtkobject.h b/gtk/gtkobject.h index f258e2f3b..16bcafa87 100644 --- a/gtk/gtkobject.h +++ b/gtk/gtkobject.h @@ -186,7 +186,8 @@ void gtk_object_setv (GtkObject *obj, GtkArg *args); void gtk_object_add_arg_type (const char *arg_name, - GtkType arg_type); + GtkType arg_type, + guint arg_id); GtkType gtk_object_get_arg_type (const char *arg_name); diff --git a/gtk/gtkoptionmenu.c b/gtk/gtkoptionmenu.c index 0b0f5cc73..c598f5e05 100644 --- a/gtk/gtkoptionmenu.c +++ b/gtk/gtkoptionmenu.c @@ -75,7 +75,8 @@ gtk_option_menu_get_type () sizeof (GtkOptionMenuClass), (GtkClassInitFunc) gtk_option_menu_class_init, (GtkObjectInitFunc) gtk_option_menu_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; option_menu_type = gtk_type_unique (gtk_button_get_type (), &option_menu_info); diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c index c3ee553fc..e9a587e33 100644 --- a/gtk/gtkpaned.c +++ b/gtk/gtkpaned.c @@ -53,7 +53,8 @@ gtk_paned_get_type () sizeof (GtkPanedClass), (GtkClassInitFunc) gtk_paned_class_init, (GtkObjectInitFunc) gtk_paned_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; paned_type = gtk_type_unique (gtk_container_get_type (), &paned_info); diff --git a/gtk/gtkpixmap.c b/gtk/gtkpixmap.c index 66ef1538c..9505f598f 100644 --- a/gtk/gtkpixmap.c +++ b/gtk/gtkpixmap.c @@ -41,7 +41,8 @@ gtk_pixmap_get_type () sizeof (GtkPixmapClass), (GtkClassInitFunc) gtk_pixmap_class_init, (GtkObjectInitFunc) gtk_pixmap_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; pixmap_type = gtk_type_unique (gtk_misc_get_type (), &pixmap_info); diff --git a/gtk/gtkpreview.c b/gtk/gtkpreview.c index 4246a321a..3080541e6 100644 --- a/gtk/gtkpreview.c +++ b/gtk/gtkpreview.c @@ -140,7 +140,8 @@ gtk_preview_get_type () sizeof (GtkPreviewClass), (GtkClassInitFunc) gtk_preview_class_init, (GtkObjectInitFunc) gtk_preview_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; preview_type = gtk_type_unique (gtk_widget_get_type (), &preview_info); diff --git a/gtk/gtkprogressbar.c b/gtk/gtkprogressbar.c index 620e5eed6..ae15aa7b1 100644 --- a/gtk/gtkprogressbar.c +++ b/gtk/gtkprogressbar.c @@ -47,7 +47,8 @@ gtk_progress_bar_get_type () sizeof (GtkProgressBarClass), (GtkClassInitFunc) gtk_progress_bar_class_init, (GtkObjectInitFunc) gtk_progress_bar_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; progress_bar_type = gtk_type_unique (gtk_widget_get_type (), &progress_bar_info); diff --git a/gtk/gtkradiobutton.c b/gtk/gtkradiobutton.c index 0c52836e9..1e9a36886 100644 --- a/gtk/gtkradiobutton.c +++ b/gtk/gtkradiobutton.c @@ -48,7 +48,8 @@ gtk_radio_button_get_type () sizeof (GtkRadioButtonClass), (GtkClassInitFunc) gtk_radio_button_class_init, (GtkObjectInitFunc) gtk_radio_button_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; radio_button_type = gtk_type_unique (gtk_check_button_get_type (), &radio_button_info); diff --git a/gtk/gtkradiomenuitem.c b/gtk/gtkradiomenuitem.c index edb8d63e7..eb9c0c976 100644 --- a/gtk/gtkradiomenuitem.c +++ b/gtk/gtkradiomenuitem.c @@ -40,7 +40,8 @@ gtk_radio_menu_item_get_type () sizeof (GtkRadioMenuItemClass), (GtkClassInitFunc) gtk_radio_menu_item_class_init, (GtkObjectInitFunc) gtk_radio_menu_item_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; radio_menu_item_type = gtk_type_unique (gtk_check_menu_item_get_type (), &radio_menu_item_info); diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index 58c41e43f..82d3c9783 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -90,7 +90,8 @@ gtk_range_get_type () sizeof (GtkRangeClass), (GtkClassInitFunc) gtk_range_class_init, (GtkObjectInitFunc) gtk_range_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; range_type = gtk_type_unique (gtk_widget_get_type (), &range_info); diff --git a/gtk/gtkruler.c b/gtk/gtkruler.c index e8a9b0710..849d5eadf 100644 --- a/gtk/gtkruler.c +++ b/gtk/gtkruler.c @@ -51,7 +51,8 @@ gtk_ruler_get_type () sizeof (GtkRulerClass), (GtkClassInitFunc) gtk_ruler_class_init, (GtkObjectInitFunc) gtk_ruler_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; ruler_type = gtk_type_unique (gtk_widget_get_type (), &ruler_info); diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c index ba2f18616..073b6ef2a 100644 --- a/gtk/gtkscale.c +++ b/gtk/gtkscale.c @@ -46,7 +46,8 @@ gtk_scale_get_type () sizeof (GtkScaleClass), (GtkClassInitFunc) gtk_scale_class_init, (GtkObjectInitFunc) gtk_scale_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; scale_type = gtk_type_unique (gtk_range_get_type (), &scale_info); diff --git a/gtk/gtkscrollbar.c b/gtk/gtkscrollbar.c index 3f5088b44..4c0d4b204 100644 --- a/gtk/gtkscrollbar.c +++ b/gtk/gtkscrollbar.c @@ -34,7 +34,8 @@ gtk_scrollbar_get_type () sizeof (GtkScrollbarClass), (GtkClassInitFunc) gtk_scrollbar_class_init, (GtkObjectInitFunc) gtk_scrollbar_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; scrollbar_type = gtk_type_unique (gtk_range_get_type (), &scrollbar_info); diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 320692710..d637ce25e 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -63,7 +63,8 @@ gtk_scrolled_window_get_type () sizeof (GtkScrolledWindowClass), (GtkClassInitFunc) gtk_scrolled_window_class_init, (GtkObjectInitFunc) gtk_scrolled_window_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; scrolled_window_type = gtk_type_unique (gtk_container_get_type (), &scrolled_window_info); diff --git a/gtk/gtkseparator.c b/gtk/gtkseparator.c index 6ad41ad5b..1e14c737b 100644 --- a/gtk/gtkseparator.c +++ b/gtk/gtkseparator.c @@ -36,7 +36,8 @@ gtk_separator_get_type () sizeof (GtkSeparatorClass), (GtkClassInitFunc) gtk_separator_class_init, (GtkObjectInitFunc) gtk_separator_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; separator_type = gtk_type_unique (gtk_widget_get_type (), &separator_info); diff --git a/gtk/gtktable.c b/gtk/gtktable.c index 7711524de..623c2c210 100644 --- a/gtk/gtktable.c +++ b/gtk/gtktable.c @@ -66,7 +66,8 @@ gtk_table_get_type () sizeof (GtkTableClass), (GtkClassInitFunc) gtk_table_class_init, (GtkObjectInitFunc) gtk_table_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; table_type = gtk_type_unique (gtk_container_get_type (), &table_info); diff --git a/gtk/gtktext.c b/gtk/gtktext.c index fdd133eb5..44ac63ba6 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -325,7 +325,8 @@ gtk_text_get_type () sizeof (GtkTextClass), (GtkClassInitFunc) gtk_text_class_init, (GtkObjectInitFunc) gtk_text_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; text_type = gtk_type_unique (gtk_widget_get_type (), &text_info); diff --git a/gtk/gtktogglebutton.c b/gtk/gtktogglebutton.c index eabcb1b26..be39f8b1f 100644 --- a/gtk/gtktogglebutton.c +++ b/gtk/gtktogglebutton.c @@ -58,7 +58,8 @@ gtk_toggle_button_get_type () sizeof (GtkToggleButtonClass), (GtkClassInitFunc) gtk_toggle_button_class_init, (GtkObjectInitFunc) gtk_toggle_button_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; toggle_button_type = gtk_type_unique (gtk_button_get_type (), &toggle_button_info); diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c index 3bc43591c..59c88633c 100644 --- a/gtk/gtktoolbar.c +++ b/gtk/gtktoolbar.c @@ -104,7 +104,8 @@ gtk_toolbar_get_type (void) sizeof (GtkToolbarClass), (GtkClassInitFunc) gtk_toolbar_class_init, (GtkObjectInitFunc) gtk_toolbar_init, - (GtkArgFunc) NULL + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; toolbar_type = gtk_type_unique (gtk_container_get_type (), &toolbar_info); diff --git a/gtk/gtktree.c b/gtk/gtktree.c index 512d4a491..c81e3d774 100644 --- a/gtk/gtktree.c +++ b/gtk/gtktree.c @@ -88,7 +88,8 @@ gtk_tree_get_type () sizeof (GtkTreeClass), (GtkClassInitFunc) gtk_tree_class_init, (GtkObjectInitFunc) gtk_tree_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; tree_type = gtk_type_unique (gtk_container_get_type (), &tree_info); diff --git a/gtk/gtktreeitem.c b/gtk/gtktreeitem.c index 199966664..71f833d37 100644 --- a/gtk/gtktreeitem.c +++ b/gtk/gtktreeitem.c @@ -99,7 +99,8 @@ gtk_tree_item_get_type () sizeof (GtkTreeItemClass), (GtkClassInitFunc) gtk_tree_item_class_init, (GtkObjectInitFunc) gtk_tree_item_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; tree_item_type = gtk_type_unique (gtk_item_get_type (), &tree_item_info); diff --git a/gtk/gtktypeutils.c b/gtk/gtktypeutils.c index ffde61647..79e049156 100644 --- a/gtk/gtktypeutils.c +++ b/gtk/gtktypeutils.c @@ -271,8 +271,9 @@ gtk_type_is_a (GtkType type, void gtk_type_set_arg (GtkObject *object, - GtkType type, - GtkArg *arg) + GtkType type, + GtkArg *arg, + guint arg_id) { GtkTypeNode *node; @@ -281,8 +282,8 @@ gtk_type_set_arg (GtkObject *object, node = g_hash_table_lookup (type_hash_table, &type); - if (node->type_info.arg_func) - (* node->type_info.arg_func) (object, arg); + if (node && node->type_info.arg_set_func) + (* node->type_info.arg_set_func) (object, arg, arg_id); } static void @@ -390,7 +391,8 @@ gtk_type_register_builtin (char *name, info.object_size = info.class_size = 0; info.class_init_func = NULL; info.object_init_func = NULL; - info.arg_func = NULL; + info.arg_set_func = NULL; + info.arg_get_func = NULL; return gtk_type_unique (parent, &info); } diff --git a/gtk/gtktypeutils.h b/gtk/gtktypeutils.h index 911885be9..d6e398f0e 100644 --- a/gtk/gtktypeutils.h +++ b/gtk/gtktypeutils.h @@ -77,7 +77,8 @@ typedef struct _GtkTypeInfo GtkTypeInfo; typedef void (*GtkClassInitFunc) (gpointer klass); typedef void (*GtkObjectInitFunc) (gpointer object); -typedef void (*GtkArgFunc) (GtkObject *object, GtkArg *arg); +typedef void (*GtkArgGetFunc) (GtkObject *object, GtkArg *arg, guint arg_id); +typedef void (*GtkArgSetFunc) (GtkObject *object, GtkArg *arg, guint arg_id); typedef gint (*GtkFunction) (gpointer data); typedef void (*GtkRemoveFunction) (gpointer data); typedef void (*GtkCallbackMarshal) (GtkObject *object, @@ -89,7 +90,7 @@ typedef void (*GtkDestroyNotify) (gpointer data); struct _GtkArg { GtkType type; - char *name; + gchar *name; union { gchar char_data; @@ -166,7 +167,8 @@ struct _GtkTypeInfo guint class_size; GtkClassInitFunc class_init_func; GtkObjectInitFunc object_init_func; - GtkArgFunc arg_func; + GtkArgSetFunc arg_set_func; + GtkArgGetFunc arg_get_func; }; @@ -185,7 +187,8 @@ gint gtk_type_is_a (GtkType type, GtkType is_a_type); void gtk_type_set_arg (GtkObject *object, GtkType type, - GtkArg *arg); + GtkArg *arg, + guint arg_id); #ifdef __cplusplus diff --git a/gtk/gtkvbbox.c b/gtk/gtkvbbox.c index 4fc867fdf..3210f82dc 100644 --- a/gtk/gtkvbbox.c +++ b/gtk/gtkvbbox.c @@ -42,7 +42,8 @@ gtk_vbutton_box_get_type () sizeof (GtkVButtonBoxClass), (GtkClassInitFunc) gtk_vbutton_box_class_init, (GtkObjectInitFunc) gtk_vbutton_box_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; vbutton_box_type = gtk_type_unique (gtk_button_box_get_type (), &vbutton_box_info); diff --git a/gtk/gtkvbox.c b/gtk/gtkvbox.c index 585e99b87..a26f33ebc 100644 --- a/gtk/gtkvbox.c +++ b/gtk/gtkvbox.c @@ -40,7 +40,8 @@ gtk_vbox_get_type () sizeof (GtkVBoxClass), (GtkClassInitFunc) gtk_vbox_class_init, (GtkObjectInitFunc) gtk_vbox_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; vbox_type = gtk_type_unique (gtk_box_get_type (), &vbox_info); diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c index 46fd1d3c4..b39ca31ef 100644 --- a/gtk/gtkviewport.c +++ b/gtk/gtkviewport.c @@ -56,7 +56,8 @@ gtk_viewport_get_type () sizeof (GtkViewportClass), (GtkClassInitFunc) gtk_viewport_class_init, (GtkObjectInitFunc) gtk_viewport_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; viewport_type = gtk_type_unique (gtk_bin_get_type (), &viewport_info); diff --git a/gtk/gtkvpaned.c b/gtk/gtkvpaned.c index 2dae03209..9b0c0b2e0 100644 --- a/gtk/gtkvpaned.c +++ b/gtk/gtkvpaned.c @@ -49,7 +49,8 @@ gtk_vpaned_get_type () sizeof (GtkVPanedClass), (GtkClassInitFunc) gtk_vpaned_class_init, (GtkObjectInitFunc) gtk_vpaned_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; vpaned_type = gtk_type_unique (gtk_paned_get_type (), &vpaned_info); diff --git a/gtk/gtkvruler.c b/gtk/gtkvruler.c index 5de5099a5..80c97a61f 100644 --- a/gtk/gtkvruler.c +++ b/gtk/gtkvruler.c @@ -51,7 +51,8 @@ gtk_vruler_get_type () sizeof (GtkVRulerClass), (GtkClassInitFunc) gtk_vruler_class_init, (GtkObjectInitFunc) gtk_vruler_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; vruler_type = gtk_type_unique (gtk_ruler_get_type (), &vruler_info); diff --git a/gtk/gtkvscale.c b/gtk/gtkvscale.c index 9c2e3058f..20de97401 100644 --- a/gtk/gtkvscale.c +++ b/gtk/gtkvscale.c @@ -59,7 +59,8 @@ gtk_vscale_get_type () sizeof (GtkVScaleClass), (GtkClassInitFunc) gtk_vscale_class_init, (GtkObjectInitFunc) gtk_vscale_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; vscale_type = gtk_type_unique (gtk_scale_get_type (), &vscale_info); diff --git a/gtk/gtkvscrollbar.c b/gtk/gtkvscrollbar.c index 053131e65..f83fef1e8 100644 --- a/gtk/gtkvscrollbar.c +++ b/gtk/gtkvscrollbar.c @@ -53,7 +53,8 @@ gtk_vscrollbar_get_type () sizeof (GtkVScrollbarClass), (GtkClassInitFunc) gtk_vscrollbar_class_init, (GtkObjectInitFunc) gtk_vscrollbar_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; vscrollbar_type = gtk_type_unique (gtk_scrollbar_get_type (), &vscrollbar_info); diff --git a/gtk/gtkvseparator.c b/gtk/gtkvseparator.c index fbbba19ff..9e9b6d885 100644 --- a/gtk/gtkvseparator.c +++ b/gtk/gtkvseparator.c @@ -38,7 +38,8 @@ gtk_vseparator_get_type () sizeof (GtkVSeparatorClass), (GtkClassInitFunc) gtk_vseparator_class_init, (GtkObjectInitFunc) gtk_vseparator_init, - (GtkArgFunc) NULL, + (GtkArgSetFunc) NULL, + (GtkArgGetFunc) NULL, }; vseparator_type = gtk_type_unique (gtk_separator_get_type (), &vseparator_info); diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index c0f0d22b0..9dbde0d43 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -80,6 +80,21 @@ enum { LAST_SIGNAL }; +enum { + ARG_0, + ARG_X, + ARG_Y, + ARG_WIDTH, + ARG_HEIGHT, + ARG_VISIBLE, + ARG_SENSITIVE, + ARG_EVENTS, + ARG_EXTENSION_EVENTS, + ARG_NAME, + ARG_STYLE, + ARG_PARENT +}; + typedef void (*GtkWidgetSignal1) (GtkObject *object, gpointer arg1, @@ -116,8 +131,9 @@ static void gtk_widget_marshal_signal_4 (GtkObject *object, static void gtk_widget_class_init (GtkWidgetClass *klass); static void gtk_widget_init (GtkWidget *widget); -static void gtk_widget_arg (GtkWidget *widget, - GtkArg *arg); +static void gtk_widget_set_arg (GtkWidget *widget, + GtkArg *arg, + guint arg_id); static void gtk_real_widget_destroy (GtkObject *object); static void gtk_real_widget_show (GtkWidget *widget); static void gtk_real_widget_hide (GtkWidget *widget); @@ -205,7 +221,8 @@ gtk_widget_get_type () sizeof (GtkWidgetClass), (GtkClassInitFunc) gtk_widget_class_init, (GtkObjectInitFunc) gtk_widget_init, - (GtkArgFunc) gtk_widget_arg, + (GtkArgSetFunc) gtk_widget_set_arg, + (GtkArgGetFunc) NULL, }; widget_type = gtk_type_unique (gtk_object_get_type (), &widget_info); @@ -231,17 +248,17 @@ gtk_widget_class_init (GtkWidgetClass *klass) parent_class = gtk_type_class (gtk_object_get_type ()); - gtk_object_add_arg_type ("GtkWidget::x", GTK_TYPE_INT); - gtk_object_add_arg_type ("GtkWidget::y", GTK_TYPE_INT); - gtk_object_add_arg_type ("GtkWidget::width", GTK_TYPE_INT); - gtk_object_add_arg_type ("GtkWidget::height", GTK_TYPE_INT); - gtk_object_add_arg_type ("GtkWidget::visible", GTK_TYPE_BOOL); - gtk_object_add_arg_type ("GtkWidget::sensitive", GTK_TYPE_BOOL); - gtk_object_add_arg_type ("GtkWidget::events", GTK_TYPE_GDK_EVENT_MASK); - gtk_object_add_arg_type ("GtkWidget::extension_events", GTK_TYPE_GDK_EVENT_MASK); - gtk_object_add_arg_type ("GtkWidget::name", GTK_TYPE_STRING); - gtk_object_add_arg_type ("GtkWidget::style", GTK_TYPE_STYLE); - gtk_object_add_arg_type ("GtkWidget::parent", GTK_TYPE_CONTAINER); + gtk_object_add_arg_type ("GtkWidget::x", GTK_TYPE_INT, ARG_X); + gtk_object_add_arg_type ("GtkWidget::y", GTK_TYPE_INT, ARG_Y); + gtk_object_add_arg_type ("GtkWidget::width", GTK_TYPE_INT, ARG_WIDTH); + gtk_object_add_arg_type ("GtkWidget::height", GTK_TYPE_INT, ARG_HEIGHT); + gtk_object_add_arg_type ("GtkWidget::visible", GTK_TYPE_BOOL, ARG_VISIBLE); + gtk_object_add_arg_type ("GtkWidget::sensitive", GTK_TYPE_BOOL, ARG_SENSITIVE); + gtk_object_add_arg_type ("GtkWidget::events", GTK_TYPE_GDK_EVENT_MASK, ARG_EVENTS); + gtk_object_add_arg_type ("GtkWidget::extension_events", GTK_TYPE_GDK_EVENT_MASK, ARG_EXTENSION_EVENTS); + gtk_object_add_arg_type ("GtkWidget::name", GTK_TYPE_STRING, ARG_NAME); + gtk_object_add_arg_type ("GtkWidget::style", GTK_TYPE_STYLE, ARG_STYLE); + gtk_object_add_arg_type ("GtkWidget::parent", GTK_TYPE_CONTAINER, ARG_PARENT); widget_signals[SHOW] = gtk_signal_new ("show", @@ -651,7 +668,7 @@ gtk_widget_class_init (GtkWidgetClass *klass) } /***************************************** - * gtk_widget_arg: + * gtk_widget_set_arg: * * arguments: * @@ -659,55 +676,50 @@ gtk_widget_class_init (GtkWidgetClass *klass) *****************************************/ static void -gtk_widget_arg (GtkWidget *widget, - GtkArg *arg) +gtk_widget_set_arg (GtkWidget *widget, + GtkArg *arg, + guint arg_id) { - if (strcmp (arg->name, "x") == 0) + switch (arg_id) { + case ARG_X: gtk_widget_set_uposition (widget, GTK_VALUE_INT(*arg), -2); - } - else if (strcmp (arg->name, "y") == 0) - { + break; + case ARG_Y: gtk_widget_set_uposition (widget, -2, GTK_VALUE_INT(*arg)); - } - else if (strcmp (arg->name, "width") == 0) - { + break; + case ARG_WIDTH: gtk_widget_set_usize (widget, GTK_VALUE_INT(*arg), -1); - } - else if (strcmp (arg->name, "height") == 0) - { + break; + case ARG_HEIGHT: gtk_widget_set_usize (widget, -1, GTK_VALUE_INT(*arg)); - } - else if (strcmp (arg->name, "visible") == 0) - { + break; + case ARG_VISIBLE: if (GTK_VALUE_BOOL(*arg)) gtk_widget_show (widget); else gtk_widget_hide (widget); - } - else if (strcmp (arg->name, "sensitive") == 0) - { + break; + case ARG_SENSITIVE: gtk_widget_set_sensitive (widget, GTK_VALUE_BOOL(*arg)); - } - else if (strcmp (arg->name, "events") == 0) - { + break; + case ARG_EVENTS: gtk_widget_set_events (widget, GTK_VALUE_FLAGS(*arg)); - } - else if (strcmp (arg->name, "extension_events") == 0) - { + break; + case ARG_EXTENSION_EVENTS: gtk_widget_set_extension_events (widget, GTK_VALUE_FLAGS(*arg)); - } - else if (strcmp (arg->name, "name") == 0) - { + break; + case ARG_NAME: gtk_widget_set_name (widget, GTK_VALUE_STRING(*arg)); - } - else if (strcmp (arg->name, "style") == 0) - { + break; + case ARG_STYLE: gtk_widget_set_style (widget, (GtkStyle*)GTK_VALUE_BOXED(*arg)); - } - else if (strcmp (arg->name, "parent") == 0) - { + break; + case ARG_PARENT: gtk_container_add (GTK_CONTAINER (GTK_VALUE_OBJECT(*arg)), widget); + break; + default: + g_assert_not_reached (); } } diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index f7ed03ed7..163ade09a 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -28,7 +28,14 @@ enum { SET_FOCUS, LAST_SIGNAL }; - +enum { + ARG_0, + ARG_TYPE, + ARG_TITLE, + ARG_AUTO_SHRINK, + ARG_ALLOW_SHRINK, + ARG_ALLOW_GROW +}; typedef gint (*GtkWindowSignal1) (GtkObject *object, gpointer arg1, @@ -50,8 +57,9 @@ static void gtk_window_marshal_signal_2 (GtkObject *object, GtkArg *args); static void gtk_window_class_init (GtkWindowClass *klass); static void gtk_window_init (GtkWindow *window); -static void gtk_window_arg (GtkWindow *window, - GtkArg *arg); +static void gtk_window_set_arg (GtkWindow *window, + GtkArg *arg, + guint arg_id); static void gtk_window_destroy (GtkObject *object); static void gtk_window_show (GtkWidget *widget); static void gtk_window_hide (GtkWidget *widget); @@ -114,7 +122,8 @@ gtk_window_get_type () sizeof (GtkWindowClass), (GtkClassInitFunc) gtk_window_class_init, (GtkObjectInitFunc) gtk_window_init, - (GtkArgFunc) gtk_window_arg, + (GtkArgSetFunc) gtk_window_set_arg, + (GtkArgGetFunc) NULL, }; window_type = gtk_type_unique (gtk_bin_get_type (), &window_info); @@ -136,11 +145,11 @@ gtk_window_class_init (GtkWindowClass *klass) parent_class = gtk_type_class (gtk_bin_get_type ()); - gtk_object_add_arg_type ("GtkWindow::type", GTK_TYPE_WINDOW_TYPE); - gtk_object_add_arg_type ("GtkWindow::title", GTK_TYPE_STRING); - gtk_object_add_arg_type ("GtkWindow::auto_shrink", GTK_TYPE_BOOL); - gtk_object_add_arg_type ("GtkWindow::allow_shrink", GTK_TYPE_BOOL); - gtk_object_add_arg_type ("GtkWindow::allow_grow", GTK_TYPE_BOOL); + gtk_object_add_arg_type ("GtkWindow::type", GTK_TYPE_WINDOW_TYPE, ARG_TYPE); + gtk_object_add_arg_type ("GtkWindow::title", GTK_TYPE_STRING, ARG_TITLE); + gtk_object_add_arg_type ("GtkWindow::auto_shrink", GTK_TYPE_BOOL, ARG_AUTO_SHRINK); + gtk_object_add_arg_type ("GtkWindow::allow_shrink", GTK_TYPE_BOOL, ARG_ALLOW_SHRINK); + gtk_object_add_arg_type ("GtkWindow::allow_grow", GTK_TYPE_BOOL, ARG_ALLOW_GROW); window_signals[MOVE_RESIZE] = gtk_signal_new ("move_resize", @@ -212,28 +221,29 @@ gtk_window_init (GtkWindow *window) } static void -gtk_window_arg (GtkWindow *window, - GtkArg *arg) +gtk_window_set_arg (GtkWindow *window, + GtkArg *arg, + guint arg_id) { - if (strcmp (arg->name, "type") == 0) + switch (arg_id) { + case ARG_TYPE: window->type = GTK_VALUE_ENUM(*arg); - } - else if (strcmp (arg->name, "title") == 0) - { + break; + case ARG_TITLE: gtk_window_set_title (window, GTK_VALUE_STRING(*arg)); - } - else if (strcmp (arg->name, "auto_shrink") == 0) - { + break; + case ARG_AUTO_SHRINK: window->auto_shrink = (GTK_VALUE_BOOL(*arg) != FALSE); - } - else if (strcmp (arg->name, "allow_shrink") == 0) - { + break; + case ARG_ALLOW_SHRINK: window->allow_shrink = (GTK_VALUE_BOOL(*arg) != FALSE); - } - else if (strcmp (arg->name, "allow_grow") == 0) - { + break; + case ARG_ALLOW_GROW: window->allow_grow = (GTK_VALUE_BOOL(*arg) != FALSE); + break; + default: + g_assert_not_reached (); } }