summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2009-12-17 16:49:06 +0100
committerAlexander Larsson <alexl@redhat.com>2009-12-17 16:49:06 +0100
commit70f2f7c8e36898553ba0c6593aee1e8ee52bd7a7 (patch)
tree73cdfe922c55f137d2a18099ed329cdc2b3ecbbd
parent07c0bf9cb422d38fb4c38faed7af261c5411378c (diff)
downloadnautilus-70f2f7c8e36898553ba0c6593aee1e8ee52bd7a7.tar.gz
Add eel_preferences_builder_connect_inverted_bool
-rw-r--r--eel/eel-preferences-builder.c52
-rw-r--r--eel/eel-preferences.h3
2 files changed, 55 insertions, 0 deletions
diff --git a/eel/eel-preferences-builder.c b/eel/eel-preferences-builder.c
index d4522cec3..dbc46259b 100644
--- a/eel/eel-preferences-builder.c
+++ b/eel/eel-preferences-builder.c
@@ -127,6 +127,58 @@ eel_preferences_builder_connect_bool (GtkBuilder *builder,
eel_preferences_builder_bool_update (toggle_button);
}
+static void
+eel_preferences_builder_inverted_bool_toggled (GtkToggleButton *toggle_button,
+ char *key)
+{
+ eel_preferences_set_boolean (key, !gtk_toggle_button_get_active (toggle_button));
+}
+
+static void
+eel_preferences_builder_inverted_bool_update (GtkToggleButton *toggle_button)
+{
+ gboolean value;
+ gpointer key;
+
+ key = g_object_get_data (G_OBJECT (toggle_button), EEL_PREFERENCES_BUILDER_DATA_KEY);
+
+ value = eel_preferences_get_boolean (key);
+ g_signal_handlers_block_by_func (toggle_button, eel_preferences_builder_bool_toggled, key);
+ gtk_toggle_button_set_active (toggle_button, !value);
+ g_signal_handlers_unblock_by_func (toggle_button, eel_preferences_builder_bool_toggled, key);
+}
+
+void
+eel_preferences_builder_connect_inverted_bool (GtkBuilder *builder,
+ const char *component,
+ const char *key)
+{
+ GtkToggleButton *toggle_button;
+
+ g_return_if_fail (builder != NULL);
+ g_return_if_fail (component != NULL);
+ g_return_if_fail (key != NULL);
+
+ toggle_button = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, component));
+ g_object_set_data_full (G_OBJECT (toggle_button), EEL_PREFERENCES_BUILDER_DATA_KEY,
+ g_strdup (key), (GDestroyNotify) g_free);
+
+ eel_preferences_add_callback_while_alive (key,
+ (EelPreferencesCallback) eel_preferences_builder_inverted_bool_update,
+ toggle_button, G_OBJECT (toggle_button));
+
+ if (!eel_preferences_key_is_writable (key)) {
+ eel_preferences_builder_set_never_sensitive (GTK_WIDGET (toggle_button));
+ }
+
+ g_signal_connect (G_OBJECT (toggle_button), "toggled",
+ G_CALLBACK (eel_preferences_builder_inverted_bool_toggled),
+ g_object_get_data (G_OBJECT (toggle_button),
+ EEL_PREFERENCES_BUILDER_DATA_KEY));
+
+ eel_preferences_builder_inverted_bool_update (toggle_button);
+}
+
void
eel_preferences_builder_connect_bool_slave (GtkBuilder *builder,
const char *component,
diff --git a/eel/eel-preferences.h b/eel/eel-preferences.h
index fa8779e23..4ca60b719 100644
--- a/eel/eel-preferences.h
+++ b/eel/eel-preferences.h
@@ -126,6 +126,9 @@ void eel_preferences_init (const char
void eel_preferences_builder_connect_bool (GtkBuilder *builder,
const char *component,
const char *key);
+void eel_preferences_builder_connect_inverted_bool (GtkBuilder *builder,
+ const char *component,
+ const char *key);
void eel_preferences_builder_connect_bool_slave (GtkBuilder *builder,
const char *component,
const char *key);