Now takes object and flags parameters. Likewise. Likewise.

1998-04-13  Federico Mena Quintero  <federico@nuclecu.unam.mx>

	* gncal-week-view.c (gncal_week_view_update): Now takes object and
	flags parameters.
	* gncal-day-view.c (gncal_day_view_update): Likewise.
	* gncal-full-day.c (gncal_full_day_update): Likewise.
	(child_focus_in): New function.  In conjunction with
	child_focus_out(), these only display the handles in the child
	when it is focused.  The result is that the user can see more of
	the child's text when nothing is focused, and we can also display
	fatter and nicer drag handles.

	* gnome-cal.c (gnome_calendar_object_changed): Now takes an
	additional flags parameter
	(gnome_calendar_update_all): Made function static.  Now takes
	changed object and flags parameters as well.
	(gnome_calendar_object_changed): Now takes additional flags
	parameter to indicate what changed in the specified object.

	* calobj.h (CalObjectChange): New enum with flags to describe what
	has been changed in an object.

svn path=/trunk/; revision=132
This commit is contained in:
Federico Mena Quintero
1998-04-14 04:06:58 +00:00
committed by Arturo Espinosa
parent 23ef00df35
commit 49a388705e
20 changed files with 217 additions and 78 deletions

View File

@ -1,5 +1,25 @@
1998-04-13 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gncal-week-view.c (gncal_week_view_update): Now takes object and
flags parameters.
* gncal-day-view.c (gncal_day_view_update): Likewise.
* gncal-full-day.c (gncal_full_day_update): Likewise.
(child_focus_in): New function. In conjunction with
child_focus_out(), these only display the handles in the child
when it is focused. The result is that the user can see more of
the child's text when nothing is focused, and we can also display
fatter and nicer drag handles.
* gnome-cal.c (gnome_calendar_object_changed): Now takes an
additional flags parameter
(gnome_calendar_update_all): Made function static. Now takes
changed object and flags parameters as well.
(gnome_calendar_object_changed): Now takes additional flags
parameter to indicate what changed in the specified object.
* calobj.h (CalObjectChange): New enum with flags to describe what
has been changed in an object.
* gncal-full-day.h:
* gncal-full-day.c (gncal_full_day_focus_child): New function to
let the outside world decide which child to focus.

View File

@ -85,6 +85,13 @@ typedef struct {
int frequency;
} Recurrence;
/* Flags to indicate what has changed in an object */
typedef enum {
CHANGE_NEW = 1 << 0, /* new object */
CHANGE_SUMMARY = 1 << 1, /* summary */
CHANGE_DATES = 1 << 2 /* dtstart / dtend */
} CalObjectChange;
/*
* This describes an iCalendar object, note that we never store durations, instead we
* always compute the end time computed from the start + duration.

View File

@ -85,6 +85,13 @@ typedef struct {
int frequency;
} Recurrence;
/* Flags to indicate what has changed in an object */
typedef enum {
CHANGE_NEW = 1 << 0, /* new object */
CHANGE_SUMMARY = 1 << 1, /* summary */
CHANGE_DATES = 1 << 2 /* dtstart / dtend */
} CalObjectChange;
/*
* This describes an iCalendar object, note that we never store durations, instead we
* always compute the end time computed from the start + duration.

View File

@ -114,7 +114,7 @@ gncal_day_view_new (GnomeCalendar *calendar, time_t lower, time_t upper)
dview->upper = upper;
dview->events = 0;
gncal_day_view_update (dview);
gncal_day_view_update (dview, NULL, 0);
return GTK_WIDGET (dview);
}
@ -284,7 +284,7 @@ gncal_day_view_expose (GtkWidget *widget, GdkEventExpose *event)
}
void
gncal_day_view_update (GncalDayView *dview)
gncal_day_view_update (GncalDayView *dview, iCalObject *ico, int flags)
{
struct tm tm;
char buf[256];
@ -323,7 +323,7 @@ gncal_day_view_set_bounds (GncalDayView *dview, time_t lower, time_t upper)
dview->lower = lower;
dview->upper = upper;
gncal_day_view_update (dview);
gncal_day_view_update (dview, NULL, 0);
}
}

View File

@ -46,7 +46,7 @@ struct _GncalDayViewClass {
guint gncal_day_view_get_type (void);
GtkWidget *gncal_day_view_new (GnomeCalendar *calendar, time_t lower, time_t upper);
void gncal_day_view_update (GncalDayView *dview);
void gncal_day_view_update (GncalDayView *dview, iCalObject *ico, int flags);
void gncal_day_view_set_bounds (GncalDayView *dview, time_t lower, time_t upper);
void gncal_day_view_set_shadow (GncalDayView *dview, GtkShadowType shadow_type);

View File

@ -14,7 +14,7 @@
#define TEXT_BORDER 2
#define HANDLE_SIZE 3
#define HANDLE_SIZE 8
#define MIN_WIDTH 200
#define XOR_RECT_WIDTH 2
#define UNSELECT_TIMEOUT 150 /* ms */
@ -173,9 +173,9 @@ child_set_text_pos (Child *child)
GtkAllocation allocation;
allocation.x = 0;
allocation.y = HANDLE_SIZE;
allocation.y = (GTK_WIDGET_HAS_FOCUS (child->widget) ? HANDLE_SIZE : 0);
allocation.width = child->width;
allocation.height = child->height - 2 * HANDLE_SIZE;
allocation.height = child->height - (GTK_WIDGET_HAS_FOCUS (child->widget) ? (2 * HANDLE_SIZE) : 0);
gtk_widget_size_request (child->widget, &child->widget->requisition); /* FIXME: is this needed? */
gtk_widget_size_allocate (child->widget, &allocation);
@ -297,18 +297,43 @@ child_realized_setup (GtkWidget *widget, gpointer data)
}
static gint
child_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
child_focus_in (GtkWidget *widget, GdkEventFocus *event, gpointer data)
{
Child *child;
child = data;
/* Paint handles on child */
child_set_text_pos (child);
return FALSE;
}
static gint
child_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
{
Child *child;
GncalFullDay *fullday;
child = data;
/* Update summary in calendar object */
if (child->ico->summary)
g_free (child->ico->summary);
child->ico->summary = gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1);
/* FIXME: need notify calendar of change? */
/* Erase handles from child */
child_set_text_pos (child);
/* Notify calendar of change */
fullday = gtk_object_get_user_data (GTK_OBJECT (widget));
gnome_calendar_object_changed (fullday->calendar, child->ico, CHANGE_SUMMARY);
return FALSE;
}
@ -328,6 +353,8 @@ child_new (GncalFullDay *fullday, iCalObject *ico)
child->width = 0;
child->height = 0;
gtk_object_set_user_data (GTK_OBJECT (child->widget), fullday);
child_range_changed (fullday, child);
/* We set the i-beam cursor and the initial summary text upon realization */
@ -336,11 +363,13 @@ child_new (GncalFullDay *fullday, iCalObject *ico)
(GtkSignalFunc) child_realized_setup,
child);
/* Update the iCalObject summary when the text widget loses focus */
gtk_signal_connect_after (GTK_OBJECT (child->widget), "focus_in_event",
(GtkSignalFunc) child_focus_in,
child);
gtk_signal_connect (GTK_OBJECT (child->widget), "focus_out_event",
(GtkSignalFunc) child_focus_out,
child);
gtk_signal_connect_after (GTK_OBJECT (child->widget), "focus_out_event",
(GtkSignalFunc) child_focus_out,
child);
/* Finish setup */
@ -1354,7 +1383,7 @@ update_from_drag_info (GncalFullDay *fullday)
/* Notify calendar of change */
gnome_calendar_object_changed (fullday->calendar, di->child->ico);
gnome_calendar_object_changed (fullday->calendar, di->child->ico, CHANGE_DATES);
}
static gint
@ -1569,7 +1598,7 @@ gncal_full_day_foreach (GtkContainer *container, GtkCallback callback, gpointer
}
void
gncal_full_day_update (GncalFullDay *fullday)
gncal_full_day_update (GncalFullDay *fullday, iCalObject *ico, int flags)
{
GList *children;
GList *l_events, *events;
@ -1581,6 +1610,24 @@ gncal_full_day_update (GncalFullDay *fullday)
if (!fullday->calendar->cal)
return;
/* Try to find child that changed */
for (children = fullday->children; children; children = children->next) {
child = children->data;
if (child->ico == ico)
break;
}
/* If child was found and nothing but the summary changed, we can just paint the child and return */
if (children && !(flags & ~CHANGE_SUMMARY)) {
child_draw (fullday, child, NULL, TRUE);
return;
}
/* We have to regenerate and layout our list of children */
for (children = fullday->children; children; children = children->next)
child_destroy (fullday, children->data);
@ -1633,7 +1680,7 @@ gncal_full_day_set_bounds (GncalFullDay *fullday, time_t lower, time_t upper)
di->sel_rows_used = 0; /* clear selection */
gncal_full_day_update (fullday);
gncal_full_day_update (fullday, NULL, 0);
}
}
@ -1663,19 +1710,19 @@ gncal_full_day_selection_range (GncalFullDay *fullday, time_t *lower, time_t *up
}
void
gncal_full_day_focus_child (GncalFullDay *fullday, iCalObject *object)
gncal_full_day_focus_child (GncalFullDay *fullday, iCalObject *ico)
{
GList *children;
Child *child;
GdkEvent event;
g_return_if_fail (fullday != NULL);
g_return_if_fail (object != NULL);
g_return_if_fail (ico != NULL);
for (children = fullday->children; children; children = children->next) {
child = children->data;
if (child->ico == object) {
if (child->ico == ico) {
gtk_widget_grab_focus (child->widget);
/* We synthesize a click because GtkText will not set the cursor and

View File

@ -52,7 +52,7 @@ struct _GncalFullDayClass {
guint gncal_full_day_get_type (void);
GtkWidget *gncal_full_day_new (GnomeCalendar *calendar, time_t lower, time_t upper);
void gncal_full_day_update (GncalFullDay *fullday);
void gncal_full_day_update (GncalFullDay *fullday, iCalObject *ico, int flags);
void gncal_full_day_set_bounds (GncalFullDay *fullday, time_t lower, time_t upper);
/* Returns the selected range in lower and upper. If nothing is
@ -60,7 +60,7 @@ void gncal_full_day_set_bounds (GncalFullDay *fullday, time_t lower,
*/
int gncal_full_day_selection_range (GncalFullDay *fullday, time_t *lower, time_t *upper);
void gncal_full_day_focus_child (GncalFullDay *fullday, iCalObject *object);
void gncal_full_day_focus_child (GncalFullDay *fullday, iCalObject *ico);
END_GNOME_DECLS

View File

@ -105,24 +105,24 @@ gncal_week_view_new (GnomeCalendar *calendar, time_t start_of_week)
}
static void
update (GncalWeekView *wview, int update_days)
update (GncalWeekView *wview, int update_days, iCalObject *object, int flags)
{
int i;
if (update_days)
for (i = 0; i < 7; i++)
gncal_day_view_update (wview->days[i]);
gncal_day_view_update (wview->days[i], object, flags);
/* FIXME: update extra widgets */
}
void
gncal_week_view_update (GncalWeekView *wview)
gncal_week_view_update (GncalWeekView *wview, iCalObject *ico, int flags)
{
g_return_if_fail (wview != NULL);
g_return_if_fail (GNCAL_IS_WEEK_VIEW (wview));
update (wview, TRUE);
update (wview, TRUE, ico, flags);
}
void
@ -166,5 +166,5 @@ gncal_week_view_set (GncalWeekView *wview, time_t start_of_week)
day_start = day_end;
}
update (wview, FALSE);
update (wview, FALSE, NULL, 0);
}

View File

@ -42,11 +42,11 @@ struct _GncalWeekViewClass {
};
guint gncal_week_view_get_type (void);
GtkWidget *gncal_week_view_new (GnomeCalendar *calendar, time_t start_of_week);
guint gncal_week_view_get_type (void);
GtkWidget *gncal_week_view_new (GnomeCalendar *calendar, time_t start_of_week);
void gncal_week_view_update (GncalWeekView *wview);
void gncal_week_view_set (GncalWeekView *wview, time_t start_of_week);
void gncal_week_view_update (GncalWeekView *wview, iCalObject *ico, int flags);
void gncal_week_view_set (GncalWeekView *wview, time_t start_of_week);
END_GNOME_DECLS

View File

@ -185,18 +185,18 @@ gnome_calendar_new (char *title)
return retval;
}
void
gnome_calendar_update_all (GnomeCalendar *cal)
static void
gnome_calendar_update_all (GnomeCalendar *cal, iCalObject *object, int flags)
{
gncal_full_day_update (GNCAL_FULL_DAY (cal->day_view));
gncal_week_view_update (GNCAL_WEEK_VIEW (cal->week_view));
gncal_full_day_update (GNCAL_FULL_DAY (cal->day_view), object, flags);
gncal_week_view_update (GNCAL_WEEK_VIEW (cal->week_view), object, flags);
}
void
gnome_calendar_load (GnomeCalendar *gcal, char *file)
{
calendar_load (gcal->cal, file);
gnome_calendar_update_all (gcal);
gnome_calendar_update_all (gcal, NULL, 0);
}
void
@ -205,11 +205,11 @@ gnome_calendar_add_object (GnomeCalendar *gcal, iCalObject *obj)
printf ("Adding object at: ");
print_time_t (obj->dtstart);
calendar_add_object (gcal->cal, obj);
gnome_calendar_update_all (gcal);
gnome_calendar_update_all (gcal, obj, CHANGE_NEW);
}
void
gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj)
gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj, int flags)
{
g_return_if_fail (gcal != NULL);
g_return_if_fail (GNOME_IS_CALENDAR (gcal));
@ -222,5 +222,5 @@ gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj)
gcal->cal->modified = TRUE;
gnome_calendar_update_all (gcal);
gnome_calendar_update_all (gcal, obj, flags);
}

View File

@ -42,7 +42,9 @@ void gnome_calendar_add_object (GnomeCalendar *gcal, iCalObject *obj);
void gnome_calendar_next (GnomeCalendar *gcal);
void gnome_calendar_previous (GnomeCalendar *gcal);
void gnome_calendar_goto (GnomeCalendar *gcal, time_t new_time);
void gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj);
/* Flags is a bitmask of CalObjectChange values */
void gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj, int flags);
END_GNOME_DECLS

View File

@ -114,7 +114,7 @@ gncal_day_view_new (GnomeCalendar *calendar, time_t lower, time_t upper)
dview->upper = upper;
dview->events = 0;
gncal_day_view_update (dview);
gncal_day_view_update (dview, NULL, 0);
return GTK_WIDGET (dview);
}
@ -284,7 +284,7 @@ gncal_day_view_expose (GtkWidget *widget, GdkEventExpose *event)
}
void
gncal_day_view_update (GncalDayView *dview)
gncal_day_view_update (GncalDayView *dview, iCalObject *ico, int flags)
{
struct tm tm;
char buf[256];
@ -323,7 +323,7 @@ gncal_day_view_set_bounds (GncalDayView *dview, time_t lower, time_t upper)
dview->lower = lower;
dview->upper = upper;
gncal_day_view_update (dview);
gncal_day_view_update (dview, NULL, 0);
}
}

View File

@ -46,7 +46,7 @@ struct _GncalDayViewClass {
guint gncal_day_view_get_type (void);
GtkWidget *gncal_day_view_new (GnomeCalendar *calendar, time_t lower, time_t upper);
void gncal_day_view_update (GncalDayView *dview);
void gncal_day_view_update (GncalDayView *dview, iCalObject *ico, int flags);
void gncal_day_view_set_bounds (GncalDayView *dview, time_t lower, time_t upper);
void gncal_day_view_set_shadow (GncalDayView *dview, GtkShadowType shadow_type);

View File

@ -14,7 +14,7 @@
#define TEXT_BORDER 2
#define HANDLE_SIZE 3
#define HANDLE_SIZE 8
#define MIN_WIDTH 200
#define XOR_RECT_WIDTH 2
#define UNSELECT_TIMEOUT 150 /* ms */
@ -173,9 +173,9 @@ child_set_text_pos (Child *child)
GtkAllocation allocation;
allocation.x = 0;
allocation.y = HANDLE_SIZE;
allocation.y = (GTK_WIDGET_HAS_FOCUS (child->widget) ? HANDLE_SIZE : 0);
allocation.width = child->width;
allocation.height = child->height - 2 * HANDLE_SIZE;
allocation.height = child->height - (GTK_WIDGET_HAS_FOCUS (child->widget) ? (2 * HANDLE_SIZE) : 0);
gtk_widget_size_request (child->widget, &child->widget->requisition); /* FIXME: is this needed? */
gtk_widget_size_allocate (child->widget, &allocation);
@ -297,18 +297,43 @@ child_realized_setup (GtkWidget *widget, gpointer data)
}
static gint
child_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
child_focus_in (GtkWidget *widget, GdkEventFocus *event, gpointer data)
{
Child *child;
child = data;
/* Paint handles on child */
child_set_text_pos (child);
return FALSE;
}
static gint
child_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
{
Child *child;
GncalFullDay *fullday;
child = data;
/* Update summary in calendar object */
if (child->ico->summary)
g_free (child->ico->summary);
child->ico->summary = gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1);
/* FIXME: need notify calendar of change? */
/* Erase handles from child */
child_set_text_pos (child);
/* Notify calendar of change */
fullday = gtk_object_get_user_data (GTK_OBJECT (widget));
gnome_calendar_object_changed (fullday->calendar, child->ico, CHANGE_SUMMARY);
return FALSE;
}
@ -328,6 +353,8 @@ child_new (GncalFullDay *fullday, iCalObject *ico)
child->width = 0;
child->height = 0;
gtk_object_set_user_data (GTK_OBJECT (child->widget), fullday);
child_range_changed (fullday, child);
/* We set the i-beam cursor and the initial summary text upon realization */
@ -336,11 +363,13 @@ child_new (GncalFullDay *fullday, iCalObject *ico)
(GtkSignalFunc) child_realized_setup,
child);
/* Update the iCalObject summary when the text widget loses focus */
gtk_signal_connect_after (GTK_OBJECT (child->widget), "focus_in_event",
(GtkSignalFunc) child_focus_in,
child);
gtk_signal_connect (GTK_OBJECT (child->widget), "focus_out_event",
(GtkSignalFunc) child_focus_out,
child);
gtk_signal_connect_after (GTK_OBJECT (child->widget), "focus_out_event",
(GtkSignalFunc) child_focus_out,
child);
/* Finish setup */
@ -1354,7 +1383,7 @@ update_from_drag_info (GncalFullDay *fullday)
/* Notify calendar of change */
gnome_calendar_object_changed (fullday->calendar, di->child->ico);
gnome_calendar_object_changed (fullday->calendar, di->child->ico, CHANGE_DATES);
}
static gint
@ -1569,7 +1598,7 @@ gncal_full_day_foreach (GtkContainer *container, GtkCallback callback, gpointer
}
void
gncal_full_day_update (GncalFullDay *fullday)
gncal_full_day_update (GncalFullDay *fullday, iCalObject *ico, int flags)
{
GList *children;
GList *l_events, *events;
@ -1581,6 +1610,24 @@ gncal_full_day_update (GncalFullDay *fullday)
if (!fullday->calendar->cal)
return;
/* Try to find child that changed */
for (children = fullday->children; children; children = children->next) {
child = children->data;
if (child->ico == ico)
break;
}
/* If child was found and nothing but the summary changed, we can just paint the child and return */
if (children && !(flags & ~CHANGE_SUMMARY)) {
child_draw (fullday, child, NULL, TRUE);
return;
}
/* We have to regenerate and layout our list of children */
for (children = fullday->children; children; children = children->next)
child_destroy (fullday, children->data);
@ -1633,7 +1680,7 @@ gncal_full_day_set_bounds (GncalFullDay *fullday, time_t lower, time_t upper)
di->sel_rows_used = 0; /* clear selection */
gncal_full_day_update (fullday);
gncal_full_day_update (fullday, NULL, 0);
}
}
@ -1663,19 +1710,19 @@ gncal_full_day_selection_range (GncalFullDay *fullday, time_t *lower, time_t *up
}
void
gncal_full_day_focus_child (GncalFullDay *fullday, iCalObject *object)
gncal_full_day_focus_child (GncalFullDay *fullday, iCalObject *ico)
{
GList *children;
Child *child;
GdkEvent event;
g_return_if_fail (fullday != NULL);
g_return_if_fail (object != NULL);
g_return_if_fail (ico != NULL);
for (children = fullday->children; children; children = children->next) {
child = children->data;
if (child->ico == object) {
if (child->ico == ico) {
gtk_widget_grab_focus (child->widget);
/* We synthesize a click because GtkText will not set the cursor and

View File

@ -52,7 +52,7 @@ struct _GncalFullDayClass {
guint gncal_full_day_get_type (void);
GtkWidget *gncal_full_day_new (GnomeCalendar *calendar, time_t lower, time_t upper);
void gncal_full_day_update (GncalFullDay *fullday);
void gncal_full_day_update (GncalFullDay *fullday, iCalObject *ico, int flags);
void gncal_full_day_set_bounds (GncalFullDay *fullday, time_t lower, time_t upper);
/* Returns the selected range in lower and upper. If nothing is
@ -60,7 +60,7 @@ void gncal_full_day_set_bounds (GncalFullDay *fullday, time_t lower,
*/
int gncal_full_day_selection_range (GncalFullDay *fullday, time_t *lower, time_t *upper);
void gncal_full_day_focus_child (GncalFullDay *fullday, iCalObject *object);
void gncal_full_day_focus_child (GncalFullDay *fullday, iCalObject *ico);
END_GNOME_DECLS

View File

@ -105,24 +105,24 @@ gncal_week_view_new (GnomeCalendar *calendar, time_t start_of_week)
}
static void
update (GncalWeekView *wview, int update_days)
update (GncalWeekView *wview, int update_days, iCalObject *object, int flags)
{
int i;
if (update_days)
for (i = 0; i < 7; i++)
gncal_day_view_update (wview->days[i]);
gncal_day_view_update (wview->days[i], object, flags);
/* FIXME: update extra widgets */
}
void
gncal_week_view_update (GncalWeekView *wview)
gncal_week_view_update (GncalWeekView *wview, iCalObject *ico, int flags)
{
g_return_if_fail (wview != NULL);
g_return_if_fail (GNCAL_IS_WEEK_VIEW (wview));
update (wview, TRUE);
update (wview, TRUE, ico, flags);
}
void
@ -166,5 +166,5 @@ gncal_week_view_set (GncalWeekView *wview, time_t start_of_week)
day_start = day_end;
}
update (wview, FALSE);
update (wview, FALSE, NULL, 0);
}

View File

@ -42,11 +42,11 @@ struct _GncalWeekViewClass {
};
guint gncal_week_view_get_type (void);
GtkWidget *gncal_week_view_new (GnomeCalendar *calendar, time_t start_of_week);
guint gncal_week_view_get_type (void);
GtkWidget *gncal_week_view_new (GnomeCalendar *calendar, time_t start_of_week);
void gncal_week_view_update (GncalWeekView *wview);
void gncal_week_view_set (GncalWeekView *wview, time_t start_of_week);
void gncal_week_view_update (GncalWeekView *wview, iCalObject *ico, int flags);
void gncal_week_view_set (GncalWeekView *wview, time_t start_of_week);
END_GNOME_DECLS

View File

@ -185,18 +185,18 @@ gnome_calendar_new (char *title)
return retval;
}
void
gnome_calendar_update_all (GnomeCalendar *cal)
static void
gnome_calendar_update_all (GnomeCalendar *cal, iCalObject *object, int flags)
{
gncal_full_day_update (GNCAL_FULL_DAY (cal->day_view));
gncal_week_view_update (GNCAL_WEEK_VIEW (cal->week_view));
gncal_full_day_update (GNCAL_FULL_DAY (cal->day_view), object, flags);
gncal_week_view_update (GNCAL_WEEK_VIEW (cal->week_view), object, flags);
}
void
gnome_calendar_load (GnomeCalendar *gcal, char *file)
{
calendar_load (gcal->cal, file);
gnome_calendar_update_all (gcal);
gnome_calendar_update_all (gcal, NULL, 0);
}
void
@ -205,11 +205,11 @@ gnome_calendar_add_object (GnomeCalendar *gcal, iCalObject *obj)
printf ("Adding object at: ");
print_time_t (obj->dtstart);
calendar_add_object (gcal->cal, obj);
gnome_calendar_update_all (gcal);
gnome_calendar_update_all (gcal, obj, CHANGE_NEW);
}
void
gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj)
gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj, int flags)
{
g_return_if_fail (gcal != NULL);
g_return_if_fail (GNOME_IS_CALENDAR (gcal));
@ -222,5 +222,5 @@ gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj)
gcal->cal->modified = TRUE;
gnome_calendar_update_all (gcal);
gnome_calendar_update_all (gcal, obj, flags);
}

View File

@ -42,7 +42,9 @@ void gnome_calendar_add_object (GnomeCalendar *gcal, iCalObject *obj);
void gnome_calendar_next (GnomeCalendar *gcal);
void gnome_calendar_previous (GnomeCalendar *gcal);
void gnome_calendar_goto (GnomeCalendar *gcal, time_t new_time);
void gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj);
/* Flags is a bitmask of CalObjectChange values */
void gnome_calendar_object_changed (GnomeCalendar *gcal, iCalObject *obj, int flags);
END_GNOME_DECLS

View File

@ -85,6 +85,13 @@ typedef struct {
int frequency;
} Recurrence;
/* Flags to indicate what has changed in an object */
typedef enum {
CHANGE_NEW = 1 << 0, /* new object */
CHANGE_SUMMARY = 1 << 1, /* summary */
CHANGE_DATES = 1 << 2 /* dtstart / dtend */
} CalObjectChange;
/*
* This describes an iCalendar object, note that we never store durations, instead we
* always compute the end time computed from the start + duration.