diff options
Diffstat (limited to 'a11y/calendar')
-rw-r--r-- | a11y/calendar/ea-day-view.c | 5 | ||||
-rw-r--r-- | a11y/calendar/ea-gnome-calendar.c | 106 | ||||
-rw-r--r-- | a11y/calendar/ea-gnome-calendar.h | 2 | ||||
-rw-r--r-- | a11y/calendar/ea-week-view.c | 5 |
4 files changed, 113 insertions, 5 deletions
diff --git a/a11y/calendar/ea-day-view.c b/a11y/calendar/ea-day-view.c index 7f5926e9a6..49b7a123ed 100644 --- a/a11y/calendar/ea-day-view.c +++ b/a11y/calendar/ea-day-view.c @@ -27,6 +27,7 @@ #include "ea-cal-view-event.h" #include "ea-calendar-helpers.h" +#include "ea-gnome-calendar.h" #include "calendar-commands.h" #include <glib/gstrfuncs.h> #include <libgnome/gnome-i18n.h> @@ -137,12 +138,12 @@ ea_day_view_get_name (AtkObject *accessible) day_view = E_DAY_VIEW (GTK_ACCESSIBLE (accessible)->widget); gcal = e_calendar_view_get_calendar (E_CALENDAR_VIEW (day_view)); - label_text = calendar_get_text_for_folder_bar_label (gcal); + label_text = ea_gnome_calendar_get_label_description (gcal); n_events = atk_object_get_n_accessible_children (accessible); /* the child main item is always there */ --n_events; - if (n_events = 1) + if (n_events == 1) g_snprintf (buffer, sizeof (buffer), _(", %d event"), n_events); if (n_events > 1) diff --git a/a11y/calendar/ea-gnome-calendar.c b/a11y/calendar/ea-gnome-calendar.c index 80870e6c33..fc0027008f 100644 --- a/a11y/calendar/ea-gnome-calendar.c +++ b/a11y/calendar/ea-gnome-calendar.c @@ -25,7 +25,9 @@ #include "ea-gnome-calendar.h" #include "calendar-commands.h" +#include <string.h> #include <gtk/gtknotebook.h> +#include <libecal/e-cal-time-util.h> #include <libgnome/gnome-i18n.h> static void ea_gnome_calendar_class_init (EaGnomeCalendarClass *klass); @@ -135,6 +137,108 @@ ea_gnome_calendar_new (GtkWidget *widget) return accessible; } +const gchar * +ea_gnome_calendar_get_label_description (GnomeCalendar *gcal) +{ + icaltimezone *zone; + struct icaltimetype start_tt, end_tt; + time_t start_time, end_time; + struct tm start_tm, end_tm; + static char buffer[512]; + char end_buffer[256]; + GnomeCalendarViewType view; + + gnome_calendar_get_visible_time_range (gcal, &start_time, &end_time); + zone = gnome_calendar_get_timezone (gcal); + + start_tt = icaltime_from_timet_with_zone (start_time, FALSE, zone); + start_tm.tm_year = start_tt.year - 1900; + start_tm.tm_mon = start_tt.month - 1; + start_tm.tm_mday = start_tt.day; + start_tm.tm_hour = start_tt.hour; + start_tm.tm_min = start_tt.minute; + start_tm.tm_sec = start_tt.second; + start_tm.tm_isdst = -1; + start_tm.tm_wday = time_day_of_week (start_tt.day, start_tt.month - 1, + start_tt.year); + + /* Take one off end_time so we don't get an extra day. */ + end_tt = icaltime_from_timet_with_zone (end_time - 1, FALSE, zone); + end_tm.tm_year = end_tt.year - 1900; + end_tm.tm_mon = end_tt.month - 1; + end_tm.tm_mday = end_tt.day; + end_tm.tm_hour = end_tt.hour; + end_tm.tm_min = end_tt.minute; + end_tm.tm_sec = end_tt.second; + end_tm.tm_isdst = -1; + end_tm.tm_wday = time_day_of_week (end_tt.day, end_tt.month - 1, + end_tt.year); + + view = gnome_calendar_get_view (gcal); + + switch (view) { + case GNOME_CAL_DAY_VIEW: + case GNOME_CAL_WORK_WEEK_VIEW: + case GNOME_CAL_WEEK_VIEW: + if (start_tm.tm_year == end_tm.tm_year + && start_tm.tm_mon == end_tm.tm_mon + && start_tm.tm_mday == end_tm.tm_mday) { + e_utf8_strftime (buffer, sizeof (buffer), + _("%A %d %b %Y"), &start_tm); + } else if (start_tm.tm_year == end_tm.tm_year) { + e_utf8_strftime (buffer, sizeof (buffer), + _("%a %d %b"), &start_tm); + e_utf8_strftime (end_buffer, sizeof (end_buffer), + _("%a %d %b %Y"), &end_tm); + strcat (buffer, " - "); + strcat (buffer, end_buffer); + } else { + e_utf8_strftime (buffer, sizeof (buffer), + _("%a %d %b %Y"), &start_tm); + e_utf8_strftime (end_buffer, sizeof (end_buffer), + _("%a %d %b %Y"), &end_tm); + strcat (buffer, " - "); + strcat (buffer, end_buffer); + } + break; + case GNOME_CAL_MONTH_VIEW: + case GNOME_CAL_LIST_VIEW: + if (start_tm.tm_year == end_tm.tm_year) { + if (start_tm.tm_mon == end_tm.tm_mon) { + if (start_tm.tm_mday == end_tm.tm_mday) { + buffer [0] = '\0'; + } else { + e_utf8_strftime (buffer, sizeof (buffer), + "%d", &start_tm); + strcat (buffer, " - "); + } + e_utf8_strftime (end_buffer, sizeof (end_buffer), + _("%d %b %Y"), &end_tm); + strcat (buffer, end_buffer); + } else { + e_utf8_strftime (buffer, sizeof (buffer), + _("%d %b"), &start_tm); + e_utf8_strftime (end_buffer, sizeof (end_buffer), + _("%d %b %Y"), &end_tm); + strcat (buffer, " - "); + strcat (buffer, end_buffer); + } + } else { + e_utf8_strftime (buffer, sizeof (buffer), + _("%d %b %Y"), &start_tm); + e_utf8_strftime (end_buffer, sizeof (end_buffer), + _("%d %b %Y"), &end_tm); + strcat (buffer, " - "); + strcat (buffer, end_buffer); + } + break; + default: + g_assert_not_reached (); + return NULL; + } + return buffer; +} + static G_CONST_RETURN gchar* ea_gnome_calendar_get_name (AtkObject *accessible) { @@ -239,7 +343,7 @@ ea_gcal_dates_change_cb (GnomeCalendar *gcal, gpointer data) g_return_if_fail (data); g_return_if_fail (EA_IS_GNOME_CALENDAR (data)); - new_name = calendar_get_text_for_folder_bar_label (gcal); + new_name = ea_gnome_calendar_get_label_description (gcal); atk_object_set_name (ATK_OBJECT(data), new_name); g_signal_emit_by_name (data, "visible_data_changed"); diff --git a/a11y/calendar/ea-gnome-calendar.h b/a11y/calendar/ea-gnome-calendar.h index 2cb39219c4..130466add3 100644 --- a/a11y/calendar/ea-gnome-calendar.h +++ b/a11y/calendar/ea-gnome-calendar.h @@ -57,6 +57,8 @@ struct _EaGnomeCalendarClass AtkObject* ea_gnome_calendar_new (GtkWidget *widget); +const gchar * ea_gnome_calendar_get_label_description (GnomeCalendar *gcal); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/a11y/calendar/ea-week-view.c b/a11y/calendar/ea-week-view.c index 3d84f422bc..1dd137912b 100644 --- a/a11y/calendar/ea-week-view.c +++ b/a11y/calendar/ea-week-view.c @@ -27,6 +27,7 @@ #include "ea-cal-view.h" #include "ea-cal-view-event.h" #include "ea-calendar-helpers.h" +#include "ea-gnome-calendar.h" #include "calendar-commands.h" #include <gal/e-text/e-text.h> #include <libgnome/gnome-i18n.h> @@ -138,12 +139,12 @@ ea_week_view_get_name (AtkObject *accessible) week_view = E_WEEK_VIEW (GTK_ACCESSIBLE (accessible)->widget); gcal = e_calendar_view_get_calendar (E_CALENDAR_VIEW (week_view)); - label_text = calendar_get_text_for_folder_bar_label (gcal); + label_text = ea_gnome_calendar_get_label_description (gcal); n_events = atk_object_get_n_accessible_children (accessible); /* the child main item is always there */ --n_events; - if (n_events = 1) + if (n_events == 1) g_snprintf (buffer, sizeof (buffer), _(", %d event"), n_events); if (n_events > 1) |