aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/module/e-cal-shell-sidebar.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/module/e-cal-shell-sidebar.c')
-rw-r--r--calendar/module/e-cal-shell-sidebar.c759
1 files changed, 0 insertions, 759 deletions
diff --git a/calendar/module/e-cal-shell-sidebar.c b/calendar/module/e-cal-shell-sidebar.c
deleted file mode 100644
index dc7df596d6..0000000000
--- a/calendar/module/e-cal-shell-sidebar.c
+++ /dev/null
@@ -1,759 +0,0 @@
-/*
- * e-cal-shell-sidebar.c
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#include "e-cal-shell-sidebar.h"
-
-#include <string.h>
-#include <glib/gi18n.h>
-
-#include "e-util/e-error.h"
-#include "e-util/gconf-bridge.h"
-#include "calendar/common/authentication.h"
-#include "calendar/gui/calendar-config.h"
-#include "calendar/gui/e-calendar-selector.h"
-#include "calendar/gui/e-mini-calendar-config.h"
-#include "calendar/gui/misc.h"
-
-#include "e-cal-shell-backend.h"
-#include "e-cal-shell-view.h"
-
-#define E_CAL_SHELL_SIDEBAR_GET_PRIVATE(obj) \
- (G_TYPE_INSTANCE_GET_PRIVATE \
- ((obj), E_TYPE_CAL_SHELL_SIDEBAR, ECalShellSidebarPrivate))
-
-struct _ECalShellSidebarPrivate {
- GtkWidget *paned;
- GtkWidget *selector;
- GtkWidget *mini_calendar;
-
- /* UID -> Client */
- GHashTable *client_table;
-
- EMiniCalendarConfig *mini_calendar_config;
-};
-
-enum {
- PROP_0,
- PROP_MINI_CALENDAR,
- PROP_SELECTOR
-};
-
-enum {
- CLIENT_ADDED,
- CLIENT_REMOVED,
- STATUS_MESSAGE,
- LAST_SIGNAL
-};
-
-static gpointer parent_class;
-static guint signals[LAST_SIGNAL];
-static GType cal_shell_sidebar_type;
-
-static void
-cal_shell_sidebar_emit_client_added (ECalShellSidebar *cal_shell_sidebar,
- ECal *client)
-{
- guint signal_id = signals[CLIENT_ADDED];
-
- g_signal_emit (cal_shell_sidebar, signal_id, 0, client);
-}
-
-static void
-cal_shell_sidebar_emit_client_removed (ECalShellSidebar *cal_shell_sidebar,
- ECal *client)
-{
- guint signal_id = signals[CLIENT_REMOVED];
-
- g_signal_emit (cal_shell_sidebar, signal_id, 0, client);
-}
-
-static void
-cal_shell_sidebar_emit_status_message (ECalShellSidebar *cal_shell_sidebar,
- const gchar *status_message)
-{
- guint signal_id = signals[STATUS_MESSAGE];
-
- g_signal_emit (cal_shell_sidebar, signal_id, 0, status_message);
-}
-
-static void
-cal_shell_sidebar_backend_died_cb (ECalShellSidebar *cal_shell_sidebar,
- ECal *client)
-{
- EShellView *shell_view;
- EShellWindow *shell_window;
- EShellSidebar *shell_sidebar;
- GHashTable *client_table;
- ESource *source;
- const gchar *uid;
-
- client_table = cal_shell_sidebar->priv->client_table;
-
- shell_sidebar = E_SHELL_SIDEBAR (cal_shell_sidebar);
- shell_view = e_shell_sidebar_get_shell_view (shell_sidebar);
- shell_window = e_shell_view_get_shell_window (shell_view);
-
- source = e_cal_get_source (client);
- uid = e_source_peek_uid (source);
-
- g_object_ref (source);
-
- g_hash_table_remove (client_table, uid);
- cal_shell_sidebar_emit_status_message (cal_shell_sidebar, NULL);
-
- e_error_run (
- GTK_WINDOW (shell_window),
- "calendar:calendar-crashed", NULL);
-
- g_object_unref (source);
-}
-
-static void
-cal_shell_sidebar_backend_error_cb (ECalShellSidebar *cal_shell_sidebar,
- const gchar *message,
- ECal *client)
-{
- EShellView *shell_view;
- EShellWindow *shell_window;
- EShellSidebar *shell_sidebar;
- GtkWidget *dialog;
- const gchar *uri;
- gchar *uri_no_passwd;
-
- shell_sidebar = E_SHELL_SIDEBAR (cal_shell_sidebar);
- shell_view = e_shell_sidebar_get_shell_view (shell_sidebar);
- shell_window = e_shell_view_get_shell_window (shell_view);
-
- uri = e_cal_get_uri (client);
- uri_no_passwd = get_uri_without_password (uri);
-
- dialog = gtk_message_dialog_new (
- GTK_WINDOW (shell_window),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
- _("Error on %s\n%s"),
- uri_no_passwd, message);
-
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-
- g_free (uri_no_passwd);
-}
-
-static void
-cal_shell_sidebar_client_opened_cb (ECalShellSidebar *cal_shell_sidebar,
- ECalendarStatus status,
- ECal *client)
-{
- EShellView *shell_view;
- EShellWindow *shell_window;
- EShellSidebar *shell_sidebar;
- ESource *source;
-
- source = e_cal_get_source (client);
-
- shell_sidebar = E_SHELL_SIDEBAR (cal_shell_sidebar);
- shell_view = e_shell_sidebar_get_shell_view (shell_sidebar);
- shell_window = e_shell_view_get_shell_window (shell_view);
-
- if (status == E_CALENDAR_STATUS_AUTHENTICATION_FAILED ||
- status == E_CALENDAR_STATUS_AUTHENTICATION_REQUIRED)
- auth_cal_forget_password (client);
-
- switch (status) {
- case E_CALENDAR_STATUS_OK:
- g_signal_handlers_disconnect_matched (
- client, G_SIGNAL_MATCH_FUNC, 0, 0, NULL,
- cal_shell_sidebar_client_opened_cb, NULL);
-
- cal_shell_sidebar_emit_status_message (
- cal_shell_sidebar, _("Loading calendars"));
- cal_shell_sidebar_emit_client_added (
- cal_shell_sidebar, client);
- cal_shell_sidebar_emit_status_message (
- cal_shell_sidebar, NULL);
- break;
-
- case E_CALENDAR_STATUS_AUTHENTICATION_FAILED:
- e_cal_open_async (client, FALSE);
- break;
-
- case E_CALENDAR_STATUS_BUSY:
- break;
-
- case E_CALENDAR_STATUS_REPOSITORY_OFFLINE:
- e_error_run (
- GTK_WINDOW (shell_window),
- "calendar:prompt-no-contents-offline-calendar",
- NULL);
- break;
-
- default:
- cal_shell_sidebar_emit_client_removed (
- cal_shell_sidebar, client);
- break;
- }
-}
-
-static void
-cal_shell_sidebar_row_changed_cb (ECalShellSidebar *cal_shell_sidebar,
- GtkTreePath *tree_path,
- GtkTreeIter *tree_iter,
- GtkTreeModel *tree_model)
-{
- ESourceSelector *selector;
- ESource *source;
-
- /* XXX ESourceSelector's underlying tree store has only one
- * column: ESource objects. While we're not supposed to
- * know this, listening for "row-changed" signals from
- * the model is easier to deal with than the selector's
- * "selection-changed" signal, which doesn't tell you
- * _which_ row changed. */
-
- selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar);
- gtk_tree_model_get (tree_model, tree_iter, 0, &source, -1);
-
- /* XXX This signal gets emitted a lot while the model is being
- * rebuilt, during which time we won't get a valid ESource.
- * ESourceSelector should probably block this signal while
- * rebuilding the model, but we'll be forgiving and not
- * emit a warning. */
- if (!E_IS_SOURCE (source))
- return;
-
- if (e_source_selector_source_is_selected (selector, source))
- e_cal_shell_sidebar_add_source (cal_shell_sidebar, source);
- else
- e_cal_shell_sidebar_remove_source (cal_shell_sidebar, source);
-}
-
-static void
-cal_shell_sidebar_selection_changed_cb (ECalShellSidebar *cal_shell_sidebar,
- ESourceSelector *selector)
-{
- GSList *list, *iter;
-
- /* This signal is emitted less frequently than "row-changed",
- * especially when the model is being rebuilt. So we'll take
- * it easy on poor GConf. */
-
- list = e_source_selector_get_selection (selector);
-
- for (iter = list; iter != NULL; iter = iter->next) {
- ESource *source = iter->data;
-
- iter->data = (gpointer) e_source_peek_uid (source);
- g_object_unref (source);
- }
-
- calendar_config_set_calendars_selected (list);
-
- g_slist_free (list);
-}
-
-static void
-cal_shell_sidebar_primary_selection_changed_cb (ECalShellSidebar *cal_shell_sidebar,
- ESourceSelector *selector)
-{
- EShell *shell;
- EShellView *shell_view;
- EShellWindow *shell_window;
- EShellSidebar *shell_sidebar;
- EShellSettings *shell_settings;
- ESource *source;
-
- /* XXX ESourceSelector needs a "primary-selection-uid" property
- * so we can just bind the property with GConfBridge. */
-
- source = e_source_selector_peek_primary_selection (selector);
- if (source == NULL)
- return;
-
- shell_sidebar = E_SHELL_SIDEBAR (cal_shell_sidebar);
- shell_view = e_shell_sidebar_get_shell_view (shell_sidebar);
- shell_window = e_shell_view_get_shell_window (shell_view);
-
- shell = e_shell_window_get_shell (shell_window);
- shell_settings = e_shell_get_shell_settings (shell);
-
- e_shell_settings_set_string (
- shell_settings, "cal-primary-calendar",
- e_source_peek_uid (source));
-}
-
-static void
-cal_shell_sidebar_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_MINI_CALENDAR:
- g_value_set_object (
- value, e_cal_shell_sidebar_get_mini_calendar (
- E_CAL_SHELL_SIDEBAR (object)));
- return;
-
- case PROP_SELECTOR:
- g_value_set_object (
- value, e_cal_shell_sidebar_get_selector (
- E_CAL_SHELL_SIDEBAR (object)));
- return;
- }
-
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-cal_shell_sidebar_dispose (GObject *object)
-{
- ECalShellSidebarPrivate *priv;
-
- priv = E_CAL_SHELL_SIDEBAR_GET_PRIVATE (object);
-
- if (priv->paned != NULL) {
- g_object_unref (priv->paned);
- priv->paned = NULL;
- }
-
- if (priv->selector != NULL) {
- g_object_unref (priv->selector);
- priv->selector = NULL;
- }
-
- if (priv->mini_calendar != NULL) {
- g_object_unref (priv->mini_calendar);
- priv->mini_calendar = NULL;
- }
-
- g_hash_table_remove_all (priv->client_table);
-
- if (priv->mini_calendar_config != NULL) {
- g_object_unref (priv->mini_calendar_config);
- priv->mini_calendar = NULL;
- }
-
- /* Chain up to parent's dispose() method. */
- G_OBJECT_CLASS (parent_class)->dispose (object);
-}
-
-static void
-cal_shell_sidebar_finalize (GObject *object)
-{
- ECalShellSidebarPrivate *priv;
-
- priv = E_CAL_SHELL_SIDEBAR_GET_PRIVATE (object);
-
- g_hash_table_destroy (priv->client_table);
-
- /* Chain up to parent's finalize() method. */
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-cal_shell_sidebar_constructed (GObject *object)
-{
- ECalShellSidebarPrivate *priv;
- EShell *shell;
- EShellView *shell_view;
- EShellWindow *shell_window;
- EShellBackend *shell_backend;
- EShellSidebar *shell_sidebar;
- EShellSettings *shell_settings;
- ESourceSelector *selector;
- ESourceList *source_list;
- ESource *source;
- ECalendarItem *calitem;
- GConfBridge *bridge;
- GtkTreeModel *model;
- GtkWidget *container;
- GtkWidget *widget;
- AtkObject *a11y;
- GSList *list, *iter;
- const gchar *key;
- gchar *uid;
-
- priv = E_CAL_SHELL_SIDEBAR_GET_PRIVATE (object);
-
- /* Chain up to parent's constructed() method. */
- G_OBJECT_CLASS (parent_class)->constructed (object);
-
- shell_sidebar = E_SHELL_SIDEBAR (object);
- shell_view = e_shell_sidebar_get_shell_view (shell_sidebar);
- shell_backend = e_shell_view_get_shell_backend (shell_view);
- shell_window = e_shell_view_get_shell_window (shell_view);
-
- shell = e_shell_window_get_shell (shell_window);
- shell_settings = e_shell_get_shell_settings (shell);
-
- source_list = e_cal_shell_backend_get_source_list (
- E_CAL_SHELL_BACKEND (shell_backend));
-
- container = GTK_WIDGET (shell_sidebar);
-
- widget = gtk_vpaned_new ();
- gtk_container_add (GTK_CONTAINER (container), widget);
- priv->paned = g_object_ref (widget);
- gtk_widget_show (widget);
-
- container = widget;
-
- widget = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (
- GTK_SCROLLED_WINDOW (widget),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (
- GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN);
- gtk_paned_add1 (GTK_PANED (container), widget);
- gtk_widget_show (widget);
-
- container = widget;
-
- widget = e_calendar_selector_new (source_list);
- e_source_selector_set_select_new (E_SOURCE_SELECTOR (widget), TRUE);
- gtk_container_add (GTK_CONTAINER (container), widget);
- a11y = gtk_widget_get_accessible (widget);
- atk_object_set_name (a11y, _("Calendar Selector"));
- priv->selector = g_object_ref (widget);
- gtk_widget_show (widget);
-
- container = priv->paned;
-
- widget = e_calendar_new ();
- calitem = E_CALENDAR (widget)->calitem;
- e_calendar_item_set_days_start_week_sel (calitem, 9);
- e_calendar_item_set_max_days_sel (calitem, 42);
- gtk_paned_add2 (GTK_PANED (container), widget);
- priv->mini_calendar = g_object_ref (widget);
- gtk_widget_show (widget);
-
- priv->mini_calendar_config =
- e_mini_calendar_config_new (E_CALENDAR (widget));
-
- /* Restore the selector state from the last session. */
-
- selector = E_SOURCE_SELECTOR (priv->selector);
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (selector));
-
- g_signal_connect_swapped (
- model, "row-changed",
- G_CALLBACK (cal_shell_sidebar_row_changed_cb),
- object);
-
- source = NULL;
- uid = e_shell_settings_get_string (
- shell_settings, "cal-primary-calendar");
- if (uid != NULL)
- source = e_source_list_peek_source_by_uid (source_list, uid);
- if (source == NULL)
- source = e_source_list_peek_source_any (source_list);
- if (source != NULL)
- e_source_selector_set_primary_selection (selector, source);
- g_free (uid);
-
- list = calendar_config_get_calendars_selected ();
- for (iter = list; iter != NULL; iter = iter->next) {
- uid = iter->data;
- source = e_source_list_peek_source_by_uid (source_list, uid);
- g_free (uid);
-
- if (source == NULL)
- continue;
-
- e_source_selector_select_source (selector, source);
- }
- g_slist_free (list);
-
- /* Listen for subsequent changes to the selector. */
-
- g_signal_connect_swapped (
- selector, "selection-changed",
- G_CALLBACK (cal_shell_sidebar_selection_changed_cb),
- object);
-
- g_signal_connect_swapped (
- selector, "primary-selection-changed",
- G_CALLBACK (cal_shell_sidebar_primary_selection_changed_cb),
- object);
-
- /* Bind GObject properties to GConf keys. */
-
- bridge = gconf_bridge_get ();
-
- object = G_OBJECT (priv->paned);
- key = "/apps/evolution/calendar/display/date_navigator_vpane_position";
- gconf_bridge_bind_property_delayed (bridge, key, object, "position");
-}
-
-static void
-cal_shell_sidebar_client_removed (ECalShellSidebar *cal_shell_sidebar,
- ECal *client)
-{
- ESourceSelector *selector;
- GHashTable *client_table;
- ESource *source;
- const gchar *uid;
-
- client_table = cal_shell_sidebar->priv->client_table;
- selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar);
-
- g_signal_handlers_disconnect_matched (
- client, G_SIGNAL_MATCH_DATA, 0, 0,
- NULL, NULL, cal_shell_sidebar);
-
- source = e_cal_get_source (client);
- e_source_selector_unselect_source (selector, source);
-
- uid = e_source_peek_uid (source);
- g_hash_table_remove (client_table, uid);
-
- cal_shell_sidebar_emit_status_message (cal_shell_sidebar, NULL);
-}
-
-static void
-cal_shell_sidebar_class_init (ECalShellSidebarClass *class)
-{
- GObjectClass *object_class;
-
- parent_class = g_type_class_peek_parent (class);
- g_type_class_add_private (class, sizeof (ECalShellSidebarPrivate));
-
- object_class = G_OBJECT_CLASS (class);
- object_class->get_property = cal_shell_sidebar_get_property;
- object_class->dispose = cal_shell_sidebar_dispose;
- object_class->finalize = cal_shell_sidebar_finalize;
- object_class->constructed = cal_shell_sidebar_constructed;
-
- class->client_removed = cal_shell_sidebar_client_removed;
-
- g_object_class_install_property (
- object_class,
- PROP_MINI_CALENDAR,
- g_param_spec_object (
- "mini-calendar",
- _("Mini-Calendar Widget"),
- _("This widget displays a miniature calendar"),
- E_TYPE_CALENDAR,
- G_PARAM_READABLE));
-
- g_object_class_install_property (
- object_class,
- PROP_SELECTOR,
- g_param_spec_object (
- "selector",
- _("Source Selector Widget"),
- _("This widget displays groups of calendars"),
- E_TYPE_SOURCE_SELECTOR,
- G_PARAM_READABLE));
-
- signals[CLIENT_ADDED] = g_signal_new (
- "client-added",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECalShellSidebarClass, client_added),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- E_TYPE_CAL);
-
- signals[CLIENT_REMOVED] = g_signal_new (
- "client-removed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ECalShellSidebarClass, client_removed),
- NULL, NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- E_TYPE_CAL);
-
- signals[STATUS_MESSAGE] = g_signal_new (
- "status-message",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (ECalShellSidebarClass, status_message),
- NULL, NULL,
- g_cclosure_marshal_VOID__STRING,
- G_TYPE_NONE, 1,
- G_TYPE_STRING);
-}
-
-static void
-cal_shell_sidebar_init (ECalShellSidebar *cal_shell_sidebar)
-{
- GHashTable *client_table;
-
- client_table = g_hash_table_new_full (
- g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) g_object_unref);
-
- cal_shell_sidebar->priv =
- E_CAL_SHELL_SIDEBAR_GET_PRIVATE (cal_shell_sidebar);
-
- cal_shell_sidebar->priv->client_table = client_table;
-
- /* Postpone widget construction until we have a shell view. */
-}
-
-GType
-e_cal_shell_sidebar_get_type (void)
-{
- return cal_shell_sidebar_type;
-}
-
-void
-e_cal_shell_sidebar_register_type (GTypeModule *type_module)
-{
- static const GTypeInfo type_info = {
- sizeof (ECalShellSidebarClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) cal_shell_sidebar_class_init,
- (GClassFinalizeFunc) NULL,
- NULL, /* class_data */
- sizeof (ECalShellSidebar),
- 0, /* n_preallocs */
- (GInstanceInitFunc) cal_shell_sidebar_init,
- NULL /* value_table */
- };
-
- cal_shell_sidebar_type = g_type_module_register_type (
- type_module, E_TYPE_SHELL_SIDEBAR,
- "ECalShellSidebar", &type_info, 0);
-}
-
-GtkWidget *
-e_cal_shell_sidebar_new (EShellView *shell_view)
-{
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- return g_object_new (
- E_TYPE_CAL_SHELL_SIDEBAR,
- "shell-view", shell_view, NULL);
-}
-
-GList *
-e_cal_shell_sidebar_get_clients (ECalShellSidebar *cal_shell_sidebar)
-{
- GHashTable *client_table;
-
- g_return_val_if_fail (
- E_IS_CAL_SHELL_SIDEBAR (cal_shell_sidebar), NULL);
-
- client_table = cal_shell_sidebar->priv->client_table;
-
- return g_hash_table_get_values (client_table);
-}
-
-ECalendar *
-e_cal_shell_sidebar_get_mini_calendar (ECalShellSidebar *cal_shell_sidebar)
-{
- g_return_val_if_fail (
- E_IS_CAL_SHELL_SIDEBAR (cal_shell_sidebar), NULL);
-
- return E_CALENDAR (cal_shell_sidebar->priv->mini_calendar);
-}
-
-ESourceSelector *
-e_cal_shell_sidebar_get_selector (ECalShellSidebar *cal_shell_sidebar)
-{
- g_return_val_if_fail (
- E_IS_CAL_SHELL_SIDEBAR (cal_shell_sidebar), NULL);
-
- return E_SOURCE_SELECTOR (cal_shell_sidebar->priv->selector);
-}
-
-void
-e_cal_shell_sidebar_add_source (ECalShellSidebar *cal_shell_sidebar,
- ESource *source)
-{
- ESourceSelector *selector;
- GHashTable *client_table;
- ECal *client;
- const gchar *uid;
- const gchar *uri;
- gchar *message;
-
- g_return_if_fail (E_IS_CAL_SHELL_SIDEBAR (cal_shell_sidebar));
- g_return_if_fail (E_IS_SOURCE (source));
-
- client_table = cal_shell_sidebar->priv->client_table;
- selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar);
-
- uid = e_source_peek_uid (source);
- client = g_hash_table_lookup (client_table, uid);
-
- if (client != NULL)
- return;
-
- client = auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_EVENT);
- g_return_if_fail (client != NULL);
-
- g_signal_connect_swapped (
- client, "backend-died",
- G_CALLBACK (cal_shell_sidebar_backend_died_cb),
- cal_shell_sidebar);
-
- g_signal_connect_swapped (
- client, "backend-error",
- G_CALLBACK (cal_shell_sidebar_backend_error_cb),
- cal_shell_sidebar);
-
- g_hash_table_insert (client_table, g_strdup (uid), client);
- e_source_selector_select_source (selector, source);
-
- uri = e_cal_get_uri (client);
- message = g_strdup_printf (_("Opening calendar at %s"), uri);
- cal_shell_sidebar_emit_status_message (cal_shell_sidebar, message);
- g_free (message);
-
- g_signal_connect_swapped (
- client, "cal-opened",
- G_CALLBACK (cal_shell_sidebar_client_opened_cb),
- cal_shell_sidebar);
-
- e_cal_open_async (client, FALSE);
-}
-
-void
-e_cal_shell_sidebar_remove_source (ECalShellSidebar *cal_shell_sidebar,
- ESource *source)
-{
- ESourceSelector *selector;
- GHashTable *client_table;
- ECal *client;
- const gchar *uid;
-
- g_return_if_fail (E_IS_CAL_SHELL_SIDEBAR (cal_shell_sidebar));
- g_return_if_fail (E_IS_SOURCE (source));
-
- client_table = cal_shell_sidebar->priv->client_table;
- selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar);
-
- uid = e_source_peek_uid (source);
- client = g_hash_table_lookup (client_table, uid);
-
- if (client == NULL)
- return;
-
- cal_shell_sidebar_emit_client_removed (cal_shell_sidebar, client);
-}