X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=tests%2Fprop-editor.c;h=df983dc52e9aa563884f4fb688869f25a9851e68;hb=ba76f545499343fc4d869515d5d065a8364a6854;hp=dd441493cc9de8c2a7370b3812f127d616e891a8;hpb=45ac6c4fc15222e01497fd63b88894306946abb3;p=~andy%2Fgtk diff --git a/tests/prop-editor.c b/tests/prop-editor.c index dd441493c..df983dc52 100644 --- a/tests/prop-editor.c +++ b/tests/prop-editor.c @@ -19,7 +19,6 @@ #include -#undef GTK_DISABLE_DEPRECATED #include #include "prop-editor.h" @@ -29,7 +28,7 @@ typedef struct { gpointer instance; GObject *alive_object; - guint id; + gulong id; } DisconnectData; static void @@ -103,7 +102,7 @@ typedef struct { GObject *obj; GParamSpec *spec; - gint modified_id; + gulong modified_id; } ObjectProperty; static void @@ -160,10 +159,10 @@ int_modified (GtkAdjustment *adj, gpointer data) GtkWidget *parent = gtk_widget_get_parent (widget); gtk_container_child_set (GTK_CONTAINER (parent), - widget, p->spec->name, (int) adj->value, NULL); + widget, p->spec->name, (int) gtk_adjustment_get_value (adj), NULL); } else - g_object_set (p->obj, p->spec->name, (int) adj->value, NULL); + g_object_set (p->obj, p->spec->name, (int) gtk_adjustment_get_value (adj), NULL); } static void @@ -191,7 +190,7 @@ int_changed (GObject *object, GParamSpec *pspec, gpointer data) get_property_value (object, pspec, &val); - if (g_value_get_int (&val) != (int)adj->value) + if (g_value_get_int (&val) != (int)gtk_adjustment_get_value (adj)) { block_controller (G_OBJECT (adj)); gtk_adjustment_set_value (adj, g_value_get_int (&val)); @@ -212,10 +211,10 @@ uint_modified (GtkAdjustment *adj, gpointer data) GtkWidget *parent = gtk_widget_get_parent (widget); gtk_container_child_set (GTK_CONTAINER (parent), - widget, p->spec->name, (guint) adj->value, NULL); + widget, p->spec->name, (guint) gtk_adjustment_get_value (adj), NULL); } else - g_object_set (p->obj, p->spec->name, (guint) adj->value, NULL); + g_object_set (p->obj, p->spec->name, (guint) gtk_adjustment_get_value (adj), NULL); } static void @@ -227,7 +226,7 @@ uint_changed (GObject *object, GParamSpec *pspec, gpointer data) g_value_init (&val, G_TYPE_UINT); get_property_value (object, pspec, &val); - if (g_value_get_uint (&val) != (guint)adj->value) + if (g_value_get_uint (&val) != (guint)gtk_adjustment_get_value (adj)) { block_controller (G_OBJECT (adj)); gtk_adjustment_set_value (adj, g_value_get_uint (&val)); @@ -248,10 +247,10 @@ float_modified (GtkAdjustment *adj, gpointer data) GtkWidget *parent = gtk_widget_get_parent (widget); gtk_container_child_set (GTK_CONTAINER (parent), - widget, p->spec->name, (float) adj->value, NULL); + widget, p->spec->name, (float) gtk_adjustment_get_value (adj), NULL); } else - g_object_set (p->obj, p->spec->name, (float) adj->value, NULL); + g_object_set (p->obj, p->spec->name, (float) gtk_adjustment_get_value (adj), NULL); } static void @@ -263,7 +262,7 @@ float_changed (GObject *object, GParamSpec *pspec, gpointer data) g_value_init (&val, G_TYPE_FLOAT); get_property_value (object, pspec, &val); - if (g_value_get_float (&val) != (float) adj->value) + if (g_value_get_float (&val) != (float) gtk_adjustment_get_value (adj)) { block_controller (G_OBJECT (adj)); gtk_adjustment_set_value (adj, g_value_get_float (&val)); @@ -284,10 +283,10 @@ double_modified (GtkAdjustment *adj, gpointer data) GtkWidget *parent = gtk_widget_get_parent (widget); gtk_container_child_set (GTK_CONTAINER (parent), - widget, p->spec->name, (double) adj->value, NULL); + widget, p->spec->name, (double) gtk_adjustment_get_value (adj), NULL); } else - g_object_set (p->obj, p->spec->name, (double) adj->value, NULL); + g_object_set (p->obj, p->spec->name, (double) gtk_adjustment_get_value (adj), NULL); } static void @@ -299,7 +298,7 @@ double_changed (GObject *object, GParamSpec *pspec, gpointer data) g_value_init (&val, G_TYPE_DOUBLE); get_property_value (object, pspec, &val); - if (g_value_get_double (&val) != adj->value) + if (g_value_get_double (&val) != gtk_adjustment_get_value (adj)) { block_controller (G_OBJECT (adj)); gtk_adjustment_set_value (adj, g_value_get_double (&val)); @@ -365,47 +364,51 @@ bool_modified (GtkToggleButton *tb, gpointer data) GtkWidget *widget = GTK_WIDGET (p->obj); GtkWidget *parent = gtk_widget_get_parent (widget); - gtk_container_child_set (GTK_CONTAINER (parent), - widget, p->spec->name, (int) tb->active, NULL); + gtk_container_child_set (GTK_CONTAINER (parent), widget, + p->spec->name, (int) gtk_toggle_button_get_active (tb), + NULL); } else - g_object_set (p->obj, p->spec->name, (int) tb->active, NULL); + g_object_set (p->obj, p->spec->name, (int) gtk_toggle_button_get_active (tb), NULL); } static void bool_changed (GObject *object, GParamSpec *pspec, gpointer data) { GtkToggleButton *tb = GTK_TOGGLE_BUTTON (data); + GtkWidget *child; GValue val = { 0, }; g_value_init (&val, G_TYPE_BOOLEAN); get_property_value (object, pspec, &val); - if (g_value_get_boolean (&val) != tb->active) + if (g_value_get_boolean (&val) != gtk_toggle_button_get_active (tb)) { block_controller (G_OBJECT (tb)); gtk_toggle_button_set_active (tb, g_value_get_boolean (&val)); unblock_controller (G_OBJECT (tb)); } - gtk_label_set_text (GTK_LABEL (GTK_BIN (tb)->child), g_value_get_boolean (&val) ? - "TRUE" : "FALSE"); + child = gtk_bin_get_child (GTK_BIN (tb)); + gtk_label_set_text (GTK_LABEL (child), + g_value_get_boolean (&val) ? "TRUE" : "FALSE"); g_value_unset (&val); } static void -enum_modified (GtkOptionMenu *om, gpointer data) +enum_modified (GtkComboBox *cb, gpointer data) { ObjectProperty *p = data; gint i; GEnumClass *eclass; eclass = G_ENUM_CLASS (g_type_class_peek (p->spec->value_type)); - - i = gtk_option_menu_get_history (om); - + + i = gtk_combo_box_get_active (cb); + + if (is_child_property (p->spec)) { GtkWidget *widget = GTK_WIDGET (p->obj); @@ -421,7 +424,7 @@ enum_modified (GtkOptionMenu *om, gpointer data) static void enum_changed (GObject *object, GParamSpec *pspec, gpointer data) { - GtkOptionMenu *om = GTK_OPTION_MENU (data); + GtkComboBox *cb = GTK_COMBO_BOX (data); GValue val = { 0, }; GEnumClass *eclass; gint i; @@ -439,11 +442,11 @@ enum_changed (GObject *object, GParamSpec *pspec, gpointer data) ++i; } - if (gtk_option_menu_get_history (om) != i) + if (gtk_combo_box_get_active (cb) != i) { - block_controller (G_OBJECT (om)); - gtk_option_menu_set_history (om, i); - unblock_controller (G_OBJECT (om)); + block_controller (G_OBJECT (cb)); + gtk_combo_box_set_active (cb, i); + unblock_controller (G_OBJECT (cb)); } g_value_unset (&val); @@ -593,13 +596,15 @@ pointer_changed (GObject *object, GParamSpec *pspec, gpointer data) g_free (str); } -gchar * -object_label (GObject *obj) +static gchar * +object_label (GObject *obj, GParamSpec *pspec) { const gchar *name; if (obj) name = g_type_name (G_TYPE_FROM_INSTANCE (obj)); + else if (pspec) + name = g_type_name (G_PARAM_SPEC_VALUE_TYPE (pspec)); else name = "unknown"; return g_strdup_printf ("Object: %p (%s)", obj, name); @@ -618,7 +623,7 @@ object_changed (GObject *object, GParamSpec *pspec, gpointer data) g_object_get (object, pspec->name, &obj, NULL); g_list_free (children); - str = object_label (obj); + str = object_label (obj, pspec); gtk_label_set_text (GTK_LABEL (label), str); gtk_widget_set_sensitive (button, G_IS_OBJECT (obj)); @@ -655,6 +660,50 @@ object_properties (GtkWidget *button, create_prop_editor (obj, 0); } +static void +color_modified (GtkColorButton *cb, gpointer data) +{ + ObjectProperty *p = data; + GdkRGBA rgba; + + gtk_color_button_get_rgba (cb, &rgba); + + if (is_child_property (p->spec)) + { + GtkWidget *widget = GTK_WIDGET (p->obj); + GtkWidget *parent = gtk_widget_get_parent (widget); + + gtk_container_child_set (GTK_CONTAINER (parent), + widget, p->spec->name, &rgba, NULL); + } + else + g_object_set (p->obj, p->spec->name, &rgba, NULL); +} + +static void +color_changed (GObject *object, GParamSpec *pspec, gpointer data) +{ + GtkColorButton *cb = GTK_COLOR_BUTTON (data); + GValue val = { 0, }; + GdkRGBA *color; + GdkRGBA cb_color; + + g_value_init (&val, GDK_TYPE_RGBA); + get_property_value (object, pspec, &val); + + color = g_value_get_boxed (&val); + gtk_color_button_get_rgba (cb, &cb_color); + + if (color != NULL && !gdk_rgba_equal (color, &cb_color)) + { + block_controller (G_OBJECT (cb)); + gtk_color_button_set_rgba (cb, color); + unblock_controller (G_OBJECT (cb)); + } + + g_value_unset (&val); +} + static GtkWidget * property_widget (GObject *object, GParamSpec *spec, @@ -667,14 +716,13 @@ property_widget (GObject *object, if (type == G_TYPE_PARAM_INT) { - adj = GTK_ADJUSTMENT (gtk_adjustment_new (G_PARAM_SPEC_INT (spec)->default_value, - G_PARAM_SPEC_INT (spec)->minimum, - G_PARAM_SPEC_INT (spec)->maximum, - 1, - MAX ((G_PARAM_SPEC_INT (spec)->maximum - - G_PARAM_SPEC_INT (spec)->minimum) / 10, 1), - 0.0)); - + adj = gtk_adjustment_new (G_PARAM_SPEC_INT (spec)->default_value, + G_PARAM_SPEC_INT (spec)->minimum, + G_PARAM_SPEC_INT (spec)->maximum, + 1, + MAX ((G_PARAM_SPEC_INT (spec)->maximum - G_PARAM_SPEC_INT (spec)->minimum) / 10, 1), + 0.0); + prop_edit = gtk_spin_button_new (adj, 1.0, 0); g_object_connect_property (object, spec, @@ -687,15 +735,13 @@ property_widget (GObject *object, } else if (type == G_TYPE_PARAM_UINT) { - adj = GTK_ADJUSTMENT ( - gtk_adjustment_new (G_PARAM_SPEC_UINT (spec)->default_value, - G_PARAM_SPEC_UINT (spec)->minimum, - G_PARAM_SPEC_UINT (spec)->maximum, - 1, - MAX ((G_PARAM_SPEC_UINT (spec)->maximum - - G_PARAM_SPEC_UINT (spec)->minimum) / 10, 1), - 0.0)); - + adj = gtk_adjustment_new (G_PARAM_SPEC_UINT (spec)->default_value, + G_PARAM_SPEC_UINT (spec)->minimum, + G_PARAM_SPEC_UINT (spec)->maximum, + 1, + MAX ((G_PARAM_SPEC_UINT (spec)->maximum - G_PARAM_SPEC_UINT (spec)->minimum) / 10, 1), + 0.0); + prop_edit = gtk_spin_button_new (adj, 1.0, 0); g_object_connect_property (object, spec, @@ -708,15 +754,13 @@ property_widget (GObject *object, } else if (type == G_TYPE_PARAM_FLOAT) { + adj = gtk_adjustment_new (G_PARAM_SPEC_FLOAT (spec)->default_value, + G_PARAM_SPEC_FLOAT (spec)->minimum, + G_PARAM_SPEC_FLOAT (spec)->maximum, + 0.1, + MAX ((G_PARAM_SPEC_FLOAT (spec)->maximum - G_PARAM_SPEC_FLOAT (spec)->minimum) / 10, 0.1), + 0.0); - adj = GTK_ADJUSTMENT (gtk_adjustment_new (G_PARAM_SPEC_FLOAT (spec)->default_value, - G_PARAM_SPEC_FLOAT (spec)->minimum, - G_PARAM_SPEC_FLOAT (spec)->maximum, - 0.1, - MAX ((G_PARAM_SPEC_FLOAT (spec)->maximum - - G_PARAM_SPEC_FLOAT (spec)->minimum) / 10, 0.1), - 0.0)); - prop_edit = gtk_spin_button_new (adj, 0.1, 2); g_object_connect_property (object, spec, @@ -729,14 +773,13 @@ property_widget (GObject *object, } else if (type == G_TYPE_PARAM_DOUBLE) { - adj = GTK_ADJUSTMENT (gtk_adjustment_new (G_PARAM_SPEC_DOUBLE (spec)->default_value, - G_PARAM_SPEC_DOUBLE (spec)->minimum, - G_PARAM_SPEC_DOUBLE (spec)->maximum, - 0.1, - MAX ((G_PARAM_SPEC_DOUBLE (spec)->maximum - - G_PARAM_SPEC_DOUBLE (spec)->minimum) / 10, 0.1), - 0.0)); - + adj = gtk_adjustment_new (G_PARAM_SPEC_DOUBLE (spec)->default_value, + G_PARAM_SPEC_DOUBLE (spec)->minimum, + G_PARAM_SPEC_DOUBLE (spec)->maximum, + 0.1, + MAX ((G_PARAM_SPEC_DOUBLE (spec)->maximum - G_PARAM_SPEC_DOUBLE (spec)->minimum) / 10, 0.1), + 0.0); + prop_edit = gtk_spin_button_new (adj, 0.1, 2); g_object_connect_property (object, spec, @@ -774,34 +817,23 @@ property_widget (GObject *object, else if (type == G_TYPE_PARAM_ENUM) { { - GtkWidget *menu; GEnumClass *eclass; gint j; - prop_edit = gtk_option_menu_new (); - - menu = gtk_menu_new (); + prop_edit = gtk_combo_box_text_new (); eclass = G_ENUM_CLASS (g_type_class_ref (spec->value_type)); j = 0; while (j < eclass->n_values) { - GtkWidget *mi; - - mi = gtk_menu_item_new_with_label (eclass->values[j].value_name); - - gtk_widget_show (mi); - - gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi); - + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (prop_edit), + eclass->values[j].value_name); ++j; } g_type_class_unref (eclass); - gtk_option_menu_set_menu (GTK_OPTION_MENU (prop_edit), menu); - g_object_connect_property (object, spec, G_CALLBACK (enum_changed), prop_edit, G_OBJECT (prop_edit)); @@ -817,7 +849,7 @@ property_widget (GObject *object, GFlagsClass *fclass; gint j; - prop_edit = gtk_vbox_new (FALSE, 0); + prop_edit = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); fclass = G_FLAGS_CLASS (g_type_class_ref (spec->value_type)); @@ -866,7 +898,7 @@ property_widget (GObject *object, { GtkWidget *label, *button; - prop_edit = gtk_hbox_new (FALSE, 5); + prop_edit = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); label = gtk_label_new (""); button = gtk_button_new_with_label ("Properties"); @@ -877,10 +909,26 @@ property_widget (GObject *object, gtk_container_add (GTK_CONTAINER (prop_edit), label); gtk_container_add (GTK_CONTAINER (prop_edit), button); - + g_object_connect_property (object, spec, G_CALLBACK (object_changed), prop_edit, G_OBJECT (label)); + + /* The Properties button is not really modifying, anyway */ + can_modify = TRUE; + } + else if (type == G_TYPE_PARAM_BOXED && + G_PARAM_SPEC_VALUE_TYPE (spec) == GDK_TYPE_COLOR) + { + prop_edit = gtk_color_button_new (); + + g_object_connect_property (object, spec, + G_CALLBACK (color_changed), + prop_edit, G_OBJECT (prop_edit)); + + if (can_modify) + connect_controller (G_OBJECT (prop_edit), "color-set", + object, spec, G_CALLBACK (color_modified)); } else { @@ -891,6 +939,12 @@ property_widget (GObject *object, gtk_misc_set_alignment (GTK_MISC (prop_edit), 0.0, 0.5); } + if (!can_modify) + gtk_widget_set_sensitive (prop_edit, FALSE); + + if (g_param_spec_get_blurb (spec)) + gtk_widget_set_tooltip_text (prop_edit, g_param_spec_get_blurb (spec)); + return prop_edit; } @@ -959,23 +1013,14 @@ properties_from_type (GObject *object, prop_edit = property_widget (object, spec, can_modify); gtk_table_attach_defaults (GTK_TABLE (table), prop_edit, 1, 2, i, i + 1); - if (prop_edit) - { - if (!can_modify) - gtk_widget_set_sensitive (prop_edit, FALSE); - - if (g_param_spec_get_blurb (spec)) - gtk_widget_set_tooltip_text (prop_edit, g_param_spec_get_blurb (spec)); + /* set initial value */ + g_object_notify (object, spec->name); - /* set initial value */ - g_object_notify (object, spec->name); - } - ++i; } - vbox = gtk_vbox_new (FALSE, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); sw = gtk_scrolled_window_new (NULL, NULL); @@ -1042,22 +1087,13 @@ child_properties_from_object (GObject *object) prop_edit = property_widget (object, spec, can_modify); gtk_table_attach_defaults (GTK_TABLE (table), prop_edit, 1, 2, i, i + 1); - if (prop_edit) - { - if (!can_modify) - gtk_widget_set_sensitive (prop_edit, FALSE); - - if (g_param_spec_get_blurb (spec)) - gtk_widget_set_tooltip_text (prop_edit, g_param_spec_get_blurb (spec)); + /* set initial value */ + gtk_widget_child_notify (GTK_WIDGET (object), spec->name); - /* set initial value */ - gtk_widget_child_notify (GTK_WIDGET (object), spec->name); - } - ++i; } - vbox = gtk_vbox_new (FALSE, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); sw = gtk_scrolled_window_new (NULL, NULL); @@ -1103,9 +1139,9 @@ children_from_object (GObject *object) gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i + 1); - prop_edit = gtk_hbox_new (FALSE, 5); + prop_edit = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); - str = object_label (object); + str = object_label (object, NULL); label = gtk_label_new (str); g_free (str); button = gtk_button_new_with_label ("Properties"); @@ -1119,7 +1155,7 @@ children_from_object (GObject *object) gtk_table_attach_defaults (GTK_TABLE (table), prop_edit, 1, 2, i, i + 1); } - vbox = gtk_vbox_new (FALSE, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); sw = gtk_scrolled_window_new (NULL, NULL); @@ -1158,9 +1194,9 @@ cells_from_object (GObject *object) gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, i, i + 1); - prop_edit = gtk_hbox_new (FALSE, 5); + prop_edit = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5); - str = object_label (object); + str = object_label (object, NULL); label = gtk_label_new (str); g_free (str); button = gtk_button_new_with_label ("Properties"); @@ -1174,7 +1210,7 @@ cells_from_object (GObject *object) gtk_table_attach_defaults (GTK_TABLE (table), prop_edit, 1, 2, i, i + 1); } - vbox = gtk_vbox_new (FALSE, 0); + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); sw = gtk_scrolled_window_new (NULL, NULL);