Merged from calendar-views-with-model branch

svn path=/trunk/; revision=22308
This commit is contained in:
Rodrigo Moya
2003-08-20 10:17:18 +00:00
parent ba861603f4
commit 4ad72d24ee
26 changed files with 1316 additions and 1306 deletions

View File

@ -516,7 +516,6 @@
* cal-client/cal-client-multi.[ch]:
* cal-client/Makefile.am: removed obsolete code.
>>>>>>> 1.1841.2.20
2003-07-29 Rodrigo Moya <rodrigo@ximian.com>
Fixes all "alarm daemon doesn't start with session"

View File

@ -99,6 +99,15 @@ char *cal_util_expand_uri (char *uri, gboolean tasks);
void cal_util_add_timezones_from_component (icalcomponent *vcal_comp,
icalcomponent *icalcomp);
gboolean cal_util_component_is_instance (icalcomponent *icalcomp);
gboolean cal_util_component_has_alarms (icalcomponent *icalcomp);
gboolean cal_util_component_has_organizer (icalcomponent *icalcomp);
gboolean cal_util_component_has_recurrences (icalcomponent *icalcomp);
gboolean cal_util_component_has_rdates (icalcomponent *icalcomp);
gboolean cal_util_component_has_rrules (icalcomponent *icalcomp);
gboolean cal_util_event_dates_match (icalcomponent *icalcomp1, icalcomponent *icalcomp2);
/* The static capabilities to be supported by backends */
#define CAL_STATIC_CAPABILITY_NO_ALARM_REPEAT "no-alarm-repeat"
#define CAL_STATIC_CAPABILITY_NO_AUDIO_ALARMS "no-audio-alarms"

View File

@ -445,16 +445,17 @@ alarm_notify_add_calendar (AlarmNotify *an, const char *str_uri, gboolean load_a
/* we only add the URI to load_afterwards if we open it
correctly */
lc = g_new (LoadedClient, 1);
lc->client = client;
lc->uri = uri;
lc->refcount = 1;
lc->timeout_id = -1;
g_signal_connect (G_OBJECT (client), "cal_opened",
G_CALLBACK (cal_opened_cb),
lc);
if (cal_client_open_calendar (client, str_uri, FALSE)) {
lc->client = client;
lc->uri = uri;
lc->refcount = 1;
lc->timeout_id = -1;
g_hash_table_insert (priv->uri_client_hash,
g_strdup (str_uri), lc);
} else {

View File

@ -314,8 +314,8 @@ static void
publish_freebusy_cmd (BonoboUIComponent *uic, gpointer data, const gchar *path)
{
GnomeCalendar *gcal;
CalClient *client;
GList *comp_list;
GList *client_list, *cl;
GList *comp_list = NULL;
icaltimezone *utc;
time_t start = time (NULL), end;
@ -325,20 +325,26 @@ publish_freebusy_cmd (BonoboUIComponent *uic, gpointer data, const gchar *path)
start = time_day_begin_with_zone (start, utc);
end = time_add_week_with_zone (start, 6, utc);
client = gnome_calendar_get_cal_client (gcal);
comp_list = cal_client_get_free_busy (client, NULL, start, end);
if (comp_list) {
GList *l;
client_list = e_cal_model_get_client_list (gnome_calendar_get_calendar_model (gcal));
for (cl = client_list; cl != NULL; cl = cl->next) {
GList *tmp_comp_list;
for (l = comp_list; l; l = l->next) {
CalComponent *comp = CAL_COMPONENT (l->data);
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp, client, NULL);
tmp_comp_list = cal_client_get_free_busy ((CalClient *) cl->data, NULL, start, end);
if (tmp_comp_list) {
GList *l;
g_object_unref (comp);
for (l = comp_list; l; l = l->next) {
CalComponent *comp = CAL_COMPONENT (l->data);
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp, (CalClient *) cl->data, NULL);
g_object_unref (comp);
}
g_list_free (comp_list);
}
g_list_free (comp_list);
}
g_list_free (client_list);
}
static void
@ -589,7 +595,7 @@ sensitize_calendar_commands (GnomeCalendar *gcal, BonoboControl *control, gboole
g_assert (uic != NULL);
n_selected = enable ? gnome_calendar_get_num_events_selected (gcal) : 0;
read_only = cal_client_is_read_only (gnome_calendar_get_cal_client (gcal));
read_only = cal_client_is_read_only (e_cal_model_get_default_client (gnome_calendar_get_calendar_model (gcal)));
bonobo_ui_component_set_prop (uic, "/commands/Cut", "sensitive",
n_selected == 0 || read_only ? "0" : "1",
@ -620,7 +626,7 @@ sensitize_calendar_commands (GnomeCalendar *gcal, BonoboControl *control, gboole
event = NULL;
if (event) {
if (cal_component_has_recurrences (event->comp))
if (cal_util_component_has_recurrences (event->comp_data->icalcomp))
has_recurrences = TRUE;
}
}

View File

@ -164,8 +164,6 @@ backend_cal_opened_offline (CalClient *client, CalClientOpenStatus status, gpoin
static void
backend_cal_opened_online (CalClient *client, CalClientOpenStatus status, gpointer data)
{
CalendarOfflineHandler *offline_handler = data;
if (status != CAL_CLIENT_OPEN_SUCCESS) {
g_object_unref (G_OBJECT (client));
return;

View File

@ -95,7 +95,7 @@ static void comp_editor_factory_finalize (GObject *object);
static void impl_editExisting (PortableServer_Servant servant,
const CORBA_char *str_uri,
const GNOME_Evolution_Calendar_CalObjUID uid,
const CORBA_char *uid,
CORBA_Environment *ev);
static void impl_editNew (PortableServer_Servant servant,
const CORBA_char *str_uri,
@ -585,7 +585,7 @@ queue_edit_existing (OpenClient *oc, const char *uid)
static void
impl_editExisting (PortableServer_Servant servant,
const CORBA_char *str_uri,
const GNOME_Evolution_Calendar_CalObjUID uid,
const CORBA_char *uid,
CORBA_Environment *ev)
{
CompEditorFactory *factory;

View File

@ -75,7 +75,7 @@ get_prop (BonoboPropertyBag *bag,
switch (arg_id) {
case PROPERTY_CALENDAR_URI_IDX:
uri = cal_client_get_uri (gnome_calendar_get_cal_client (gcal));
uri = cal_client_get_uri (e_cal_model_get_default_client (gnome_calendar_get_calendar_model (gcal)));
BONOBO_ARG_SET_STRING (arg, uri);
break;

View File

@ -957,9 +957,11 @@ ecmt_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data)
case E_CAL_MODEL_TASKS_DUE_NEVER:
case E_CAL_MODEL_TASKS_DUE_FUTURE:
case E_CAL_MODEL_TASKS_DUE_COMPLETE:
break;
}
return E_CAL_MODEL_CLASS (parent_class)->get_color_for_component (model, comp_data);
return "black";
/* return E_CAL_MODEL_CLASS (parent_class)->get_color_for_component (model, comp_data); */
}
static void

View File

@ -224,7 +224,6 @@ e_cal_model_finalize (GObject *object)
}
if (priv->accounts) {
g_object_unref (priv->accounts);
priv->accounts = NULL;
}
@ -615,7 +614,6 @@ ecm_append_row (ETableModel *etm, ETableModel *source, int row)
{
ECalModelClass *model_class;
ECalModelComponent comp_data;
icalcomponent *icalcomp;
ECalModel *source_model = (ECalModel *) source;
ECalModel *model = (ECalModel *) etm;
@ -644,11 +642,11 @@ ecm_append_row (ETableModel *etm, ETableModel *source, int row)
model_class->fill_component_from_model (model, &comp_data, source_model, row);
}
if (cal_client_update_objects (comp_data.client, icalcomp) != CAL_CLIENT_RESULT_SUCCESS) {
if (cal_client_update_objects (comp_data.client, comp_data.icalcomp) != CAL_CLIENT_RESULT_SUCCESS) {
/* FIXME: show error dialog */
}
icalcomponent_free (icalcomp);
icalcomponent_free (comp_data.icalcomp);
}
static void *
@ -811,42 +809,53 @@ ecm_value_to_string (ETableModel *etm, int col, const void *value)
/* ECalModel class methods */
typedef struct {
const gchar *color;
GList *uris;
} AssignedColorData;
static const char *
ecm_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data)
{
ECalModelPrivate *priv;
gint i, pos;
GList *l;
gchar *colors[] = {
"#718DA9", /* 113 141 169 */
"#C6E2E2", /* 198 226 226 */
"#8DC671", /* 141 198 113 */
"#C6E2A9", /* 198 226 169 */
"#C6A971", /* 198 169 113 */
"#FFE271", /* 255 226 113 */
"#E27171", /* 226 113 113 */
"#FFA9A9", /* 255 169 169 */
"#C68DC6", /* 198 141 198 */
"#E2C6E2", /* 226 198 226 */
"#D6D684", /* 214 214 132 */
"#5B5B84" /* 91 91 132 */
gint i, first_empty = 0;
static AssignedColorData assigned_colors[] = {
{ "#BECEDD", NULL }, /* 190 206 221 Blue */
{ "#E2F0EF", NULL }, /* 226 240 239 Light Blue */
{ "#C6E2B7", NULL }, /* 198 226 183 Green */
{ "#E2F0D3", NULL }, /* 226 240 211 Light Green */
{ "#E2D4B7", NULL }, /* 226 212 183 Khaki */
{ "#EAEAC1", NULL }, /* 234 234 193 Light Khaki */
{ "#F0B8B7", NULL }, /* 240 184 183 Pink */
{ "#FED4D3", NULL }, /* 254 212 211 Light Pink */
{ "#E2C6E1", NULL }, /* 226 198 225 Purple */
{ "#F0E2EF", NULL } /* 240 226 239 Light Purple */
};
g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
g_return_val_if_fail (comp_data != NULL, NULL);
priv = model->priv;
for (i = 0; i < G_N_ELEMENTS (assigned_colors); i++) {
GList *l;
for (l = priv->clients, i = 0; l != NULL; l = l->next, i++) {
ECalModelClient *client_data = (ECalModelClient *) l->data;
if (assigned_colors[i].uris == NULL) {
first_empty = i;
continue;
}
if (client_data->client == comp_data->client) {
pos = i % G_N_ELEMENTS (colors);
return colors[pos];
for (l = assigned_colors[i].uris; l != NULL; l = l->next) {
if (!strcmp ((const char *) l->data,
cal_client_get_uri (comp_data->client)))
return assigned_colors[i].color;
}
}
return NULL;
/* return the first unused color */
assigned_colors[first_empty].uris = g_list_append (assigned_colors[first_empty].uris,
g_strdup (cal_client_get_uri (comp_data->client)));
return assigned_colors[first_empty].color;
}
/**
@ -987,6 +996,25 @@ e_cal_model_get_default_client (ECalModel *model)
return client_data->client;
}
/**
* e_cal_model_get_client_list
*/
GList *
e_cal_model_get_client_list (ECalModel *model)
{
GList *list = NULL, *l;
g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
for (l = model->priv->clients; l != NULL; l = l->next) {
ECalModelClient *client_data = (ECalModelClient *) l->data;
list = g_list_append (list, client_data->client);
}
return list;
}
static ECalModelComponent *
search_by_uid_and_client (ECalModelPrivate *priv, CalClient *client, const char *uid)
{
@ -1207,6 +1235,16 @@ update_query_for_client (ECalModel *model, ECalModelClient *client_data)
g_signal_connect (client_data->query, "eval_error", G_CALLBACK (query_eval_error_cb), model);
}
static void
backend_died_cb (CalClient *client, gpointer user_data)
{
ECalModel *model;
model = E_CAL_MODEL (user_data);
e_cal_model_remove_client (model, client);
}
static void
add_new_client (ECalModel *model, CalClient *client)
{
@ -1222,6 +1260,9 @@ add_new_client (ECalModel *model, CalClient *client)
priv->clients = g_list_append (priv->clients, client_data);
g_signal_connect (G_OBJECT (client_data->client), "backend_died",
G_CALLBACK (backend_died_cb), model);
update_query_for_client (model, client_data);
}
@ -1368,6 +1409,7 @@ e_cal_model_create_component_with_defaults (ECalModel *model)
ECalModelPrivate *priv;
CalComponent *comp;
icalcomponent *icalcomp;
CalClient *client;
g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
@ -1375,12 +1417,16 @@ e_cal_model_create_component_with_defaults (ECalModel *model)
g_return_val_if_fail (priv->clients != NULL, NULL);
client = e_cal_model_get_default_client (model);
if (!client)
return icalcomponent_new (priv->kind);
switch (priv->kind) {
case ICAL_VEVENT_COMPONENT :
comp = cal_comp_event_new_with_defaults ((CalClient *) priv->clients->data);
comp = cal_comp_event_new_with_defaults (client);
break;
case ICAL_VTODO_COMPONENT :
comp = cal_comp_task_new_with_defaults ((CalClient *) priv->clients->data);
comp = cal_comp_task_new_with_defaults (client);
break;
default:
return NULL;
@ -1470,3 +1516,25 @@ e_cal_model_date_value_to_string (ECalModel *model, const void *value)
buffer, sizeof (buffer));
return g_strdup (buffer);
}
/**
* e_cal_model_free_component_data
*/
void
e_cal_model_free_component_data (ECalModelComponent *comp_data)
{
g_return_if_fail (comp_data != NULL);
if (comp_data->icalcomp)
icalcomponent_free (comp_data->icalcomp);
if (comp_data->dtstart)
g_free (comp_data->dtstart);
if (comp_data->dtend)
g_free (comp_data->dtend);
if (comp_data->due)
g_free (comp_data->due);
if (comp_data->completed)
g_free (comp_data->completed);
g_free (comp_data);
}

View File

@ -88,6 +88,7 @@ void e_cal_model_set_default_category (ECalModel *model, const gc
void e_cal_model_set_use_24_hour_format (ECalModel *model, gboolean use24);
CalClient *e_cal_model_get_default_client (ECalModel *model);
GList *e_cal_model_get_client_list (ECalModel *model);
void e_cal_model_add_client (ECalModel *model, CalClient *client);
void e_cal_model_remove_client (ECalModel *model, CalClient *client);
void e_cal_model_remove_all_clients (ECalModel *model);
@ -100,6 +101,8 @@ ECalModelComponent *e_cal_model_get_component_at (ECalModel *model, gint row);
gchar *e_cal_model_date_value_to_string (ECalModel *model, const void *value);
void e_cal_model_free_component_data (ECalModelComponent *comp_data);
G_END_DECLS
#endif

View File

@ -23,6 +23,7 @@
#include <config.h>
#include <string.h>
#include <gtk/gtkimage.h>
#include <gtk/gtkinvisible.h>
#include <gtk/gtkstock.h>
#include <libgnome/gnome-i18n.h>
@ -33,6 +34,8 @@
#include "evolution-activity-client.h"
#include "calendar-commands.h"
#include "calendar-config.h"
#include "comp-util.h"
#include "e-cal-model-calendar.h"
#include "e-cal-view.h"
#include "itip-utils.h"
#include "dialogs/delete-comp.h"
@ -52,11 +55,8 @@ struct _ECalViewPrivate {
/* The GnomeCalendar we are associated to */
GnomeCalendar *calendar;
/* Calendar client we are monitoring */
CalClient *client;
/* Search expression */
gchar *sexp;
/* The calendar model we are monitoring */
ECalModel *model;
/* The activity client used to show messages on the status bar. */
EvolutionActivityClient *activity;
@ -94,7 +94,6 @@ static void
e_cal_view_class_init (ECalViewClass *klass)
{
GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
@ -157,6 +156,30 @@ e_cal_view_class_init (ECalViewClass *klass)
e_cal_view_a11y_init ();
}
static void
model_changed_cb (ETableModel *etm, gpointer user_data)
{
ECalView *cal_view = E_CAL_VIEW (user_data);
e_cal_view_update_query (cal_view);
}
static void
model_row_changed_cb (ETableModel *etm, int row, gpointer user_data)
{
ECalView *cal_view = E_CAL_VIEW (user_data);
e_cal_view_update_query (cal_view);
}
static void
model_rows_changed_cb (ETableModel *etm, int row, int count, gpointer user_data)
{
ECalView *cal_view = E_CAL_VIEW (user_data);
e_cal_view_update_query (cal_view);
}
static void
selection_get (GtkWidget *invisible,
GtkSelectionData *selection_data,
@ -200,6 +223,7 @@ selection_received (GtkWidget *invisible,
struct icaldurationtype ic_dur;
char *uid;
icaltimezone *default_zone;
CalClient *client;
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
@ -214,7 +238,8 @@ selection_received (GtkWidget *invisible,
return;
default_tzid = calendar_config_get_timezone ();
cal_client_get_timezone (cal_view->priv->client, default_tzid, &default_zone);
client = e_cal_model_get_default_client (cal_view->priv->model);
cal_client_get_timezone (client, default_tzid, &default_zone);
/* check the type of the component */
kind = icalcomponent_isa (icalcomp);
@ -254,12 +279,12 @@ selection_received (GtkWidget *invisible,
comp, icalcomponent_new_clone (subcomp));
cal_component_set_uid (comp, uid);
cal_client_update_object (cal_view->priv->client, comp);
if (itip_organizer_is_user (comp, cal_view->priv->client) &&
send_component_dialog (gtk_widget_get_toplevel (cal_view),
cal_view->priv->client, comp, TRUE)) {
cal_client_update_object (client, comp);
if (itip_organizer_is_user (comp, client) &&
send_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
client, comp, TRUE)) {
itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp,
cal_view->priv->client, NULL);
client, NULL);
}
free (uid);
@ -288,12 +313,12 @@ selection_received (GtkWidget *invisible,
comp, icalcomponent_new_clone (icalcomp));
cal_component_set_uid (comp, uid);
cal_client_update_object (cal_view->priv->client, comp);
if (itip_organizer_is_user (comp, cal_view->priv->client) &&
send_component_dialog (gtk_widget_get_toplevel (cal_view),
cal_view->priv->client, comp, TRUE)) {
cal_client_update_object (client, comp);
if (itip_organizer_is_user (comp, client) &&
send_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
client, comp, TRUE)) {
itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp,
cal_view->priv->client, NULL);
client, NULL);
}
free (uid);
@ -308,7 +333,7 @@ e_cal_view_init (ECalView *cal_view, ECalViewClass *klass)
{
cal_view->priv = g_new0 (ECalViewPrivate, 1);
cal_view->priv->sexp = g_strdup ("#t"); /* match all by default */
cal_view->priv->model = (ECalModel *) e_cal_model_calendar_new ();
/* Set up the invisible widget for the clipboard selections */
cal_view->priv->invisible = gtk_invisible_new ();
@ -334,14 +359,10 @@ e_cal_view_destroy (GtkObject *object)
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
if (cal_view->priv) {
if (cal_view->priv->client) {
g_object_unref (cal_view->priv->client);
cal_view->priv->client = NULL;
}
if (cal_view->priv->sexp) {
g_free (cal_view->priv->sexp);
cal_view->priv->sexp = NULL;
if (cal_view->priv->model) {
g_signal_handlers_disconnect_by_func (cal_view->priv->model, model_changed_cb, cal_view);
g_object_unref (cal_view->priv->model);
cal_view->priv->model = NULL;
}
if (cal_view->priv->activity) {
@ -386,69 +407,33 @@ e_cal_view_set_calendar (ECalView *cal_view, GnomeCalendar *calendar)
cal_view->priv->calendar = calendar;
}
CalClient *
e_cal_view_get_cal_client (ECalView *cal_view)
ECalModel *
e_cal_view_get_model (ECalView *cal_view)
{
g_return_val_if_fail (E_IS_CAL_VIEW (cal_view), NULL);
return cal_view->priv->client;
}
static void
cal_opened_cb (CalClient *client, CalClientOpenStatus status, gpointer user_data)
{
ECalView *cal_view = (ECalView *) user_data;
if (status != CAL_CLIENT_OPEN_SUCCESS)
return;
e_cal_view_update_query (cal_view);
return cal_view->priv->model;
}
void
e_cal_view_set_cal_client (ECalView *cal_view, CalClient *client)
e_cal_view_set_model (ECalView *cal_view, ECalModel *model)
{
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
g_return_if_fail (E_IS_CAL_MODEL (model));
if (client == cal_view->priv->client)
return;
if (IS_CAL_CLIENT (client))
g_object_ref (client);
if (cal_view->priv->client) {
g_signal_handlers_disconnect_matched (cal_view->priv->client, G_SIGNAL_MATCH_DATA, 0, 0,
NULL, NULL, cal_view);
g_object_unref (cal_view->priv->client);
if (cal_view->priv->model) {
g_signal_handlers_disconnect_matched (cal_view->priv->model, G_SIGNAL_MATCH_DATA,
0, 0, 0, NULL, cal_view);
g_object_unref (cal_view->priv->model);
}
cal_view->priv->client = client;
if (cal_view->priv->client) {
if (cal_client_get_load_state (cal_view->priv->client) == CAL_CLIENT_LOAD_LOADED)
e_cal_view_update_query (cal_view);
else
g_signal_connect (cal_view->priv->client, "cal_opened",
G_CALLBACK (cal_opened_cb), cal_view);
}
}
cal_view->priv->model = model;
g_object_ref (cal_view->priv->model);
g_signal_connect (G_OBJECT (cal_view->priv->model), "model_changed", G_CALLBACK (model_changed_cb), cal_view);
g_signal_connect (G_OBJECT (cal_view->priv->model), "model_row_changed", G_CALLBACK (model_row_changed_cb), cal_view);
g_signal_connect (G_OBJECT (cal_view->priv->model), "model_rows_inserted", G_CALLBACK (model_rows_changed_cb), cal_view);
g_signal_connect (G_OBJECT (cal_view->priv->model), "model_rows_deleted", G_CALLBACK (model_rows_changed_cb), cal_view);
const gchar *
e_cal_view_get_query (ECalView *cal_view)
{
g_return_val_if_fail (E_IS_CAL_VIEW (cal_view), NULL);
return (const gchar *) cal_view->priv->sexp;
}
void
e_cal_view_set_query (ECalView *cal_view, const gchar *sexp)
{
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
if (cal_view->priv->sexp)
g_free (cal_view->priv->sexp);
cal_view->priv->sexp = g_strdup (sexp);
e_cal_view_update_query (cal_view);
}
@ -553,9 +538,13 @@ e_cal_view_update_query (ECalView *cal_view)
{
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
e_cal_view_set_status_message (cal_view, _("Searching"));
if (E_CAL_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->update_query) {
E_CAL_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->update_query (cal_view);
}
e_cal_view_set_status_message (cal_view, NULL);
}
void
@ -574,20 +563,27 @@ e_cal_view_cut_clipboard (ECalView *cal_view)
e_cal_view_copy_clipboard (cal_view);
for (l = selected; l != NULL; l = l->next) {
CalComponent *comp;
ECalViewEvent *event = (ECalViewEvent *) l->data;
if (!event)
continue;
if (itip_organizer_is_user (event->comp, cal_view->priv->client)
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (cal_view),
cal_view->priv->client, event->comp, TRUE))
itip_send_comp (CAL_COMPONENT_METHOD_CANCEL, event->comp,
cal_view->priv->client, NULL);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
cal_component_get_uid (event->comp, &uid);
delete_error_dialog (cal_client_remove_object (cal_view->priv->client, uid),
if (itip_organizer_is_user (comp, event->comp_data->client)
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
event->comp_data->client, comp, TRUE))
itip_send_comp (CAL_COMPONENT_METHOD_CANCEL, comp,
event->comp_data->client, NULL);
cal_component_get_uid (comp, &uid);
delete_error_dialog (cal_client_remove_object (event->comp_data->client, uid),
CAL_COMPONENT_EVENT);
g_object_unref (comp);
}
e_cal_view_set_status_message (cal_view, NULL);
@ -616,13 +612,13 @@ e_cal_view_copy_clipboard (ECalView *cal_view)
event = (ECalViewEvent *) l->data;
if (event)
cal_util_add_timezones_from_component (vcal_comp, cal_component_get_icalcomponent (event->comp));
cal_util_add_timezones_from_component (vcal_comp, event->comp_data->icalcomp);
}
for (l = selected; l != NULL; l = l->next) {
event = (ECalViewEvent *) l->data;
new_icalcomp = icalcomponent_new_clone (cal_component_get_icalcomponent (event->comp));
new_icalcomp = icalcomponent_new_clone (event->comp_data->icalcomp);
icalcomponent_add_component (vcal_comp, new_icalcomp);
}
@ -650,29 +646,36 @@ e_cal_view_paste_clipboard (ECalView *cal_view)
}
static void
delete_event (ECalView *cal_view, CalComponent *comp)
delete_event (ECalView *cal_view, ECalViewEvent *event)
{
CalComponent *comp;
CalComponentVType vtype;
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
vtype = cal_component_get_vtype (comp);
if (delete_component_dialog (comp, FALSE, 1, vtype, GTK_WIDGET (cal_view))) {
const char *uid;
if (itip_organizer_is_user (comp, cal_view->priv->client)
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (cal_view),
cal_view->priv->client,
if (itip_organizer_is_user (comp, event->comp_data->client)
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
event->comp_data->client,
comp, TRUE))
itip_send_comp (CAL_COMPONENT_METHOD_CANCEL, comp,
cal_view->priv->client, NULL);
event->comp_data->client, NULL);
cal_component_get_uid (comp, &uid);
if (!uid || !*uid)
if (!uid || !*uid) {
g_object_unref (comp);
return;
}
delete_error_dialog (
cal_client_remove_object (cal_view->priv->client, uid), CAL_COMPONENT_EVENT);
cal_client_remove_object (event->comp_data->client, uid), CAL_COMPONENT_EVENT);
}
g_object_unref (comp);
}
void
@ -687,7 +690,7 @@ e_cal_view_delete_selected_event (ECalView *cal_view)
event = (ECalViewEvent *) selected->data;
if (event)
delete_event (cal_view, event->comp);
delete_event (cal_view, event);
g_list_free (selected);
}
@ -705,7 +708,7 @@ e_cal_view_delete_selected_events (ECalView *cal_view)
for (l = selected; l != NULL; l = l->next) {
event = (ECalViewEvent *) l->data;
if (event)
delete_event (cal_view, event->comp);
delete_event (cal_view, event);
}
g_list_free (selected);
@ -723,22 +726,23 @@ e_cal_view_delete_selected_occurrence (ECalView *cal_view)
event = (ECalViewEvent *) selected->data;
if (cal_component_is_instance (event->comp)) {
if (cal_util_component_is_instance (event->comp_data->icalcomp)) {
const char *uid;
cal_component_get_uid (event->comp, &uid);
uid = icalcomponent_get_uid (event->comp_data->icalcomp);
delete_error_dialog (
cal_client_remove_object_with_mod (cal_view->priv->client, uid, CALOBJ_MOD_THIS),
cal_client_remove_object_with_mod (event->comp_data->client, uid, CALOBJ_MOD_THIS),
CAL_COMPONENT_EVENT);
} else {
CalComponent *comp;
/* we must duplicate the CalComponent, or we won't know it has changed
when we get the "update_event" signal */
comp = cal_component_clone (event->comp);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
cal_comp_util_add_exdate (comp, event->start, cal_view->priv->zone);
if (cal_client_update_object (cal_view->priv->client, comp)
if (cal_client_update_object (event->comp_data->client, comp)
!= CAL_CLIENT_RESULT_SUCCESS)
g_message ("e_cal_view_delete_selected_occurrence(): Could not update the object!");
@ -813,7 +817,8 @@ on_edit_appointment (GtkWidget *widget, gpointer user_data)
ECalViewEvent *event = (ECalViewEvent *) selected->data;
if (event)
gnome_calendar_edit_object (cal_view->priv->calendar, event->comp, FALSE);
gnome_calendar_edit_object (cal_view->priv->calendar, event->comp_data->client,
event->comp_data->icalcomp, FALSE);
g_list_free (selected);
}
@ -875,8 +880,7 @@ on_save_as (GtkWidget *widget, gpointer user_data)
return;
event = (ECalViewEvent *) selected->data;
ical_string = cal_client_get_component_as_string (cal_view->priv->client,
cal_component_get_icalcomponent (event->comp));
ical_string = cal_client_get_component_as_string (event->comp_data->client, event->comp_data->icalcomp);
if (ical_string == NULL) {
g_warning ("Couldn't convert item to a string");
return;
@ -901,6 +905,7 @@ on_print_event (GtkWidget *widget, gpointer user_data)
ECalView *cal_view;
GList *selected;
ECalViewEvent *event;
CalComponent *comp;
cal_view = E_CAL_VIEW (user_data);
selected = e_cal_view_get_selected_events (cal_view);
@ -908,7 +913,12 @@ on_print_event (GtkWidget *widget, gpointer user_data)
return;
event = (ECalViewEvent *) selected->data;
print_comp (event->comp, cal_view->priv->client, FALSE);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
print_comp (comp, event->comp_data->client, FALSE);
g_object_unref (comp);
}
static void
@ -920,7 +930,7 @@ on_meeting (GtkWidget *widget, gpointer user_data)
selected = e_cal_view_get_selected_events (cal_view);
if (selected) {
ECalViewEvent *event = (ECalViewEvent *) selected->data;
gnome_calendar_edit_object (cal_view->priv->calendar, event->comp, TRUE);
gnome_calendar_edit_object (cal_view->priv->calendar, event->comp_data->client, event->comp_data->icalcomp, TRUE);
g_list_free (selected);
}
@ -934,10 +944,15 @@ on_forward (GtkWidget *widget, gpointer user_data)
selected = e_cal_view_get_selected_events (cal_view);
if (selected) {
CalComponent *comp;
ECalViewEvent *event = (ECalViewEvent *) selected->data;
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, event->comp, cal_view->priv->client, NULL);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp, event->comp_data->client, NULL);
g_list_free (selected);
g_object_unref (comp);
}
}
@ -947,7 +962,7 @@ on_publish (GtkWidget *widget, gpointer user_data)
ECalView *cal_view;
icaltimezone *utc;
time_t start = time (NULL), end;
GList *comp_list;
GList *comp_list, *client_list, *cl;
cal_view = E_CAL_VIEW (user_data);
@ -955,19 +970,24 @@ on_publish (GtkWidget *widget, gpointer user_data)
start = time_day_begin_with_zone (start, utc);
end = time_add_week_with_zone (start, 6, utc);
comp_list = cal_client_get_free_busy (cal_view->priv->client, NULL, start, end);
if (comp_list) {
GList *l;
client_list = e_cal_model_get_client_list (cal_view->priv->model);
for (cl = client_list; cl != NULL; cl = cl->next) {
comp_list = cal_client_get_free_busy ((CalClient *) cl->data, NULL, start, end);
if (comp_list) {
GList *l;
for (l = comp_list; l; l = l->next) {
CalComponent *comp = CAL_COMPONENT (l->data);
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp, cal_view->priv->client, NULL);
for (l = comp_list; l; l = l->next) {
CalComponent *comp = CAL_COMPONENT (l->data);
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp, (CalClient *) cl->data, NULL);
g_object_unref (comp);
g_object_unref (comp);
}
g_list_free (comp_list);
}
g_list_free (comp_list);
}
g_list_free (client_list);
}
static void
@ -1149,8 +1169,10 @@ setup_popup_icons (EPopupMenu *context_menu)
for (i = 0; context_menu[i].name; i++) {
GtkWidget *pixmap_widget = NULL;
if (!strcmp (context_menu[i].name, _("_Print...")))
pixmap_widget = gtk_image_new_from_stock (GTK_STOCK_PRINT);
if (!strcmp (context_menu[i].name, _("_Paste")))
pixmap_widget = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU);
else if (!strcmp (context_menu[i].name, _("_Print...")))
pixmap_widget = gtk_image_new_from_stock (GTK_STOCK_PRINT, GTK_ICON_SIZE_MENU);
if (pixmap_widget)
gtk_widget_show (pixmap_widget);
@ -1166,6 +1188,7 @@ e_cal_view_create_popup_menu (ECalView *cal_view)
EPopupMenu *context_menu;
guint32 disable_mask = 0, hide_mask = 0;
GtkMenu *popup;
CalClient *client = NULL;
g_return_val_if_fail (E_IS_CAL_VIEW (cal_view), NULL);
@ -1179,29 +1202,39 @@ e_cal_view_create_popup_menu (ECalView *cal_view)
cal_view->priv->view_menu = gnome_calendar_setup_view_popup (cal_view->priv->calendar);
main_items[9].submenu = cal_view->priv->view_menu;
context_menu = main_items;
client = e_cal_model_get_default_client (cal_view->priv->model);
} else {
ECalViewEvent *event;
context_menu = child_items;
event = (ECalViewEvent *) selected->data;
if (cal_component_has_recurrences (event->comp))
if (cal_util_component_has_recurrences (event->comp_data->icalcomp))
hide_mask |= MASK_SINGLE;
else
hide_mask |= MASK_RECURRING;
if (cal_component_is_instance (event->comp))
if (cal_util_component_is_instance (event->comp_data->icalcomp))
hide_mask |= MASK_INSTANCE;
if (cal_component_has_organizer (event->comp)) {
if (cal_util_component_has_organizer (event->comp_data->icalcomp)) {
CalComponent *comp;
disable_mask |= MASK_MEETING;
if (!itip_organizer_is_user (event->comp, cal_view->priv->client))
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
if (!itip_organizer_is_user (comp, event->comp_data->client))
disable_mask |= MASK_MEETING_ORGANIZER;
g_object_unref (comp);
}
client = event->comp_data->client;
}
if (cal_client_is_read_only (cal_view->priv->client))
if (cal_client_is_read_only (client))
disable_mask |= MASK_EDITABLE;
if (being_edited)

View File

@ -25,6 +25,7 @@
#include <cal-client/cal-client.h>
#include <gtk/gtktable.h>
#include "e-cal-model.h"
#include "gnome-cal.h"
G_BEGIN_DECLS
@ -49,8 +50,8 @@ typedef enum {
#define E_CAL_VIEW_EVENT_FIELDS \
GnomeCanvasItem *canvas_item; \
CalClient *client; \
CalComponent *comp; \
ECalModelComponent *comp_data; \
gboolean allocated_comp_data; \
time_t start; \
time_t end; \
guint16 start_minute; \
@ -91,10 +92,8 @@ GType e_cal_view_get_type (void);
GnomeCalendar *e_cal_view_get_calendar (ECalView *cal_view);
void e_cal_view_set_calendar (ECalView *cal_view, GnomeCalendar *calendar);
CalClient *e_cal_view_get_cal_client (ECalView *cal_view);
void e_cal_view_set_cal_client (ECalView *cal_view, CalClient *client);
const gchar *e_cal_view_get_query (ECalView *cal_view);
void e_cal_view_set_query (ECalView *cal_view, const gchar *sexp);
ECalModel *e_cal_view_get_model (ECalView *cal_view);
void e_cal_view_set_model (ECalView *cal_view, ECalModel *model);
icaltimezone *e_cal_view_get_timezone (ECalView *cal_view);
void e_cal_view_set_timezone (ECalView *cal_view, icaltimezone *zone);

View File

@ -23,6 +23,7 @@
#include <config.h>
#include <string.h>
#include <gtk/gtkimage.h>
#include <gtk/gtkinvisible.h>
#include <gtk/gtkstock.h>
#include <libgnome/gnome-i18n.h>
@ -33,6 +34,8 @@
#include "evolution-activity-client.h"
#include "calendar-commands.h"
#include "calendar-config.h"
#include "comp-util.h"
#include "e-cal-model-calendar.h"
#include "e-cal-view.h"
#include "itip-utils.h"
#include "dialogs/delete-comp.h"
@ -52,11 +55,8 @@ struct _ECalViewPrivate {
/* The GnomeCalendar we are associated to */
GnomeCalendar *calendar;
/* Calendar client we are monitoring */
CalClient *client;
/* Search expression */
gchar *sexp;
/* The calendar model we are monitoring */
ECalModel *model;
/* The activity client used to show messages on the status bar. */
EvolutionActivityClient *activity;
@ -94,7 +94,6 @@ static void
e_cal_view_class_init (ECalViewClass *klass)
{
GtkObjectClass *object_class = GTK_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
parent_class = g_type_class_peek_parent (klass);
@ -157,6 +156,30 @@ e_cal_view_class_init (ECalViewClass *klass)
e_cal_view_a11y_init ();
}
static void
model_changed_cb (ETableModel *etm, gpointer user_data)
{
ECalView *cal_view = E_CAL_VIEW (user_data);
e_cal_view_update_query (cal_view);
}
static void
model_row_changed_cb (ETableModel *etm, int row, gpointer user_data)
{
ECalView *cal_view = E_CAL_VIEW (user_data);
e_cal_view_update_query (cal_view);
}
static void
model_rows_changed_cb (ETableModel *etm, int row, int count, gpointer user_data)
{
ECalView *cal_view = E_CAL_VIEW (user_data);
e_cal_view_update_query (cal_view);
}
static void
selection_get (GtkWidget *invisible,
GtkSelectionData *selection_data,
@ -200,6 +223,7 @@ selection_received (GtkWidget *invisible,
struct icaldurationtype ic_dur;
char *uid;
icaltimezone *default_zone;
CalClient *client;
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
@ -214,7 +238,8 @@ selection_received (GtkWidget *invisible,
return;
default_tzid = calendar_config_get_timezone ();
cal_client_get_timezone (cal_view->priv->client, default_tzid, &default_zone);
client = e_cal_model_get_default_client (cal_view->priv->model);
cal_client_get_timezone (client, default_tzid, &default_zone);
/* check the type of the component */
kind = icalcomponent_isa (icalcomp);
@ -254,12 +279,12 @@ selection_received (GtkWidget *invisible,
comp, icalcomponent_new_clone (subcomp));
cal_component_set_uid (comp, uid);
cal_client_update_object (cal_view->priv->client, comp);
if (itip_organizer_is_user (comp, cal_view->priv->client) &&
send_component_dialog (gtk_widget_get_toplevel (cal_view),
cal_view->priv->client, comp, TRUE)) {
cal_client_update_object (client, comp);
if (itip_organizer_is_user (comp, client) &&
send_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
client, comp, TRUE)) {
itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp,
cal_view->priv->client, NULL);
client, NULL);
}
free (uid);
@ -288,12 +313,12 @@ selection_received (GtkWidget *invisible,
comp, icalcomponent_new_clone (icalcomp));
cal_component_set_uid (comp, uid);
cal_client_update_object (cal_view->priv->client, comp);
if (itip_organizer_is_user (comp, cal_view->priv->client) &&
send_component_dialog (gtk_widget_get_toplevel (cal_view),
cal_view->priv->client, comp, TRUE)) {
cal_client_update_object (client, comp);
if (itip_organizer_is_user (comp, client) &&
send_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
client, comp, TRUE)) {
itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp,
cal_view->priv->client, NULL);
client, NULL);
}
free (uid);
@ -308,7 +333,7 @@ e_cal_view_init (ECalView *cal_view, ECalViewClass *klass)
{
cal_view->priv = g_new0 (ECalViewPrivate, 1);
cal_view->priv->sexp = g_strdup ("#t"); /* match all by default */
cal_view->priv->model = (ECalModel *) e_cal_model_calendar_new ();
/* Set up the invisible widget for the clipboard selections */
cal_view->priv->invisible = gtk_invisible_new ();
@ -334,14 +359,10 @@ e_cal_view_destroy (GtkObject *object)
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
if (cal_view->priv) {
if (cal_view->priv->client) {
g_object_unref (cal_view->priv->client);
cal_view->priv->client = NULL;
}
if (cal_view->priv->sexp) {
g_free (cal_view->priv->sexp);
cal_view->priv->sexp = NULL;
if (cal_view->priv->model) {
g_signal_handlers_disconnect_by_func (cal_view->priv->model, model_changed_cb, cal_view);
g_object_unref (cal_view->priv->model);
cal_view->priv->model = NULL;
}
if (cal_view->priv->activity) {
@ -386,69 +407,33 @@ e_cal_view_set_calendar (ECalView *cal_view, GnomeCalendar *calendar)
cal_view->priv->calendar = calendar;
}
CalClient *
e_cal_view_get_cal_client (ECalView *cal_view)
ECalModel *
e_cal_view_get_model (ECalView *cal_view)
{
g_return_val_if_fail (E_IS_CAL_VIEW (cal_view), NULL);
return cal_view->priv->client;
}
static void
cal_opened_cb (CalClient *client, CalClientOpenStatus status, gpointer user_data)
{
ECalView *cal_view = (ECalView *) user_data;
if (status != CAL_CLIENT_OPEN_SUCCESS)
return;
e_cal_view_update_query (cal_view);
return cal_view->priv->model;
}
void
e_cal_view_set_cal_client (ECalView *cal_view, CalClient *client)
e_cal_view_set_model (ECalView *cal_view, ECalModel *model)
{
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
g_return_if_fail (E_IS_CAL_MODEL (model));
if (client == cal_view->priv->client)
return;
if (IS_CAL_CLIENT (client))
g_object_ref (client);
if (cal_view->priv->client) {
g_signal_handlers_disconnect_matched (cal_view->priv->client, G_SIGNAL_MATCH_DATA, 0, 0,
NULL, NULL, cal_view);
g_object_unref (cal_view->priv->client);
if (cal_view->priv->model) {
g_signal_handlers_disconnect_matched (cal_view->priv->model, G_SIGNAL_MATCH_DATA,
0, 0, 0, NULL, cal_view);
g_object_unref (cal_view->priv->model);
}
cal_view->priv->client = client;
if (cal_view->priv->client) {
if (cal_client_get_load_state (cal_view->priv->client) == CAL_CLIENT_LOAD_LOADED)
e_cal_view_update_query (cal_view);
else
g_signal_connect (cal_view->priv->client, "cal_opened",
G_CALLBACK (cal_opened_cb), cal_view);
}
}
cal_view->priv->model = model;
g_object_ref (cal_view->priv->model);
g_signal_connect (G_OBJECT (cal_view->priv->model), "model_changed", G_CALLBACK (model_changed_cb), cal_view);
g_signal_connect (G_OBJECT (cal_view->priv->model), "model_row_changed", G_CALLBACK (model_row_changed_cb), cal_view);
g_signal_connect (G_OBJECT (cal_view->priv->model), "model_rows_inserted", G_CALLBACK (model_rows_changed_cb), cal_view);
g_signal_connect (G_OBJECT (cal_view->priv->model), "model_rows_deleted", G_CALLBACK (model_rows_changed_cb), cal_view);
const gchar *
e_cal_view_get_query (ECalView *cal_view)
{
g_return_val_if_fail (E_IS_CAL_VIEW (cal_view), NULL);
return (const gchar *) cal_view->priv->sexp;
}
void
e_cal_view_set_query (ECalView *cal_view, const gchar *sexp)
{
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
if (cal_view->priv->sexp)
g_free (cal_view->priv->sexp);
cal_view->priv->sexp = g_strdup (sexp);
e_cal_view_update_query (cal_view);
}
@ -553,9 +538,13 @@ e_cal_view_update_query (ECalView *cal_view)
{
g_return_if_fail (E_IS_CAL_VIEW (cal_view));
e_cal_view_set_status_message (cal_view, _("Searching"));
if (E_CAL_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->update_query) {
E_CAL_VIEW_CLASS (G_OBJECT_GET_CLASS (cal_view))->update_query (cal_view);
}
e_cal_view_set_status_message (cal_view, NULL);
}
void
@ -574,20 +563,27 @@ e_cal_view_cut_clipboard (ECalView *cal_view)
e_cal_view_copy_clipboard (cal_view);
for (l = selected; l != NULL; l = l->next) {
CalComponent *comp;
ECalViewEvent *event = (ECalViewEvent *) l->data;
if (!event)
continue;
if (itip_organizer_is_user (event->comp, cal_view->priv->client)
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (cal_view),
cal_view->priv->client, event->comp, TRUE))
itip_send_comp (CAL_COMPONENT_METHOD_CANCEL, event->comp,
cal_view->priv->client, NULL);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
cal_component_get_uid (event->comp, &uid);
delete_error_dialog (cal_client_remove_object (cal_view->priv->client, uid),
if (itip_organizer_is_user (comp, event->comp_data->client)
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
event->comp_data->client, comp, TRUE))
itip_send_comp (CAL_COMPONENT_METHOD_CANCEL, comp,
event->comp_data->client, NULL);
cal_component_get_uid (comp, &uid);
delete_error_dialog (cal_client_remove_object (event->comp_data->client, uid),
CAL_COMPONENT_EVENT);
g_object_unref (comp);
}
e_cal_view_set_status_message (cal_view, NULL);
@ -616,13 +612,13 @@ e_cal_view_copy_clipboard (ECalView *cal_view)
event = (ECalViewEvent *) l->data;
if (event)
cal_util_add_timezones_from_component (vcal_comp, cal_component_get_icalcomponent (event->comp));
cal_util_add_timezones_from_component (vcal_comp, event->comp_data->icalcomp);
}
for (l = selected; l != NULL; l = l->next) {
event = (ECalViewEvent *) l->data;
new_icalcomp = icalcomponent_new_clone (cal_component_get_icalcomponent (event->comp));
new_icalcomp = icalcomponent_new_clone (event->comp_data->icalcomp);
icalcomponent_add_component (vcal_comp, new_icalcomp);
}
@ -650,29 +646,36 @@ e_cal_view_paste_clipboard (ECalView *cal_view)
}
static void
delete_event (ECalView *cal_view, CalComponent *comp)
delete_event (ECalView *cal_view, ECalViewEvent *event)
{
CalComponent *comp;
CalComponentVType vtype;
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
vtype = cal_component_get_vtype (comp);
if (delete_component_dialog (comp, FALSE, 1, vtype, GTK_WIDGET (cal_view))) {
const char *uid;
if (itip_organizer_is_user (comp, cal_view->priv->client)
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (cal_view),
cal_view->priv->client,
if (itip_organizer_is_user (comp, event->comp_data->client)
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
event->comp_data->client,
comp, TRUE))
itip_send_comp (CAL_COMPONENT_METHOD_CANCEL, comp,
cal_view->priv->client, NULL);
event->comp_data->client, NULL);
cal_component_get_uid (comp, &uid);
if (!uid || !*uid)
if (!uid || !*uid) {
g_object_unref (comp);
return;
}
delete_error_dialog (
cal_client_remove_object (cal_view->priv->client, uid), CAL_COMPONENT_EVENT);
cal_client_remove_object (event->comp_data->client, uid), CAL_COMPONENT_EVENT);
}
g_object_unref (comp);
}
void
@ -687,7 +690,7 @@ e_cal_view_delete_selected_event (ECalView *cal_view)
event = (ECalViewEvent *) selected->data;
if (event)
delete_event (cal_view, event->comp);
delete_event (cal_view, event);
g_list_free (selected);
}
@ -705,7 +708,7 @@ e_cal_view_delete_selected_events (ECalView *cal_view)
for (l = selected; l != NULL; l = l->next) {
event = (ECalViewEvent *) l->data;
if (event)
delete_event (cal_view, event->comp);
delete_event (cal_view, event);
}
g_list_free (selected);
@ -723,22 +726,23 @@ e_cal_view_delete_selected_occurrence (ECalView *cal_view)
event = (ECalViewEvent *) selected->data;
if (cal_component_is_instance (event->comp)) {
if (cal_util_component_is_instance (event->comp_data->icalcomp)) {
const char *uid;
cal_component_get_uid (event->comp, &uid);
uid = icalcomponent_get_uid (event->comp_data->icalcomp);
delete_error_dialog (
cal_client_remove_object_with_mod (cal_view->priv->client, uid, CALOBJ_MOD_THIS),
cal_client_remove_object_with_mod (event->comp_data->client, uid, CALOBJ_MOD_THIS),
CAL_COMPONENT_EVENT);
} else {
CalComponent *comp;
/* we must duplicate the CalComponent, or we won't know it has changed
when we get the "update_event" signal */
comp = cal_component_clone (event->comp);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
cal_comp_util_add_exdate (comp, event->start, cal_view->priv->zone);
if (cal_client_update_object (cal_view->priv->client, comp)
if (cal_client_update_object (event->comp_data->client, comp)
!= CAL_CLIENT_RESULT_SUCCESS)
g_message ("e_cal_view_delete_selected_occurrence(): Could not update the object!");
@ -813,7 +817,8 @@ on_edit_appointment (GtkWidget *widget, gpointer user_data)
ECalViewEvent *event = (ECalViewEvent *) selected->data;
if (event)
gnome_calendar_edit_object (cal_view->priv->calendar, event->comp, FALSE);
gnome_calendar_edit_object (cal_view->priv->calendar, event->comp_data->client,
event->comp_data->icalcomp, FALSE);
g_list_free (selected);
}
@ -875,8 +880,7 @@ on_save_as (GtkWidget *widget, gpointer user_data)
return;
event = (ECalViewEvent *) selected->data;
ical_string = cal_client_get_component_as_string (cal_view->priv->client,
cal_component_get_icalcomponent (event->comp));
ical_string = cal_client_get_component_as_string (event->comp_data->client, event->comp_data->icalcomp);
if (ical_string == NULL) {
g_warning ("Couldn't convert item to a string");
return;
@ -901,6 +905,7 @@ on_print_event (GtkWidget *widget, gpointer user_data)
ECalView *cal_view;
GList *selected;
ECalViewEvent *event;
CalComponent *comp;
cal_view = E_CAL_VIEW (user_data);
selected = e_cal_view_get_selected_events (cal_view);
@ -908,7 +913,12 @@ on_print_event (GtkWidget *widget, gpointer user_data)
return;
event = (ECalViewEvent *) selected->data;
print_comp (event->comp, cal_view->priv->client, FALSE);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
print_comp (comp, event->comp_data->client, FALSE);
g_object_unref (comp);
}
static void
@ -920,7 +930,7 @@ on_meeting (GtkWidget *widget, gpointer user_data)
selected = e_cal_view_get_selected_events (cal_view);
if (selected) {
ECalViewEvent *event = (ECalViewEvent *) selected->data;
gnome_calendar_edit_object (cal_view->priv->calendar, event->comp, TRUE);
gnome_calendar_edit_object (cal_view->priv->calendar, event->comp_data->client, event->comp_data->icalcomp, TRUE);
g_list_free (selected);
}
@ -934,10 +944,15 @@ on_forward (GtkWidget *widget, gpointer user_data)
selected = e_cal_view_get_selected_events (cal_view);
if (selected) {
CalComponent *comp;
ECalViewEvent *event = (ECalViewEvent *) selected->data;
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, event->comp, cal_view->priv->client, NULL);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp, event->comp_data->client, NULL);
g_list_free (selected);
g_object_unref (comp);
}
}
@ -947,7 +962,7 @@ on_publish (GtkWidget *widget, gpointer user_data)
ECalView *cal_view;
icaltimezone *utc;
time_t start = time (NULL), end;
GList *comp_list;
GList *comp_list, *client_list, *cl;
cal_view = E_CAL_VIEW (user_data);
@ -955,19 +970,24 @@ on_publish (GtkWidget *widget, gpointer user_data)
start = time_day_begin_with_zone (start, utc);
end = time_add_week_with_zone (start, 6, utc);
comp_list = cal_client_get_free_busy (cal_view->priv->client, NULL, start, end);
if (comp_list) {
GList *l;
client_list = e_cal_model_get_client_list (cal_view->priv->model);
for (cl = client_list; cl != NULL; cl = cl->next) {
comp_list = cal_client_get_free_busy ((CalClient *) cl->data, NULL, start, end);
if (comp_list) {
GList *l;
for (l = comp_list; l; l = l->next) {
CalComponent *comp = CAL_COMPONENT (l->data);
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp, cal_view->priv->client, NULL);
for (l = comp_list; l; l = l->next) {
CalComponent *comp = CAL_COMPONENT (l->data);
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp, (CalClient *) cl->data, NULL);
g_object_unref (comp);
g_object_unref (comp);
}
g_list_free (comp_list);
}
g_list_free (comp_list);
}
g_list_free (client_list);
}
static void
@ -1149,8 +1169,10 @@ setup_popup_icons (EPopupMenu *context_menu)
for (i = 0; context_menu[i].name; i++) {
GtkWidget *pixmap_widget = NULL;
if (!strcmp (context_menu[i].name, _("_Print...")))
pixmap_widget = gtk_image_new_from_stock (GTK_STOCK_PRINT);
if (!strcmp (context_menu[i].name, _("_Paste")))
pixmap_widget = gtk_image_new_from_stock (GTK_STOCK_PASTE, GTK_ICON_SIZE_MENU);
else if (!strcmp (context_menu[i].name, _("_Print...")))
pixmap_widget = gtk_image_new_from_stock (GTK_STOCK_PRINT, GTK_ICON_SIZE_MENU);
if (pixmap_widget)
gtk_widget_show (pixmap_widget);
@ -1166,6 +1188,7 @@ e_cal_view_create_popup_menu (ECalView *cal_view)
EPopupMenu *context_menu;
guint32 disable_mask = 0, hide_mask = 0;
GtkMenu *popup;
CalClient *client = NULL;
g_return_val_if_fail (E_IS_CAL_VIEW (cal_view), NULL);
@ -1179,29 +1202,39 @@ e_cal_view_create_popup_menu (ECalView *cal_view)
cal_view->priv->view_menu = gnome_calendar_setup_view_popup (cal_view->priv->calendar);
main_items[9].submenu = cal_view->priv->view_menu;
context_menu = main_items;
client = e_cal_model_get_default_client (cal_view->priv->model);
} else {
ECalViewEvent *event;
context_menu = child_items;
event = (ECalViewEvent *) selected->data;
if (cal_component_has_recurrences (event->comp))
if (cal_util_component_has_recurrences (event->comp_data->icalcomp))
hide_mask |= MASK_SINGLE;
else
hide_mask |= MASK_RECURRING;
if (cal_component_is_instance (event->comp))
if (cal_util_component_is_instance (event->comp_data->icalcomp))
hide_mask |= MASK_INSTANCE;
if (cal_component_has_organizer (event->comp)) {
if (cal_util_component_has_organizer (event->comp_data->icalcomp)) {
CalComponent *comp;
disable_mask |= MASK_MEETING;
if (!itip_organizer_is_user (event->comp, cal_view->priv->client))
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
if (!itip_organizer_is_user (comp, event->comp_data->client))
disable_mask |= MASK_MEETING_ORGANIZER;
g_object_unref (comp);
}
client = event->comp_data->client;
}
if (cal_client_is_read_only (cal_view->priv->client))
if (cal_client_is_read_only (client))
disable_mask |= MASK_EDITABLE;
if (being_edited)

View File

@ -25,6 +25,7 @@
#include <cal-client/cal-client.h>
#include <gtk/gtktable.h>
#include "e-cal-model.h"
#include "gnome-cal.h"
G_BEGIN_DECLS
@ -49,8 +50,8 @@ typedef enum {
#define E_CAL_VIEW_EVENT_FIELDS \
GnomeCanvasItem *canvas_item; \
CalClient *client; \
CalComponent *comp; \
ECalModelComponent *comp_data; \
gboolean allocated_comp_data; \
time_t start; \
time_t end; \
guint16 start_minute; \
@ -91,10 +92,8 @@ GType e_cal_view_get_type (void);
GnomeCalendar *e_cal_view_get_calendar (ECalView *cal_view);
void e_cal_view_set_calendar (ECalView *cal_view, GnomeCalendar *calendar);
CalClient *e_cal_view_get_cal_client (ECalView *cal_view);
void e_cal_view_set_cal_client (ECalView *cal_view, CalClient *client);
const gchar *e_cal_view_get_query (ECalView *cal_view);
void e_cal_view_set_query (ECalView *cal_view, const gchar *sexp);
ECalModel *e_cal_view_get_model (ECalView *cal_view);
void e_cal_view_set_model (ECalView *cal_view, ECalModel *model);
icaltimezone *e_cal_view_get_timezone (ECalView *cal_view);
void e_cal_view_set_timezone (ECalView *cal_view, icaltimezone *zone);

View File

@ -326,11 +326,16 @@ e_day_view_main_item_draw_events_in_vbars (EDayViewMainItem *dvmitem,
/* Draw the busy times corresponding to the events in the day. */
for (event_num = 0; event_num < day_view->events[day]->len;
event_num++) {
CalComponent *comp;
event = &g_array_index (day_view->events[day], EDayViewEvent,
event_num);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
/* If the event is TRANSPARENT, skip it. */
cal_component_get_transparency (event->comp, &transparency);
cal_component_get_transparency (comp, &transparency);
if (transparency == CAL_COMPONENT_TRANSP_TRANSPARENT)
continue;
@ -350,6 +355,8 @@ e_day_view_main_item_draw_events_in_vbars (EDayViewMainItem *dvmitem,
gdk_draw_rectangle (drawable, gc, TRUE,
grid_x, bar_y,
E_DAY_VIEW_BAR_WIDTH - 2, bar_h);
g_object_unref (comp);
}
}
@ -373,11 +380,16 @@ e_day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *dvmitem,
for (event_num = 0; event_num < day_view->long_events->len;
event_num++) {
CalComponent *comp;
event = &g_array_index (day_view->long_events, EDayViewEvent,
event_num);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
/* If the event is TRANSPARENT, skip it. */
cal_component_get_transparency (event->comp, &transparency);
cal_component_get_transparency (comp, &transparency);
if (transparency == CAL_COMPONENT_TRANSP_TRANSPARENT)
continue;
@ -416,6 +428,7 @@ e_day_view_main_item_draw_long_events_in_vbars (EDayViewMainItem *dvmitem,
}
g_object_unref (comp);
}
}
@ -451,6 +464,7 @@ e_day_view_main_item_draw_day_event (EDayViewMainItem *dvmitem,
gint item_x, item_y, item_w, item_h, bar_y1, bar_y2;
GtkStyle *style;
GdkGC *gc;
GdkColor bg_color;
CalComponent *comp;
gint num_icons, icon_x, icon_y, icon_x_inc, icon_y_inc;
gint max_icon_w, max_icon_h;
@ -469,7 +483,6 @@ e_day_view_main_item_draw_day_event (EDayViewMainItem *dvmitem,
style = GTK_WIDGET (day_view)->style;
gc = day_view->main_gc;
gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR]);
/* Get the position of the event. If it is not shown skip it.*/
if (!e_day_view_get_event_position (day_view, day, event_num,
@ -483,22 +496,34 @@ e_day_view_main_item_draw_day_event (EDayViewMainItem *dvmitem,
event = &g_array_index (day_view->events[day], EDayViewEvent,
event_num);
/* Fill in the white background. Note that for events in the first
/* Fill in the event background. Note that for events in the first
column of the day, we might not want to paint over the vertical bar,
since that is used for multiple events. But then you can't see
where the event in the first column finishes. */
if (gdk_color_parse (e_cal_model_get_color_for_component (e_cal_view_get_model (E_CAL_VIEW (day_view)), event->comp_data),
&bg_color)) {
GdkColormap *colormap;
colormap = gtk_widget_get_colormap (GTK_WIDGET (day_view));
if (gdk_colormap_alloc_color (colormap, &bg_color, TRUE, TRUE))
gdk_gc_set_foreground (gc, &bg_color);
}
#if 1
if (event->start_row_or_col == 0)
gdk_draw_rectangle (drawable, style->white_gc, TRUE,
gdk_draw_rectangle (drawable, gc, TRUE,
item_x + E_DAY_VIEW_BAR_WIDTH, item_y + 1,
MAX (item_w - E_DAY_VIEW_BAR_WIDTH - 1, 0),
item_h - 2);
else
#endif
gdk_draw_rectangle (drawable, style->white_gc, TRUE,
gdk_draw_rectangle (drawable, gc, TRUE,
item_x + 1, item_y + 1,
MAX (item_w - 2, 0), item_h - 2);
gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_EVENT_VBAR]);
/* Draw the right edge of the vertical bar. */
gdk_draw_line (drawable, style->black_gc,
item_x + E_DAY_VIEW_BAR_WIDTH - 1,
@ -521,8 +546,11 @@ e_day_view_main_item_draw_day_event (EDayViewMainItem *dvmitem,
bar_y2 = item_y + item_h - 1;
}
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
/* Only fill it in if the event isn't TRANSPARENT. */
cal_component_get_transparency (event->comp, &transparency);
cal_component_get_transparency (comp, &transparency);
if (transparency != CAL_COMPONENT_TRANSP_TRANSPARENT) {
gdk_draw_rectangle (drawable, gc, TRUE,
item_x + 1, bar_y1,
@ -560,7 +588,6 @@ e_day_view_main_item_draw_day_event (EDayViewMainItem *dvmitem,
icon_x = item_x + E_DAY_VIEW_BAR_WIDTH + E_DAY_VIEW_ICON_X_PAD;
icon_y = item_y + E_DAY_VIEW_EVENT_BORDER_HEIGHT
+ E_DAY_VIEW_ICON_Y_PAD;
comp = event->comp;
if (cal_component_has_alarms (comp)) {
draw_reminder_icon = TRUE;
@ -724,6 +751,7 @@ e_day_view_main_item_draw_day_event (EDayViewMainItem *dvmitem,
/* free memory */
cal_component_free_categories_list (categories_list);
g_object_unref (comp);
}

View File

@ -353,6 +353,7 @@ e_day_view_top_item_draw_long_event (EDayViewTopItem *dvtitem,
GdkRectangle clip_rect;
GSList *categories_list, *elem;
PangoLayout *layout;
GdkColor bg_color;
day_view = dvtitem->day_view;
@ -375,7 +376,8 @@ e_day_view_top_item_draw_long_event (EDayViewTopItem *dvtitem,
gc = day_view->main_gc;
fg_gc = style->fg_gc[GTK_STATE_NORMAL];
bg_gc = style->bg_gc[GTK_STATE_NORMAL];
comp = event->comp;
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
/* Draw the lines across the top & bottom of the entire event. */
gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BORDER]);
@ -387,7 +389,18 @@ e_day_view_top_item_draw_long_event (EDayViewTopItem *dvtitem,
item_x + item_w - 1 - x, item_y + item_h - 1 - y);
/* Fill it in. */
gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND]);
if (gdk_color_parse (e_cal_model_get_color_for_component (e_cal_view_get_model (E_CAL_VIEW (day_view)),
event->comp_data),
&bg_color)) {
GdkColormap *colormap;
colormap = gtk_widget_get_colormap (GTK_WIDGET (day_view));
if (gdk_colormap_alloc_color (colormap, &bg_color, TRUE, TRUE))
gdk_gc_set_foreground (gc, &bg_color);
else
gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND]);
} else
gdk_gc_set_foreground (gc, &day_view->colors[E_DAY_VIEW_COLOR_LONG_EVENT_BACKGROUND]);
gdk_draw_rectangle (drawable, gc, TRUE,
item_x - x, item_y + 1 - y,
item_w, item_h - 2);
@ -594,6 +607,7 @@ e_day_view_top_item_draw_long_event (EDayViewTopItem *dvtitem,
}
cal_component_free_categories_list (categories_list);
g_object_unref (comp);
gdk_gc_set_clip_mask (gc, NULL);
}

File diff suppressed because it is too large Load Diff

View File

@ -528,7 +528,7 @@ void e_day_view_set_week_start_day (EDayView *day_view,
gint week_start_day);
void e_day_view_delete_occurrence (EDayView *day_view);
void e_day_view_unrecur_appointment (EDayView *day_view);
/* Returns the number of selected events (0 or 1 at present). */
gint e_day_view_get_num_events_selected (EDayView *day_view);

View File

@ -236,6 +236,7 @@ e_week_view_event_item_draw (GnomeCanvasItem *canvas_item,
gboolean draw_start, draw_end;
gboolean draw_start_triangle = FALSE, draw_end_triangle = FALSE;
GdkRectangle clip_rect;
GdkColor bg_color;
#if 0
g_print ("In e_week_view_event_item_draw %i,%i %ix%i\n",
@ -282,7 +283,29 @@ e_week_view_event_item_draw (GnomeCanvasItem *canvas_item,
one_day_event = e_week_view_is_one_day_event (week_view,
wveitem->event_num);
if (one_day_event) {
time_x = x1 + E_WEEK_VIEW_EVENT_L_PAD;
time_x = x1 + E_WEEK_VIEW_EVENT_L_PAD + 1;
rect_x = x1 + E_WEEK_VIEW_EVENT_L_PAD;
rect_w = x2 - x1 - E_WEEK_VIEW_EVENT_L_PAD - E_WEEK_VIEW_EVENT_R_PAD + 1;
if (gdk_color_parse (e_cal_model_get_color_for_component (e_cal_view_get_model (E_CAL_VIEW (week_view)),
event->comp_data),
&bg_color)) {
GdkColormap *colormap;
colormap = gtk_widget_get_colormap (GTK_WIDGET (week_view));
if (gdk_colormap_alloc_color (colormap, &bg_color, TRUE, TRUE))
gdk_gc_set_foreground (gc, &bg_color);
else
gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]);
} else
gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]);
gdk_draw_rectangle (drawable, gc, TRUE, rect_x, y1 + 1, rect_w, y2 - y1 - 1);
gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER]);
gdk_draw_line (drawable, gc, rect_x, y1 + 1, rect_x + rect_w, y1 + 1);
gdk_draw_line (drawable, gc, rect_x, y2, rect_x + rect_w, y2);
gdk_draw_line (drawable, gc, rect_x, y1 + 1, rect_x, y1 + (y2 - (y1 + 1)));
gdk_draw_line (drawable, gc, rect_x + rect_w, y1 + 1, rect_x + rect_w, y1 + (y2 - (y1 + 1)));
/* Draw the start and end times, as required. */
switch (week_view->time_format) {
@ -354,9 +377,19 @@ e_week_view_event_item_draw (GnomeCanvasItem *canvas_item,
rect_w -= 2;
}
gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]);
gdk_draw_rectangle (drawable, gc, TRUE,
rect_x, y1 + 1, rect_w, y2 - y1 - 1);
if (gdk_color_parse (e_cal_model_get_color_for_component (e_cal_view_get_model (E_CAL_VIEW (week_view)),
event->comp_data),
&bg_color)) {
GdkColormap *colormap;
colormap = gtk_widget_get_colormap (GTK_WIDGET (week_view));
if (gdk_colormap_alloc_color (colormap, &bg_color, TRUE, TRUE))
gdk_gc_set_foreground (gc, &bg_color);
else
gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]);
} else
gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BACKGROUND]);
gdk_draw_rectangle (drawable, gc, TRUE, rect_x, y1 + 1, rect_w, y2 - y1 - 1);
gdk_gc_set_foreground (gc, &week_view->colors[E_WEEK_VIEW_COLOR_EVENT_BORDER]);
rect_x2 = rect_x + rect_w - 1;
@ -572,7 +605,8 @@ e_week_view_event_item_draw_icons (EWeekViewEventItem *wveitem,
wveitem->event_num);
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + wveitem->span_num);
comp = event->comp;
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
gc = week_view->main_gc;
@ -870,7 +904,7 @@ e_week_view_event_item_double_click (EWeekViewEventItem *wveitem,
calendar = e_cal_view_get_calendar (E_CAL_VIEW (week_view));
if (calendar)
gnome_calendar_edit_object (calendar, event->comp, FALSE);
gnome_calendar_edit_object (calendar, event->comp_data->client, event->comp_data->icalcomp, FALSE);
else
g_warning ("Calendar not set");

View File

@ -87,6 +87,11 @@
#define E_WEEK_VIEW_LAYOUT_TIMEOUT 100
typedef struct {
EWeekView *week_view;
ECalModelComponent *comp_data;
} AddEventData;
static void e_week_view_class_init (EWeekViewClass *class);
static void e_week_view_init (EWeekView *week_view);
static void e_week_view_destroy (GtkObject *object);
@ -112,10 +117,10 @@ static gboolean e_week_view_get_next_tab_event (EWeekView *week_view,
static gboolean e_week_view_focus (GtkWidget *widget,
GtkDirectionType direction);
static GList *e_week_view_get_selected_events (ECalView *cal_view);
static void e_week_view_get_selected_time_range (EWeekView *cal_view, time_t *start_time, time_t *end_time);
static void e_week_view_set_selected_time_range (EWeekView *cal_view, time_t start_time, time_t end_time);
static gboolean e_week_view_get_visible_time_range (EWeekView *cal_view, time_t *start_time, time_t *end_time);
static void e_week_view_update_query (EWeekView *week_view);
static void e_week_view_get_selected_time_range (ECalView *cal_view, time_t *start_time, time_t *end_time);
static void e_week_view_set_selected_time_range (ECalView *cal_view, time_t start_time, time_t end_time);
static gboolean e_week_view_get_visible_time_range (ECalView *cal_view, time_t *start_time, time_t *end_time);
static void e_week_view_update_query (ECalView *cal_view);
static void e_week_view_draw_shadow (EWeekView *week_view);
static gboolean e_week_view_on_button_press (GtkWidget *widget,
@ -257,7 +262,7 @@ timezone_changed_cb (ECalView *cal_view, icaltimezone *old_zone,
lower = icaltime_as_timet_with_zone (tt, new_zone);
e_week_view_recalc_day_starts (week_view, lower);
e_week_view_update_query (week_view);
e_week_view_update_query ((ECalView *) week_view);
}
static void
@ -435,12 +440,6 @@ e_week_view_destroy (GtkObject *object)
g_array_free (week_view->events, TRUE);
week_view->events = NULL;
}
if (e_cal_view_get_cal_client (E_CAL_VIEW (week_view))) {
g_signal_handlers_disconnect_matched (
e_cal_view_get_cal_client (E_CAL_VIEW (week_view)), G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, week_view);
}
if (week_view->query) {
g_signal_handlers_disconnect_matched (week_view->query, G_SIGNAL_MATCH_DATA,
@ -1060,64 +1059,49 @@ e_week_view_get_selected_events (ECalView *cal_view)
return list;
}
/* Callback used when a component is updated in the live query */
static void
query_obj_updated_cb (CalQuery *query, const char *uid,
gboolean query_in_progress, int n_scanned, int total,
gpointer data)
process_component (EWeekView *week_view, ECalModelComponent *comp_data)
{
EWeekView *week_view;
EWeekViewEvent *event;
gint event_num, num_days;
CalComponent *comp = NULL;
icalcomponent *icalcomp;
CalClientGetStatus status;
week_view = E_WEEK_VIEW (data);
AddEventData add_event_data;
const char *uid;
/* If we don't have a valid date set yet, just return. */
if (!g_date_valid (&week_view->first_day_shown))
return;
/* Get the event from the server. */
status = cal_client_get_object (e_cal_view_get_cal_client (E_CAL_VIEW (week_view)), uid, &icalcomp);
comp = cal_component_new ();
if (!cal_component_set_icalcomponent (comp, icalcomponent_new_clone (comp_data->icalcomp))) {
g_object_unref (comp);
switch (status) {
case CAL_CLIENT_GET_SUCCESS:
comp = cal_component_new ();
if (!cal_component_set_icalcomponent (comp, icalcomp)) {
g_object_unref (comp);
icalcomponent_free (icalcomp);
g_message ("query_obj_updated_cb(): Could not set icalcomponent on CalComponent");
return;
}
break;
case CAL_CLIENT_GET_SYNTAX_ERROR:
g_message ("obj_updated_cb(): Syntax error when getting object `%s'", uid);
return;
case CAL_CLIENT_GET_NOT_FOUND:
/* The object is no longer in the server, so do nothing */
g_message ("process_component(): Could not set icalcomponent on CalComponent");
return;
}
cal_component_get_uid (comp, &uid);
/* If the event already exists and the dates didn't change, we can
update the event fairly easily without changing the events arrays
or computing a new layout. */
if (e_week_view_find_event_from_uid (week_view, uid, &event_num)) {
CalComponent *tmp_comp;
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
tmp_comp = cal_component_new ();
cal_component_set_icalcomponent (tmp_comp, icalcomponent_new_clone (comp_data->icalcomp));
if (!cal_component_has_recurrences (comp)
&& !cal_component_has_recurrences (event->comp)
&& cal_component_event_dates_match (comp, event->comp)) {
&& !cal_component_has_recurrences (tmp_comp)
&& cal_component_event_dates_match (comp, tmp_comp)) {
#if 0
g_print ("updated object's dates unchanged\n");
#endif
e_week_view_foreach_event_with_uid (week_view, uid, e_week_view_update_event_cb, comp);
e_week_view_foreach_event_with_uid (week_view, uid, e_week_view_update_event_cb, comp_data);
g_object_unref (comp);
g_object_unref (tmp_comp);
gtk_widget_queue_draw (week_view->main_canvas);
return;
}
@ -1130,17 +1114,21 @@ query_obj_updated_cb (CalQuery *query, const char *uid,
e_week_view_foreach_event_with_uid (week_view, uid,
e_week_view_remove_event_cb,
NULL);
g_object_unref (tmp_comp);
}
/* Add the occurrences of the event. */
num_days = week_view->multi_week_view ? week_view->weeks_shown * 7 : 7;
add_event_data.week_view = week_view;
add_event_data.comp_data = comp_data;
cal_recur_generate_instances (comp,
week_view->day_starts[0],
week_view->day_starts[num_days],
e_week_view_add_event, week_view,
e_week_view_add_event, &add_event_data,
cal_client_resolve_tzid_cb,
e_cal_view_get_cal_client (E_CAL_VIEW (week_view)),
comp_data->client,
e_cal_view_get_timezone (E_CAL_VIEW (week_view)));
g_object_unref (comp);
@ -1148,132 +1136,29 @@ query_obj_updated_cb (CalQuery *query, const char *uid,
e_week_view_queue_layout (week_view);
}
/* Callback used when a component is removed from the live query */
static void
query_obj_removed_cb (CalClient *client, const char *uid, gpointer data)
{
EWeekView *week_view;
week_view = E_WEEK_VIEW (data);
e_week_view_foreach_event_with_uid (week_view, uid,
e_week_view_remove_event_cb, NULL);
gtk_widget_queue_draw (week_view->main_canvas);
e_week_view_check_layout (week_view);
}
/* Callback used when a query ends */
static void
query_query_done_cb (CalQuery *query, CalQueryDoneStatus status, const char *error_str, gpointer data)
{
EWeekView *week_view;
week_view = E_WEEK_VIEW (data);
/* FIXME */
e_cal_view_set_status_message (E_CAL_VIEW (week_view), NULL);
if (status != CAL_QUERY_DONE_SUCCESS)
fprintf (stderr, "query done: %s\n", error_str);
gtk_widget_queue_draw (week_view->main_canvas);
}
/* Callback used when an evaluation error occurs when running a query */
static void
query_eval_error_cb (CalQuery *query, const char *error_str, gpointer data)
{
EWeekView *week_view;
week_view = E_WEEK_VIEW (data);
/* FIXME */
e_cal_view_set_status_message (E_CAL_VIEW (week_view), NULL);
fprintf (stderr, "eval error: %s\n", error_str);
gtk_widget_queue_draw (week_view->main_canvas);
}
/* Builds a complete query sexp for the week view by adding the predicates to
* filter only for VEVENTS that fit in the week view's time range.
*/
static char *
adjust_query_sexp (EWeekView *week_view, const char *sexp)
{
int num_days;
char *start, *end;
char *new_sexp;
/* If the dates have not been set yet, we just want an empty query. */
if (!g_date_valid (&week_view->first_day_shown))
return NULL;
num_days = week_view->multi_week_view ? week_view->weeks_shown * 7 : 7;
start = isodate_from_time_t (week_view->day_starts[0]);
end = isodate_from_time_t (week_view->day_starts[num_days]);
new_sexp = g_strdup_printf ("(and (= (get-vtype) \"VEVENT\")"
" (occur-in-time-range? (make-time \"%s\")"
" (make-time \"%s\"))"
" %s)",
start, end,
sexp);
g_free (start);
g_free (end);
return new_sexp;
}
/* Restarts a query for the week view */
static void
e_week_view_update_query (EWeekView *week_view)
e_week_view_update_query (ECalView *cal_view)
{
CalQuery *old_query;
char *real_sexp;
gint rows, r;
EWeekView *week_view = E_WEEK_VIEW (cal_view);
gtk_widget_queue_draw (week_view->main_canvas);
e_week_view_free_events (week_view);
e_week_view_queue_layout (week_view);
old_query = week_view->query;
week_view->query = NULL;
if (old_query) {
g_signal_handlers_disconnect_matched (old_query, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, week_view);
g_object_unref (old_query);
}
g_assert (e_cal_view_get_query (E_CAL_VIEW (week_view)) != NULL);
real_sexp = adjust_query_sexp (week_view, e_cal_view_get_query (E_CAL_VIEW (week_view)));
if (!real_sexp) {
return; /* No time range is set, so don't start a query */
}
e_cal_view_set_status_message (E_CAL_VIEW (week_view), _("Searching"));
week_view->query = cal_client_get_query (e_cal_view_get_cal_client (E_CAL_VIEW (week_view)), real_sexp);
g_free (real_sexp);
if (!week_view->query) {
g_message ("e_week_view_update_query(): Could not create the query");
return;
rows = e_table_model_row_count (E_TABLE_MODEL (e_cal_view_get_model (E_CAL_VIEW (week_view))));
for (r = 0; r < rows; r++) {
ECalModelComponent *comp_data;
comp_data = e_cal_model_get_component_at (e_cal_view_get_model (E_CAL_VIEW (week_view)), r);
g_assert (comp_data != NULL);
process_component (week_view, comp_data);
}
g_signal_connect (week_view->query, "obj_updated",
G_CALLBACK (query_obj_updated_cb), week_view);
g_signal_connect (week_view->query, "obj_removed",
G_CALLBACK (query_obj_removed_cb), week_view);
g_signal_connect (week_view->query, "query_done",
G_CALLBACK (query_query_done_cb), week_view);
g_signal_connect (week_view->query, "eval_error",
G_CALLBACK (query_eval_error_cb), week_view);
e_cal_view_set_status_message (E_CAL_VIEW (week_view), NULL);
}
static void
@ -1326,13 +1211,14 @@ e_week_view_set_default_category (EWeekView *week_view, const char *category)
month and the days between start_time and end_time will be selected.
To select a single day, use the same value for start_time & end_time. */
static void
e_week_view_set_selected_time_range (EWeekView *week_view,
e_week_view_set_selected_time_range (ECalView *cal_view,
time_t start_time,
time_t end_time)
{
GDate date, base_date, end_date;
gint day_offset, weekday, week_start_offset, num_days;
gboolean update_adjustment_value = FALSE;
EWeekView *week_view = E_WEEK_VIEW (cal_view);
g_return_if_fail (E_IS_WEEK_VIEW (week_view));
@ -1389,7 +1275,7 @@ e_week_view_set_selected_time_range (EWeekView *week_view,
start_time = time_day_begin_with_zone (start_time,
e_cal_view_get_timezone (E_CAL_VIEW (week_view)));
e_week_view_recalc_day_starts (week_view, start_time);
e_week_view_update_query (week_view);
e_week_view_update_query ((ECalView *) week_view);
}
/* Set the selection to the given days. */
@ -1463,11 +1349,12 @@ e_week_view_set_selected_time_range_visible (EWeekView *week_view,
/* Returns the selected time range. */
static void
e_week_view_get_selected_time_range (EWeekView *week_view,
e_week_view_get_selected_time_range (ECalView *cal_view,
time_t *start_time,
time_t *end_time)
{
gint start_day, end_day;
EWeekView *week_view = E_WEEK_VIEW (cal_view);
start_day = week_view->selection_start_day;
end_day = week_view->selection_end_day;
@ -1486,11 +1373,12 @@ e_week_view_get_selected_time_range (EWeekView *week_view,
/* Gets the visible time range. Returns FALSE if no time range has been set. */
static gboolean
e_week_view_get_visible_time_range (EWeekView *week_view,
e_week_view_get_visible_time_range (ECalView *cal_view,
time_t *start_time,
time_t *end_time)
{
gint num_days;
EWeekView *week_view = E_WEEK_VIEW (cal_view);
/* If we don't have a valid date set yet, return FALSE. */
if (!g_date_valid (&week_view->first_day_shown))
@ -1569,7 +1457,7 @@ e_week_view_set_first_day_shown (EWeekView *week_view,
e_cal_view_get_timezone (E_CAL_VIEW (week_view)));
e_week_view_recalc_day_starts (week_view, start_time);
e_week_view_update_query (week_view);
e_week_view_update_query ((ECalView *) week_view);
}
/* Try to keep the previous selection, but if it is no longer shown
@ -1706,7 +1594,7 @@ e_week_view_set_weeks_shown (EWeekView *week_view,
if (g_date_valid (&week_view->first_day_shown))
e_week_view_set_first_day_shown (week_view, &week_view->first_day_shown);
e_week_view_update_query (week_view);
e_week_view_update_query ((ECalView *) week_view);
}
}
@ -1872,29 +1760,27 @@ e_week_view_update_event_cb (EWeekView *week_view,
EWeekViewEvent *event;
EWeekViewEventSpan *span;
gint span_num;
gchar *text;
CalComponent *comp;
const gchar *text;
ECalModelComponent *comp_data;
comp = data;
comp_data = data;
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
g_object_unref (event->comp);
event->comp = comp;
g_object_ref (comp);
if (event->allocated_comp_data)
e_cal_model_free_component_data (event->comp_data);
event->comp_data = comp_data;
event->allocated_comp_data = FALSE;
for (span_num = 0; span_num < event->num_spans; span_num++) {
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + span_num);
if (span->text_item) {
CalComponentText t;
cal_component_get_summary (event->comp, &t);
text = (char*) t.value;
text = icalcomponent_get_summary (comp_data->icalcomp);
gnome_canvas_item_set (span->text_item,
"text", text ? text : "",
NULL);
NULL);
e_week_view_reshape_event_span (week_view, event_num,
span_num);
@ -1928,7 +1814,7 @@ e_week_view_foreach_event_with_uid (EWeekView *week_view,
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
cal_component_get_uid (event->comp, &u);
u = icalcomponent_get_uid (event->comp_data->icalcomp);
if (u && !strcmp (uid, u)) {
if (!(*callback) (week_view, event_num, data))
return;
@ -1969,7 +1855,10 @@ e_week_view_remove_event_cb (EWeekView *week_view,
}
}
g_object_unref (event->comp);
if (event->allocated_comp_data) {
e_cal_model_free_component_data (event->comp_data);
event->allocated_comp_data = FALSE;
}
g_array_remove_index (week_view->events, event_num);
week_view->events_need_layout = TRUE;
@ -2325,7 +2214,8 @@ e_week_view_free_events (EWeekView *week_view)
for (event_num = 0; event_num < week_view->events->len; event_num++) {
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
g_object_unref (event->comp);
if (event->allocated_comp_data)
e_cal_model_free_component_data (event->comp_data);
}
g_array_set_size (week_view->events, 0);
@ -2366,32 +2256,41 @@ e_week_view_add_event (CalComponent *comp,
gpointer data)
{
EWeekView *week_view;
AddEventData *add_event_data;
EWeekViewEvent event;
gint num_days;
struct icaltimetype start_tt, end_tt;
week_view = E_WEEK_VIEW (data);
add_event_data = data;
/* Check that the event times are valid. */
num_days = week_view->multi_week_view ? week_view->weeks_shown * 7 : 7;
num_days = add_event_data->week_view->multi_week_view ? add_event_data->week_view->weeks_shown * 7 : 7;
#if 0
g_print ("View start:%li end:%li Event start:%li end:%li\n",
week_view->day_starts[0], week_view->day_starts[num_days],
add_event_data->week_view->day_starts[0], add_event_data->week_view->day_starts[num_days],
start, end);
#endif
g_return_val_if_fail (start <= end, TRUE);
g_return_val_if_fail (start < week_view->day_starts[num_days], TRUE);
g_return_val_if_fail (end > week_view->day_starts[0], TRUE);
g_return_val_if_fail (start < add_event_data->week_view->day_starts[num_days], TRUE);
g_return_val_if_fail (end > add_event_data->week_view->day_starts[0], TRUE);
start_tt = icaltime_from_timet_with_zone (start, FALSE,
e_cal_view_get_timezone (E_CAL_VIEW (week_view)));
e_cal_view_get_timezone (E_CAL_VIEW (add_event_data->week_view)));
end_tt = icaltime_from_timet_with_zone (end, FALSE,
e_cal_view_get_timezone (E_CAL_VIEW (week_view)));
e_cal_view_get_timezone (E_CAL_VIEW (add_event_data->week_view)));
event.comp = comp;
g_object_ref (event.comp);
if (add_event_data->comp_data) {
event.comp_data = add_event_data->comp_data;
event.allocated_comp_data = FALSE;
} else {
event.comp_data = g_new0 (ECalModelComponent, 1);
event.allocated_comp_data = TRUE;
event.comp_data->client = e_cal_model_get_default_client (e_cal_view_get_model (E_CAL_VIEW (add_event_data->week_view)));
cal_component_commit_sequence (comp);
event.comp_data->icalcomp = icalcomponent_new_clone (cal_component_get_icalcomponent (comp));
}
event.start = start;
event.end = end;
event.spans_index = 0;
@ -2403,13 +2302,15 @@ e_week_view_add_event (CalComponent *comp,
event.end_minute = 24 * 60;
event.different_timezone = FALSE;
if (!cal_comp_util_compare_event_timezones (comp, e_cal_view_get_cal_client (E_CAL_VIEW (week_view)),
e_cal_view_get_timezone (E_CAL_VIEW (week_view))))
if (!cal_comp_util_compare_event_timezones (
comp,
event.comp_data->client,
e_cal_view_get_timezone (E_CAL_VIEW (add_event_data->week_view))))
event.different_timezone = TRUE;
g_array_append_val (week_view->events, event);
week_view->events_sorted = FALSE;
week_view->events_need_layout = TRUE;
g_array_append_val (add_event_data->week_view->events, event);
add_event_data->week_view->events_sorted = FALSE;
add_event_data->week_view->events_need_layout = TRUE;
return TRUE;
}
@ -2555,7 +2456,8 @@ e_week_view_reshape_event_span (EWeekView *week_view,
event = &g_array_index (week_view->events, EWeekViewEvent, event_num);
span = &g_array_index (week_view->spans, EWeekViewEventSpan,
event->spans_index + span_num);
comp = event->comp;
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
one_day_event = e_week_view_is_one_day_event (week_view, event_num);
@ -2569,6 +2471,8 @@ e_week_view_reshape_event_span (EWeekView *week_view,
gtk_object_destroy (GTK_OBJECT (span->text_item));
span->background_item = NULL;
span->text_item = NULL;
g_object_unref (comp);
return;
}
@ -2643,6 +2547,7 @@ e_week_view_reshape_event_span (EWeekView *week_view,
"fill_color_rgba", GNOME_CANVAS_COLOR(0, 0, 0),
"im_context", E_CANVAS (week_view->main_canvas)->im_context,
NULL);
g_signal_connect (span->text_item, "event",
G_CALLBACK (e_week_view_on_text_item_event),
week_view);
@ -2786,6 +2691,7 @@ e_week_view_reshape_event_span (EWeekView *week_view,
NULL);
e_canvas_item_move_absolute (span->text_item, text_x, text_y);
g_object_unref (comp);
g_object_unref (layout);
pango_font_metrics_unref (font_metrics);
}
@ -2829,7 +2735,7 @@ e_week_view_on_adjustment_changed (GtkAdjustment *adjustment,
lower = icaltime_as_timet_with_zone (start_tt, e_cal_view_get_timezone (E_CAL_VIEW (week_view)));
e_week_view_recalc_day_starts (week_view, lower);
e_week_view_update_query (week_view);
e_week_view_update_query ((ECalView *) week_view);
/* Update the selection, if needed. */
if (week_view->selection_start_day != -1) {
@ -2913,7 +2819,7 @@ cancel_editing (EWeekView *week_view)
int event_num, span_num;
EWeekViewEvent *event;
EWeekViewEventSpan *span;
CalComponentText summary;
const gchar *summary;
event_num = week_view->editing_event_num;
span_num = week_view->editing_span_num;
@ -2925,26 +2831,13 @@ cancel_editing (EWeekView *week_view)
/* Reset the text to what was in the component */
cal_component_get_summary (event->comp, &summary);
g_object_set (G_OBJECT (span->text_item), "text", summary.value ? summary.value : "", NULL);
summary = icalcomponent_get_summary (event->comp_data->icalcomp);
g_object_set (G_OBJECT (span->text_item), "text", summary ? summary : "", NULL);
/* Stop editing */
e_week_view_stop_editing_event (week_view);
}
/* Callback used when a component is destroyed. Expects the closure data to be
* a pointer to a boolean; will set it to TRUE.
*/
static void
comp_destroy_cb (gpointer data, GObject *deadbeef)
{
gboolean *destroyed;
destroyed = data;
*destroyed = TRUE;
}
static gboolean
e_week_view_on_text_item_event (GnomeCanvasItem *item,
GdkEvent *gdkevent,
@ -2989,7 +2882,7 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item,
event_num);
if (calendar)
gnome_calendar_edit_object (calendar, event->comp, FALSE);
gnome_calendar_edit_object (calendar, event->comp_data->client, event->comp_data->icalcomp, FALSE);
else
g_warning ("Calendar not set");
@ -3002,25 +2895,17 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item,
if (gdkevent->button.button == 3 && !E_TEXT (item)->editing) {
EWeekViewEvent *e;
gboolean destroyed;
e = &g_array_index (week_view->events, EWeekViewEvent, event_num);
destroyed = FALSE;
g_object_weak_ref ((GObject *) e->comp, comp_destroy_cb, &destroyed);
if (!GTK_WIDGET_HAS_FOCUS (week_view))
gtk_widget_grab_focus (GTK_WIDGET (week_view));
if (!destroyed) {
g_object_weak_unref ((GObject *) e->comp, comp_destroy_cb, &destroyed);
e_week_view_set_selected_time_range_visible (week_view, e->start, e->end);
e_week_view_set_selected_time_range_visible (week_view, e->start, e->end);
e_week_view_show_popup_menu (week_view,
(GdkEventButton*) gdkevent,
event_num);
}
e_week_view_show_popup_menu (week_view,
(GdkEventButton*) gdkevent,
event_num);
gtk_signal_emit_stop_by_name (GTK_OBJECT (item->canvas),
"button_press_event");
@ -3130,6 +3015,7 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
EWeekViewEvent *event;
EWeekViewEventSpan *span;
gchar *text = NULL;
CalComponent *comp;
CalComponentText summary;
const char *uid;
@ -3151,7 +3037,7 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
week_view->editing_event_num = -1;
/* Check that the event is still valid. */
cal_component_get_uid (event->comp, &uid);
uid = icalcomponent_get_uid (event->comp_data->icalcomp);
if (!uid)
return;
@ -3159,12 +3045,14 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
g_object_get (G_OBJECT (span->text_item), "text", &text, NULL);
g_assert (text != NULL);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
if (string_is_empty (text) &&
!cal_comp_is_on_server (event->comp,
e_cal_view_get_cal_client (E_CAL_VIEW (week_view)))) {
!cal_comp_is_on_server (comp, event->comp_data->client)) {
const char *uid;
cal_component_get_uid (event->comp, &uid);
cal_component_get_uid (comp, &uid);
e_week_view_foreach_event_with_uid (week_view, uid,
e_week_view_remove_event_cb, NULL);
@ -3174,39 +3062,37 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
}
/* Only update the summary if necessary. */
cal_component_get_summary (event->comp, &summary);
cal_component_get_summary (comp, &summary);
if (summary.value && !strcmp (text, summary.value)) {
if (!e_week_view_is_one_day_event (week_view, event_num))
e_week_view_reshape_event_span (week_view, event_num,
span_num);
} else if (summary.value || !string_is_empty (text)) {
CalClient *client;
summary.value = text;
summary.altrep = NULL;
cal_component_set_summary (event->comp, &summary);
cal_component_set_summary (comp, &summary);
client = e_cal_view_get_cal_client (E_CAL_VIEW (week_view));
if (cal_component_is_instance (event->comp)) {
if (cal_component_is_instance (comp)) {
CalObjModType mod;
if (recur_component_dialog (event->comp, &mod, NULL)) {
if (cal_client_update_object_with_mod (client, event->comp, mod)
if (recur_component_dialog (comp, &mod, NULL)) {
if (cal_client_update_object_with_mod (event->comp_data->client, comp, mod)
== CAL_CLIENT_RESULT_SUCCESS) {
if (itip_organizer_is_user (event->comp, client)
&& send_component_dialog (gtk_widget_get_toplevel (week_view),
client, event->comp, FALSE))
itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, event->comp,
client, NULL);
if (itip_organizer_is_user (comp, event->comp_data->client)
&& send_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (week_view)),
event->comp_data->client, comp, FALSE))
itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp,
event->comp_data->client, NULL);
} else {
g_message ("e_week_view_on_editing_stopped(): Could not update the object!");
}
}
} else if (cal_client_update_object (client, event->comp) == CAL_CLIENT_RESULT_SUCCESS) {
if (itip_organizer_is_user (event->comp, client) &&
send_component_dialog (gtk_widget_get_toplevel (week_view),
client, event->comp, FALSE))
itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, event->comp,
client, NULL);
} else if (cal_client_update_object (event->comp_data->client, comp) == CAL_CLIENT_RESULT_SUCCESS) {
if (itip_organizer_is_user (comp, event->comp_data->client) &&
send_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (week_view)),
event->comp_data->client, comp, FALSE))
itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp,
event->comp_data->client, NULL);
} else {
g_message ("e_week_view_on_editing_stopped(): Could not update the object!");
}
@ -3215,6 +3101,7 @@ e_week_view_on_editing_stopped (EWeekView *week_view,
out:
g_free (text);
g_object_unref (comp);
g_signal_emit_by_name (week_view, "selection_changed");
}
@ -3271,7 +3158,7 @@ e_week_view_find_event_from_uid (EWeekView *week_view,
event = &g_array_index (week_view->events, EWeekViewEvent,
event_num);
cal_component_get_uid (event->comp, &u);
u = icalcomponent_get_uid (event->comp_data->icalcomp);
if (u && !strcmp (uid, u)) {
*event_num_return = event_num;
return TRUE;
@ -3313,12 +3200,14 @@ e_week_view_do_key_press (GtkWidget *widget, GdkEventKey *event)
{
EWeekView *week_view;
CalComponent *comp;
icalcomponent *icalcomp;
gint event_num;
gchar *initial_text;
CalComponentDateTime date;
struct icaltimetype itt;
time_t dtstart, dtend;
const char *uid;
AddEventData add_event_data;
g_return_val_if_fail (widget != NULL, FALSE);
g_return_val_if_fail (E_IS_WEEK_VIEW (widget), FALSE);
@ -3326,10 +3215,6 @@ e_week_view_do_key_press (GtkWidget *widget, GdkEventKey *event)
week_view = E_WEEK_VIEW (widget);
if (cal_client_get_load_state (e_cal_view_get_cal_client (E_CAL_VIEW (week_view)))
!= CAL_CLIENT_LOAD_LOADED)
return TRUE;
/* The Escape key aborts a resize operation. */
#if 0
if (week_view->resize_drag_pos != E_CAL_VIEW_POS_NONE) {
@ -3374,7 +3259,11 @@ e_week_view_do_key_press (GtkWidget *widget, GdkEventKey *event)
initial_text = e_utf8_from_gtk_event_key (widget, event->keyval, event->string);
/* Add a new event covering the selected range. */
comp = cal_comp_event_new_with_defaults (e_cal_view_get_cal_client (E_CAL_VIEW (week_view)));
icalcomp = e_cal_model_create_component_with_defaults (e_cal_view_get_model (E_CAL_VIEW (week_view)));
uid = icalcomponent_get_uid (icalcomp);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomp);
dtstart = week_view->day_starts[week_view->selection_start_day];
dtend = week_view->day_starts[week_view->selection_end_day + 1];
@ -3397,11 +3286,12 @@ e_week_view_do_key_press (GtkWidget *widget, GdkEventKey *event)
/* We add the event locally and start editing it. We don't send it
to the server until the user finishes editing it. */
e_week_view_add_event (comp, dtstart, dtend, week_view);
add_event_data.week_view = week_view;
add_event_data.comp_data = NULL;
e_week_view_add_event (comp, dtstart, dtend, &add_event_data);
e_week_view_check_layout (week_view);
gtk_widget_queue_draw (week_view->main_canvas);
cal_component_get_uid (comp, &uid);
if (e_week_view_find_event_from_uid (week_view, uid, &event_num)) {
e_week_view_start_editing_event (week_view, event_num, 0,
initial_text);
@ -3607,7 +3497,6 @@ e_week_view_show_popup_menu (EWeekView *week_view,
GdkEventButton *bevent,
gint event_num)
{
EWeekViewEvent *event;
GtkMenu *popup;
week_view->popup_event_num = event_num;
@ -3641,13 +3530,15 @@ e_week_view_unrecur_appointment (EWeekView *week_view)
/* For the recurring object, we add a exception to get rid of the
instance. */
comp = cal_component_clone (event->comp);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
cal_comp_util_add_exdate (comp, event->start, e_cal_view_get_timezone (E_CAL_VIEW (week_view)));
/* For the unrecurred instance we duplicate the original object,
create a new uid for it, get rid of the recurrence rules, and set
the start & end times to the instances times. */
new_comp = cal_component_clone (event->comp);
new_comp = cal_component_new ();
cal_component_set_icalcomponent (new_comp, icalcomponent_new_clone (event->comp_data->icalcomp));
cal_component_set_uid (new_comp, cal_component_gen_uid ());
cal_component_set_rdate_list (new_comp, NULL);
cal_component_set_rrule_list (new_comp, NULL);
@ -3667,13 +3558,13 @@ e_week_view_unrecur_appointment (EWeekView *week_view)
/* Now update both CalComponents. Note that we do this last since at
present the updates happen synchronously so our event may disappear.
*/
if (cal_client_update_object (e_cal_view_get_cal_client (E_CAL_VIEW (week_view)), comp)
if (cal_client_update_object (event->comp_data->client, comp)
!= CAL_CLIENT_RESULT_SUCCESS)
g_message ("e_week_view_on_unrecur_appointment(): Could not update the object!");
g_object_unref (comp);
if (cal_client_update_object (e_cal_view_get_cal_client (E_CAL_VIEW (week_view)), new_comp)
if (cal_client_update_object (event->comp_data->client, new_comp)
!= CAL_CLIENT_RESULT_SUCCESS)
g_message ("e_week_view_on_unrecur_appointment(): Could not update the object!");

View File

@ -395,6 +395,8 @@ void e_week_view_set_24_hour_format (EWeekView *week_view,
void e_week_view_delete_occurrence (EWeekView *week_view);
void e_week_view_unrecur_appointment (EWeekView *week_view);
/* Returns the number of selected events (0 or 1 at present). */
gint e_week_view_get_num_events_selected (EWeekView *week_view);

View File

@ -44,6 +44,7 @@
#include "dialogs/event-editor.h"
#include "dialogs/task-editor.h"
#include "comp-util.h"
#include "e-cal-model-calendar.h"
#include "e-day-view.h"
#include "e-day-view-time-item.h"
#include "e-week-view.h"
@ -69,9 +70,6 @@ struct _GnomeCalendarPrivate {
* The Calendar Folder.
*/
/* The calendar client object we monitor */
CalClient *client;
/* Set of categories from the calendar client */
GPtrArray *cal_categories;
@ -112,7 +110,7 @@ struct _GnomeCalendarPrivate {
GtkWidget *month_view;
/* Calendar query for the date navigator */
CalQuery *dn_query;
GList *dn_queries; /* list of CalQueries */
char *sexp;
guint query_timeout;
@ -147,7 +145,7 @@ struct _GnomeCalendarPrivate {
time_t visible_end;
/* Calendar query for purging old events */
CalQuery *exp_query;
GList *exp_queries;
time_t exp_older_than;
};
@ -384,7 +382,7 @@ dn_query_obj_updated_cb (CalQuery *query, const char *uid,
return;
}
status = cal_client_get_object (priv->client, uid, &icalcomp);
status = cal_client_get_object (cal_query_get_client (query), uid, &icalcomp);
switch (status) {
case CAL_CLIENT_GET_SUCCESS:
@ -409,7 +407,7 @@ dn_query_obj_updated_cb (CalQuery *query, const char *uid,
return;
}
tag_calendar_by_comp (priv->date_navigator, comp, priv->client, NULL,
tag_calendar_by_comp (priv->date_navigator, comp, cal_query_get_client (query), NULL,
FALSE, TRUE);
g_object_unref (comp);
}
@ -604,46 +602,61 @@ update_query (GnomeCalendar *gcal)
GnomeCalendarPrivate *priv;
CalQuery *old_query;
char *real_sexp;
GList *l, *client_list;
priv = gcal->priv;
e_calendar_item_clear_marks (priv->date_navigator->calitem);
if (!(priv->client
&& cal_client_get_load_state (priv->client) == CAL_CLIENT_LOAD_LOADED))
return;
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), _("Searching"));
old_query = priv->dn_query;
priv->dn_query = NULL;
/* free the previous queries */
for (l = priv->dn_queries; l != NULL; l = l->next) {
old_query = l->data;
if (old_query) {
g_signal_handlers_disconnect_matched (old_query, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
g_object_unref (old_query);
if (old_query) {
g_signal_handlers_disconnect_matched (old_query, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
g_object_unref (old_query);
}
}
g_list_free (priv->dn_queries);
priv->dn_queries = NULL;
g_assert (priv->sexp != NULL);
real_sexp = adjust_query_sexp (gcal, priv->sexp);
if (!real_sexp)
if (!real_sexp) {
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
return; /* No time range is set, so don't start a query */
priv->dn_query = cal_client_get_query (priv->client, real_sexp);
g_free (real_sexp);
if (!priv->dn_query) {
g_message ("update_query(): Could not create the query");
return;
}
g_signal_connect (priv->dn_query, "obj_updated",
G_CALLBACK (dn_query_obj_updated_cb), gcal);
g_signal_connect (priv->dn_query, "obj_removed",
G_CALLBACK (dn_query_obj_removed_cb), gcal);
g_signal_connect (priv->dn_query, "query_done",
G_CALLBACK (dn_query_query_done_cb), gcal);
g_signal_connect (priv->dn_query, "eval_error",
G_CALLBACK (dn_query_eval_error_cb), gcal);
/* create queries for each loaded client */
client_list = e_cal_model_get_client_list (e_cal_view_get_model (E_CAL_VIEW (priv->day_view)));
for (l = client_list; l != NULL; l = l->next) {
old_query = cal_client_get_query ((CalClient *) l->data, real_sexp);
if (!old_query) {
g_message ("update_query(): Could not create the query");
continue;
}
g_signal_connect (old_query, "obj_updated",
G_CALLBACK (dn_query_obj_updated_cb), gcal);
g_signal_connect (old_query, "obj_removed",
G_CALLBACK (dn_query_obj_removed_cb), gcal);
g_signal_connect (old_query, "query_done",
G_CALLBACK (dn_query_query_done_cb), gcal);
g_signal_connect (old_query, "eval_error",
G_CALLBACK (dn_query_eval_error_cb), gcal);
priv->dn_queries = g_list_append (priv->dn_queries, old_query);
}
g_list_free (client_list);
g_free (real_sexp);
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
}
/**
@ -675,10 +688,10 @@ gnome_calendar_set_query (GnomeCalendar *gcal, const char *sexp)
update_query (gcal);
/* Set the query on the main view */
e_cal_view_set_query (E_CAL_VIEW (gnome_calendar_get_current_view_widget (gcal)), sexp);
model = e_cal_view_get_model (E_CAL_VIEW (gnome_calendar_get_current_view_widget (gcal)));
e_cal_model_set_query (model, sexp);
/* Set the query on the task pad */
model = e_calendar_table_get_model (E_CALENDAR_TABLE (priv->todo));
e_cal_model_set_query (model, sexp);
}
@ -817,6 +830,7 @@ setup_widgets (GnomeCalendar *gcal)
GtkWidget *w;
gchar *filename;
ETable *etable;
ECalModel *model;
priv = gcal->priv;
@ -939,6 +953,14 @@ setup_widgets (GnomeCalendar *gcal)
connect_week_view_focus (gcal, E_WEEK_VIEW (priv->month_view));
model = (ECalModel *) e_cal_model_calendar_new ();
e_cal_view_set_model (E_CAL_VIEW (priv->day_view), model);
e_cal_view_set_model (E_CAL_VIEW (priv->work_week_view), model);
e_cal_view_set_model (E_CAL_VIEW (priv->week_view), model);
e_cal_view_set_model (E_CAL_VIEW (priv->month_view), model);
g_object_unref (model);
gnome_calendar_update_config_settings (gcal, TRUE);
}
@ -958,7 +980,7 @@ gnome_calendar_init (GnomeCalendar *gcal)
priv->range_selected = FALSE;
setup_widgets (gcal);
priv->dn_query = NULL;
priv->dn_queries = NULL;
priv->sexp = g_strdup ("#t"); /* Match all */
priv->selection_start_time = time_day_begin_with_zone (time (NULL),
@ -971,7 +993,7 @@ gnome_calendar_init (GnomeCalendar *gcal)
priv->visible_start = -1;
priv->visible_end = -1;
priv->exp_query = NULL;
priv->exp_queries = NULL;
}
/* Frees a set of categories */
@ -1003,22 +1025,37 @@ gnome_calendar_destroy (GtkObject *object)
priv = gcal->priv;
if (priv) {
GList *l, *client_list;
free_categories (priv->cal_categories);
priv->cal_categories = NULL;
free_categories (priv->tasks_categories);
priv->tasks_categories = NULL;
/* disconnect from signals on all the clients */
client_list = e_cal_model_get_client_list (e_cal_view_get_model (E_CAL_VIEW (priv->week_view)));
for (l = client_list; l != NULL; l = l->next) {
g_signal_handlers_disconnect_matched ((CalClient *) l->data, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
}
g_list_free (client_list);
/* Save the TaskPad layout. */
filename = g_strdup_printf ("%s/config/TaskPad", evolution_dir);
e_calendar_table_save_state (E_CALENDAR_TABLE (priv->todo), filename);
g_free (filename);
if (priv->dn_query) {
g_signal_handlers_disconnect_matched (priv->dn_query, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
g_object_unref (priv->dn_query);
priv->dn_query = NULL;
if (priv->dn_queries) {
for (l = priv->dn_queries; l != NULL; l = l->next) {
g_signal_handlers_disconnect_matched ((CalQuery *) l->data, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
g_object_unref ((CalQuery *) l->data);
}
g_list_free (priv->dn_queries);
priv->dn_queries = NULL;
}
if (priv->sexp) {
@ -1030,13 +1067,6 @@ gnome_calendar_destroy (GtkObject *object)
g_source_remove (priv->query_timeout);
priv->query_timeout = 0;
}
if (priv->client) {
g_signal_handlers_disconnect_matched (priv->client, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
g_object_unref (priv->client);
priv->client = NULL;
}
if (priv->task_pad_client) {
g_signal_handlers_disconnect_matched (priv->task_pad_client, G_SIGNAL_MATCH_DATA,
@ -1055,11 +1085,17 @@ gnome_calendar_destroy (GtkObject *object)
priv->view_menus = NULL;
}
if (priv->exp_query) {
g_signal_handlers_disconnect_matched (priv->exp_query, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
g_object_unref (priv->exp_query);
priv->exp_query = NULL;
if (priv->exp_queries) {
GList *l;
for (l = priv->exp_queries; l != NULL; l = l->next) {
g_signal_handlers_disconnect_matched ((CalQuery *) l->data, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
g_object_unref (l->data);
}
g_list_free (priv->exp_queries);
priv->exp_queries = NULL;
}
g_free (priv);
@ -1519,7 +1555,8 @@ gnome_calendar_setup_view_menus (GnomeCalendar *gcal, BonoboUIComponent *uic)
gal_view_collection_load (collection);
}
priv->view_instance = gal_view_instance_new (collection, cal_client_get_uri (priv->client));
priv->view_instance = gal_view_instance_new (collection,
cal_client_get_uri (gnome_calendar_get_default_client (gcal)));
priv->view_menus = gal_view_menus_new (priv->view_instance);
gal_view_menus_set_show_define_views (priv->view_menus, FALSE);
@ -1679,11 +1716,6 @@ client_cal_opened_cb (CalClient *client, CalClientOpenStatus status, gpointer da
switch (status) {
case CAL_CLIENT_OPEN_SUCCESS:
/* If this is the main CalClient, update the Date Navigator. */
if (client == priv->client) {
priv->query_timeout = g_timeout_add (100, update_query_timeout, gcal);
}
/* Set the client's default timezone, if we have one. */
if (priv->zone) {
cal_client_set_default_timezone (client, priv->zone);
@ -1693,11 +1725,16 @@ client_cal_opened_cb (CalClient *client, CalClientOpenStatus status, gpointer da
uristr = get_uri_without_password (cal_client_get_uri (client));
msg = g_strdup_printf (_("Adding alarms for %s"), uristr);
g_free (uristr);
if (client == priv->client) {
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), msg);
}
else if (client == priv->task_pad_client) {
if (client == priv->task_pad_client) {
e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), msg);
e_cal_model_add_client (e_calendar_table_get_model (E_CALENDAR_TABLE (priv->todo)),
priv->task_pad_client);
}
else {
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), msg);
e_cal_model_add_client (e_cal_view_get_model (E_CAL_VIEW (priv->week_view)), client);
priv->query_timeout = g_timeout_add (100, update_query_timeout, gcal);
}
g_free (msg);
@ -1726,12 +1763,10 @@ client_cal_opened_cb (CalClient *client, CalClientOpenStatus status, gpointer da
return;
}
if (client == priv->client) {
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
}
else if (client == priv->task_pad_client) {
if (client == priv->task_pad_client)
e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL);
}
else
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
}
/* Duplicates an array of categories */
@ -1834,14 +1869,13 @@ client_categories_changed_cb (CalClient *client, GPtrArray *categories, gpointer
gcal = GNOME_CALENDAR (data);
priv = gcal->priv;
if (client == priv->client) {
free_categories (priv->cal_categories);
priv->cal_categories = copy_categories (categories);
} else if (client == priv->task_pad_client) {
if (client == priv->task_pad_client) {
free_categories (priv->tasks_categories);
priv->tasks_categories = copy_categories (categories);
} else
g_assert_not_reached ();
} else {
free_categories (priv->cal_categories);
priv->cal_categories = copy_categories (categories);
}
merged = merge_categories (priv->cal_categories, priv->tasks_categories);
cal_search_bar_set_categories (CAL_SEARCH_BAR (priv->search_bar), merged);
@ -1879,8 +1913,14 @@ backend_died_cb (CalClient *client, gpointer data)
gcal = GNOME_CALENDAR (data);
priv = gcal->priv;
uristr = get_uri_without_password (cal_client_get_uri (priv->client));
if (client == priv->client) {
uristr = get_uri_without_password (cal_client_get_uri (client));
if (client == priv->task_pad_client) {
message = g_strdup_printf (_("The task backend for\n%s\n has crashed. "
"You will have to restart Evolution in order "
"to use it again"),
uristr);
e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL);
} else {
message = g_strdup_printf (_("The calendar backend for\n%s\n has crashed. "
"You will have to restart Evolution in order "
"to use it again"),
@ -1889,15 +1929,6 @@ backend_died_cb (CalClient *client, gpointer data)
e_cal_view_set_status_message (E_CAL_VIEW (priv->work_week_view), NULL);
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
e_cal_view_set_status_message (E_CAL_VIEW (priv->month_view), NULL);
} else if (client == priv->task_pad_client) {
message = g_strdup_printf (_("The task backend for\n%s\n has crashed. "
"You will have to restart Evolution in order "
"to use it again"),
uristr);
e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), NULL);
} else {
message = NULL;
g_assert_not_reached ();
}
gnome_error_dialog_parented (message, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))));
@ -1910,34 +1941,12 @@ gnome_calendar_construct (GnomeCalendar *gcal)
{
GnomeCalendarPrivate *priv;
GnomeCalendarViewType view_type;
ECalModel *model;
g_return_val_if_fail (gcal != NULL, NULL);
g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), NULL);
priv = gcal->priv;
/*
* Calendar Folder Client.
*/
priv->client = cal_client_new ();
if (!priv->client)
return NULL;
g_signal_connect (priv->client, "cal_opened",
G_CALLBACK (client_cal_opened_cb), gcal);
g_signal_connect (priv->client, "backend_error",
G_CALLBACK (backend_error_cb), gcal);
g_signal_connect (priv->client, "categories_changed",
G_CALLBACK (client_categories_changed_cb), gcal);
g_signal_connect (priv->client, "backend_died",
G_CALLBACK (backend_died_cb), gcal);
e_cal_view_set_cal_client (E_CAL_VIEW (priv->day_view), priv->client);
e_cal_view_set_cal_client (E_CAL_VIEW (priv->work_week_view), priv->client);
e_cal_view_set_cal_client (E_CAL_VIEW (priv->week_view), priv->client);
e_cal_view_set_cal_client (E_CAL_VIEW (priv->month_view), priv->client);
/*
* TaskPad Folder Client.
*/
@ -1954,11 +1963,6 @@ gnome_calendar_construct (GnomeCalendar *gcal)
g_signal_connect (priv->task_pad_client, "backend_died",
G_CALLBACK (backend_died_cb), gcal);
model = e_calendar_table_get_model (E_CALENDAR_TABLE (priv->todo));
g_assert (model != NULL);
e_cal_model_add_client (model, priv->task_pad_client);
/* Get the default view to show. */
view_type = calendar_config_get_default_view ();
if (view_type < GNOME_CAL_DAY_VIEW || view_type > GNOME_CAL_MONTH_VIEW)
@ -1996,15 +2000,15 @@ gnome_calendar_set_ui_component (GnomeCalendar *gcal,
}
/**
* gnome_calendar_get_cal_client:
* gnome_calendar_get_calendar_model:
* @gcal: A calendar view.
*
* Queries the calendar client interface object that a calendar view is using.
* Queries the calendar model object that a calendar view is using.
*
* Return value: A calendar client interface object.
**/
CalClient *
gnome_calendar_get_cal_client (GnomeCalendar *gcal)
ECalModel *
gnome_calendar_get_calendar_model (GnomeCalendar *gcal)
{
GnomeCalendarPrivate *priv;
@ -2013,7 +2017,18 @@ gnome_calendar_get_cal_client (GnomeCalendar *gcal)
priv = gcal->priv;
return priv->client;
return e_cal_view_get_model (E_CAL_VIEW (priv->week_view));
}
/**
* gnome_calendar_get_default_client
*/
CalClient *
gnome_calendar_get_default_client (GnomeCalendar *gcal)
{
g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), NULL);
return e_cal_model_get_default_client (e_cal_view_get_model (E_CAL_VIEW (gcal->priv->week_view)));
}
/**
@ -2088,12 +2103,12 @@ gboolean
gnome_calendar_open (GnomeCalendar *gcal, const char *str_uri)
{
GnomeCalendarPrivate *priv;
char *tasks_uri;
gboolean success;
EUri *uri;
char *message;
char *real_uri;
char *urinopwd;
CalClient *client;
g_return_val_if_fail (gcal != NULL, FALSE);
g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), FALSE);
@ -2101,65 +2116,43 @@ gnome_calendar_open (GnomeCalendar *gcal, const char *str_uri)
priv = gcal->priv;
g_return_val_if_fail (
cal_client_get_load_state (priv->client) == CAL_CLIENT_LOAD_NOT_LOADED,
FALSE);
g_return_val_if_fail (
cal_client_get_load_state (priv->task_pad_client) == CAL_CLIENT_LOAD_NOT_LOADED,
FALSE);
uri = e_uri_new (str_uri);
if (!uri || !g_strncasecmp (uri->protocol, "file", 4))
real_uri = g_concat_dir_and_file (str_uri, "calendar.ics");
else
real_uri = g_strdup (str_uri);
if (!uri || !g_strncasecmp (uri->protocol, "file", 4))
real_uri = g_concat_dir_and_file (str_uri, "calendar.ics");
else
real_uri = g_strdup (str_uri);
urinopwd = get_uri_without_password (real_uri);
urinopwd = get_uri_without_password (str_uri);
message = g_strdup_printf (_("Opening calendar at %s"), urinopwd);
g_free (urinopwd);
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), message);
g_free (message);
if (!cal_client_open_calendar (priv->client, real_uri, FALSE)) {
g_message ("gnome_calendar_open(): Could not issue the request to open the calendar folder");
g_free (real_uri);
e_uri_free (uri);
client = cal_client_new ();
g_signal_connect (G_OBJECT (client), "cal_opened", G_CALLBACK (client_cal_opened_cb), gcal);
g_signal_connect (G_OBJECT (client), "backend_error", G_CALLBACK (backend_error_cb), gcal);
g_signal_connect (G_OBJECT (client), "categories_changed", G_CALLBACK (client_categories_changed_cb), gcal);
g_signal_connect (G_OBJECT (client), "backend_died", G_CALLBACK (backend_died_cb), gcal);
if (!cal_client_open_calendar (client, real_uri, FALSE)) {
g_warning (G_STRLOC ": Could not issue the request to open the calendar folder");
g_object_unref (client);
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
return FALSE;
}
/* Open the appropriate Tasks folder to show in the TaskPad */
if (!uri) {
tasks_uri = g_strdup_printf ("%s/local/Tasks/tasks.ics", evolution_dir);
message = g_strdup_printf (_("Opening tasks at %s"), tasks_uri);
e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), message);
g_free (message);
success = cal_client_open_calendar (priv->task_pad_client, tasks_uri, FALSE);
g_free (tasks_uri);
}
else {
if (!g_strncasecmp (uri->protocol, "file", 4)) {
tasks_uri = g_strdup_printf ("%s/local/Tasks/tasks.ics", evolution_dir);
message = g_strdup_printf (_("Opening tasks at %s"), tasks_uri);
e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo), message);
g_free (message);
success = cal_client_open_calendar (priv->task_pad_client, tasks_uri, FALSE);
g_free (tasks_uri);
}
else {
e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo),
_("Opening default tasks folder"));
success = cal_client_open_default_tasks (priv->task_pad_client, FALSE);
}
}
e_calendar_table_set_status_message (E_CALENDAR_TABLE (priv->todo),
_("Opening default tasks folder"));
success = cal_client_open_default_tasks (priv->task_pad_client, FALSE);
g_free (real_uri);
e_uri_free (uri);
e_uri_free (uri);
if (!success) {
g_message ("gnome_calendar_open(): Could not issue the request to open the tasks folder");
@ -2184,6 +2177,7 @@ gnome_calendar_update_config_settings (GnomeCalendar *gcal,
gint start_hour, start_minute, end_hour, end_minute;
gboolean use_24_hour, show_event_end, compress_weekend;
char *location;
GList *client_list;
g_return_if_fail (GNOME_IS_CALENDAR (gcal));
@ -2260,10 +2254,20 @@ gnome_calendar_update_config_settings (GnomeCalendar *gcal,
location = calendar_config_get_timezone ();
priv->zone = icaltimezone_get_builtin_timezone (location);
if (priv->client
&& cal_client_get_load_state (priv->client) == CAL_CLIENT_LOAD_LOADED) {
cal_client_set_default_timezone (priv->client, priv->zone);
client_list = e_cal_model_get_client_list (e_cal_view_get_model (E_CAL_VIEW (priv->week_view)));
if (client_list) {
GList *l;
for (l = client_list; l != NULL; l = l->next) {
CalClient *client = l->data;
if (cal_client_get_load_state (client) == CAL_CLIENT_LOAD_LOADED)
cal_client_set_default_timezone (client, priv->zone);
}
g_list_free (client_list);
}
if (priv->task_pad_client
&& cal_client_get_load_state (priv->task_pad_client) == CAL_CLIENT_LOAD_LOADED) {
cal_client_set_default_timezone (priv->task_pad_client,
@ -2333,37 +2337,42 @@ gnome_calendar_get_selected_time_range (GnomeCalendar *gcal,
}
void
gnome_calendar_edit_object (GnomeCalendar *gcal, CalComponent *comp,
gboolean meeting)
gnome_calendar_edit_object (GnomeCalendar *gcal, CalClient *client, icalcomponent *icalcomp, gboolean meeting)
{
GnomeCalendarPrivate *priv;
CompEditor *ce;
const char *uid;
CalComponent *comp;
g_return_if_fail (gcal != NULL);
g_return_if_fail (GNOME_IS_CALENDAR (gcal));
g_return_if_fail (comp != NULL);
g_return_if_fail (IS_CAL_CLIENT (client));
g_return_if_fail (icalcomp != NULL);
priv = gcal->priv;
cal_component_get_uid (comp, &uid);
uid = icalcomponent_get_uid (icalcomp);
ce = e_comp_editor_registry_find (comp_editor_registry, uid);
if (!ce) {
EventEditor *ee;
ee = event_editor_new (priv->client);
ee = event_editor_new (client);
if (!ee) {
g_message ("gnome_calendar_edit_object(): Could not create the event editor");
return;
}
ce = COMP_EDITOR (ee);
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomponent_new_clone (icalcomp));
comp_editor_edit_comp (ce, comp);
if (meeting)
event_editor_show_meeting (ee);
e_comp_editor_registry_add (comp_editor_registry, ce, FALSE);
g_object_unref (comp);
}
comp_editor_focus (ce);
@ -2390,6 +2399,7 @@ gnome_calendar_new_appointment_for (GnomeCalendar *cal,
struct icaltimetype itt;
CalComponentDateTime dt;
CalComponent *comp;
icalcomponent *icalcomp;
CalComponentTransparency transparency;
const char *category;
@ -2404,7 +2414,9 @@ gnome_calendar_new_appointment_for (GnomeCalendar *cal,
else
dt.tzid = icaltimezone_get_tzid (priv->zone);
comp = cal_comp_event_new_with_defaults (priv->client);
icalcomp = e_cal_model_create_component_with_defaults (e_cal_view_get_model (E_CAL_VIEW (priv->week_view)));
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomp);
/* DTSTART, DTEND */
@ -2441,7 +2453,7 @@ gnome_calendar_new_appointment_for (GnomeCalendar *cal,
cal_component_commit_sequence (comp);
gnome_calendar_edit_object (cal, comp, meeting);
gnome_calendar_edit_object (cal, gnome_calendar_get_default_client (cal), icalcomp, meeting);
g_object_unref (comp);
}
@ -2477,6 +2489,7 @@ gnome_calendar_new_task (GnomeCalendar *gcal)
GnomeCalendarPrivate *priv;
TaskEditor *tedit;
CalComponent *comp;
icalcomponent *icalcomp;
const char *category;
g_return_if_fail (gcal != NULL);
@ -2486,7 +2499,9 @@ gnome_calendar_new_task (GnomeCalendar *gcal)
tedit = task_editor_new (priv->task_pad_client);
comp = cal_comp_task_new_with_defaults (priv->client);
icalcomp = e_cal_model_create_component_with_defaults (e_cal_view_get_model (E_CAL_VIEW (priv->week_view)));
comp = cal_component_new ();
cal_component_set_icalcomponent (comp, icalcomp);
category = cal_search_bar_get_category (CAL_SEARCH_BAR (priv->search_bar));
cal_component_set_categories (comp, category);
@ -3007,7 +3022,7 @@ purging_obj_updated_cb (CalQuery *query, const char *uid,
priv = gcal->priv;
if (cal_client_get_object (priv->client, uid, &icalcomp) != CAL_CLIENT_GET_SUCCESS)
if (cal_client_get_object (cal_query_get_client (query), uid, &icalcomp) != CAL_CLIENT_GET_SUCCESS)
return;
comp = cal_component_new ();
@ -3028,16 +3043,16 @@ purging_obj_updated_cb (CalQuery *query, const char *uid,
(CalRecurInstanceFn) check_instance_cb,
&closure,
(CalRecurResolveTimezoneFn) cal_client_resolve_tzid_cb,
priv->client, priv->zone);
cal_query_get_client (query), priv->zone);
if (closure.remove) {
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), msg);
delete_error_dialog (cal_client_remove_object (priv->client, uid),
delete_error_dialog (cal_client_remove_object (cal_query_get_client (query), uid),
CAL_COMPONENT_EVENT);
}
} else {
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), msg);
delete_error_dialog (cal_client_remove_object (priv->client, uid), CAL_COMPONENT_EVENT);
delete_error_dialog (cal_client_remove_object (cal_query_get_client (query), uid), CAL_COMPONENT_EVENT);
}
g_object_unref (comp);
@ -3054,10 +3069,11 @@ purging_eval_error_cb (CalQuery *query, const char *error_str, gpointer data)
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
g_signal_handlers_disconnect_matched (priv->exp_query, G_SIGNAL_MATCH_DATA,
g_signal_handlers_disconnect_matched (query, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
g_object_unref (priv->exp_query);
priv->exp_query = NULL;
priv->exp_queries = g_list_remove (priv->exp_queries, query);
g_object_unref (query);
}
static void
@ -3070,10 +3086,11 @@ purging_query_done_cb (CalQuery *query, CalQueryDoneStatus status, const char *e
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
g_signal_handlers_disconnect_matched (priv->exp_query, G_SIGNAL_MATCH_DATA,
g_signal_handlers_disconnect_matched (query, G_SIGNAL_MATCH_DATA,
0, 0, NULL, NULL, gcal);
g_object_unref (priv->exp_query);
priv->exp_query = NULL;
priv->exp_queries = g_list_remove (priv->exp_queries, query);
g_object_unref (query);
}
void
@ -3081,13 +3098,14 @@ gnome_calendar_purge (GnomeCalendar *gcal, time_t older_than)
{
GnomeCalendarPrivate *priv;
char *sexp, *start, *end;
GList *client_list, *l;
g_return_if_fail (GNOME_IS_CALENDAR (gcal));
priv = gcal->priv;
/* if we have a query, we are already purging */
if (priv->exp_query)
if (priv->exp_queries)
return;
priv->exp_older_than = older_than;
@ -3099,21 +3117,33 @@ gnome_calendar_purge (GnomeCalendar *gcal, time_t older_than)
start, end);
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), _("Purging"));
priv->exp_query = cal_client_get_query (priv->client, sexp);
client_list = e_cal_model_get_client_list (e_cal_view_get_model (E_CAL_VIEW (priv->week_view)));
for (l = client_list; l != NULL; l = l->next) {
CalQuery *exp_query;
if (cal_client_is_read_only ((CalClient *) l->data))
continue;
exp_query = cal_client_get_query ((CalClient *) l->data, sexp);
if (!exp_query) {
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
g_message ("gnome_calendar_purge(): Could not create the query");
continue;
}
g_signal_connect (exp_query, "obj_updated", G_CALLBACK (purging_obj_updated_cb), gcal);
g_signal_connect (exp_query, "query_done", G_CALLBACK (purging_query_done_cb), gcal);
g_signal_connect (exp_query, "eval_error", G_CALLBACK (purging_eval_error_cb), gcal);
priv->exp_queries = g_list_append (priv->exp_queries, exp_query);
}
g_list_free (client_list);
g_free (sexp);
g_free (start);
g_free (end);
if (!priv->exp_query) {
e_cal_view_set_status_message (E_CAL_VIEW (priv->week_view), NULL);
g_message ("gnome_calendar_purge(): Could not create the query");
return;
}
g_signal_connect (priv->exp_query, "obj_updated", G_CALLBACK (purging_obj_updated_cb), gcal);
g_signal_connect (priv->exp_query, "query_done", G_CALLBACK (purging_query_done_cb), gcal);
g_signal_connect (priv->exp_query, "eval_error", G_CALLBACK (purging_eval_error_cb), gcal);
}
ECalendarTable*

View File

@ -101,7 +101,10 @@ GtkWidget *gnome_calendar_new (void);
void gnome_calendar_set_ui_component (GnomeCalendar *cal,
BonoboUIComponent *ui_component);
CalClient *gnome_calendar_get_cal_client (GnomeCalendar *gcal);
ECalendarTable *gnome_calendar_get_task_pad (GnomeCalendar *gcal);
ECalModel *gnome_calendar_get_calendar_model (GnomeCalendar *gcal);
CalClient *gnome_calendar_get_default_client (GnomeCalendar *gcal);
CalClient *gnome_calendar_get_task_pad_cal_client(GnomeCalendar *gcal);
gboolean gnome_calendar_open (GnomeCalendar *gcal, const char *str_uri);
@ -142,8 +145,9 @@ void gnome_calendar_get_selected_time_range (GnomeCalendar *gcal,
time_t *end_time);
void gnome_calendar_edit_object (GnomeCalendar *gcal,
CalComponent *comp,
gboolean meeting);
CalClient *client,
icalcomponent *icalcomp,
gboolean meeting);
void gnome_calendar_new_appointment (GnomeCalendar *gcal);
void gnome_calendar_new_appointment_for (GnomeCalendar *cal,

View File

@ -72,7 +72,7 @@ ecal_date_range_changed (ECalendarItem *calitem, gpointer user_data)
GoToDialog *dlg = user_data;
CalClient *client;
client = gnome_calendar_get_cal_client (dlg->gcal);
client = gnome_calendar_get_default_client (dlg->gcal);
if (client)
tag_calendar_by_client (dlg->ecal, client);
}

View File

@ -163,20 +163,20 @@ pstream_save (BonoboPersistStream *ps, const Bonobo_Stream stream,
g_free (text);
} /* pstream_save */
static CORBA_long
pstream_get_max_size (BonoboPersistStream *ps, void *data,
CORBA_Environment *ev)
{
EItipControl *itip = data;
gint len;
/* static CORBA_long */
/* pstream_get_max_size (BonoboPersistStream *ps, void *data, */
/* CORBA_Environment *ev) */
/* { */
/* EItipControl *itip = data; */
/* gint len; */
len = e_itip_control_get_data_size (itip);
/* len = e_itip_control_get_data_size (itip); */
if (len > 0)
return len;
/* if (len > 0) */
/* return len; */
return 0L;
}
/* return 0L; */
/* } */
static Bonobo_Persist_ContentTypeList *
pstream_get_content_types (BonoboPersistStream *ps, void *closure,

View File

@ -561,7 +561,7 @@ print_month_small (GnomePrintContext *pc, GnomeCalendar *gcal, time_t month,
top -= header_size;
client = gnome_calendar_get_cal_client (gcal);
client = gnome_calendar_get_default_client (gcal);
col_width = (right - left) / 7;
@ -855,68 +855,68 @@ print_day_add_event (CalComponent *comp,
GArray **events)
{
icaltimezone *zone = get_timezone ();
EDayViewEvent event;
gint day, offset;
struct icaltimetype start_tt, end_tt;
/* icaltimezone *zone = get_timezone (); */
/* EDayViewEvent event; */
/* gint day, offset; */
/* struct icaltimetype start_tt, end_tt; */
#if 0
g_print ("Day view lower: %s", ctime (&day_starts[0]));
g_print ("Day view upper: %s", ctime (&day_starts[days_shown]));
g_print ("Event start: %s", ctime (&start));
g_print ("Event end : %s\n", ctime (&end));
#endif
/* #if 0 */
/* g_print ("Day view lower: %s", ctime (&day_starts[0])); */
/* g_print ("Day view upper: %s", ctime (&day_starts[days_shown])); */
/* g_print ("Event start: %s", ctime (&start)); */
/* g_print ("Event end : %s\n", ctime (&end)); */
/* #endif */
/* Check that the event times are valid. */
g_return_val_if_fail (start <= end, -1);
g_return_val_if_fail (start < day_starts[days_shown], -1);
g_return_val_if_fail (end > day_starts[0], -1);
/* /\* Check that the event times are valid. *\/ */
/* g_return_val_if_fail (start <= end, -1); */
/* g_return_val_if_fail (start < day_starts[days_shown], -1); */
/* g_return_val_if_fail (end > day_starts[0], -1); */
start_tt = icaltime_from_timet_with_zone (start, FALSE, zone);
end_tt = icaltime_from_timet_with_zone (end, FALSE, zone);
/* start_tt = icaltime_from_timet_with_zone (start, FALSE, zone); */
/* end_tt = icaltime_from_timet_with_zone (end, FALSE, zone); */
event.comp = comp;
g_object_ref (comp);
event.start = start;
event.end = end;
event.canvas_item = NULL;
/* event.comp = comp; */
/* g_object_ref (comp); */
/* event.start = start; */
/* event.end = end; */
/* event.canvas_item = NULL; */
/* Calculate the start & end minute, relative to the top of the
display. */
/*offset = day_view->first_hour_shown * 60
+ day_view->first_minute_shown;*/
offset = 0;
event.start_minute = start_tt.hour * 60 + start_tt.minute - offset;
event.end_minute = end_tt.hour * 60 + end_tt.minute - offset;
/* /\* Calculate the start & end minute, relative to the top of the */
/* display. *\/ */
/* /\*offset = day_view->first_hour_shown * 60 */
/* + day_view->first_minute_shown;*\/ */
/* offset = 0; */
/* event.start_minute = start_tt.hour * 60 + start_tt.minute - offset; */
/* event.end_minute = end_tt.hour * 60 + end_tt.minute - offset; */
event.start_row_or_col = 0;
event.num_columns = 0;
/* event.start_row_or_col = 0; */
/* event.num_columns = 0; */
/* Find out which array to add the event to. */
for (day = 0; day < days_shown; day++) {
if (start >= day_starts[day] && end <= day_starts[day + 1]) {
/* /\* Find out which array to add the event to. *\/ */
/* for (day = 0; day < days_shown; day++) { */
/* if (start >= day_starts[day] && end <= day_starts[day + 1]) { */
/* Special case for when the appointment ends at
midnight, i.e. the start of the next day. */
if (end == day_starts[day + 1]) {
/* /\* Special case for when the appointment ends at */
/* midnight, i.e. the start of the next day. *\/ */
/* if (end == day_starts[day + 1]) { */
/* If the event last the entire day, then we
skip it here so it gets added to the top
canvas. */
if (start == day_starts[day])
break;
/* /\* If the event last the entire day, then we */
/* skip it here so it gets added to the top */
/* canvas. *\/ */
/* if (start == day_starts[day]) */
/* break; */
event.end_minute = 24 * 60;
}
/* event.end_minute = 24 * 60; */
/* } */
g_array_append_val (events[day], event);
return day;
}
}
/* g_array_append_val (events[day], event); */
/* return day; */
/* } */
/* } */
/* The event wasn't within one day so it must be a long event,
i.e. shown in the top canvas. */
g_array_append_val (long_events, event);
/* /\* The event wasn't within one day so it must be a long event, */
/* i.e. shown in the top canvas. *\/ */
/* g_array_append_val (long_events, event); */
return E_DAY_VIEW_LONG_EVENT;
}
@ -945,7 +945,6 @@ free_event_array (GArray *array)
event = &g_array_index (array, EDayViewEvent, event_num);
if (event->canvas_item)
gtk_object_destroy (GTK_OBJECT (event->canvas_item));
g_object_unref (event->comp);
}
g_array_set_size (array, 0);
@ -958,7 +957,7 @@ print_day_long_event (GnomePrintContext *pc, GnomeFont *font,
double row_height, EDayViewEvent *event,
struct pdinfo *pdi)
{
CalComponentText summary;
const gchar *summary;
double x1, x2, y1, y2;
double left_triangle_width = -1.0, right_triangle_width = -1.0;
char *text;
@ -1023,8 +1022,8 @@ print_day_long_event (GnomePrintContext *pc, GnomeFont *font,
}
/* Print the text. */
cal_component_get_summary (event->comp, &summary);
text = summary.value ? (char*) summary.value : "";
summary = icalcomponent_get_summary (event->comp_data->icalcomp);
text = summary ? (char*) summary : "";
x1 += 4;
x2 -= 4;
@ -1037,7 +1036,7 @@ print_day_event (GnomePrintContext *pc, GnomeFont *font,
double left, double right, double top, double bottom,
EDayViewEvent *event, struct pdinfo *pdi)
{
CalComponentText summary;
const gchar *summary;
double x1, x2, y1, y2, col_width, row_height;
int start_offset, end_offset, start_row, end_row;
char *text, start_buffer[32], end_buffer[32];
@ -1075,8 +1074,8 @@ print_day_event (GnomePrintContext *pc, GnomeFont *font,
print_border (pc, x1, x2, y1, y2, 1.0, 0.95);
cal_component_get_summary (event->comp, &summary);
text = summary.value ? (char*) summary.value : "";
summary = icalcomponent_get_summary (event->comp_data->icalcomp);
text = summary ? (char*) summary : "";
if (display_times) {
@ -1142,7 +1141,7 @@ print_day_details (GnomePrintContext *pc, GnomeCalendar *gcal, time_t whence,
pdi.use_24_hour_format = calendar_config_get_24_hour_format ();
/* Get the events from the server. */
client = gnome_calendar_get_cal_client (gcal);
client = gnome_calendar_get_default_client (gcal);
cal_client_generate_instances (client, CALOBJ_TYPE_EVENT, start, end,
print_day_details_cb, &pdi);
qsort (pdi.long_events->data, pdi.long_events->len,
@ -1239,40 +1238,40 @@ print_week_summary_cb (CalComponent *comp,
gpointer data)
{
icaltimezone *zone = get_timezone ();
EWeekViewEvent event;
struct icaltimetype start_tt, end_tt;
/* icaltimezone *zone = get_timezone (); */
/* EWeekViewEvent event; */
/* struct icaltimetype start_tt, end_tt; */
struct psinfo *psi = (struct psinfo *)data;
/* struct psinfo *psi = (struct psinfo *)data; */
/* Check that the event times are valid. */
/* /\* Check that the event times are valid. *\/ */
#if 0
g_print ("View start:%li end:%li Event start:%li end:%li\n",
psi->day_starts[0], psi->day_starts[psi->days_shown],
start, end);
#endif
/* #if 0 */
/* g_print ("View start:%li end:%li Event start:%li end:%li\n", */
/* psi->day_starts[0], psi->day_starts[psi->days_shown], */
/* start, end); */
/* #endif */
g_return_val_if_fail (start <= end, TRUE);
g_return_val_if_fail (start < psi->day_starts[psi->days_shown], TRUE);
g_return_val_if_fail (end > psi->day_starts[0], TRUE);
/* g_return_val_if_fail (start <= end, TRUE); */
/* g_return_val_if_fail (start < psi->day_starts[psi->days_shown], TRUE); */
/* g_return_val_if_fail (end > psi->day_starts[0], TRUE); */
start_tt = icaltime_from_timet_with_zone (start, FALSE, zone);
end_tt = icaltime_from_timet_with_zone (end, FALSE, zone);
/* start_tt = icaltime_from_timet_with_zone (start, FALSE, zone); */
/* end_tt = icaltime_from_timet_with_zone (end, FALSE, zone); */
event.comp = comp;
g_object_ref (event.comp);
event.start = start;
event.end = end;
event.spans_index = 0;
event.num_spans = 0;
/* event.comp = comp; */
/* g_object_ref (event.comp); */
/* event.start = start; */
/* event.end = end; */
/* event.spans_index = 0; */
/* event.num_spans = 0; */
event.start_minute = start_tt.hour * 60 + start_tt.minute;
event.end_minute = end_tt.hour * 60 + end_tt.minute;
if (event.end_minute == 0 && start != end)
event.end_minute = 24 * 60;
/* event.start_minute = start_tt.hour * 60 + start_tt.minute; */
/* event.end_minute = end_tt.hour * 60 + end_tt.minute; */
/* if (event.end_minute == 0 && start != end) */
/* event.end_minute = 24 * 60; */
g_array_append_val (psi->events, event);
/* g_array_append_val (psi->events, event); */
return TRUE;
}
@ -1404,13 +1403,13 @@ print_week_event (GnomePrintContext *pc, GnomeFont *font,
{
EWeekViewEventSpan *span;
gint span_num;
CalComponentText summary;
const gchar *summary;
char *text;
int num_days, start_x, start_y, start_h, end_x, end_y, end_h;
double x1, x2, y1, y2;
cal_component_get_summary (event->comp, &summary);
text = summary.value ? (char*) summary.value : "";
summary = icalcomponent_get_summary (event->comp_data->icalcomp);
text = summary ? (char*) summary : "";
for (span_num = 0; span_num < event->num_spans; span_num++) {
span = &g_array_index (spans, EWeekViewEventSpan,
@ -1578,7 +1577,7 @@ print_week_summary (GnomePrintContext *pc, GnomeCalendar *gcal,
}
/* Get the events from the server. */
client = gnome_calendar_get_cal_client (gcal);
client = gnome_calendar_get_default_client (gcal);
cal_client_generate_instances (client, CALOBJ_TYPE_EVENT,
psi.day_starts[0],
psi.day_starts[psi.days_shown],
@ -1632,7 +1631,6 @@ print_week_summary (GnomePrintContext *pc, GnomeCalendar *gcal,
/* Free everything. */
for (event_num = 0; event_num < psi.events->len; event_num++) {
event = &g_array_index (psi.events, EWeekViewEvent, event_num);
g_object_unref (event->comp);
}
g_array_free (psi.events, TRUE);
g_array_free (spans, TRUE);