aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/gnome-cal.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/gnome-cal.c')
-rw-r--r--calendar/gui/gnome-cal.c652
1 files changed, 101 insertions, 551 deletions
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index 0bea1e472a..f479f5ba4b 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -44,11 +44,12 @@
#include <libedataserver/e-url.h>
#include <libedataserverui/e-passwords.h>
+#include "shell/e-user-creatable-items-handler.h"
#include <libecal/e-cal-time-util.h>
#include <widgets/menus/gal-view-factory-etable.h>
#include <widgets/menus/gal-view-etable.h>
-#include <widgets/menus/gal-view-instance.h>
#include <widgets/menus/gal-define-views-dialog.h>
+#include "widgets/menus/gal-view-menus.h"
#include "e-util/e-error.h"
#include "e-util/e-util-private.h"
#include "e-comp-editor-registry.h"
@@ -56,6 +57,7 @@
#include "dialogs/event-editor.h"
#include "dialogs/task-editor.h"
#include "comp-util.h"
+#include "e-calendar-marshal.h"
#include "e-cal-model-calendar.h"
#include "e-day-view.h"
#include "e-day-view-config.h"
@@ -67,8 +69,12 @@
#include "e-mini-calendar-config.h"
#include "e-calendar-table-config.h"
#include "e-memo-table-config.h"
+#include "evolution-calendar.h"
#include "gnome-cal.h"
-/*#include "cal-search-bar.h"*/
+#include "calendar-component.h"
+#include "memos-component.h"
+#include "cal-search-bar.h"
+#include "calendar-commands.h"
#include "calendar-config.h"
#include "calendar-view.h"
#include "calendar-view-factory.h"
@@ -80,12 +86,15 @@
#include "e-cal-menu.h"
#include "e-cal-model-tasks.h"
+/* FIXME glib 2.4 and above has this */
+#ifndef G_MAXINT32
+#define G_MAXINT32 ((gint32) 0x7fffffff)
+#endif
+
#define d(x) x
/* Private part of the GnomeCalendar structure */
struct _GnomeCalendarPrivate {
- gpointer shell_view; /* weak pointer */
-
/* The clients for display */
GHashTable *clients[E_CAL_SOURCE_TYPE_LAST];
@@ -110,10 +119,8 @@ struct _GnomeCalendarPrivate {
ECalendar *date_navigator;
EMiniCalendarConfig *date_navigator_config;
GtkWidget *todo;
- ECalendarTableConfig *todo_config;
GtkWidget *memo;
- EMemoTableConfig *memo_config;
GtkWidget *day_view;
GtkWidget *work_week_view;
@@ -121,6 +128,9 @@ struct _GnomeCalendarPrivate {
GtkWidget *month_view;
GtkWidget *list_view;
+ /* Activity */
+ EActivityHandler *activity_handler;
+
/* plugin menu managers */
ECalMenu *calendar_menu;
ECalMenu *taskpad_menu;
@@ -155,9 +165,6 @@ struct _GnomeCalendarPrivate {
/* The signal handler id for our GtkCalendar "day_selected" handler. */
guint day_selected_id;
- /* View instance and menus for the control */
- GalViewInstance *view_instance;
-
/* Our current week start */
int week_start;
@@ -180,10 +187,7 @@ struct _GnomeCalendarPrivate {
ECal *user_created_cal;
};
-enum {
- PROP_0,
- PROP_SHELL_VIEW
-};
+/* Signal IDs */
enum {
DATES_SHOWN_CHANGED,
@@ -200,14 +204,6 @@ enum {
LAST_SIGNAL
};
-/* Used to indicate who has the focus within the calendar view */
-typedef enum {
- FOCUS_CALENDAR,
- FOCUS_TASKPAD,
- FOCUS_MEMOPAD,
- FOCUS_OTHER
-} FocusLocation;
-
static guint gnome_calendar_signals[LAST_SIGNAL];
@@ -277,77 +273,14 @@ message_push (Message *msg)
G_DEFINE_TYPE (GnomeCalendar, gnome_calendar, GTK_TYPE_VBOX)
-static void
-calendar_set_shell_view (GnomeCalendar *calendar,
- EShellView *shell_view)
-{
- g_return_if_fail (calendar->priv->shell_view == NULL);
-
- calendar->priv->shell_view = shell_view;
-
- g_object_add_weak_pointer (
- G_OBJECT (shell_view),
- &calendar->priv->shell_view);
-}
-
-static void
-calendar_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_SHELL_VIEW:
- calendar_set_shell_view (
- GNOME_CALENDAR (object),
- g_value_get_object (value));
- return;
- }
-
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-calendar_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_SHELL_VIEW:
- g_value_set_object (
- value, gnome_calendar_get_shell_view (
- GNOME_CALENDAR (object)));
- return;
- }
-
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
/* Class initialization function for the gnome calendar */
static void
gnome_calendar_class_init (GnomeCalendarClass *class)
{
- GObjectClass *object_class;
- GtkObjectClass *gtk_object_class;
+ GtkObjectClass *object_class;
GtkBindingSet *binding_set;
- object_class = G_OBJECT_CLASS (class);
- object_class->set_property = calendar_set_property;
- object_class->get_property = calendar_get_property;
-
- gtk_object_class = (GtkObjectClass *) class;
-
- g_object_class_install_property (
- object_class,
- PROP_SHELL_VIEW,
- g_param_spec_object (
- "shell-view",
- _("Shell View"),
- NULL,
- E_TYPE_SHELL_VIEW,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
+ object_class = (GtkObjectClass *) class;
gnome_calendar_signals[DATES_SHOWN_CHANGED] =
g_signal_new ("dates_shown_changed",
@@ -422,7 +355,7 @@ gnome_calendar_class_init (GnomeCalendarClass *class)
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GnomeCalendarClass, source_added),
NULL, NULL,
- e_marshal_VOID__INT_OBJECT,
+ e_calendar_marshal_VOID__INT_OBJECT,
G_TYPE_NONE,
2,
G_TYPE_INT, G_TYPE_OBJECT);
@@ -433,7 +366,7 @@ gnome_calendar_class_init (GnomeCalendarClass *class)
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GnomeCalendarClass, source_removed),
NULL, NULL,
- e_marshal_VOID__INT_OBJECT,
+ e_calendar_marshal_VOID__INT_OBJECT,
G_TYPE_NONE,
2,
G_TYPE_INT, G_TYPE_OBJECT);
@@ -460,7 +393,7 @@ gnome_calendar_class_init (GnomeCalendarClass *class)
1,
G_TYPE_INT);
- gtk_object_class->destroy = gnome_calendar_destroy;
+ object_class->destroy = gnome_calendar_destroy;
class->dates_shown_changed = NULL;
class->calendar_selection_changed = NULL;
@@ -775,69 +708,6 @@ get_times_for_views (GnomeCalendar *gcal, GnomeCalendarViewType view_type, time_
}
}
-/* Gets the focus location based on who is the focused widget within the
- * calendar view.
- */
-static FocusLocation
-get_focus_location (GnomeCalendar *gcal)
-{
- GnomeCalendarPrivate *priv;
- ETable *etable, *m_etable;
-
- priv = gcal->priv;
-
- etable = e_calendar_table_get_table (E_CALENDAR_TABLE (priv->todo));
- m_etable = e_memo_table_get_table (E_MEMO_TABLE (priv->memo));
-
- if (GTK_WIDGET_HAS_FOCUS (etable->table_canvas))
- return FOCUS_TASKPAD;
- else if (GTK_WIDGET_HAS_FOCUS (m_etable->table_canvas))
- return FOCUS_MEMOPAD;
- else {
- GtkWidget *widget;
- EDayView *dv;
- EWeekView *wv;
- ECalListView *lv;
-
- widget = gnome_calendar_get_current_view_widget (gcal);
-
- switch (priv->current_view_type) {
- case GNOME_CAL_DAY_VIEW:
- case GNOME_CAL_WORK_WEEK_VIEW:
- dv = E_DAY_VIEW (widget);
-
- if (GTK_WIDGET_HAS_FOCUS (dv->top_canvas)
- || GNOME_CANVAS (dv->top_canvas)->focused_item != NULL
- || GTK_WIDGET_HAS_FOCUS (dv->main_canvas)
- || GNOME_CANVAS (dv->main_canvas)->focused_item != NULL)
- return FOCUS_CALENDAR;
- else
- return FOCUS_OTHER;
-
- case GNOME_CAL_WEEK_VIEW:
- case GNOME_CAL_MONTH_VIEW:
- wv = E_WEEK_VIEW (widget);
-
- if (GTK_WIDGET_HAS_FOCUS (wv->main_canvas)
- || GNOME_CANVAS (wv->main_canvas)->focused_item != NULL)
- return FOCUS_CALENDAR;
- else
- return FOCUS_OTHER;
-
- case GNOME_CAL_LIST_VIEW:
- lv = E_CAL_LIST_VIEW (widget);
-
- if (GTK_WIDGET_HAS_FOCUS (e_table_scrolled_get_table (lv->table_scrolled)))
- return FOCUS_CALENDAR;
- else
- return FOCUS_OTHER;
-
- default:
- g_return_val_if_reached (FOCUS_OTHER);
- }
- }
-}
-
/* Computes the range of time that the date navigator is showing */
static void
get_date_navigator_range (GnomeCalendar *gcal, time_t *start_time, time_t *end_time)
@@ -1006,7 +876,6 @@ update_query (GnomeCalendar *gcal)
static void
set_search_query (GnomeCalendar *gcal, const char *sexp)
{
-#if 0 /* KILL-BONOBO */
GnomeCalendarPrivate *priv;
int i;
time_t start, end;
@@ -1049,7 +918,6 @@ set_search_query (GnomeCalendar *gcal, const char *sexp)
/* Set the query on the task pad */
update_todo_view (gcal);
-#endif
}
/* Returns the current time, for the ECalendarItem. */
@@ -1072,7 +940,6 @@ get_current_time (ECalendarItem *calitem, gpointer data)
return tmp_tm;
}
-#if 0 /* KILL-BONOBO */
/* Callback used when the sexp changes in the calendar search bar */
static void
search_bar_sexp_changed_cb (CalSearchBar *cal_search, const char *sexp, gpointer data)
@@ -1115,7 +982,6 @@ search_bar_category_changed_cb (CalSearchBar *cal_search, const char *category,
model = e_calendar_table_get_model (E_CALENDAR_TABLE (priv->todo));
e_cal_model_set_default_category (model, category);
}
-#endif
static void
view_selection_changed_cb (GtkWidget *view, GnomeCalendar *gcal)
@@ -1123,6 +989,7 @@ view_selection_changed_cb (GtkWidget *view, GnomeCalendar *gcal)
g_signal_emit (gcal, gnome_calendar_signals[CALENDAR_SELECTION_CHANGED], 0);
}
+
/**
* gnome_calendar_emit_user_created_signal
* Emits "user_created" signal on a gcal and use calendar as a store where was event created.
@@ -1319,6 +1186,37 @@ working_days_changed_cb (GConfClient *client, guint id, GConfEntry *entry, gpoin
}
static void
+set_timezone (GnomeCalendar *calendar)
+{
+ GnomeCalendarPrivate *priv;
+ int i;
+
+ priv = calendar->priv;
+
+ priv->zone = calendar_config_get_icaltimezone ();
+
+ for (i = 0; i < E_CAL_SOURCE_TYPE_LAST; i++) {
+ GList *l;
+
+ for (l = priv->clients_list[i]; l != NULL; l = l->next) {
+ ECal *client = l->data;
+
+ if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED)
+ /* FIXME Error checking */
+ e_cal_set_default_timezone (client, priv->zone, NULL);
+ }
+
+ if (priv->default_client[i]
+ && e_cal_get_load_state (priv->default_client[i]) == E_CAL_LOAD_LOADED)
+ /* FIXME Error checking */
+ e_cal_set_default_timezone (priv->default_client[i], priv->zone, NULL);
+ }
+
+ if (priv->views [priv->current_view_type])
+ e_calendar_view_set_timezone (priv->views [priv->current_view_type], priv->zone);
+}
+
+static void
timezone_changed_cb (GConfClient *client, guint id, GConfEntry *entry, gpointer data)
{
GnomeCalendar *calendar = data;
@@ -1550,9 +1448,7 @@ categories_changed_cb (gpointer object, gpointer user_data)
cat_list = g_list_remove (cat_list, cat_list->data);
}
-#if 0 /* KILL-BONOBO */
cal_search_bar_set_categories ((CalSearchBar *)priv->search_bar, cat_array);
-#endif
g_ptr_array_free (cat_array, TRUE);
}
@@ -1561,7 +1457,6 @@ categories_changed_cb (gpointer object, gpointer user_data)
static void
view_progress_cb (ECalModel *model, const char *message, int percent, ECalSourceType type, GnomeCalendar *gcal)
{
-#if 0 /* KILL-BONOBO */
if (type == E_CAL_SOURCE_TYPE_EVENT) {
e_calendar_view_set_status_message (E_CALENDAR_VIEW (gcal->priv->week_view), message, percent);
} else if (type == E_CAL_SOURCE_TYPE_TODO) {
@@ -1569,13 +1464,11 @@ view_progress_cb (ECalModel *model, const char *message, int percent, ECalSource
} else if (type == E_CAL_SOURCE_TYPE_JOURNAL) {
e_memo_table_set_status_message (E_MEMO_TABLE (gcal->priv->memo), message);
}
-#endif
}
static void
view_done_cb (ECalModel *model, ECalendarStatus status, ECalSourceType type, GnomeCalendar *gcal)
{
-#if 0 /* KILL-BONOBO */
if (type == E_CAL_SOURCE_TYPE_EVENT) {
e_calendar_view_set_status_message (E_CALENDAR_VIEW (gcal->priv->week_view), NULL, -1);
} else if (type == E_CAL_SOURCE_TYPE_TODO) {
@@ -1583,7 +1476,7 @@ view_done_cb (ECalModel *model, ECalendarStatus status, ECalSourceType type, Gno
} else if (type == E_CAL_SOURCE_TYPE_JOURNAL) {
e_memo_table_set_status_message (E_MEMO_TABLE (gcal->priv->memo), NULL);
}
-#endif
+
}
GtkWidget *
@@ -1609,14 +1502,12 @@ setup_widgets (GnomeCalendar *gcal)
priv = gcal->priv;
-#if 0 /* KILL-BONOBO */
priv->search_bar = cal_search_bar_new (CAL_SEARCH_CALENDAR_DEFAULT);
g_signal_connect (priv->search_bar, "sexp_changed",
G_CALLBACK (search_bar_sexp_changed_cb), gcal);
g_signal_connect (priv->search_bar, "category_changed",
G_CALLBACK (search_bar_category_changed_cb), gcal);
categories_changed_cb (NULL, gcal);
-#endif
gtk_widget_show (priv->search_bar);
gtk_box_pack_start (GTK_BOX (gcal), priv->search_bar, FALSE, FALSE, 6);
@@ -1676,26 +1567,11 @@ setup_widgets (GnomeCalendar *gcal)
g_free (tmp);
gtk_box_pack_start ((GtkBox *)vbox, label, FALSE, TRUE, 0);
-#if 0 /* KILL-BONOBO */
- priv->todo = e_calendar_table_new ();
- priv->todo_config = e_calendar_table_config_new (E_CALENDAR_TABLE (priv->todo));
- gtk_paned_pack1 (GTK_PANED (priv->vpane), vbox, FALSE, TRUE);
- gtk_box_pack_end ((GtkBox *)vbox, priv->todo, TRUE, TRUE, 0);
-#endif
-
- gtk_widget_show (priv->todo);
gtk_widget_show (label);
gtk_widget_show (vbox);
gtk_widget_show (sep);
-#if 0 /* KILL-BONOBO */
- filename = g_build_filename (calendar_component_peek_config_directory (calendar_component_peek ()),
- "TaskPad", NULL);
- e_calendar_table_load_state (E_CALENDAR_TABLE (priv->todo), filename);
-
update_todo_view (gcal);
- g_free (filename);
-#endif
etable = e_calendar_table_get_table (E_CALENDAR_TABLE (priv->todo));
g_signal_connect (etable->table_canvas, "focus_in_event",
@@ -1804,7 +1680,6 @@ setup_widgets (GnomeCalendar *gcal)
gtk_widget_show (GTK_WIDGET (priv->views[i]));
}
-#if 0 /* KILL-BONOBO */
/* Memo view */
vbox = gtk_vbox_new (FALSE, 0);
label = gtk_label_new (NULL);
@@ -1812,24 +1687,10 @@ setup_widgets (GnomeCalendar *gcal)
gtk_label_set_markup ((GtkLabel *)label, tmp);
g_free (tmp);
gtk_box_pack_start ((GtkBox *)vbox, label, FALSE, TRUE, 0);
- priv->memo = e_memo_table_new ();
- priv->memo_config = e_memo_table_config_new (E_MEMO_TABLE (priv->memo));
- gtk_paned_pack2 (GTK_PANED (priv->vpane), vbox, TRUE, TRUE);
- gtk_box_pack_end ((GtkBox *)vbox, priv->memo, TRUE, TRUE, 0);
-#endif
-
- gtk_widget_show (priv->memo);
gtk_widget_show (label);
gtk_widget_show (vbox);
-#if 0 /* KILL-BONOBO */
- filename = g_build_filename (memos_component_peek_config_directory (memos_component_peek ()),
- "MemoPad", NULL);
- e_memo_table_load_state (E_MEMO_TABLE (priv->memo), filename);
-#endif
-
update_memo_view (gcal);
- g_free (filename);
etable = e_memo_table_get_table (E_MEMO_TABLE (priv->memo));
g_signal_connect (etable->table_canvas, "focus_in_event",
@@ -1871,7 +1732,6 @@ gnome_calendar_init (GnomeCalendar *gcal)
priv->calendar_menu = e_cal_menu_new("org.gnome.evolution.calendar.view");
priv->taskpad_menu = e_cal_menu_new("org.gnome.evolution.calendar.taskpad");
- priv->memopad_menu = e_cal_menu_new ("org.gnome.evolution.calendar.memopad");
priv->dn_queries = NULL;
priv->sexp = g_strdup ("#t"); /* Match all */
@@ -1933,29 +1793,23 @@ gnome_calendar_destroy (GtkObject *object)
priv->configs[i] = NULL;
}
g_object_unref (priv->date_navigator_config);
- g_object_unref (priv->todo_config);
- g_object_unref (priv->memo_config);
for (l = priv->notifications; l; l = l->next)
calendar_config_remove_notification (GPOINTER_TO_UINT (l->data));
g_list_free (priv->notifications);
priv->notifications = NULL;
-#if 0 /* KILL-BONOBO */
/* Save the TaskPad layout. */
filename = g_build_filename (calendar_component_peek_config_directory (calendar_component_peek ()),
"TaskPad", NULL);
e_calendar_table_save_state (E_CALENDAR_TABLE (priv->todo), filename);
g_free (filename);
-#endif
-#if 0 /* KILL-BONOBO */
/* Save the MemoPad layout. */
filename = g_build_filename (memos_component_peek_config_directory (memos_component_peek ()),
"MemoPad", NULL);
e_memo_table_save_state (E_MEMO_TABLE (priv->memo), filename);
g_free (filename);
-#endif
if (priv->dn_queries) {
for (l = priv->dn_queries; l != NULL; l = l->next) {
@@ -1978,21 +1832,11 @@ gnome_calendar_destroy (GtkObject *object)
priv->todo_sexp = NULL;
}
- if (priv->memo_sexp) {
- g_free (priv->memo_sexp);
- priv->memo_sexp = NULL;
- }
-
if (priv->update_timeout) {
g_source_remove (priv->update_timeout);
priv->update_timeout = 0;
}
- if (priv->view_instance) {
- g_object_unref (priv->view_instance);
- priv->view_instance = NULL;
- }
-
if (priv->update_marcus_bains_line_timeout) {
g_source_remove (priv->update_marcus_bains_line_timeout);
priv->update_marcus_bains_line_timeout = 0;
@@ -2452,233 +2296,6 @@ display_view_cb (GalViewInstance *view_instance, GalView *view, gpointer data)
}
-#if 0 /* KILL-BONOBO */
-/**
- * gnome_calendar_setup_view_menus:
- * @gcal: A calendar.
- * @uic: UI controller to use for the menus.
- *
- * Sets up the #GalView menus for a calendar. This function should be called
- * from the Bonobo control activation callback for this calendar. Also, the
- * menus should be discarded using gnome_calendar_discard_view_menus().
- **/
-void
-gnome_calendar_setup_view_menus (GnomeCalendar *gcal, BonoboUIComponent *uic)
-{
- GnomeCalendarPrivate *priv;
- char *path0, *path1, *etspecfile;
- CalendarViewFactory *factory;
- GalViewFactory *gal_factory;
- static GalViewCollection *collection = NULL;
-
- g_return_if_fail (gcal != NULL);
- g_return_if_fail (GNOME_IS_CALENDAR (gcal));
- g_return_if_fail (uic != NULL);
- g_return_if_fail (BONOBO_IS_UI_COMPONENT (uic));
-
- priv = gcal->priv;
-
- g_return_if_fail (priv->view_instance == NULL);
- g_return_if_fail (priv->view_menus == NULL);
-
- /* Create the view instance */
- if (collection == NULL) {
- ETableSpecification *spec;
-
- collection = gal_view_collection_new ();
-
- gal_view_collection_set_title (collection, _("Calendar"));
-
- path0 = g_build_filename (EVOLUTION_GALVIEWSDIR,
- "calendar",
- NULL);
- path1 = g_build_filename (calendar_component_peek_base_directory (calendar_component_peek ()),
- "views", NULL);
- gal_view_collection_set_storage_directories (collection,
- path0,
- path1);
- g_free (path1);
- g_free (path0);
-
- /* Create the views */
-
- factory = calendar_view_factory_new (GNOME_CAL_DAY_VIEW);
- gal_view_collection_add_factory (collection, GAL_VIEW_FACTORY (factory));
- g_object_unref (factory);
-
- factory = calendar_view_factory_new (GNOME_CAL_WORK_WEEK_VIEW);
- gal_view_collection_add_factory (collection, GAL_VIEW_FACTORY (factory));
- g_object_unref (factory);
-
- factory = calendar_view_factory_new (GNOME_CAL_WEEK_VIEW);
- gal_view_collection_add_factory (collection, GAL_VIEW_FACTORY (factory));
- g_object_unref (factory);
-
- factory = calendar_view_factory_new (GNOME_CAL_MONTH_VIEW);
- gal_view_collection_add_factory (collection, GAL_VIEW_FACTORY (factory));
- g_object_unref (factory);
-
- spec = e_table_specification_new ();
- etspecfile = g_build_filename (EVOLUTION_ETSPECDIR,
- "e-cal-list-view.etspec",
- NULL);
- if (!e_table_specification_load_from_file (spec, etspecfile))
- g_error ("Unable to load ETable specification file "
- "for calendar");
- g_free (etspecfile);
- gal_factory = gal_view_factory_etable_new (spec);
- g_object_unref (spec);
- gal_view_collection_add_factory (collection, GAL_VIEW_FACTORY (gal_factory));
- g_object_unref (gal_factory);
-
- /* Load the collection and create the menus */
-
- gal_view_collection_load (collection);
-
- }
-
- priv->view_instance = gal_view_instance_new (collection, NULL);
- priv->view_menus = gal_view_menus_new (priv->view_instance);
- gal_view_menus_apply (priv->view_menus, uic, NULL);
-
- g_signal_connect (priv->view_instance, "display_view", G_CALLBACK (display_view_cb), gcal);
- display_view_cb (priv->view_instance, gal_view_instance_get_current_view (priv->view_instance), gcal);
-}
-#endif
-
-/* This is copied/moved from gal-view-instance, only the calendar uses this for a popup menu */
-static void
-gc_set_view(EPopup *ep, EPopupItem *pitem, void *data)
-{
- GnomeCalendar *gcal = data;
-
- if (pitem->type & E_POPUP_ACTIVE)
- gal_view_instance_set_current_view_id(gcal->priv->view_instance, (char *)pitem->user_data);
-}
-
-static void
-gc_save_custom_view(EPopup *ep, EPopupItem *pitem, void *data)
-{
- GnomeCalendar *gcal = data;
-
- gal_view_instance_save_as(gcal->priv->view_instance);
-}
-
-static void
-gc_define_views_response(GtkWidget *d, int id, GnomeCalendar *gcal)
-{
- if (id == GTK_RESPONSE_OK)
- gal_view_collection_save(gcal->priv->view_instance->collection);
-
- gtk_widget_destroy(d);
-}
-
-static void
-gc_define_views(EPopup *ep, EPopupItem *pitem, void *data)
-{
- GnomeCalendar *gcal = data;
- GtkWidget *dialog = gal_define_views_dialog_new(gcal->priv->view_instance->collection);
-
- g_signal_connect(dialog, "response", G_CALLBACK(gc_define_views_response), data);
- gtk_widget_show(dialog);
-}
-
-static EPopupItem gc_popups[] = {
- /* Code generates the path to fit */
- { E_POPUP_BAR, NULL },
- { E_POPUP_RADIO|E_POPUP_ACTIVE, NULL, N_("_Custom View"), },
- { E_POPUP_ITEM, NULL, N_("_Save Custom View"), gc_save_custom_view },
-
- /* index == 3, when we have non-custom view */
-
- { E_POPUP_BAR, NULL },
- { E_POPUP_ITEM, NULL, N_("_Define Views..."), gc_define_views },
-};
-
-static void
-gc_popup_free (EPopup *ep, GSList *list, void *data)
-{
- while (list) {
- GSList *n = list->next;
- EPopupItem *pitem = list->data;
-
- g_free(pitem->path);
- g_free(pitem->label);
- g_free(pitem->user_data);
- g_free(pitem);
- g_slist_free_1(list);
- list = n;
- }
-}
-
-static void
-gc_popup_free_static (EPopup *ep, GSList *list, void *data)
-{
- while (list) {
- GSList *n = list->next;
- EPopupItem *pitem = list->data;
-
- g_free(pitem->path);
- g_free(pitem);
- g_slist_free_1(list);
- list = n;
- }
-}
-
-void
-gnome_calendar_view_popup_factory (GnomeCalendar *gcal, EPopup *ep, const char *prefix)
-{
- GnomeCalendarPrivate *priv;
- int length;
- int i;
- gboolean found = FALSE;
- char *id;
- GSList *menus = NULL;
- EPopupItem *pitem;
-
- g_return_if_fail (gcal != NULL);
- g_return_if_fail (GNOME_IS_CALENDAR (gcal));
- g_return_if_fail (prefix != NULL);
-
- priv = gcal->priv;
-
- g_return_if_fail (priv->view_instance != NULL);
-
- length = gal_view_collection_get_count(priv->view_instance->collection);
- id = gal_view_instance_get_current_view_id (priv->view_instance);
-
- for (i = 0; i < length; i++) {
- GalViewCollectionItem *item = gal_view_collection_get_view_item(priv->view_instance->collection, i);
-
- pitem = g_malloc0(sizeof(*pitem));
- pitem->type = E_POPUP_RADIO;
- pitem->path = g_strdup_printf("%s/%02d.item", prefix, i);
- pitem->label = g_strdup(item->title);
- pitem->activate = gc_set_view;
- pitem->user_data = g_strdup(item->id);
-
- if (!found && id && !strcmp (id, item->id)) {
- found = TRUE;
- pitem->type |= E_POPUP_ACTIVE;
- }
-
- menus = g_slist_prepend(menus, pitem);
- }
-
- if (menus)
- e_popup_add_items(ep, menus, NULL, gc_popup_free, gcal);
-
- menus = NULL;
- for (i = found?3:0; i<sizeof(gc_popups)/sizeof(gc_popups[0]);i++) {
- pitem = g_malloc0(sizeof(*pitem));
- memcpy(pitem, &gc_popups[i], sizeof(*pitem));
- pitem->path = g_strdup_printf("%s/%02d.item", prefix, i+length);
- menus = g_slist_prepend(menus, pitem);
- }
-
- e_popup_add_items(ep, menus, NULL, gc_popup_free_static, gcal);
-}
-
static void
gnome_calendar_set_pane_positions (GnomeCalendar *gcal)
{
@@ -2740,7 +2357,6 @@ client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar *gcal)
source = e_cal_get_source (ecal);
state = e_cal_get_load_state (ecal);
-#if 0 /* KILL-BONOBO */
switch (source_type) {
case E_CAL_SOURCE_TYPE_EVENT:
e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1);
@@ -2753,7 +2369,6 @@ client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar *gcal)
default:
break;
}
-#endif
if (status == E_CALENDAR_STATUS_AUTHENTICATION_FAILED && source_type == E_CAL_SOURCE_TYPE_EVENT)
auth_cal_forget_password (ecal);
@@ -2801,7 +2416,6 @@ client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar *gcal)
g_signal_handlers_disconnect_matched (ecal, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, client_cal_opened_cb, NULL);
-#if 0 /* KILL-BONOBO */
switch (source_type) {
case E_CAL_SOURCE_TYPE_EVENT :
msg = g_strdup_printf (_("Loading appointments at %s"), e_cal_get_uri (ecal));
@@ -2837,7 +2451,6 @@ client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar *gcal)
default:
g_return_if_reached ();
}
-#endif
}
static void
@@ -2854,7 +2467,6 @@ default_client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar
source = e_cal_get_source (ecal);
state = e_cal_get_load_state (ecal);
-#if 0 /* KILL-BONOBO */
switch (source_type) {
case E_CAL_SOURCE_TYPE_EVENT:
e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1);
@@ -2868,7 +2480,6 @@ default_client_cal_opened_cb (ECal *ecal, ECalendarStatus status, GnomeCalendar
default:
break;
}
-#endif
switch (status) {
case E_CALENDAR_STATUS_OK:
@@ -2936,7 +2547,6 @@ open_ecal (GnomeCalendar *gcal, ECal *cal, gboolean only_if_exists, open_func of
zone = calendar_config_get_icaltimezone ();
e_cal_set_default_timezone (cal, zone, NULL);
-#if 0 /* KILL-BONOBO */
msg = g_strdup_printf (_("Opening %s"), e_cal_get_uri (cal));
switch (e_cal_get_source_type (cal)) {
case E_CAL_SOURCE_TYPE_EVENT :
@@ -2954,7 +2564,6 @@ open_ecal (GnomeCalendar *gcal, ECal *cal, gboolean only_if_exists, open_func of
}
g_free (msg);
-#endif
g_signal_connect (G_OBJECT (cal), "cal_opened", G_CALLBACK (of), gcal);
e_cal_open_async (cal, only_if_exists);
@@ -2962,6 +2571,31 @@ open_ecal (GnomeCalendar *gcal, ECal *cal, gboolean only_if_exists, open_func of
return TRUE;
}
+/* Callback when we get an error message from the backend */
+static void
+backend_error_cb (ECal *client, const char *message, gpointer data)
+{
+ GnomeCalendar *gcal;
+ GtkDialog *dialog;
+ char *uristr;
+
+ gcal = GNOME_CALENDAR (data);
+
+ uristr = get_uri_without_password (e_cal_get_uri (client));
+
+ dialog = GTK_DIALOG (gtk_message_dialog_new (
+ GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal))),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("Error on %s:\n %s"),
+ uristr, message));
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+
+ g_free (uristr);
+}
+
/* Callback when the backend dies */
static void
backend_died_cb (ECal *ecal, gpointer data)
@@ -2984,7 +2618,6 @@ backend_died_cb (ECal *ecal, gpointer data)
priv->clients_list[source_type] = g_list_remove (priv->clients_list[source_type], ecal);
g_hash_table_remove (priv->clients[source_type], e_source_peek_uid (source));
-#if 0 /* KILL-BONOBO */
switch (source_type) {
case E_CAL_SOURCE_TYPE_EVENT:
id = "calendar:calendar-crashed";
@@ -3012,7 +2645,6 @@ backend_died_cb (ECal *ecal, gpointer data)
default:
g_return_if_reached ();
}
-#endif
g_object_unref (source);
@@ -3033,15 +2665,11 @@ gnome_calendar_construct (GnomeCalendar *gcal)
}
GtkWidget *
-gnome_calendar_new (EShellView *shell_view)
+gnome_calendar_new (void)
{
GnomeCalendar *gcal;
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- gcal = g_object_new (
- GNOME_TYPE_CALENDAR,
- "shell-view", shell_view, NULL);
+ gcal = g_object_new (gnome_calendar_get_type (), NULL);
if (!gnome_calendar_construct (gcal)) {
g_message (G_STRLOC ": Could not construct the calendar GUI");
@@ -3052,14 +2680,6 @@ gnome_calendar_new (EShellView *shell_view)
return GTK_WIDGET (gcal);
}
-EShellView *
-gnome_calendar_get_shell_view (GnomeCalendar *calendar)
-{
- g_return_val_if_fail (GNOME_IS_CALENDAR (calendar), NULL);
-
- return calendar->priv->shell_view;
-}
-
/**
* gnome_calendar_get_calendar_model:
* @gcal: A calendar view.
@@ -3362,10 +2982,8 @@ gnome_calendar_new_task (GnomeCalendar *gcal, time_t *dtstart, time_t *dtend)
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomp);
-#if 0 /* KILL-BONOBO */
category = cal_search_bar_get_category (CAL_SEARCH_BAR (priv->search_bar));
e_cal_component_set_categories (comp, category);
-#endif
dt.value = &itt;
dt.tzid = icaltimezone_get_tzid (e_cal_model_get_timezone (model));
@@ -3649,55 +3267,34 @@ gnome_calendar_vpane_resized (GtkWidget *w, GdkEventButton *e, GnomeCalendar *gc
void
gnome_calendar_cut_clipboard (GnomeCalendar *gcal)
{
- GnomeCalendarPrivate *priv;
- FocusLocation location;
+ GtkWidget *widget;
- priv = gcal->priv;
-
- location = get_focus_location (gcal);
+ g_return_if_fail (GNOME_IS_CALENDAR (gcal));
- if (location == FOCUS_CALENDAR) {
- e_calendar_view_cut_clipboard (E_CALENDAR_VIEW (gnome_calendar_get_current_view_widget (gcal)));
- } else if (location == FOCUS_TASKPAD)
- e_calendar_table_cut_clipboard (E_CALENDAR_TABLE (priv->todo));
- else if (location == FOCUS_MEMOPAD)
- e_memo_table_cut_clipboard (E_MEMO_TABLE (priv->memo));
+ widget = gnome_calendar_get_current_view_widget (gcal);
+ e_calendar_view_cut_clipboard (E_CALENDAR_VIEW (widget));
}
void
gnome_calendar_copy_clipboard (GnomeCalendar *gcal)
{
- GnomeCalendarPrivate *priv;
- FocusLocation location;
+ GtkWidget *widget;
- priv = gcal->priv;
-
- location = get_focus_location (gcal);
+ g_return_if_fail (GNOME_IS_CALENDAR (gcal));
- if (location == FOCUS_CALENDAR) {
- e_calendar_view_copy_clipboard (E_CALENDAR_VIEW (gnome_calendar_get_current_view_widget (gcal)));
- } else if (location == FOCUS_TASKPAD)
- e_calendar_table_copy_clipboard (E_CALENDAR_TABLE (priv->todo));
- else if (location == FOCUS_MEMOPAD)
- e_memo_table_copy_clipboard (E_MEMO_TABLE (priv->memo));
+ widget = gnome_calendar_get_current_view_widget (gcal);
+ e_calendar_view_copy_clipboard (E_CALENDAR_VIEW (widget));
}
void
gnome_calendar_paste_clipboard (GnomeCalendar *gcal)
{
- GnomeCalendarPrivate *priv;
- FocusLocation location;
+ GtkWidget *widget;
- priv = gcal->priv;
-
- location = get_focus_location (gcal);
+ g_return_if_fail (GNOME_IS_CALENDAR (gcal));
- if (location == FOCUS_CALENDAR) {
- e_calendar_view_paste_clipboard (E_CALENDAR_VIEW (gnome_calendar_get_current_view_widget (gcal)));
- } else if (location == FOCUS_TASKPAD)
- e_calendar_table_paste_clipboard (E_CALENDAR_TABLE (priv->todo));
- else if (location == FOCUS_MEMOPAD)
- e_memo_table_paste_clipboard (E_MEMO_TABLE (priv->memo));
+ widget = gnome_calendar_get_current_view_widget (gcal);
+ e_calendar_view_paste_clipboard (E_CALENDAR_VIEW (widget));
}
@@ -3759,69 +3356,26 @@ gnome_calendar_get_num_events_selected (GnomeCalendar *gcal)
return retval;
}
-/**
- * gnome_calendar_get_num_tasks_selected:
- * @gcal: A calendar view.
- *
- * Queries the number of tasks that are currently selected in the task pad of a
- * calendar view.
- *
- * Return value: Number of selected tasks.
- **/
-gint
-gnome_calendar_get_num_tasks_selected (GnomeCalendar *gcal)
-{
- GnomeCalendarPrivate *priv;
- ETable *etable;
-
- g_return_val_if_fail (gcal != NULL, -1);
- g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), -1);
-
- priv = gcal->priv;
-
- etable = e_calendar_table_get_table (E_CALENDAR_TABLE (priv->todo));
- return e_table_selected_count (etable);
-}
-
-
void
-gnome_calendar_delete_selection (GnomeCalendar *gcal)
+gnome_calendar_delete_selection (GnomeCalendar *gcal)
{
- GnomeCalendarPrivate *priv;
- FocusLocation location;
- GtkWidget *view;
+ GtkWidget *widget;
g_return_if_fail (GNOME_IS_CALENDAR (gcal));
- priv = gcal->priv;
-
- location = get_focus_location (gcal);
-
- if (location == FOCUS_CALENDAR) {
- view = gnome_calendar_get_current_view_widget (gcal);
-
- e_calendar_view_delete_selected_events (E_CALENDAR_VIEW (view));
- } else if (location == FOCUS_TASKPAD)
- e_calendar_table_delete_selected (E_CALENDAR_TABLE (priv->todo));
- else if (location == FOCUS_MEMOPAD)
- e_memo_table_delete_selected (E_MEMO_TABLE (priv->memo));
+ widget = gnome_calendar_get_current_view_widget (gcal);
+ e_calendar_view_delete_selected_events (E_CALENDAR_VIEW (widget));
}
void
gnome_calendar_delete_selected_occurrence (GnomeCalendar *gcal)
{
- FocusLocation location;
- GtkWidget *view;
+ GtkWidget *widget;
g_return_if_fail (GNOME_IS_CALENDAR (gcal));
- location = get_focus_location (gcal);
-
- if (location == FOCUS_CALENDAR) {
-
- view = gnome_calendar_get_current_view_widget (gcal);
- e_calendar_view_delete_selected_occurrence (E_CALENDAR_VIEW (view));
- }
+ widget = gnome_calendar_get_current_view_widget (gcal);
+ e_calendar_view_delete_selected_occurrence (E_CALENDAR_VIEW (widget));
}
static gboolean
@@ -3854,9 +3408,7 @@ gnome_calendar_purge (GnomeCalendar *gcal, time_t older_than)
" (make-time \"%s\"))",
start, end);
-#if 0 /* KILL-BONOBO */
e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), _("Purging"), -1);
-#endif
/* FIXME Confirm expunge */
for (l = priv->clients_list[E_CAL_SOURCE_TYPE_EVENT]; l != NULL; l = l->next) {
@@ -3914,9 +3466,7 @@ gnome_calendar_purge (GnomeCalendar *gcal, time_t older_than)
g_list_free (objects);
}
-#if 0 /* KILL-BONOBO */
e_calendar_view_set_status_message (E_CALENDAR_VIEW (priv->week_view), NULL, -1);
-#endif
g_free (sexp);
g_free (start);