aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2013-02-17 04:44:00 +0800
committerMatthew Barnes <mbarnes@redhat.com>2013-02-17 07:57:11 +0800
commit0d8bd54b5867ccdc3e39eb5b912193046eed0c0d (patch)
tree9a43b66998e570522655e385e90e55c8810e9320
parent07ba01818c349ddee71cb8c4e3b45402f57f310e (diff)
downloadgsoc2013-evolution-0d8bd54b5867ccdc3e39eb5b912193046eed0c0d.tar.gz
gsoc2013-evolution-0d8bd54b5867ccdc3e39eb5b912193046eed0c0d.tar.zst
gsoc2013-evolution-0d8bd54b5867ccdc3e39eb5b912193046eed0c0d.zip
ECalShellSidebar: Remove internal client table.
No longer needed, replaced by EClientCache.
-rw-r--r--modules/calendar/e-cal-shell-sidebar.c121
1 files changed, 14 insertions, 107 deletions
diff --git a/modules/calendar/e-cal-shell-sidebar.c b/modules/calendar/e-cal-shell-sidebar.c
index 49245a3c31..fc6c0ddde0 100644
--- a/modules/calendar/e-cal-shell-sidebar.c
+++ b/modules/calendar/e-cal-shell-sidebar.c
@@ -47,9 +47,6 @@ struct _ECalShellSidebarPrivate {
GtkWidget *date_navigator;
GtkWidget *new_calendar_button;
- /* UID -> Client */
- GHashTable *client_table;
-
/* The default client is for ECalModel. It follows the
* sidebar's primary selection, even if the highlighted
* source is not selected. The tricky part is we don't
@@ -142,7 +139,7 @@ cal_shell_sidebar_emit_client_added (ECalShellSidebar *cal_shell_sidebar,
static void
cal_shell_sidebar_emit_client_removed (ECalShellSidebar *cal_shell_sidebar,
- ECalClient *client)
+ EClient *client)
{
guint signal_id = signals[CLIENT_REMOVED];
@@ -175,25 +172,6 @@ cal_shell_sidebar_ref_client_cache (ECalShellSidebar *cal_shell_sidebar)
}
static void
-cal_shell_sidebar_backend_died_cb (ECalShellSidebar *cal_shell_sidebar,
- ECalClient *client)
-{
- GHashTable *client_table;
- ESource *source;
- gchar *uid;
-
- client_table = cal_shell_sidebar->priv->client_table;
-
- source = e_client_get_source (E_CLIENT (client));
- uid = e_source_dup_uid (source);
-
- g_hash_table_remove (client_table, uid);
- cal_shell_sidebar_emit_status_message (cal_shell_sidebar, NULL);
-
- g_free (uid);
-}
-
-static void
cal_shell_sidebar_handle_connect_error (ECalShellSidebar *cal_shell_sidebar,
const gchar *parent_display_name,
const gchar *source_display_name,
@@ -541,26 +519,11 @@ cal_shell_sidebar_dispose (GObject *object)
priv->loading_clients = NULL;
}
- g_hash_table_remove_all (priv->client_table);
-
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (e_cal_shell_sidebar_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 (e_cal_shell_sidebar_parent_class)->finalize (object);
-}
-
-static void
cal_shell_sidebar_constructed (GObject *object)
{
ECalShellSidebarPrivate *priv;
@@ -740,21 +703,11 @@ cal_shell_sidebar_client_removed (ECalShellSidebar *cal_shell_sidebar,
ECalClient *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_client_get_source (E_CLIENT (client));
- uid = e_source_get_uid (source);
- g_hash_table_remove (client_table, uid);
+ selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar);
e_source_selector_unselect_source (selector, source);
cal_shell_sidebar_emit_status_message (cal_shell_sidebar, NULL);
@@ -771,7 +724,6 @@ e_cal_shell_sidebar_class_init (ECalShellSidebarClass *class)
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;
shell_sidebar_class = E_SHELL_SIDEBAR_CLASS (class);
@@ -848,17 +800,9 @@ e_cal_shell_sidebar_class_finalize (ECalShellSidebarClass *class)
static void
e_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;
cal_shell_sidebar->priv->loading_clients = g_cancellable_new ();
/* Postpone widget construction until we have a shell view. */
@@ -925,28 +869,12 @@ e_cal_shell_sidebar_add_client (ECalShellSidebar *cal_shell_sidebar,
{
ESource *source;
ESourceSelector *selector;
- GHashTable *client_table;
const gchar *message;
- const gchar *uid;
g_return_if_fail (E_IS_CAL_SHELL_SIDEBAR (cal_shell_sidebar));
g_return_if_fail (E_IS_CAL_CLIENT (client));
- client_table = cal_shell_sidebar->priv->client_table;
-
source = e_client_get_source (client);
- uid = e_source_get_uid (source);
-
- if (g_hash_table_contains (client_table, uid))
- return;
-
- g_hash_table_insert (
- client_table, g_strdup (uid), g_object_ref (client));
-
- g_signal_connect_swapped (
- client, "backend-died",
- G_CALLBACK (cal_shell_sidebar_backend_died_cb),
- cal_shell_sidebar);
selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar);
e_source_selector_select_source (selector, source);
@@ -963,36 +891,14 @@ e_cal_shell_sidebar_add_source (ECalShellSidebar *cal_shell_sidebar,
{
ESourceSelector *selector;
EClientCache *client_cache;
- GHashTable *client_table;
- EClient *default_client;
const gchar *display_name;
- const gchar *uid;
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;
- default_client = cal_shell_sidebar->priv->default_client;
selector = e_cal_shell_sidebar_get_selector (cal_shell_sidebar);
- uid = e_source_get_uid (source);
-
- if (g_hash_table_contains (client_table, uid))
- return;
-
- if (default_client != NULL) {
- ESource *default_source;
-
- default_source = e_client_get_source (default_client);
-
- if (e_source_equal (source, default_source)) {
- e_cal_shell_sidebar_add_client (
- cal_shell_sidebar, default_client);
- return;
- }
- }
-
e_source_selector_select_source (selector, source);
display_name = e_source_get_display_name (source);
@@ -1017,20 +923,21 @@ void
e_cal_shell_sidebar_remove_source (ECalShellSidebar *cal_shell_sidebar,
ESource *source)
{
- GHashTable *client_table;
- ECalClient *client;
- const gchar *uid;
+ EClientCache *client_cache;
+ EClient *client;
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;
-
- uid = e_source_get_uid (source);
- client = g_hash_table_lookup (client_table, uid);
-
- if (client == NULL)
- return;
+ client_cache =
+ cal_shell_sidebar_ref_client_cache (cal_shell_sidebar);
+ client = e_client_cache_ref_cached_client (
+ client_cache, source, E_SOURCE_EXTENSION_CALENDAR);
+ g_object_unref (client_cache);
- cal_shell_sidebar_emit_client_removed (cal_shell_sidebar, client);
+ if (client != NULL) {
+ cal_shell_sidebar_emit_client_removed (
+ cal_shell_sidebar, client);
+ g_object_unref (client);
+ }
}