diff options
author | karl-qdh <karl@qdh.org.uk> | 2011-02-25 14:04:46 +0000 |
---|---|---|
committer | karl-qdh <karl@qdh.org.uk> | 2011-02-25 14:04:46 +0000 |
commit | 398154d354d19a85f629a6d7131b1a7bd6b7b869 (patch) | |
tree | a87c8ff21536c7e05ab21cb271260a8bf6c505aa /src/indicator-datetime.c | |
parent | 7a70d5723bafdee6460f5080fa94449667eba8f4 (diff) | |
download | ayatana-indicator-datetime-398154d354d19a85f629a6d7131b1a7bd6b7b869.tar.gz ayatana-indicator-datetime-398154d354d19a85f629a6d7131b1a7bd6b7b869.tar.bz2 ayatana-indicator-datetime-398154d354d19a85f629a6d7131b1a7bd6b7b869.zip |
Fixing up indicator-datetime
* Config options
* Calendar update signals from calendar widget - should update appointments/marks not working at present
Diffstat (limited to 'src/indicator-datetime.c')
-rw-r--r-- | src/indicator-datetime.c | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/src/indicator-datetime.c b/src/indicator-datetime.c index 54b4507..e793d71 100644 --- a/src/indicator-datetime.c +++ b/src/indicator-datetime.c @@ -26,9 +26,11 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #include <locale.h> #include <langinfo.h> #include <string.h> +#include <time.h> /* GStuff */ #include <glib.h> +#include <glib/gprintf.h> #include <glib-object.h> #include <glib/gi18n-lib.h> #include <gio/gio.h> @@ -79,6 +81,9 @@ struct _IndicatorDatetimePrivate { gchar * custom_string; gboolean custom_show_seconds; + gboolean show_week_numbers; + gint week_start; + guint idle_measure; gint max_width; @@ -102,7 +107,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; @@ -120,6 +126,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 SETTINGS_INTERFACE "com.canonical.indicator.datetime" #define SETTINGS_TIME_FORMAT_S "time-format" @@ -127,6 +134,7 @@ struct _indicator_item_t { #define SETTINGS_SHOW_DAY_S "show-day" #define SETTINGS_SHOW_DATE_S "show-date" #define SETTINGS_CUSTOM_TIME_FORMAT_S "custom-time-format" +#define SETTINGS_SHOW_WEEK_NUMBERS_S "show-week-numbers" enum { SETTINGS_TIME_LOCALE = 0, @@ -247,6 +255,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; } @@ -305,6 +320,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 "'"); } @@ -531,6 +551,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; @@ -586,6 +618,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; @@ -1224,6 +1259,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); } @@ -1307,6 +1351,19 @@ 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; + 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(ido), "event::month-changed", variant, timestamp); + g_debug("Got month changed signal: %s", datestring); +} static gboolean new_calendar_item (DbusmenuMenuitem * newitem, @@ -1331,7 +1388,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(ido, "month-changed", G_CALLBACK(month_changed_cb), NULL); return TRUE; } |