[gnome-control-center] datetime: Implement 12/24 hour preferences for the gnome-shell clock
- From: Thomas Wood <thos src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] datetime: Implement 12/24 hour preferences for the gnome-shell clock
- Date: Tue, 16 Nov 2010 14:07:02 +0000 (UTC)
commit d4cabf4998a7415d1f6e1a9b6322a05790908f22
Author: Thomas Wood <thos gnome org>
Date: Tue Nov 16 14:04:47 2010 +0000
datetime: Implement 12/24 hour preferences for the gnome-shell clock
Implement the radio buttons that change the format of the clock displayed
in gnome-shell.
panels/datetime/cc-datetime-panel.c | 72 +++++++++++++++++++++++++++++++++++
panels/datetime/datetime.ui | 2 +
2 files changed, 74 insertions(+), 0 deletions(-)
---
diff --git a/panels/datetime/cc-datetime-panel.c b/panels/datetime/cc-datetime-panel.c
index 084e650..ca56ac2 100644
--- a/panels/datetime/cc-datetime-panel.c
+++ b/panels/datetime/cc-datetime-panel.c
@@ -40,6 +40,9 @@ enum {
#define W(x) (GtkWidget*) gtk_builder_get_object (priv->builder, x)
+#define CLOCK_SCHEMA "org.gnome.shell.clock"
+#define CLOCK_FORMAT_KEY "format"
+
struct _CcDateTimePanelPrivate
{
GtkBuilder *builder;
@@ -54,6 +57,8 @@ struct _CcDateTimePanelPrivate
guint hour;
guint minute;
+
+ GSettings *settings;
};
@@ -87,12 +92,19 @@ static void
cc_date_time_panel_dispose (GObject *object)
{
CcDateTimePanelPrivate *priv = CC_DATE_TIME_PANEL (object)->priv;
+
if (priv->builder)
{
g_object_unref (priv->builder);
priv->builder = NULL;
}
+ if (priv->settings)
+ {
+ g_object_unref (priv->settings);
+ priv->settings = NULL;
+ }
+
G_OBJECT_CLASS (cc_date_time_panel_parent_class)->dispose (object);
}
@@ -129,6 +141,56 @@ cc_date_time_panel_class_finalize (CcDateTimePanelClass *klass)
}
+static void clock_settings_changed_cb (GSettings *settings,
+ gchar *key,
+ CcDateTimePanel *panel);
+
+static void
+change_clock_settings (GtkWidget *widget,
+ CcDateTimePanel *panel)
+{
+ CcDateTimePanelPrivate *priv = panel->priv;
+
+ g_signal_handlers_block_by_func (priv->settings, clock_settings_changed_cb,
+ panel);
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (W ("12_radiobutton"))))
+ g_settings_set_string (priv->settings, CLOCK_FORMAT_KEY, "12-hour");
+ else
+ g_settings_set_string (priv->settings, CLOCK_FORMAT_KEY, "24-hour");
+
+ g_signal_handlers_unblock_by_func (priv->settings, clock_settings_changed_cb,
+ panel);
+}
+
+static void
+clock_settings_changed_cb (GSettings *settings,
+ gchar *key,
+ CcDateTimePanel *panel)
+{
+ CcDateTimePanelPrivate *priv = panel->priv;
+ GtkWidget *radio12, *radio24;
+ gboolean use_12_hour;
+ gchar *value;
+
+ value = g_settings_get_string (settings, CLOCK_FORMAT_KEY);
+
+ radio12 = W ("12_radiobutton");
+ radio24 = W ("24_radiobutton");
+
+ use_12_hour = (g_strcmp0 (value, "12-hour") == 0);
+
+ g_signal_handlers_block_by_func (radio12, change_clock_settings, panel);
+ g_signal_handlers_block_by_func (radio24, change_clock_settings, panel);
+
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio12), use_12_hour);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio24), !use_12_hour);
+
+ g_signal_handlers_unblock_by_func (radio12, change_clock_settings, panel);
+ g_signal_handlers_unblock_by_func (radio24, change_clock_settings, panel);
+}
+
static gboolean
update_time (CcDateTimePanel *self)
{
@@ -158,6 +220,16 @@ update_time (CcDateTimePanel *self)
widget = (GtkWidget*) gtk_builder_get_object (priv->builder, "minutes_label");
gtk_label_set_text (GTK_LABEL (widget), label);
+ priv->settings = g_settings_new (CLOCK_SCHEMA);
+ clock_settings_changed_cb (priv->settings, CLOCK_FORMAT_KEY, self);
+ g_signal_connect (priv->settings, "changed::" CLOCK_FORMAT_KEY,
+ G_CALLBACK (clock_settings_changed_cb), self);
+
+ g_signal_connect (W ("12_radiobutton"), "toggled",
+ G_CALLBACK (change_clock_settings), self);
+ g_signal_connect (W ("24_radiobutton"), "toggled",
+ G_CALLBACK (change_clock_settings), self);
+
return FALSE;
}
diff --git a/panels/datetime/datetime.ui b/panels/datetime/datetime.ui
index d9e551b..286b229 100644
--- a/panels/datetime/datetime.ui
+++ b/panels/datetime/datetime.ui
@@ -264,6 +264,7 @@
<child>
<object class="GtkRadioButton" id="12_radiobutton">
<property name="label" translatable="yes">12 hour format</property>
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
@@ -277,6 +278,7 @@
<child>
<object class="GtkRadioButton" id="24_radiobutton">
<property name="label" translatable="yes">24 hour format</property>
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]