aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/datetime-prefs.c53
-rw-r--r--src/settings-shared.h2
-rw-r--r--src/utils.c11
-rw-r--r--src/utils.h1
4 files changed, 63 insertions, 4 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"),
diff --git a/src/settings-shared.h b/src/settings-shared.h
index d866b81..b8e1789 100644
--- a/src/settings-shared.h
+++ b/src/settings-shared.h
@@ -33,7 +33,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#define SETTINGS_CUSTOM_TIME_FORMAT_S "custom-time-format"
#define SETTINGS_SHOW_CALENDAR_S "show-calendar"
#define SETTINGS_SHOW_WEEK_NUMBERS_S "show-week-numbers"
-#define SETTINGS_WEEK_BEGINS_SUNDAY_S "week-begins-sunday"
+#define SETTINGS_WEEK_START_S "week-start"
#define SETTINGS_SHOW_EVENTS_S "show-events"
#define SETTINGS_SHOW_LOCATIONS_S "show-locations"
#define SETTINGS_LOCATIONS_S "locations"
diff --git a/src/utils.c b/src/utils.c
index f73ed14..89c499b 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -50,6 +50,17 @@ is_locale_12h (void)
return TRUE;
}
+/* Check the system locale setting to see if the week starts on Sunday or Monday */
+gboolean
+is_locale_week_start_sunday (void)
+{
+ const char * week_1stday = nl_langinfo (_NL_TIME_WEEK_1STDAY);
+
+ /* This appears to be a special value that libc uses for Sunday, it's not
+ really a string */
+ return (GPOINTER_TO_INT (week_1stday) == 19971130);
+}
+
void
split_settings_location (const gchar * location, gchar ** zone, gchar ** name)
{
diff --git a/src/utils.h b/src/utils.h
index 5f7842c..3dc8df1 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -28,6 +28,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
G_BEGIN_DECLS
gboolean is_locale_12h (void);
+gboolean is_locale_week_start_sunday (void);
void split_settings_location (const gchar * location, gchar ** zone, gchar ** name);
gchar * generate_format_string_full (gboolean show_day, gboolean show_date);
gchar * generate_format_string_at_time (GDateTime * time);