diff options
author | fina <code@felinira.net> | 2022-06-28 23:58:20 +0200 |
---|---|---|
committer | Alexander Mikhaylenko <alexm@gnome.org> | 2023-02-10 16:43:43 +0000 |
commit | ac23aa717f8b93105837696af6dc20d0792d5989 (patch) | |
tree | 06386e8d2cb9ef79c9e8eec8afcad59b9783509f | |
parent | 3c8834af09ff66c456662a08ef92e6087e755e38 (diff) | |
download | gnome-desktop-ac23aa717f8b93105837696af6dc20d0792d5989.tar.gz |
Add GnomeWallClock:force-seconds property
This property will overwrite the system configuration to make the clock always
show seconds and update its clock property every second.
-rw-r--r-- | libgnome-desktop/gnome-wall-clock.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/libgnome-desktop/gnome-wall-clock.c b/libgnome-desktop/gnome-wall-clock.c index b4d72b87..46462202 100644 --- a/libgnome-desktop/gnome-wall-clock.c +++ b/libgnome-desktop/gnome-wall-clock.c @@ -43,6 +43,7 @@ struct _GnomeWallClockPrivate { GSettings *desktop_settings; gboolean time_only; + gboolean force_seconds; }; enum { @@ -50,6 +51,7 @@ enum { PROP_CLOCK, PROP_TIMEZONE, PROP_TIME_ONLY, + PROP_FORCE_SECONDS, }; G_DEFINE_TYPE_WITH_PRIVATE (GnomeWallClock, gnome_wall_clock, G_TYPE_OBJECT); @@ -125,6 +127,9 @@ gnome_wall_clock_get_property (GObject *gobject, case PROP_CLOCK: g_value_set_string (value, self->priv->clock_string); break; + case PROP_FORCE_SECONDS: + g_value_set_boolean (value, self->priv->force_seconds); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; @@ -145,6 +150,10 @@ gnome_wall_clock_set_property (GObject *gobject, self->priv->time_only = g_value_get_boolean (value); update_clock (self); break; + case PROP_FORCE_SECONDS: + self->priv->force_seconds = g_value_get_boolean (value); + update_clock (self); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec); break; @@ -202,6 +211,21 @@ gnome_wall_clock_class_init (GnomeWallClockClass *klass) "", FALSE, G_PARAM_READABLE | G_PARAM_WRITABLE)); + + /** + * GnomeWallClock:force-seconds: + * + * If %TRUE, the formatted clock will always have seconds precision and the + * 'clock' property will always be updated every second, irrespective of + * system configuration. + */ + g_object_class_install_property (gobject_class, + PROP_FORCE_SECONDS, + g_param_spec_boolean ("force-seconds", + "", + "", + FALSE, + G_PARAM_READABLE | G_PARAM_WRITABLE)); } /* Replace 'target' with 'replacement' in the input string. */ @@ -385,6 +409,16 @@ gnome_wall_clock_string_for_datetime (GnomeWallClock *self, #undef T_ +gboolean +has_seconds (GnomeWallClock* self) +{ + if (self->priv->force_seconds) { + return TRUE; + } + + return g_settings_get_boolean (self->priv->desktop_settings, "clock-show-seconds"); +} + static gboolean update_clock (gpointer data) { @@ -400,7 +434,7 @@ update_clock (gpointer data) clock_format = g_settings_get_enum (self->priv->desktop_settings, "clock-format"); show_weekday = !self->priv->time_only && g_settings_get_boolean (self->priv->desktop_settings, "clock-show-weekday"); show_full_date = !self->priv->time_only && g_settings_get_boolean (self->priv->desktop_settings, "clock-show-date"); - show_seconds = g_settings_get_boolean (self->priv->desktop_settings, "clock-show-seconds"); + show_seconds = has_seconds (self); now = g_date_time_new_now (self->priv->timezone); if (show_seconds) |