diff options
-rw-r--r-- | configure.ac | 4 | ||||
-rw-r--r-- | data/com.canonical.indicator.datetime.gschema.xml | 12 | ||||
-rw-r--r-- | data/datetime-dialog.ui | 61 | ||||
-rw-r--r-- | libmap/data/olsen_map.png | bin | 0 -> 54969 bytes | |||
-rw-r--r-- | libmap/test-timezone.c | 1 | ||||
-rw-r--r-- | src/datetime-prefs.c | 49 | ||||
-rw-r--r-- | src/datetime-service.c | 74 | ||||
-rw-r--r-- | src/dbus-shared.h | 9 | ||||
-rw-r--r-- | src/indicator-datetime.c | 62 | ||||
-rw-r--r-- | src/settings-shared.h | 1 | ||||
-rw-r--r-- | src/utils.c | 11 | ||||
-rw-r--r-- | src/utils.h | 1 |
12 files changed, 105 insertions, 180 deletions
diff --git a/configure.ac b/configure.ac index 08707bc..a762ea8 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ -AC_INIT(indicator-datetime, 0.1.94, ted@canonical.com) +AC_INIT(indicator-datetime, 0.1.95, ted@canonical.com) AC_COPYRIGHT([Copyright 2009,2010 Canonical]) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-datetime, 0.1.94) +AM_INIT_AUTOMAKE(indicator-datetime, 0.1.95) AM_MAINTAINER_MODE diff --git a/data/com.canonical.indicator.datetime.gschema.xml b/data/com.canonical.indicator.datetime.gschema.xml index 5361896..b33f34e 100644 --- a/data/com.canonical.indicator.datetime.gschema.xml +++ b/data/com.canonical.indicator.datetime.gschema.xml @@ -5,11 +5,6 @@ <value nick="24-hour" value="2" /> <value nick="custom" value="3" /> </enum> - <enum id="week-start-enum"> - <value nick="locale-default" value="0" /> - <value nick="sunday" value="1" /> - <value nick="monday" value="2" /> - </enum> <schema id="com.canonical.indicator.datetime" path="/com/canonical/indicator/datetime/" gettext-domain="indicator-datetime"> <key name="show-clock" type="b"> <default>true</default> @@ -83,13 +78,6 @@ Shows the week numbers in the monthly calendar in indicator-datetime's menu. </description> </key> - <key name="week-start" enum="week-start-enum"> - <default>'locale-default'</default> - <summary>When the week starts</summary> - <description> - Controls whether weeks in the calendar are shown to start on Sunday or Monday. - </description> - </key> <key name="show-events" type="b"> <default>true</default> <summary>Show events in the indicator</summary> diff --git a/data/datetime-dialog.ui b/data/datetime-dialog.ui index b8d0777..35cb172 100644 --- a/data/datetime-dialog.ui +++ b/data/datetime-dialog.ui @@ -597,67 +597,6 @@ <property name="position">0</property> </packing> </child> - <child> - <object class="GtkLabel" id="label5"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">Week begins on:</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="homogeneous">True</property> - <child> - <object class="GtkRadioButton" id="startOnSundayRadio"> - <property name="label" translatable="yes">S_unday</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_action_appearance">False</property> - <property name="use_underline">True</property> - <property name="xalign">0</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="startOnMondayRadio"> - <property name="label" translatable="yes">Monda_y</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_action_appearance">False</property> - <property name="use_underline">True</property> - <property name="xalign">0</property> - <property name="draw_indicator">True</property> - <property name="group">startOnSundayRadio</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> </object> </child> </object> diff --git a/libmap/data/olsen_map.png b/libmap/data/olsen_map.png Binary files differnew file mode 100644 index 0000000..f9bb75c --- /dev/null +++ b/libmap/data/olsen_map.png diff --git a/libmap/test-timezone.c b/libmap/test-timezone.c index d667c42..c1935fd 100644 --- a/libmap/test-timezone.c +++ b/libmap/test-timezone.c @@ -47,6 +47,7 @@ int main (int argc, char **argv) g_free (filename); g_free (path); + tz_info_free (info); } tz_db_free (db); g_free (pixmap_dir); diff --git a/src/datetime-prefs.c b/src/datetime-prefs.c index d053c7e..c71217a 100644 --- a/src/datetime-prefs.c +++ b/src/datetime-prefs.c @@ -91,45 +91,6 @@ 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) { @@ -588,16 +549,6 @@ 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_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/datetime-service.c b/src/datetime-service.c index ab609c4..6303a98 100644 --- a/src/datetime-service.c +++ b/src/datetime-service.c @@ -99,6 +99,9 @@ set_timezone_label (DbusmenuMenuitem * mi, const gchar * location) dbusmenu_menuitem_property_set (mi, TIMEZONE_MENUITEM_PROP_NAME, name); dbusmenu_menuitem_property_set (mi, TIMEZONE_MENUITEM_PROP_ZONE, zone); + + g_free (zone); + g_free (name); } /* Check to see if our timezones are the same */ @@ -124,7 +127,7 @@ check_timezone_sync (void) { } else { g_debug("Timezones are different"); } - + gboolean show = g_settings_get_boolean (conf, SETTINGS_SHOW_LOCATIONS_S); if (geo_location != NULL && current_location != NULL) { @@ -219,6 +222,7 @@ update_current_timezone (void) { check_timezone_sync(); + if (error != NULL) g_error_free(error); return; } @@ -263,52 +267,35 @@ activate_cb (DbusmenuMenuitem * menuitem, guint timestamp, const gchar *command) } } +static gboolean +month_changed_cb (DbusmenuMenuitem * menuitem, GVariant *variant, guint timestamp) +{ + // TODO: * Decode the month/year from the string we received + // * Check what our current month/year are + // * Set some globals so when we-re-run update appointment menu items it gets the right start date + // * update appointment menu items + g_debug("Received month changed : %s", g_variant_get_string(variant, NULL)); + return TRUE; +} + /* Looks for the calendar application and enables the item if we have one */ static gboolean check_for_calendar (gpointer user_data) { g_return_val_if_fail (calendar != NULL, FALSE); + + if (!g_settings_get_boolean(conf, SETTINGS_SHOW_CALENDAR_S)) return FALSE; gchar *evo = g_find_program_in_path("evolution"); if (evo != NULL) { g_debug("Found the calendar application: %s", evo); dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_ENABLED, TRUE); dbusmenu_menuitem_property_set_bool(calendar, DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); -/* - GError *gerror = NULL; - // TODO: In reality we should iterate sources of calendar, but getting the local one doens't lag for > a minute - g_debug("Setting up ecal."); - if (!ecal) - ecal = e_cal_new_system_calendar(); - - if (!ecal) { - g_debug("e_cal_new_system_calendar failed"); - ecal = NULL; - } - g_debug("Open calendar."); - if (!e_cal_open(ecal, FALSE, &gerror) ) { - g_debug("e_cal_open: %s\n", gerror->message); - g_free(ecal); - ecal = NULL; - } - g_debug("Get calendar timezone."); - if (!e_cal_get_timezone(ecal, "UTC", &tzone, &gerror)) { - g_debug("failed to get time zone\n"); - g_free(ecal); - ecal = NULL; - } - - This timezone represents the timezone of the calendar, this might be different to the current UTC offset. - * this means we'll have some geoclue interaction going on, and possibly the user will be involved in setting - * their location manually, case in point: trains have satellite links which often geoclue to sweden, - * this shouldn't automatically set the location and mess up all the appointments for the user. - - if (ecal) ecal_timezone = icaltimezone_get_tzid(tzone); - */ + DbusmenuMenuitem * separator = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set(separator, DBUSMENU_MENUITEM_PROP_TYPE, DBUSMENU_CLIENT_TYPES_SEPARATOR); - dbusmenu_menuitem_child_add_position(root, separator, 3); + dbusmenu_menuitem_child_add_position(root, separator, 2); add_appointment = dbusmenu_menuitem_new(); dbusmenu_menuitem_property_set (add_appointment, DBUSMENU_MENUITEM_PROP_LABEL, _("Add Appointment")); @@ -317,9 +304,12 @@ check_for_calendar (gpointer user_data) g_signal_connect(G_OBJECT(add_appointment), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_cb), "evolution -c calendar"); dbusmenu_menuitem_child_add_position (root, add_appointment, 3); - update_appointment_menu_items(NULL); - g_signal_connect(root, DBUSMENU_MENUITEM_SIGNAL_ABOUT_TO_SHOW, G_CALLBACK(update_appointment_menu_items), NULL); - + // Update the calendar items every 5 minutes if it updates the first time + if (update_appointment_menu_items(NULL)) + g_timeout_add_seconds(60*5, update_appointment_menu_items, NULL); + + // Connect to event::month-changed + g_signal_connect(calendar, "event::month-changed", G_CALLBACK(month_changed_cb), NULL); g_free(evo); } else { g_debug("Unable to find calendar app."); @@ -334,6 +324,7 @@ check_for_calendar (gpointer user_data) static gboolean update_timezone_menu_items(gpointer user_data) { g_debug("Updating timezone menu items"); + gchar ** locations = g_settings_get_strv(conf, SETTINGS_LOCATIONS_S); if (locations == NULL) { g_debug("No locations configured (NULL)"); @@ -400,7 +391,7 @@ auth_func (ECal *ecal, const gchar *prompt, const gchar *key, gpointer user_data else component_name = "Calendar"; gchar *password = e_passwords_get_password (component_name, key); - + if (password == NULL) { password = e_passwords_ask_password ( _("Enter password"), @@ -468,6 +459,9 @@ static gboolean update_appointment_menu_items (gpointer user_data) { // FFR: we should take into account short term timers, for instance // tea timers, pomodoro timers etc... that people may add, this is hinted to in the spec. + if (calendar == NULL) return FALSE; + if (!g_settings_get_boolean(conf, SETTINGS_SHOW_EVENTS_S)) return FALSE; + time_t t1, t2; gchar *query, *is, *ie, *ad; GList *objects = NULL, *l; @@ -520,7 +514,6 @@ update_appointment_menu_items (gpointer user_data) { g_signal_connect (G_OBJECT(source), "changed", G_CALLBACK (update_appointment_menu_items), NULL); ECal *ecal = e_cal_new(source, E_CAL_SOURCE_TYPE_EVENT); e_cal_set_auth_func (ecal, (ECalAuthFunc) auth_func, NULL); - //icaltimezone * tzone; if (!e_cal_open(ecal, FALSE, &gerror)) { g_debug("Failed to get ecal sources %s", gerror->message); @@ -533,7 +526,8 @@ update_appointment_menu_items (gpointer user_data) { if (!e_cal_get_object_list_as_comp(ecal, query, &objects, &gerror)) { g_debug("Failed to get objects\n"); g_free(ecal); - return FALSE; + gerror = NULL; + continue; } g_debug("Number of objects returned: %d", g_list_length(objects)); @@ -678,6 +672,8 @@ update_appointment_menu_items (gpointer user_data) { if (i == 4) break; // See above FIXME regarding query result limit i++; } + + if (gerror != NULL) g_error_free(gerror); g_object_unref(allobjects); g_debug("End of objects"); return TRUE; diff --git a/src/dbus-shared.h b/src/dbus-shared.h index f0f05a9..fa6de7b 100644 --- a/src/dbus-shared.h +++ b/src/dbus-shared.h @@ -27,7 +27,14 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #define MENU_OBJ "/com/canonical/indicator/datetime/menu" -#define DBUSMENU_CALENDAR_MENUITEM_TYPE "x-canonical-calendar-item" +#define DBUSMENU_CALENDAR_MENUITEM_TYPE "x-canonical-calendar-item" + +// The following properties are not *really* properties, but are just +// a way of accessing the calendar from the service +#define CALENDAR_MENUITEM_PROP_MARK "calendar-mark" +#define CALENDAR_MENUITEM_PROP_UNMARK "calendar-unmark" +#define CALENDAR_MENUITEM_PROP_CLEAR_MARKS "calendar-clear-marks" + #define APPOINTMENT_MENUITEM_TYPE "appointment-item" #define APPOINTMENT_MENUITEM_PROP_LABEL "appointment-label" diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 2e336c7..2099929 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -25,6 +25,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>. /* GStuff */ #include <glib.h> +#include <glib/gprintf.h> #include <glib-object.h> #include <glib/gi18n-lib.h> #include <gio/gio.h> @@ -36,7 +37,7 @@ with this program. If not, see <http://www.gnu.org/licenses/>. /* DBusMenu */ #include <libdbusmenu-gtk/menu.h> -#include <libido/idocalendarmenuitem.h> +#include <libido/libido.h> #include <libdbusmenu-gtk/menuitem.h> #include "utils.h" @@ -77,6 +78,9 @@ struct _IndicatorDatetimePrivate { gchar * custom_string; gboolean custom_show_seconds; + gboolean show_week_numbers; + gint week_start; + guint idle_measure; gint max_width; @@ -100,7 +104,8 @@ enum { PROP_SHOW_SECONDS, PROP_SHOW_DAY, PROP_SHOW_DATE, - PROP_CUSTOM_TIME_FORMAT + PROP_CUSTOM_TIME_FORMAT, + PROP_SHOW_WEEK_NUMBERS }; typedef struct _indicator_item_t indicator_item_t; @@ -118,6 +123,7 @@ struct _indicator_item_t { #define PROP_SHOW_DAY_S "show-day" #define PROP_SHOW_DATE_S "show-date" #define PROP_CUSTOM_TIME_FORMAT_S "custom-time-format" +#define PROP_SHOW_WEEK_NUMBERS_S "show-week-numbers" #define INDICATOR_DATETIME_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), INDICATOR_DATETIME_TYPE, IndicatorDatetimePrivate)) @@ -222,6 +228,13 @@ indicator_datetime_class_init (IndicatorDatetimeClass *klass) DEFAULT_TIME_FORMAT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_SHOW_WEEK_NUMBERS, + g_param_spec_boolean(PROP_SHOW_WEEK_NUMBERS_S, + "Whether to show the week numbers in the calendar.", + "Shows the week numbers in the monthly calendar in indicator-datetime's menu.", + FALSE, /* default */ + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); return; } @@ -280,6 +293,11 @@ indicator_datetime_init (IndicatorDatetime *self) self, PROP_CUSTOM_TIME_FORMAT_S, G_SETTINGS_BIND_DEFAULT); + g_settings_bind(self->priv->settings, + SETTINGS_SHOW_WEEK_NUMBERS_S, + self, + PROP_SHOW_WEEK_NUMBERS_S, + G_SETTINGS_BIND_DEFAULT); } else { g_warning("Unable to get settings for '" SETTINGS_INTERFACE "'"); } @@ -506,6 +524,18 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec } break; } + case PROP_SHOW_WEEK_NUMBERS: { + if (g_value_get_boolean(value) != self->priv->show_week_numbers) { + GtkCalendarDisplayOptions flags = ido_calendar_menu_item_get_display_options (self->priv->ido_calendar); + if (g_value_get_boolean(value) == TRUE) + flags |= GTK_CALENDAR_SHOW_WEEK_NUMBERS; + else + flags &= ~GTK_CALENDAR_SHOW_WEEK_NUMBERS; + ido_calendar_menu_item_set_display_options (self->priv->ido_calendar, flags); + self->priv->show_week_numbers = g_value_get_boolean(value); + } + break; + } default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); return; @@ -561,6 +591,9 @@ get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspe case PROP_CUSTOM_TIME_FORMAT: g_value_set_string(value, self->priv->custom_string); break; + case PROP_SHOW_WEEK_NUMBERS: + g_value_set_boolean(value, self->priv->show_week_numbers); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); return; @@ -1055,6 +1088,15 @@ indicator_prop_change_cb (DbusmenuMenuitem * mi, gchar * prop, GVariant *value, timezone_update_labels(mi_data); } else if (!g_strcmp0(prop, TIMEZONE_MENUITEM_PROP_RADIO)) { gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mi_data->gmi), g_variant_get_boolean(value)); + + // Properties for marking and unmarking the calendar + + } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_MARK)) { + ido_calendar_menu_item_mark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int16(value)); + } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_UNMARK)) { + ido_calendar_menu_item_unmark_day (IDO_CALENDAR_MENU_ITEM (mi_data), g_variant_get_int16(value)); + } else if (!g_strcmp0(prop, CALENDAR_MENUITEM_PROP_CLEAR_MARKS)) { + ido_calendar_menu_item_clear_marks (IDO_CALENDAR_MENU_ITEM (mi_data)); } else { g_warning("Indicator Item property '%s' unknown", prop); } @@ -1138,6 +1180,20 @@ new_appointment_item (DbusmenuMenuitem * newitem, DbusmenuMenuitem * parent, Dbu return TRUE; } +static void +month_changed_cb (IdoCalendarMenuItem *ido, + gpointer user_data) +{ + gchar datestring[20]; + guint d,m,y; + DbusmenuMenuitem * item = DBUSMENU_MENUITEM (user_data); + ido_calendar_menu_item_get_date(ido, &y, &m, &d); + g_sprintf(datestring, "%d-%d-%d", y, m, d); + GVariant *variant = g_variant_new_string(datestring); + guint timestamp = (guint)time(NULL); + dbusmenu_menuitem_handle_event(DBUSMENU_MENUITEM(item), "event::month-changed", variant, timestamp); + g_debug("Got month changed signal: %s", datestring); +} static gboolean new_calendar_item (DbusmenuMenuitem * newitem, @@ -1162,7 +1218,7 @@ new_calendar_item (DbusmenuMenuitem * newitem, self->priv->ido_calendar = ido; dbusmenu_gtkclient_newitem_base(DBUSMENU_GTKCLIENT(client), newitem, GTK_MENU_ITEM(ido), parent); - + g_signal_connect_after(ido, "month-changed", G_CALLBACK(month_changed_cb), (gpointer)newitem); return TRUE; } diff --git a/src/settings-shared.h b/src/settings-shared.h index a4fac24..df2260e 100644 --- a/src/settings-shared.h +++ b/src/settings-shared.h @@ -31,7 +31,6 @@ 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_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 20ae958..7471926 100644 --- a/src/utils.c +++ b/src/utils.c @@ -50,17 +50,6 @@ 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 3dc8df1..5f7842c 100644 --- a/src/utils.h +++ b/src/utils.h @@ -28,7 +28,6 @@ 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); |