aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ephy-dialog.c150
-rw-r--r--lib/ephy-dialog.h2
2 files changed, 86 insertions, 66 deletions
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);