diff options
author | Alexander Larsson <alexl@redhat.com> | 2009-12-17 16:49:06 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2009-12-17 16:49:06 +0100 |
commit | 70f2f7c8e36898553ba0c6593aee1e8ee52bd7a7 (patch) | |
tree | 73cdfe922c55f137d2a18099ed329cdc2b3ecbbd | |
parent | 07c0bf9cb422d38fb4c38faed7af261c5411378c (diff) | |
download | nautilus-70f2f7c8e36898553ba0c6593aee1e8ee52bd7a7.tar.gz |
Add eel_preferences_builder_connect_inverted_bool
-rw-r--r-- | eel/eel-preferences-builder.c | 52 | ||||
-rw-r--r-- | eel/eel-preferences.h | 3 |
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); |