From a5ff3fc2f46a52d474c7a4776a29d1fda8cfb0e1 Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Tue, 26 May 2009 18:41:45 +0200 Subject: [PATCH] Moved all the signal handlers to a GSList managed by the ModestSignalMgr --- src/widgets/modest-folder-view.c | 228 ++++++++++++++++---------------------- 1 file changed, 97 insertions(+), 131 deletions(-) diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 848f81a..f5858d2 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -220,13 +220,6 @@ struct _ModestFolderViewPrivate { TnyFolder *folder_to_select; /* folder to select after the next update */ - gulong changed_signal; - gulong account_inserted_signal; - gulong account_removed_signal; - gulong account_changed_signal; - gulong conf_key_signal; - gulong display_name_changed_signal; - /* not unref this object, its a singlenton */ ModestEmailClipboard *clipboard; @@ -253,8 +246,6 @@ struct _ModestFolderViewPrivate { GtkCellRenderer *messages_renderer; - gulong outbox_deleted_handler; - GSList *signal_handlers; GdkColor *active_color; }; @@ -1277,7 +1268,6 @@ modest_folder_view_init (ModestFolderView *obj) priv->visible_account_id = NULL; priv->mailbox = NULL; priv->folder_to_select = NULL; - priv->outbox_deleted_handler = 0; priv->reexpand = TRUE; priv->signal_handlers = 0; @@ -1302,31 +1292,32 @@ modest_folder_view_init (ModestFolderView *obj) setup_drag_and_drop (GTK_TREE_VIEW(obj)); /* Connect signals */ - g_signal_connect (G_OBJECT (obj), - "key-press-event", - G_CALLBACK (on_key_pressed), NULL); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT (obj), "key-press-event", + G_CALLBACK (on_key_pressed), NULL); - priv->display_name_changed_signal = - g_signal_connect (modest_runtime_get_account_mgr (), - "display_name_changed", - G_CALLBACK (on_display_name_changed), - obj); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + (GObject*) modest_runtime_get_account_mgr (), + "display_name_changed", + G_CALLBACK (on_display_name_changed), + obj); /* * Track changes in the local account name (in the device it * will be the device name) */ - priv->conf_key_signal = g_signal_connect (G_OBJECT(conf), - "key_changed", - G_CALLBACK(on_configuration_key_changed), - obj); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT(conf), + "key_changed", + G_CALLBACK(on_configuration_key_changed), + obj); priv->active_color = NULL; update_style (obj); - g_signal_connect (G_OBJECT (obj), "notify::style", G_CALLBACK (on_notify_style), (gpointer) obj); - - + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT (obj), "notify::style", + G_CALLBACK (on_notify_style), (gpointer) obj); } static void @@ -1354,12 +1345,6 @@ modest_folder_view_dispose (GObject *obj) /* Free external references */ if (priv->account_store) { - g_signal_handler_disconnect (G_OBJECT(priv->account_store), - priv->account_inserted_signal); - g_signal_handler_disconnect (G_OBJECT(priv->account_store), - priv->account_removed_signal); - g_signal_handler_disconnect (G_OBJECT(priv->account_store), - priv->account_changed_signal); g_object_unref (G_OBJECT(priv->account_store)); priv->account_store = NULL; } @@ -1389,8 +1374,6 @@ static void modest_folder_view_finalize (GObject *obj) { ModestFolderViewPrivate *priv; - GtkTreeSelection *sel; - TnyAccount *local_account; g_return_if_fail (obj); @@ -1406,37 +1389,10 @@ modest_folder_view_finalize (GObject *obj) priv->timer_expander = 0; } - local_account = (TnyAccount *) - modest_tny_account_store_get_local_folders_account (modest_runtime_get_account_store ()); - if (local_account) { - if (g_signal_handler_is_connected (local_account, - priv->outbox_deleted_handler)) - g_signal_handler_disconnect (local_account, - priv->outbox_deleted_handler); - g_object_unref (local_account); - } - - if (g_signal_handler_is_connected (modest_runtime_get_account_mgr (), - priv->display_name_changed_signal)) { - g_signal_handler_disconnect (modest_runtime_get_account_mgr (), - priv->display_name_changed_signal); - priv->display_name_changed_signal = 0; - } - - sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(obj)); - if (sel) - g_signal_handler_disconnect (G_OBJECT(sel), priv->changed_signal); - g_free (priv->local_account_name); g_free (priv->visible_account_id); g_free (priv->mailbox); - if (priv->conf_key_signal) { - g_signal_handler_disconnect (modest_runtime_get_conf (), - priv->conf_key_signal); - priv->conf_key_signal = 0; - } - /* Clear hidding array created by cut operation */ _clear_hidding_filter (MODEST_FOLDER_VIEW (obj)); @@ -1458,34 +1414,40 @@ modest_folder_view_set_account_store (TnyAccountStoreView *self, TnyAccountStore if (G_UNLIKELY (priv->account_store)) { - if (g_signal_handler_is_connected (G_OBJECT (priv->account_store), - priv->account_inserted_signal)) - g_signal_handler_disconnect (G_OBJECT (priv->account_store), - priv->account_inserted_signal); - if (g_signal_handler_is_connected (G_OBJECT (priv->account_store), - priv->account_removed_signal)) - g_signal_handler_disconnect (G_OBJECT (priv->account_store), - priv->account_removed_signal); - if (g_signal_handler_is_connected (G_OBJECT (priv->account_store), - priv->account_changed_signal)) - g_signal_handler_disconnect (G_OBJECT (priv->account_store), - priv->account_changed_signal); + if (modest_signal_mgr_is_connected (priv->signal_handlers, + G_OBJECT (priv->account_store), + "account_inserted")) + priv->signal_handlers = modest_signal_mgr_disconnect (priv->signal_handlers, + G_OBJECT (priv->account_store), + "account_inserted"); + if (modest_signal_mgr_is_connected (priv->signal_handlers, + G_OBJECT (priv->account_store), + "account_removed")) + priv->signal_handlers = modest_signal_mgr_disconnect (priv->signal_handlers, + G_OBJECT (priv->account_store), + "account_removed"); + if (modest_signal_mgr_is_connected (priv->signal_handlers, + G_OBJECT (priv->account_store), + "account_changed")) + priv->signal_handlers = modest_signal_mgr_disconnect (priv->signal_handlers, + G_OBJECT (priv->account_store), + "account_changed"); g_object_unref (G_OBJECT (priv->account_store)); } priv->account_store = g_object_ref (G_OBJECT (account_store)); - priv->account_removed_signal = - g_signal_connect (G_OBJECT(account_store), "account_removed", - G_CALLBACK (on_account_removed), self); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT(account_store), "account_removed", + G_CALLBACK (on_account_removed), self); - priv->account_inserted_signal = - g_signal_connect (G_OBJECT(account_store), "account_inserted", - G_CALLBACK (on_account_inserted), self); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT(account_store), "account_inserted", + G_CALLBACK (on_account_inserted), self); - priv->account_changed_signal = - g_signal_connect (G_OBJECT(account_store), "account_changed", - G_CALLBACK (on_account_changed), self); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT(account_store), "account_changed", + G_CALLBACK (on_account_changed), self); modest_folder_view_update_model (MODEST_FOLDER_VIEW (self), account_store); priv->reselect = FALSE; @@ -1556,12 +1518,10 @@ on_account_inserted (TnyAccountStore *account_store, for a merge folder */ if (TNY_IS_GTK_FOLDER_LIST_STORE (model) && MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (account)) { - - priv->outbox_deleted_handler = - g_signal_connect (account, - "outbox-deleted", - G_CALLBACK (on_outbox_deleted_cb), - user_data); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + (GObject*) account, "outbox-deleted", + G_CALLBACK (on_outbox_deleted_cb), + user_data); } /* Refilter the model */ @@ -1715,10 +1675,10 @@ on_account_removed (TnyAccountStore *account_store, /* Disconnect the signal handler */ if (TNY_IS_GTK_FOLDER_LIST_STORE (model) && MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (account)) { - if (g_signal_handler_is_connected (account, - priv->outbox_deleted_handler)) - g_signal_handler_disconnect (account, - priv->outbox_deleted_handler); + if (modest_signal_mgr_is_connected (priv->signal_handlers, (GObject*) account, "outbox-deleted")) + priv->signal_handlers = modest_signal_mgr_disconnect (priv->signal_handlers, + (GObject *) account, + "outbox-deleted"); } /* Remove the account from the model */ @@ -1826,12 +1786,17 @@ modest_folder_view_new_full (TnyFolderStoreQuery *query, gboolean do_refresh) priv->do_refresh = do_refresh; sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(self)); - priv->changed_signal = g_signal_connect (sel, "changed", - G_CALLBACK (on_selection_changed), self); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + (GObject*) sel, "changed", + G_CALLBACK (on_selection_changed), self); - g_signal_connect (self, "row-activated", G_CALLBACK (on_row_activated), self); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + self, "row-activated", + G_CALLBACK (on_row_activated), self); - g_signal_connect (self, "expose-event", G_CALLBACK (modest_folder_view_on_map), NULL); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + self, "expose-event", + G_CALLBACK (modest_folder_view_on_map), NULL); return GTK_WIDGET(self); } @@ -2271,7 +2236,7 @@ modest_folder_view_update_model (ModestFolderView *self, { ModestFolderViewPrivate *priv; GtkTreeModel *model; - GtkTreeModel *filter_model = NULL, *sortable = NULL; + GtkTreeModel *filter_model = NULL, *sortable = NULL, *old_tny_model; g_return_val_if_fail (self && MODEST_IS_FOLDER_VIEW (self), FALSE); g_return_val_if_fail (account_store && MODEST_IS_TNY_ACCOUNT_STORE(account_store), @@ -2315,16 +2280,16 @@ modest_folder_view_update_model (ModestFolderView *self, acc_store = modest_runtime_get_account_store (); account = modest_tny_account_store_get_local_folders_account (acc_store); - if (g_signal_handler_is_connected (account, - priv->outbox_deleted_handler)) - g_signal_handler_disconnect (account, - priv->outbox_deleted_handler); + if (modest_signal_mgr_is_connected (priv->signal_handlers, (GObject *) account, + "outbox-deleted")) + priv->signal_handlers = modest_signal_mgr_disconnect (priv->signal_handlers, + (GObject *) account, + "outbox-deleted"); - priv->outbox_deleted_handler = - g_signal_connect (account, - "outbox-deleted", - G_CALLBACK (on_outbox_deleted_cb), - self); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + (GObject*) account, "outbox-deleted", + G_CALLBACK (on_outbox_deleted_cb), + self); g_object_unref (account); } @@ -2348,21 +2313,20 @@ modest_folder_view_update_model (ModestFolderView *self, self, NULL); - if (priv->signal_handlers > 0) { - GtkTreeModel *old_tny_model; - - if (get_inner_models (self, NULL, NULL, &old_tny_model)) { + if (get_inner_models (self, NULL, NULL, &old_tny_model)) { + if (modest_signal_mgr_is_connected (priv->signal_handlers, (GObject *) old_tny_model, + "activity-changed")) priv->signal_handlers = modest_signal_mgr_disconnect (priv->signal_handlers, - G_OBJECT (old_tny_model), + G_OBJECT (old_tny_model), "activity-changed"); - } } /* Set new model */ gtk_tree_view_set_model (GTK_TREE_VIEW(self), filter_model); #ifndef MODEST_TOOLKIT_HILDON2 - g_signal_connect (G_OBJECT(filter_model), "row-inserted", - (GCallback) on_row_inserted_maybe_select_folder, self); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT(filter_model), "row-inserted", + (GCallback) on_row_inserted_maybe_select_folder, self); #endif #ifdef MODEST_TOOLKIT_HILDON2 @@ -3379,16 +3343,19 @@ setup_drag_and_drop (GtkTreeView *self) #ifdef MODEST_TOOLKIT_HILDON2 return; #endif + ModestFolderViewPrivate *priv; + + priv = MODEST_FOLDER_VIEW_GET_PRIVATE (self); + gtk_drag_dest_set (GTK_WIDGET (self), GTK_DEST_DEFAULT_HIGHLIGHT, folder_view_drag_types, G_N_ELEMENTS (folder_view_drag_types), GDK_ACTION_MOVE | GDK_ACTION_COPY); - g_signal_connect (G_OBJECT (self), - "drag_data_received", - G_CALLBACK (on_drag_data_received), - NULL); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT (self), "drag_data_received", + G_CALLBACK (on_drag_data_received), NULL); /* Set up the treeview as a dnd source */ @@ -3398,20 +3365,17 @@ setup_drag_and_drop (GtkTreeView *self) G_N_ELEMENTS (folder_view_drag_types), GDK_ACTION_MOVE | GDK_ACTION_COPY); - g_signal_connect (G_OBJECT (self), - "drag_motion", - G_CALLBACK (on_drag_motion), - NULL); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT (self), "drag_motion", + G_CALLBACK (on_drag_motion), NULL); - g_signal_connect (G_OBJECT (self), - "drag_data_get", - G_CALLBACK (on_drag_data_get), - NULL); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT (self), "drag_data_get", + G_CALLBACK (on_drag_data_get), NULL); - g_signal_connect (G_OBJECT (self), - "drag_drop", - G_CALLBACK (drag_drop_cb), - NULL); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT (self), "drag_drop", + G_CALLBACK (drag_drop_cb), NULL); } /* @@ -3869,8 +3833,10 @@ modest_folder_view_copy_model (ModestFolderView *folder_view_src, /* Set copied model */ gtk_tree_view_set_model (GTK_TREE_VIEW (folder_view_dst), new_filter_model); #ifndef MODEST_TOOLKIT_HILDON2 - g_signal_connect (G_OBJECT(new_filter_model), "row-inserted", - (GCallback) on_row_inserted_maybe_select_folder, folder_view_dst); + priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers, + G_OBJECT(new_filter_model), "row-inserted", + (GCallback) on_row_inserted_maybe_select_folder, + folder_view_dst); #endif #ifdef MODEST_TOOLKIT_HILDON2 if (new_tny_model) { -- 1.7.9.5