aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2013-10-17 22:12:33 -0500
committerCharles Kerr <charles.kerr@canonical.com>2013-10-17 22:12:33 -0500
commit2c63a8cda5afbbf0747ec535b73bcc3280d6161b (patch)
treec94a5e1f6c51fcee7547c91f0e392c6d1108d6eb /src
parent1a898e4eada6f50bd6f3e3b227d1ab0e143ec06d (diff)
downloadayatana-indicator-datetime-2c63a8cda5afbbf0747ec535b73bcc3280d6161b.tar.gz
ayatana-indicator-datetime-2c63a8cda5afbbf0747ec535b73bcc3280d6161b.tar.bz2
ayatana-indicator-datetime-2c63a8cda5afbbf0747ec535b73bcc3280d6161b.zip
because it rarely changes, cache the header_label_format_string.
Diffstat (limited to 'src')
-rw-r--r--src/service.c46
1 files changed, 28 insertions, 18 deletions
diff --git a/src/service.c b/src/service.c
index 079456c..b6e9fe8 100644
--- a/src/service.c
+++ b/src/service.c
@@ -106,6 +106,8 @@ struct _IndicatorDatetimeServicePrivate
/* the clock app's icon filename */
gchar * clock_app_icon_filename;
+ gchar * header_label_format_string;
+
/* Whether or not we've tried to load the clock app's icon.
This way we don't keep trying to reload it on the desktop */
gboolean clock_app_icon_initialized;
@@ -179,6 +181,8 @@ static void rebuild_soon (IndicatorDatetimeService * self, int section);
static inline void
rebuild_header_soon (IndicatorDatetimeService * self)
{
+ g_clear_pointer (&self->priv->header_label_format_string, g_free);
+
rebuild_soon (self, SECTION_HEADER);
}
@@ -361,7 +365,7 @@ on_header_timer (gpointer gself)
return G_SOURCE_REMOVE;
}
-static char * get_header_label_format_string (IndicatorDatetimeService *);
+static const char * get_header_label_format_string (IndicatorDatetimeService *);
static void
start_header_timer (IndicatorDatetimeService * self)
@@ -375,11 +379,10 @@ start_header_timer (IndicatorDatetimeService * self)
if (g_settings_get_boolean (self->priv->settings, SETTINGS_SHOW_CLOCK_S))
{
- char * fmt = get_header_label_format_string (self);
+ const char * fmt = get_header_label_format_string (self);
header_shows_seconds = fmt && (strstr(fmt,"%s") || strstr(fmt,"%S") ||
strstr(fmt,"%T") || strstr(fmt,"%X") ||
strstr(fmt,"%c"));
- g_free (fmt);
}
if (header_shows_seconds)
@@ -639,32 +642,39 @@ skew_timer_func (gpointer gself)
****
***/
-static gchar *
+static const gchar *
get_header_label_format_string (IndicatorDatetimeService * self)
{
- char * fmt;
- GSettings * s = self->priv->settings;
- const TimeFormatMode mode = g_settings_get_enum (s, SETTINGS_TIME_FORMAT_S);
+ priv_t * p = self->priv;
- if (mode == TIME_FORMAT_MODE_CUSTOM)
+ if (p->header_label_format_string == NULL)
{
- fmt = g_settings_get_string (s, SETTINGS_CUSTOM_TIME_FORMAT_S);
- }
- else
- {
- gboolean show_day = g_settings_get_boolean (s, SETTINGS_SHOW_DAY_S);
- gboolean show_date = g_settings_get_boolean (s, SETTINGS_SHOW_DATE_S);
- fmt = generate_full_format_string (show_day, show_date, s);
+ char * fmt;
+ GSettings * s = p->settings;
+ const TimeFormatMode mode = g_settings_get_enum (s, SETTINGS_TIME_FORMAT_S);
+
+ if (mode == TIME_FORMAT_MODE_CUSTOM)
+ {
+ fmt = g_settings_get_string (s, SETTINGS_CUSTOM_TIME_FORMAT_S);
+ }
+ else
+ {
+ gboolean show_day = g_settings_get_boolean (s, SETTINGS_SHOW_DAY_S);
+ gboolean show_date = g_settings_get_boolean (s, SETTINGS_SHOW_DATE_S);
+ fmt = generate_full_format_string (show_day, show_date, s);
+ }
+
+ p->header_label_format_string = fmt;
}
- return fmt;
+ return p->header_label_format_string;
}
static GVariant *
create_desktop_header_state (IndicatorDatetimeService * self)
{
GVariantBuilder b;
- gchar * fmt;
+ const gchar * fmt;
gchar * str;
gboolean visible;
GDateTime * now;
@@ -690,7 +700,6 @@ create_desktop_header_state (IndicatorDatetimeService * self)
/* cleanup */
g_date_time_unref (now);
- g_free (fmt);
return g_variant_builder_end (&b);
}
@@ -2103,6 +2112,7 @@ my_finalize (GObject * o)
priv_t * p = self->priv;
g_free (p->clock_app_icon_filename);
+ g_free (p->header_label_format_string);
g_clear_pointer (&p->skew_time, g_date_time_unref);
g_clear_pointer (&p->calendar_date, g_date_time_unref);