diff options
Diffstat (limited to 'src/datetime-prefs.c')
-rw-r--r-- | src/datetime-prefs.c | 53 |
1 files changed, 50 insertions, 3 deletions
diff --git a/src/datetime-prefs.c b/src/datetime-prefs.c index 622a999..44b9b24 100644 --- a/src/datetime-prefs.c +++ b/src/datetime-prefs.c @@ -29,7 +29,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include <libintl.h> #include <locale.h> #include <langinfo.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <gtk/gtk.h> #include <unique/unique.h> #include <polkitgtk/polkitgtk.h> @@ -85,6 +85,45 @@ bind_hours_get (GValue * value, GVariant * variant, gpointer user_data) return TRUE; } +/* Turns the boolean property into a string gsettings */ +static GVariant * +bind_week_start_set (const GValue * value, const GVariantType * type, gpointer user_data) +{ + const gchar * output = NULL; + gboolean is_sunday_button = (gboolean)GPOINTER_TO_INT(user_data); + + if (g_value_get_boolean(value)) { + /* Only do anything if we're setting active = true */ + output = is_sunday_button ? "sunday" : "monday"; + } else { + return NULL; + } + + return g_variant_new_string (output); +} + +/* Turns a string gsettings into a boolean property */ +static gboolean +bind_week_start_get (GValue * value, GVariant * variant, gpointer user_data) +{ + const gchar * str = g_variant_get_string(variant, NULL); + gboolean output = FALSE; + gboolean is_sunday_button = (gboolean)GPOINTER_TO_INT(user_data); + + if (g_strcmp0(str, "locale-default") == 0) { + output = (is_sunday_button == is_locale_week_start_sunday ()); + } else if (g_strcmp0(str, "sunday") == 0) { + output = is_sunday_button; + } else if (g_strcmp0(str, "monday") == 0) { + output = !is_sunday_button; + } else { + return FALSE; + } + + g_value_set_boolean (value, output); + return TRUE; +} + static void widget_dependency_cb (GtkWidget * parent, GParamSpec *pspec, GtkWidget * dependent) { @@ -473,8 +512,16 @@ create_dialog (void) "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (conf, SETTINGS_SHOW_WEEK_NUMBERS_S, WIG ("includeWeekNumbersCheck"), "active", G_SETTINGS_BIND_DEFAULT); - /*g_settings_bind_(conf, SETTINGS_WEEK_BEGINS_SUNDAY_S, WIG ("startOnSundayRadio"), - "active", G_SETTINGS_BIND_DEFAULT);*/ + g_settings_bind_with_mapping (conf, SETTINGS_WEEK_START_S, + WIG ("startOnSundayRadio"), "active", + G_SETTINGS_BIND_DEFAULT, + bind_week_start_get, bind_week_start_set, + GINT_TO_POINTER(TRUE), NULL); + g_settings_bind_with_mapping (conf, SETTINGS_WEEK_START_S, + WIG ("startOnMondayRadio"), "active", + G_SETTINGS_BIND_DEFAULT, + bind_week_start_get, bind_week_start_set, + GINT_TO_POINTER(FALSE), NULL); g_settings_bind (conf, SETTINGS_SHOW_EVENTS_S, WIG ("showEventsCheck"), "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (conf, SETTINGS_SHOW_LOCATIONS_S, WIG ("showLocationsCheck"), |