diff options
Diffstat (limited to 'applets/clock/calendar-window.c')
-rw-r--r-- | applets/clock/calendar-window.c | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/applets/clock/calendar-window.c b/applets/clock/calendar-window.c index db14fb80..e5647167 100644 --- a/applets/clock/calendar-window.c +++ b/applets/clock/calendar-window.c @@ -86,12 +86,41 @@ static GtkWidget * create_hig_frame (CalendarWindow *calwin, const char *key, GCallback callback); +static void calendar_mark_today(GtkCalendar *calendar) +{ + time_t now; + struct tm tm1; + guint year, month, day; + + gtk_calendar_get_date(calendar, &year, &month, &day); + time(&now); + localtime_r (&now, &tm1); + if ((tm1.tm_mon == month) && (tm1.tm_year + 1900 == year)) { + gtk_calendar_mark_day (GTK_CALENDAR (calendar), tm1.tm_mday); + } else { + gtk_calendar_unmark_day (GTK_CALENDAR (calendar), tm1.tm_mday); + } +} + +static gboolean calendar_update(gpointer user_data) +{ + GtkCalendar *calendar = user_data; + calendar_mark_today(calendar); + return G_SOURCE_REMOVE; +} + +static void calendar_month_changed_cb(GtkCalendar *calendar, gpointer user_data) +{ + gtk_calendar_clear_marks(calendar); + g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, calendar_update, user_data, NULL); +} + static GtkWidget * calendar_window_create_calendar (CalendarWindow *calwin) { GtkWidget *calendar; GtkCalendarDisplayOptions options; - struct tm *tm; + struct tm tm1; calendar = gtk_calendar_new (); options = gtk_calendar_get_display_options (GTK_CALENDAR (calendar)); @@ -101,12 +130,14 @@ calendar_window_create_calendar (CalendarWindow *calwin) options &= ~(GTK_CALENDAR_SHOW_WEEK_NUMBERS); gtk_calendar_set_display_options (GTK_CALENDAR (calendar), options); - tm = localtime (calwin->priv->current_time); + localtime_r (calwin->priv->current_time, &tm1); + gtk_calendar_select_month (GTK_CALENDAR (calendar), + tm1.tm_mon, tm1.tm_year + 1900); + gtk_calendar_select_day (GTK_CALENDAR (calendar), tm1.tm_mday); + calendar_mark_today (GTK_CALENDAR(calendar)); - gtk_calendar_select_month (GTK_CALENDAR (calendar), - tm->tm_mon, - tm->tm_year + 1900); - gtk_calendar_select_day (GTK_CALENDAR (calendar), tm->tm_mday); + g_signal_connect(calendar, "month-changed", + G_CALLBACK(calendar_month_changed_cb), calendar); return calendar; } |