Merged from calendar-views-with-model branch
svn path=/trunk/; revision=22308
This commit is contained in:
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
@ -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);
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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!");
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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*
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user