From 9d924466617397c790295a733322d8827b909ef2 Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Sun, 18 Apr 2004 14:18:20 +0000 Subject: Fix font selection combo box issues; fixes bug #138560. 2004-04-18 Christian Persch * configure.in: * lib/ephy-dialog.c: (set_value_from_editable), (set_value_from_combobox), (set_value_from_radiobuttongroup), (set_value_from_spin_button), (set_value_from_togglebutton), (set_value_from_info), (set_combo_box_from_value), (set_pref_from_info_and_emit), (save_info), (ephy_dialog_get_value): * lib/ephy-dialog.h: * src/prefs-dialog.c: (setup_font_combo): Fix font selection combo box issues; fixes bug #138560. --- ChangeLog | 20 +++++++ configure.in | 3 -- lib/ephy-dialog.c | 150 ++++++++++++++++++++++++++++++----------------------- lib/ephy-dialog.h | 2 +- src/prefs-dialog.c | 1 + 5 files changed, 107 insertions(+), 69 deletions(-) diff --git a/ChangeLog b/ChangeLog index ab8649101..c207abd17 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2004-04-18 Christian Persch + + * configure.in: + * lib/ephy-dialog.c: (set_value_from_editable), + (set_value_from_combobox), (set_value_from_radiobuttongroup), + (set_value_from_spin_button), (set_value_from_togglebutton), + (set_value_from_info), (set_combo_box_from_value), + (set_pref_from_info_and_emit), (save_info), + (ephy_dialog_get_value): + * lib/ephy-dialog.h: + * src/prefs-dialog.c: (setup_font_combo): + + Fix font selection combo box issues; fixes bug #138560. + +2004-04-18 Christian Persch + + * configure.in: + + Remove libbonoboui checks, we don't depend on it anymore. + 2004-04-18 Marco Pesenti Gritti * embed/ephy-embed.c: (ephy_embed_chrome_get_type): diff --git a/configure.in b/configure.in index 291dd96c4..78ee39d63 100644 --- a/configure.in +++ b/configure.in @@ -20,14 +20,12 @@ ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" GLIB_REQUIRED=2.4.0 GTK_REQUIRED=2.4.0 -LIBBONOBOUI_REQUIRED=2.1.1 LIBXML_REQUIRED=2.6.6 LIBGNOMEVFS_REQUIRED=2.3.1 LIBGLADE_REQUIRED=2.3.1 AC_SUBST(GLIB_REQUIRED) AC_SUBST(GTK_REQUIRED) -AC_SUBST(LIBBONOBOUI_REQUIRED) AC_SUBST(LIBXML_REQUIRED) AC_SUBST(LIBGNOMEVFS_REQUIRED) AC_SUBST(LIBGLADE_REQUIRED) @@ -57,7 +55,6 @@ PKG_CHECK_MODULES(EPIPHANY_DEPENDENCY, \ libxml-2.0 >= $LIBXML_REQUIRED \ libgnomeui-2.0 libglade-2.0 \ bonobo-activation-2.0 \ - libbonoboui-2.0 >= $LIBBONOBOUI_REQUIRED \ ORBit-2.0 \ libglade-2.0 >= $LIBGLADE_REQUIRED \ gnome-vfs-2.0 >= $LIBGNOMEVFS_REQUIRED \ diff --git a/lib/ephy-dialog.c b/lib/ephy-dialog.c index c359d5274..df68fb15b 100644 --- a/lib/ephy-dialog.c +++ b/lib/ephy-dialog.c @@ -227,13 +227,14 @@ set_pref_from_value (PropertyInfo *info, GValue *value) } } -static void +static gboolean set_value_from_editable (PropertyInfo *info, GValue *value) { char *text; + gboolean retval = TRUE; gboolean free_text = TRUE; - g_return_if_fail (GTK_IS_EDITABLE (info->widget)); + g_return_val_if_fail (GTK_IS_EDITABLE (info->widget), FALSE); text = gtk_editable_get_chars (GTK_EDITABLE (info->widget), 0, -1); @@ -252,6 +253,7 @@ set_value_from_editable (PropertyInfo *info, GValue *value) g_value_set_float (value, strtod (text, NULL)); break; default: + retval = FALSE; g_warning ("Unsupported value type for editable %s", info->id); break; } @@ -260,43 +262,48 @@ set_value_from_editable (PropertyInfo *info, GValue *value) { g_free (text); } + + return retval; } -static void +static gboolean set_value_from_combobox (PropertyInfo *info, GValue *value) { - int index; - - g_return_if_fail (GTK_IS_COMBO_BOX (info->widget)); - - index = gtk_combo_box_get_active (GTK_COMBO_BOX (info->widget)); - g_return_if_fail (index >= 0); + g_return_val_if_fail (GTK_IS_COMBO_BOX (info->widget), FALSE); if (info->data_col != -1) { GtkTreeModel *model; GtkTreeIter iter; - model = gtk_combo_box_get_model (GTK_COMBO_BOX (info->widget)); - - if (gtk_tree_model_iter_nth_child (model, &iter, NULL, index)) + if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (info->widget), &iter)) { + model = gtk_combo_box_get_model (GTK_COMBO_BOX (info->widget)); gtk_tree_model_get_value (model, &iter, info->data_col, value); - } - else - { - g_warning ("Invalid index in combo model for %s\n", info->id); + + return TRUE; } } else if (info->data_type == G_TYPE_INT) { - g_value_init (value, G_TYPE_INT); - g_value_set_int (value, index); + int index; + + index = gtk_combo_box_get_active (GTK_COMBO_BOX (info->widget)); + + if (index >= 0) + { + g_value_init (value, G_TYPE_INT); + g_value_set_int (value, index); + + return TRUE; + } } else { g_warning ("Unsupported data type for combo %s\n", info->id); } + + return FALSE; } static int @@ -328,20 +335,22 @@ get_radio_button_active_index (GtkWidget *radiobutton) return index = (length - 1) - i; } -static void +static gboolean set_value_from_radiobuttongroup (PropertyInfo *info, GValue *value) { + gboolean retval = TRUE; int index; - g_return_if_fail (GTK_IS_RADIO_BUTTON (info->widget)); + g_return_val_if_fail (GTK_IS_RADIO_BUTTON (info->widget), FALSE); index = get_radio_button_active_index (info->widget); - g_return_if_fail (index >= 0); + g_return_val_if_fail (index >= 0, FALSE); g_value_init (value, info->data_type); if (info->data_type == G_TYPE_STRING) { - g_return_if_fail (info->string_enum != NULL); + g_return_val_if_fail (info->string_enum != NULL, FALSE); + g_return_val_if_fail (g_list_nth_data (info->string_enum, index) != NULL, FALSE); g_value_set_string (value, (char*) g_list_nth_data (info->string_enum, index)); } @@ -351,17 +360,21 @@ set_value_from_radiobuttongroup (PropertyInfo *info, GValue *value) } else { + retval = FALSE; g_warning ("unsupported data type for radio button %s\n", info->id); } + + return retval; } -static void +static gboolean set_value_from_spin_button (PropertyInfo *info, GValue *value) { + gboolean retval = TRUE; gdouble f; gboolean is_int; - g_return_if_fail (GTK_IS_SPIN_BUTTON (info->widget)); + g_return_val_if_fail (GTK_IS_SPIN_BUTTON (info->widget), FALSE); f = gtk_spin_button_get_value (GTK_SPIN_BUTTON (info->widget)); @@ -378,16 +391,20 @@ set_value_from_spin_button (PropertyInfo *info, GValue *value) } else { + retval = FALSE; g_warning ("Unsupported data type for spin button %s\n", info->id); } + + return retval; } -static void +static gboolean set_value_from_togglebutton (PropertyInfo *info, GValue *value) { + gboolean retval = TRUE; gboolean active; - g_return_if_fail (GTK_IS_TOGGLE_BUTTON (info->widget)); + g_return_val_if_fail (GTK_IS_TOGGLE_BUTTON (info->widget), FALSE); active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (info->widget)); @@ -398,39 +415,47 @@ set_value_from_togglebutton (PropertyInfo *info, GValue *value) } else { + retval = FALSE; g_warning ("Unsupported data type for toggle button %s\n", info->id); } + + return retval; } -static void +static gboolean set_value_from_info (PropertyInfo *info, GValue *value) { + gboolean retval; + if (info->sane_state == FALSE) { - g_warning ("id[%s] has insane state when trying to get value!\n", info->id); + return FALSE; } switch (info->widget_type) { case PT_SPINBUTTON: - set_value_from_spin_button (info, value); + retval = set_value_from_spin_button (info, value); break; case PT_RADIOBUTTON: - set_value_from_radiobuttongroup (info, value); + retval = set_value_from_radiobuttongroup (info, value); break; case PT_TOGGLEBUTTON: - set_value_from_togglebutton (info, value); + retval = set_value_from_togglebutton (info, value); break; case PT_EDITABLE: - set_value_from_editable (info, value); + retval = set_value_from_editable (info, value); break; case PT_COMBOBOX: - set_value_from_combobox (info, value); + retval = set_value_from_combobox (info, value); break; default: + retval = FALSE; g_warning ("Unsupported widget type\n"); break; } + + return retval; } static void @@ -530,8 +555,6 @@ compare_values (const GValue *a, const GValue *b) static void set_combo_box_from_value (PropertyInfo *info, const GValue *value) { - int index = -1; - g_return_if_fail (GTK_IS_COMBO_BOX (info->widget)); if (info->data_col != -1) @@ -557,37 +580,35 @@ set_combo_box_from_value (PropertyInfo *info, const GValue *value) if (found) { - GtkTreePath *path; - gint *indices; + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (info->widget), &iter); + } + else + { + gtk_combo_box_set_active (GTK_COMBO_BOX (info->widget), -1); - path = gtk_tree_model_get_path (model, &iter); - indices = gtk_tree_path_get_indices (path); - index = indices[0]; - gtk_tree_path_free (path); + char *v = g_strdup_value_contents (value); + g_warning ("Value '%s' not found in model for combo %s\n", v, info->id); + g_free (v); } + + info->sane_state = found; } else if (info->data_type == G_TYPE_INT) { + int index; + index = g_value_get_int (value); + + info->sane_state = index >= 0; + + g_return_if_fail (index >= -1); + + gtk_combo_box_set_active (GTK_COMBO_BOX (info->widget), index); } else { g_warning ("Unsupported data type for combo box %s\n", info->id); } - - if (index < 0) - { - info->sane_state = FALSE; - - g_return_if_fail (index >= 0); - return; - } - - LOG ("index[%s] is %d", info->id, index) - - info->sane_state = TRUE; - - gtk_combo_box_set_active (GTK_COMBO_BOX (info->widget), index); } static void @@ -712,14 +733,11 @@ set_pref_from_info_and_emit (PropertyInfo *info) { GValue value = { 0, }; - if (!info->sane_state) + if (!set_value_from_info (info, &value)) { - g_warning ("Not emitting/persisting insane state of id[%s]", info->id); return; } - set_value_from_info (info, &value); - g_signal_emit (info->dialog, signals[CHANGED], g_quark_from_string (info->id), &value); if (info->apply_type == PT_AUTOAPPLY && info->pref != NULL) @@ -962,9 +980,11 @@ save_info (gpointer key, PropertyInfo *info, EphyDialog *dialog) return; } - set_value_from_info (info, &value); - set_pref_from_value (info, &value); - g_value_unset (&value); + if (set_value_from_info (info, &value)) + { + set_pref_from_value (info, &value); + g_value_unset (&value); + } } static void @@ -1201,7 +1221,7 @@ ephy_dialog_get_control (EphyDialog *dialog, return info->widget; } -void +gboolean ephy_dialog_get_value (EphyDialog *dialog, const char *property_id, GValue *value) @@ -1209,9 +1229,9 @@ ephy_dialog_get_value (EphyDialog *dialog, PropertyInfo *info; info = lookup_info (dialog, property_id); - g_return_if_fail (info != NULL); + g_return_val_if_fail (info != NULL, FALSE); - set_value_from_info (info, value); + return set_value_from_info (info, value); } void diff --git a/lib/ephy-dialog.h b/lib/ephy-dialog.h index d1b28724d..cb9d88c9e 100644 --- a/lib/ephy-dialog.h +++ b/lib/ephy-dialog.h @@ -121,7 +121,7 @@ void ephy_dialog_set_modal (EphyDialog *dialog, GtkWidget *ephy_dialog_get_control (EphyDialog *dialog, const char *property_id); -void ephy_dialog_get_value (EphyDialog *dialog, +gboolean ephy_dialog_get_value (EphyDialog *dialog, const char *property_id, GValue *value); diff --git a/src/prefs-dialog.c b/src/prefs-dialog.c index b47ae561f..087f061d8 100644 --- a/src/prefs-dialog.c +++ b/src/prefs-dialog.c @@ -478,6 +478,7 @@ setup_font_combo (EphyDialog *dialog, ephy_dialog_set_pref (dialog, properties[prop].id, NULL); gtk_combo_box_set_model (GTK_COMBO_BOX (combo), sortmodel); + gtk_combo_box_set_active (GTK_COMBO_BOX (combo), -1); ephy_dialog_set_pref (dialog, properties[prop].id, key); -- cgit v1.2.3