aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@nuclecu.unam.mx>1998-08-28 08:29:59 +0800
committerArturo Espinosa <unammx@src.gnome.org>1998-08-28 08:29:59 +0800
commit21e41f438e4761587b0ea42db80b23dde1eb59e3 (patch)
treebf8fed6dc79bd0df6121f757e5f91afd699f645f /calendar/gui
parente4a4179f9d2226b1420e73ae894221502bfd7209 (diff)
downloadgsoc2013-evolution-21e41f438e4761587b0ea42db80b23dde1eb59e3.tar.gz
gsoc2013-evolution-21e41f438e4761587b0ea42db80b23dde1eb59e3.tar.zst
gsoc2013-evolution-21e41f438e4761587b0ea42db80b23dde1eb59e3.zip
Today: fixed calculation of day indexes when weeks start on Monday. The
Today: fixed calculation of day indexes when weeks start on Monday. The year view now marks days (and fixed bugs in day marking as well). Next step: make a generic month-marker routine and use that all over the place. 1998-08-27 Federico Mena Quintero <federico@nuclecu.unam.mx> * gnome-month-item.c (build_month): Now does the correct thing when the user wants weeks to start on Monday. Now all the Monday special casing, as far as day numbering is concerned, is only in this function. * year-view.c (mark_days): This function marks the days that have events in them. It also fixes a memory leak in the old implementation (it was leaking the whole list). (unmark_days): New function used to unmark all the days in the year view. (mark_event): New function that marks all the days that are spanned by a time range. It also fixes the bug in the old implementation where it could possibly mark days past the ends of the year (if the event crosses year boundaries, for example). * timeutil.c (time_year_begin): Take the year parameter since year 1, not 1900. (time_year_end): Likewise. * year-view.c (year_view_size_allocate): Now changing the size of the calendars is done in the idle loop. (idle_handler): This function actually does the resizing of the items. * year-view.h (struct _YearView): Added idle_id and need_resize fields. svn path=/trunk/; revision=346
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/calendar.h12
-rw-r--r--calendar/gui/gnome-month-item.c16
-rw-r--r--calendar/gui/gnome-month-item.h2
-rw-r--r--calendar/gui/year-view.c525
-rw-r--r--calendar/gui/year-view.h6
5 files changed, 240 insertions, 321 deletions
diff --git a/calendar/gui/calendar.h b/calendar/gui/calendar.h
index 0a0e949d92..c12ce639b7 100644
--- a/calendar/gui/calendar.h
+++ b/calendar/gui/calendar.h
@@ -48,15 +48,17 @@ gint calendar_compare_by_dtstart (gpointer a, gpointer b);
void calendar_iterate_on_objects (GList *objects, time_t start, time_t end, calendarfn cb, void *closure);
void calendar_iterate (Calendar *cal, time_t start, time_t end, calendarfn cb, void *closure);
-/* Note this routine returns a GList with CalendarObjects */
-GList *calendar_get_events_in_range (Calendar *cal, time_t start, time_t end);
+/* Returns a list of CalendarObject structures. These represent the events in the calendar that are
+ * in the specified range.
+ */
+GList *calendar_get_events_in_range (Calendar *cal, time_t start, time_t end);
+
+/* Destroy list returned by calendar_get_events_in_range() with this function */
+void calendar_destroy_event_list (GList *l);
/* Informs the calendar that obj information has changed */
void calendar_object_changed (Calendar *cal, iCalObject *obj, int flags);
-/* Destroy the above list with this method */
-void calendar_destroy_event_list (GList *l);
-
void calendar_notify (time_t, void *data);
END_GNOME_DECLS
diff --git a/calendar/gui/gnome-month-item.c b/calendar/gui/gnome-month-item.c
index 308207f5a1..eb0c5eb469 100644
--- a/calendar/gui/gnome-month-item.c
+++ b/calendar/gui/gnome-month-item.c
@@ -407,7 +407,7 @@ day_in_week (int day, int month, int year)
* returned in the start and end arguments.
*/
static void
-build_month (int month, int year, int *days, int *start, int *end)
+build_month (int month, int year, int start_on_monday, int *days, int *start, int *end)
{
int i;
int d_month, d_week;
@@ -432,6 +432,9 @@ build_month (int month, int year, int *days, int *start, int *end)
d_month = days_in_month[is_leap_year (year)][month];
d_week = day_in_week (1, month, year);
+ if (start_on_monday)
+ d_week = (d_week + 6) % 7;
+
for (i = 0; i < d_month; i++)
days[d_week + i] = i + 1;
@@ -446,20 +449,15 @@ build_month (int month, int year, int *days, int *start, int *end)
static void
set_days (GnomeMonthItem *mitem)
{
- int i, ofs;
+ int i;
int start, end;
char buf[100];
- build_month (mitem->month, mitem->year, mitem->day_numbers, &start, &end);
-
- if (mitem->start_on_monday)
- ofs = (start + 6) % 7;
- else
- ofs = start;
+ build_month (mitem->month, mitem->year, mitem->start_on_monday, mitem->day_numbers, &start, &end);
/* Clear days before start of month */
- for (i = 0; i < ofs; i++)
+ for (i = 0; i < start; i++)
gnome_canvas_item_set (mitem->items[GNOME_MONTH_ITEM_DAY_LABEL + i],
"text", NULL,
NULL);
diff --git a/calendar/gui/gnome-month-item.h b/calendar/gui/gnome-month-item.h
index 405fda3702..d117aa85b5 100644
--- a/calendar/gui/gnome-month-item.h
+++ b/calendar/gui/gnome-month-item.h
@@ -106,7 +106,7 @@ struct _GnomeMonthItem {
GtkAnchorType day_anchor; /* Anchor side for the day number labels */
GnomeCanvasItem **items; /* All the items that make up the calendar */
- int day_numbers[42]; /* The numbers of the days */
+ int day_numbers[42]; /* The numbers of the days, as they are shown in the display */
GdkFont *head_font; /* Font for the headings */
GdkFont *day_font; /* Font for the day numbers */
diff --git a/calendar/gui/year-view.c b/calendar/gui/year-view.c
index 8a5bedc038..bb3a38ecab 100644
--- a/calendar/gui/year-view.c
+++ b/calendar/gui/year-view.c
@@ -10,6 +10,7 @@
#include <libgnomeui/gnome-canvas-text.h>
#include "year-view.h"
#include "main.h"
+#include "timeutil.h"
#define HEAD_SPACING 4 /* Spacing between year heading and months */
@@ -19,6 +20,7 @@
static void year_view_class_init (YearViewClass *class);
static void year_view_init (YearView *yv);
+static void year_view_destroy (GtkObject *object);
static void year_view_size_request (GtkWidget *widget,
GtkRequisition *requisition);
static void year_view_size_allocate (GtkWidget *widget,
@@ -54,16 +56,103 @@ year_view_get_type (void)
static void
year_view_class_init (YearViewClass *class)
{
+ GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
+ object_class = (GtkObjectClass *) class;
widget_class = (GtkWidgetClass *) class;
parent_class = gtk_type_class (gnome_canvas_get_type ());
+ object_class->destroy = year_view_destroy;
+
widget_class->size_request = year_view_size_request;
widget_class->size_allocate = year_view_size_allocate;
}
+/* Resizes the year view's child items. This is done in the idle loop for performance (we avoid
+ * resizing on every size allocation).
+ */
+static gint
+idle_handler (gpointer data)
+{
+ YearView *yv;
+ double width, height;
+ double mwidth, mheight;
+ double h_yofs, m_yofs;
+ double x, y;
+ GtkArg arg;
+ GdkFont *head_font, *title_font;
+ int i;
+
+ yv = data;
+
+ /* Get the fonts to get their size later */
+
+ arg.name = "font_gdk";
+ gtk_object_getv (GTK_OBJECT (yv->heading), 1, &arg);
+ head_font = GTK_VALUE_BOXED (arg);
+
+ arg.name = "font_gdk";
+ gtk_object_getv (GTK_OBJECT (yv->titles[0]), 1, &arg);
+ title_font = GTK_VALUE_BOXED (arg);
+
+ /* Adjust heading */
+
+ gnome_canvas_item_set (yv->heading,
+ "x", (double) yv->canvas.width / 2.0,
+ "y", (double) HEAD_SPACING,
+ NULL);
+
+ /* Adjust months */
+
+ h_yofs = 2 * HEAD_SPACING + head_font->ascent + head_font->descent;
+ m_yofs = SPACING + title_font->ascent + title_font->descent;
+
+ width = (yv->canvas.width + SPACING) / 3.0;
+ height = (yv->canvas.height - h_yofs + SPACING) / 4.0;
+
+ mwidth = (yv->canvas.width - 2 * SPACING) / 3.0;
+ mheight = (yv->canvas.height - h_yofs - 3 * SPACING - 4 * m_yofs) / 4.0;
+
+ for (i = 0; i < 12; i++) {
+ x = (i % 3) * width;
+ y = (i / 3) * height + h_yofs;
+
+ /* Title */
+
+ gnome_canvas_item_set (yv->titles[i],
+ "x", x + width / 2.0,
+ "y", y,
+ NULL);
+
+ /* Month item */
+
+ gnome_canvas_item_set (yv->mitems[i],
+ "x", x,
+ "y", y + m_yofs,
+ "width", mwidth,
+ "height", mheight,
+ NULL);
+ }
+
+ /* Done */
+
+ yv->need_resize = FALSE;
+ return FALSE;
+}
+
+/* Marks the year view as needing a resize, which will be performed during the idle loop */
+static void
+need_resize (YearView *yv)
+{
+ if (yv->need_resize)
+ return;
+
+ yv->need_resize = TRUE;
+ yv->idle_id = gtk_idle_add (idle_handler, yv);
+}
+
static void
year_view_init (YearView *yv)
{
@@ -107,6 +196,30 @@ year_view_init (YearView *yv)
"heading_color", "white",
NULL);
}
+
+ /* We will need to resize the items when we paint for the first time */
+
+ yv->idle_id = -1;
+ need_resize (yv);
+}
+
+static void
+year_view_destroy (GtkObject *object)
+{
+ YearView *yv;
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (IS_YEAR_VIEW (object));
+
+ yv = YEAR_VIEW (object);
+
+ if (yv->need_resize) {
+ yv->need_resize = FALSE;
+ gtk_idle_remove (yv->idle_id);
+ }
+
+ if (GTK_OBJECT_CLASS (parent_class)->destroy)
+ (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
}
GtkWidget *
@@ -146,14 +259,6 @@ static void
year_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
{
YearView *yv;
- double width, height;
- double mwidth, mheight;
- double h_yofs;
- double m_yofs;
- double x, y;
- int i;
- GtkArg arg;
- GdkFont *head_font, *title_font;
g_return_if_fail (widget != NULL);
g_return_if_fail (IS_YEAR_VIEW (widget));
@@ -165,79 +270,139 @@ year_view_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
(* GTK_WIDGET_CLASS (parent_class)->size_allocate) (widget, allocation);
gnome_canvas_set_scroll_region (GNOME_CANVAS (yv), 0, 0, allocation->width, allocation->height);
+ need_resize (yv);
+}
- arg.name = "font_gdk";
- gtk_object_getv (GTK_OBJECT (yv->heading), 1, &arg);
- head_font = GTK_VALUE_BOXED (arg);
+void
+year_view_update (YearView *yv, iCalObject *object, int flags)
+{
+ g_return_if_fail (yv != NULL);
+ g_return_if_fail (IS_YEAR_VIEW (yv));
- arg.name = "font_gdk";
- gtk_object_getv (GTK_OBJECT (yv->titles[0]), 1, &arg);
- title_font = GTK_VALUE_BOXED (arg);
+ /* If only the summary changed, we don't care */
- /* Adjust heading */
+ if (object && ((flags & CHANGE_SUMMARY) == flags))
+ return;
- gnome_canvas_item_set (yv->heading,
- "x", (double) allocation->width / 2.0,
- "y", (double) HEAD_SPACING,
- NULL);
+ year_view_set (yv, time_year_begin (yv->year));
+}
- /* Adjust months */
+/* Unmarks all the days in the year view by setting their boxes and labels to the default colors */
+static void
+unmark_days (YearView *yv)
+{
+ GnomeCanvasItem *item;
+ int i, j;
- h_yofs = 2 * HEAD_SPACING + head_font->ascent + head_font->descent;
- m_yofs = SPACING + title_font->ascent + title_font->descent;
+ for (i = 0; i < 12; i++)
+ for (j = 0; j < 42; j++) {
+ /* Box */
+
+ item = gnome_month_item_num2child (GNOME_MONTH_ITEM (yv->mitems[i]),
+ GNOME_MONTH_ITEM_DAY_BOX + j);
+ gnome_canvas_item_set (item,
+ "fill_color", "#d6d6d6d6d6d6",
+ NULL);
+
+ /* Label */
+
+ item = gnome_month_item_num2child (GNOME_MONTH_ITEM (yv->mitems[i]),
+ GNOME_MONTH_ITEM_DAY_LABEL + j);
+ gnome_canvas_item_set (item,
+ "fill_color", "black",
+ NULL);
+ }
+}
- width = (allocation->width + SPACING) / 3.0;
- height = (allocation->height - h_yofs + SPACING) / 4.0;
+/* Marks all the days that fall into the specified time span */
+static void
+mark_event (YearView *yv, time_t start, time_t end)
+{
+ time_t t;
+ struct tm tm;
+ int day_index;
+ GnomeCanvasItem *mitem, *item;
- mwidth = (allocation->width - 2 * SPACING) / 3.0;
- mheight = (allocation->height - h_yofs - 3 * SPACING - 4 * m_yofs) / 4.0;
+ tm = *localtime (&start);
+ end = time_end_of_day (end);
- for (i = 0; i < 12; i++) {
- x = (i % 3) * width;
- y = (i / 3) * height + h_yofs;
+ for (t = start; t < end; t += 60 * 60 * 24) {
+ mktime (&tm); /* normalize the time */
- /* Title */
+ /* We need this comparison because an event may span more than one year (!).
+ * Yes, this is not the most efficient way of doing this (we could just clip
+ * the event to the current year), but it will do for now.
+ */
- gnome_canvas_item_set (yv->titles[i],
- "x", x + width / 2.0,
- "y", y,
- NULL);
+ if ((tm.tm_year + 1900) == yv->year) {
+ /* Figure out the month item and day index that correspond to this time */
- /* Month item */
+ mitem = yv->mitems[tm.tm_mon];
+ day_index = gnome_month_item_day2index (GNOME_MONTH_ITEM (mitem), tm.tm_mday);
+ g_assert (day_index != -1);
- gnome_canvas_item_set (yv->mitems[i],
- "x", x,
- "y", y + m_yofs,
- "width", mwidth,
- "height", mheight,
- NULL);
+ /* Mark the day box */
+
+ item = gnome_month_item_num2child (GNOME_MONTH_ITEM (mitem),
+ GNOME_MONTH_ITEM_DAY_BOX + day_index);
+ gnome_canvas_item_set (item,
+ "fill_color", "tan",
+ NULL);
+
+ /* Mark the day label */
+
+ item = gnome_month_item_num2child (GNOME_MONTH_ITEM (mitem),
+ GNOME_MONTH_ITEM_DAY_LABEL + day_index);
+ gnome_canvas_item_set (item,
+ "fill_color", "black",
+ NULL);
+ }
+
+ /* Next day */
+
+ tm.tm_mday++;
}
}
-void
-year_view_update (YearView *yv, iCalObject *object, int flags)
+/* Queries the calendar for all the events in the current year and marks the days that have at least
+ * one event in them.
+ */
+static void
+mark_days (YearView *yv)
{
- g_return_if_fail (yv != NULL);
- g_return_if_fail (IS_YEAR_VIEW (yv));
+ time_t year_begin, year_end;
+ GList *list, *l;
+ CalendarObject *co;
+
+ year_begin = time_year_begin (yv->year);
+ year_end = time_year_end (yv->year);
- /* FIXME */
+ list = calendar_get_events_in_range (yv->calendar->cal, year_begin, year_end);
+
+ for (l = list; l; l = l->next) {
+ co = l->data;
+ mark_event (yv, co->ev_start, co->ev_end);
+ }
+
+ calendar_destroy_event_list (list);
}
void
year_view_set (YearView *yv, time_t year)
{
- struct tm tm;
- int i;
+ struct tm *tm;
char buf[100];
+ int i;
g_return_if_fail (yv != NULL);
g_return_if_fail (IS_YEAR_VIEW (yv));
- tm = *localtime (&year);
+ tm = localtime (&year);
+ yv->year = tm->tm_year + 1900;
/* Heading */
- sprintf (buf, "%d", tm.tm_year + 1900);
+ sprintf (buf, "%d", yv->year);
gnome_canvas_item_set (yv->heading,
"text", buf,
NULL);
@@ -246,11 +411,12 @@ year_view_set (YearView *yv, time_t year)
for (i = 0; i < 12; i++)
gnome_canvas_item_set (yv->mitems[i],
- "year", tm.tm_year + 1900,
+ "year", yv->year,
"month", i,
NULL);
- /* FIXME: update events */
+ unmark_days (yv);
+ mark_days (yv);
}
void
@@ -266,258 +432,5 @@ year_view_time_format_changed (YearView *yv)
"start_on_monday", week_starts_on_monday,
NULL);
- /* FIXME: update events */
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-#if 0
-
-#include "gncal-year-view.h"
-#include "calendar.h"
-#include "timeutil.h"
-
-static void gncal_year_view_init (GncalYearView *yview);
-
-static void
-double_click(GtkCalendar *gc, GncalYearView *yview)
-{
- struct tm tm;
- time_t t;
-
- tm.tm_mday = gc->selected_day;
- tm.tm_mon = gc->month;
- tm.tm_year = gc->year - 1900;
- tm.tm_hour = 0;
- tm.tm_min = 0;
- tm.tm_sec = 0;
- tm.tm_isdst = -1;
- t = mktime (&tm);
-
- gnome_calendar_dayjump (yview->gcal, t);
+ year_view_set (yv, time_year_begin (yv->year));
}
-
-static void
-do_nothing(GtkCalendarClass *c)
-{
-}
-
-static void
-select_day(GtkWidget *widget, gpointer data)
-{
- int i;
-
- GncalYearView *yview;
-
- yview = GNCAL_YEAR_VIEW(data);
-
- for (i = 0; i < 12; i++)
- gtk_signal_handler_block(GTK_OBJECT(yview->calendar[i]),
- yview->handler[i]);
-
- for (i = 0; i < 12; i++)
- if (GTK_CALENDAR(yview->calendar[i]) != GTK_CALENDAR(widget))
- gtk_calendar_select_day(GTK_CALENDAR(yview->calendar[i]), 0);
-
- for (i = 0; i < 12; i++)
- gtk_signal_handler_unblock(GTK_OBJECT(yview->calendar[i]),
- yview->handler[i]);
-}
-
-guint
-gncal_year_view_get_type (void)
-{
- static guint year_view_type = 0;
-
- if (!year_view_type) {
- GtkTypeInfo year_view_info = {
- "GncalYearView",
- sizeof (GncalYearView),
- sizeof (GncalYearViewClass),
- (GtkClassInitFunc) NULL,
- (GtkObjectInitFunc) gncal_year_view_init,
- (GtkArgSetFunc) NULL,
- (GtkArgGetFunc) NULL
- };
-
- year_view_type = gtk_type_unique (gtk_table_get_type (),
- &year_view_info);
- }
-
- return year_view_type;
-}
-
-static void
-gncal_year_view_init (GncalYearView *yview)
-{
- int i;
-
- for (i = 0; i < 12; i++) {
- yview->calendar[i] = NULL;
- yview->handler [i] = 0;
- }
-
- yview->gcal = NULL;
- yview->year_label = NULL;
- yview->year = 0;
-}
-
-GtkWidget *
-gncal_year_view_new (GnomeCalendar *calendar, time_t date)
-{
- struct tm my_tm = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
- char monthbuff[40];
- GncalYearView *yview;
- GtkWidget *frame, *vbox, *label;
- struct tm *tmptm;
- int i, x, y;
-
- yview = gtk_type_new (gncal_year_view_get_type ());
-
- tmptm = localtime(&date);
- yview->year = tmptm->tm_year;
- yview->gcal = calendar;
- my_tm.tm_year = tmptm->tm_year;
- yview->year_label = gtk_label_new("");
- gtk_table_attach (GTK_TABLE (yview),
- GTK_WIDGET (yview->year_label),
- 1, 2,
- 0, 1,
- 0, 0, 0, 5);
- gtk_widget_show(GTK_WIDGET(yview->year_label));
-
- for (x = 0; x < 3; x++)
- for (y = 0; y < 4; y++) {
-
- i = y * 3 + x;
-
- yview->calendar[i] = gtk_calendar_new();
- gtk_calendar_display_options(GTK_CALENDAR(yview->calendar[i]),
- GTK_CALENDAR_SHOW_DAY_NAMES |
- GTK_CALENDAR_NO_MONTH_CHANGE);
- frame = gtk_frame_new(NULL);
- vbox = gtk_vbox_new(0,0);
-
- yview->handler[i] =
- gtk_signal_connect(GTK_OBJECT(yview->calendar[i]), "day_selected",
- GTK_SIGNAL_FUNC(select_day), (gpointer *) yview);
-
- gtk_signal_connect(GTK_OBJECT(yview->calendar[i]), "day_selected_double_click",
- GTK_SIGNAL_FUNC(double_click), (gpointer *) yview);
-
- my_tm.tm_mon = i;
- strftime(monthbuff, 40, "%B", &my_tm);
- label = gtk_label_new(monthbuff);
-
- gtk_container_add(GTK_CONTAINER(frame), vbox);
- gtk_box_pack_start(GTK_BOX(vbox), label, 0, 0, 0);
- gtk_box_pack_start(GTK_BOX(vbox), yview->calendar[i], 0, 0, 0);
-
- gtk_table_attach (GTK_TABLE (yview),
- GTK_WIDGET (frame),
- x, x + 1,
- y + 1, y + 2,
- 0, 0, 0, 0);
-
- gtk_widget_show (frame);
- gtk_widget_show (vbox);
- gtk_widget_show (GTK_WIDGET (yview->calendar[i]));
- }
-
- gncal_year_view_set (yview, date);
-
- return GTK_WIDGET (yview);
-}
-
-static void
-year_view_mark_day (iCalObject *ical, time_t start, time_t end, void *closure)
-{
- GncalYearView *yview = (GncalYearView *) closure;
- struct tm tm_s;
- time_t t, day_end;
-
- tm_s = *localtime (&start);
- day_end = time_end_of_day (end);
-
- for (t = start; t <= day_end; t+= 60*60*24){
- time_t new = mktime (&tm_s);
- struct tm tm_day;
-
- tm_day = *localtime (&new);
- gtk_calendar_mark_day (GTK_CALENDAR (yview->calendar [tm_day.tm_mon]),
- tm_day.tm_mday);
- tm_s.tm_mday++;
- }
-}
-
-static void
-gncal_year_view_set_year (GncalYearView *yview, int year)
-{
- time_t year_begin, year_end;
- char buff[20];
- GList *l;
- int i;
-
- if (!yview->gcal->cal)
- return;
-
- snprintf(buff, 20, "%d", yview->year + 1900);
- gtk_label_set(GTK_LABEL(yview->year_label), buff);
-
- for (i = 0; i < 12; i++) {
- gtk_calendar_freeze (GTK_CALENDAR (yview->calendar [i]));
- gtk_calendar_select_month (GTK_CALENDAR(yview->calendar[i]), i, yview->year + 1900);
- gtk_calendar_clear_marks (GTK_CALENDAR (yview->calendar[i]));
- }
-
- year_begin = time_year_begin (yview->year);
- year_end = time_year_end (yview->year);
-
- l = calendar_get_events_in_range (yview->gcal->cal, year_begin, year_end);
- for (; l; l = l->next){
- CalendarObject *co = l->data;
-
- year_view_mark_day (co->ico, co->ev_start, co->ev_end, yview);
- }
- for (i = 0; i < 12; i++)
- gtk_calendar_thaw (GTK_CALENDAR (yview->calendar [i]));
-
- calendar_destroy_event_list (l);
-}
-
-void
-gncal_year_view_set (GncalYearView *yview, time_t date)
-{
- struct tm *tmptm;
-
- tmptm = localtime(&date);
- yview->year = tmptm->tm_year;
-
- gncal_year_view_set_year (yview, yview->year);
-}
-
-void
-gncal_year_view_update (GncalYearView *yview, iCalObject *ico, int flags)
-{
- g_return_if_fail (yview != NULL);
- g_return_if_fail (GNCAL_IS_YEAR_VIEW (yview));
-
- /* If only the summary changed, we dont care */
- if (flags && (flags & CHANGE_SUMMARY) == flags)
- return;
-
- gncal_year_view_set_year (yview, yview->year);
-}
-
-#endif
diff --git a/calendar/gui/year-view.h b/calendar/gui/year-view.h
index 0638698fb4..fa0b4ed65c 100644
--- a/calendar/gui/year-view.h
+++ b/calendar/gui/year-view.h
@@ -32,9 +32,15 @@ struct _YearView {
GnomeCalendar *calendar; /* The calendar we are associated to */
+ int year; /* The year we are displaying */
+
GnomeCanvasItem *heading; /* Big heading with year */
GnomeCanvasItem *titles[12]; /* Titles for months */
GnomeCanvasItem *mitems[12]; /* Month items */
+
+ guint idle_id; /* ID of idle handler for resize */
+
+ int need_resize : 1; /* Specifies whether we need to resize the canvas items or not */
};
struct _YearViewClass {
c2ba8afbbeca11'>. Fix a problem with os_sleep returning early without raising an exceptionglewis2006-11-074-2/+66 * . Fix a possible problem building the JDK in the GMT+0 time zone. Whenglewis2006-11-072-0/+42 * . Chase the X11BASE -> LOCALBASE change for the browser plugin directories.glewis2006-11-076-4/+6 * Update Eclipse to version 3.2.1. Assign port maintainership tokan2006-11-0444-3192/+774 * Update to 1.0.4.lawrance2006-11-012-4/+4 * Fix the test-target to, actually, succeed, when the testsmi2006-10-201-4/+5 * Disable two more self-tests, which may hang in rare circumstance.mi2006-10-182-2/+27 * - update distinfo and un-(break|expire)itetcu2006-10-153-42/+15 * Fix pkg-plist.lawrance2006-10-151-0/+16 * Chase the GNOME X11BASE to LOCALBASE move, and fix the build with themarcus2006-10-1410-29/+28 * . The IPV6_ONLY option is unnecessary as IPV6_V6ONLY is defined inglewis2006-10-101-5/+0 * . Add support for installing the JCE policy files. [1]glewis2006-10-092-30/+47 * Be sure to fail our test-target, if the vendor's self-test fails.mi2006-10-091-1/+2 * . Add a patch to support IPv6 only operation.glewis2006-10-091-0/+131 * . Use a mutex to make the resolver functions thread safe on FreeBSD 4.xglewis2006-10-091-0/+110 * Tune the port a little finer:mi2006-10-083-2/+18 * - update to 1.4 (a bugs fix release)sem2006-10-082-6/+5 * Make fetchable again by updating to 1.14.0.lawrance2006-10-082-4/+4 * Upgrade from 1.7.1 to 3.1.0, thanks largely to the diffs supplied by ijliaomi2006-10-074-383/+86 * . Update distinfo for re-rolled amd64 tarballs. Fixes problem with noglewis2006-10-062-6/+6 * Update to 1.34 release.ale2006-10-052-4/+4 * . Update to 1.5.0_07-b01.glewis2006-10-034-20/+20 * - Update to 1.0.3.stefan2006-09-282-5/+5 * Update to 1.2.0.stefan2006-09-282-6/+6 * Upgrade to 5.2.des2006-09-263-1164/+10 * . Cross reference manvm(1).glewis2006-09-201-0/+1 * amd64 distinfo does not exist, restrict to i386kris2006-09-171-1/+1 * . Diablo is no longer restricted to i386, so allow it to be a possibleglewis2006-09-142-8/+4 * . Note that FreeBSD 5.x/amd64 isn't support (6.x/amd64 is). [1]glewis2006-09-112-6/+6 * . Prevent problems opening RandomAccessFile with "rws" as the mode byglewis2006-09-094-2/+44 * Update to 4.2.1vs2006-09-082-10/+10 * Remove stale files.olgeni2006-09-074-2/+8 * Remove stale files and use JAVA_HOME.olgeni2006-09-076-3/+24 * Replace NO_CDROM and NO_PACKAGE with RESTRICTEDkris2006-09-043-6/+3 * Allow package buildskris2006-09-031-1/+1 * Allow package buildskris2006-09-0314-14/+14 * NO_CDROM is superfluous herekris2006-09-031-2/+1 * NO_CDROM and NO_PACKAGE are superfluouskris2006-09-031-2/+0 * NO_PACKAGE and NO_CDROM are superfluouskris2006-09-031-3/+1 * NO_CDROM and NO_PACKAGE are not appropriate; use RESTRICTED here insteadkris2006-09-031-2/+1 * NO_CDROM and NO_PACKAGE are superfluouskris2006-09-031-2/+0 * Schedule these forbidden ports for termination on 2006-12-01kris2006-09-033-0/+6 * Schedule these broken ports for termination on 2006-12-01kris2006-09-032-0/+4 * BROKEN: Size mismatchkris2006-09-011-0/+2 * Fix the build by copying needed JAR files at post-extract stagehq2006-08-231-1/+6 * * Add registervm and unregistervm [1]maho2006-08-172-8/+12 * Make portlint(1) happylioux2006-08-161-1/+1 * New port eclipse-jad version 3.1: Jad Java decompiler plugin forlioux2006-08-164-0/+47 * - s,INSTALLS_SHLIB,USE_LDCONFIG,gclsung2006-08-152-2/+2 * - Update to 1.1.8.stefan2006-08-134-1415/+642 * Update java/castor from 1.0.1 to 1.0.2 (latest upstream stable release)itetcu2006-08-112-4/+4 * Unbreak, port fetches just fine.tmclaugh2006-08-091-2/+0 * Remove java/fastjar. We already have as archivers/fastjar...maho2006-08-081-1/+0 * Remve java/fastjar port. we already have as archivers/fastjar...maho2006-08-084-36/+0 * Add fastjar. FastJar is an free and fast alternative ofmaho2006-08-085-0/+37 * Add files in pkg-plist.maho2006-08-072-1/+3 * Add sun.boot.class.path as default bootclasspath for gcj,maho2006-08-043-1/+34 * Add gcj41, gij41 etc as gcj, gij, etc respectively,maho2006-08-032-1/+9 * Use gcj instead of ecj, and bump portrevision.maho2006-08-032-10/+3 * The JDT Core Batch Compiler (stand alone verison of the Eclipsemaho2006-08-038-0/+194 * . Fix a segfault caused by fonts with illegal glyph names or glyph namesglewis2006-08-024-2/+36 * . Space out the arguments to OPTIONS with tabs rather than spaces.glewis2006-08-022-8/+14 * Fix java.c Now we can invoke gij by typing java.maho2006-07-292-0/+13 * Add java-gcj-compat. With scripts and symlinks, now gcj installation actsmaho2006-07-297-0/+106 * . Take account of the MFC or the *_r functions to RELENG_6.glewis2006-07-201-18/+32 * Update to 1.33 release:ale2006-07-194-38/+24 * . Bump PORTREVISION.glewis2006-07-192-2/+2 * . On amd64 the plugin should look for the Server VM, since there is noglewis2006-07-196-0/+90 * . Properly deal with error cases in transferTo0().glewis2006-07-192-0/+76 * . Convert to using OPTIONS.glewis2006-07-194-96/+96 * Mark broken: unfetchable.linimon2006-07-161-0/+2 * This plug-in for IBM's Eclipse platform integrates features from theitetcu2006-07-125-0/+58 * Remove zero-sized files.erwin2006-07-111-0/+0 * . The new Diablo JDK release doesn't need -XX:+UseMembar.glewis2006-07-061-2/+0 * . Update to 1.5.0_07-b00.glewis2006-07-066-154/+151 * . Update to 1.5.0_07-b00.glewis2006-07-066-1307/+1077 * . Update to 1.13.6.glewis2006-06-272-4/+4 * . Update to 0.51glewis2006-06-242-6/+4 * Update to 1.0.1.kib2006-06-242-4/+4 * Update to 1.0.1hq2006-06-192-4/+4 * . Bump PORTREVISION for the last three changes.glewis2006-06-172-0/+2 * . Work around a thread cache problem that caused javah to crash with anglewis2006-06-172-0/+32 * . Filter out corrupt environment variables with no name.glewis2006-06-172-0/+44 * . Increase the default stack size on amd64.glewis2006-06-172-0/+26 * . Try to fix the build on FreeBSD-CURRENT, which now defines gethostent_rglewis2006-06-171-0/+83 * . Update to 1.13.5.glewis2006-06-153-5/+5 * . Update to 3.0.2.glewis2006-06-1514-652/+656 * . Update to 1.5.0_07.glewis2006-06-146-10/+20 * . Update to 1.4.2_12.glewis2006-06-143-5/+15 * . Update to 4.0.4.glewis2006-06-146-22/+24 * - Update to bsd.java.mk 2.0hq2006-06-132-169/+22 * - Update to bsd.java.mk 2.0hq2006-06-132-4/+4 * . Add manvm(1). This is similar to javavm(1), but allows one to view theglewis2006-06-134-175/+362 * Defining $MASTER_SITES for your infoormation may confusing distfile survey.kuriyama2006-06-091-1/+1 * . Introduce the JAVAVM_DRYRUN variable. If this is set, then javavm willglewis2006-06-09