static void modest_folder_view_class_init (ModestFolderViewClass *klass);
static void modest_folder_view_init (ModestFolderView *obj);
static void modest_folder_view_finalize (GObject *obj);
+static void modest_folder_view_dispose (GObject *obj);
static void tny_account_store_view_init (gpointer g,
gpointer iface_data);
GtkTreeModel **sort_model,
GtkTreeModel **tny_model);
#ifdef MODEST_TOOLKIT_HILDON2
-static void
-on_activity_changed (TnyGtkFolderListStore *store,
- gboolean activity,
- ModestFolderView *folder_view);
+static void on_activity_changed (TnyGtkFolderListStore *store,
+ gboolean activity,
+ ModestFolderView *folder_view);
#endif
enum {
gulong outbox_deleted_handler;
- guint activity_changed_handler;
+ GSList *signal_handlers;
GdkColor *active_color;
};
#define MODEST_FOLDER_VIEW_GET_PRIVATE(o) \
parent_class = g_type_class_peek_parent (klass);
gobject_class->finalize = modest_folder_view_finalize;
+ gobject_class->finalize = modest_folder_view_dispose;
g_type_class_add_private (gobject_class,
sizeof(ModestFolderViewPrivate));
priv->folder_to_select = NULL;
priv->outbox_deleted_handler = 0;
priv->reexpand = TRUE;
- priv->activity_changed_handler = 0;
+ priv->signal_handlers = 0;
/* Initialize the local account name */
conf = modest_runtime_get_conf();
}
static void
+modest_folder_view_dispose (GObject *obj)
+{
+ static gboolean disposed = FALSE;
+ ModestFolderViewPrivate *priv;
+
+ if (disposed)
+ return;
+
+ priv = MODEST_FOLDER_VIEW_GET_PRIVATE (obj);
+
+#ifdef MODEST_TOOLKIT_HILDON2
+ modest_signal_mgr_disconnect_all_and_destroy (priv->signal_handlers);
+#endif
+
+ /* 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;
+ }
+
+ if (priv->query) {
+ g_object_unref (G_OBJECT (priv->query));
+ priv->query = NULL;
+ }
+
+ if (priv->folder_to_select) {
+ g_object_unref (G_OBJECT(priv->folder_to_select));
+ priv->folder_to_select = NULL;
+ }
+
+ if (priv->cur_folder_store) {
+ g_object_unref (priv->cur_folder_store);
+ priv->cur_folder_store = NULL;
+ }
+
+ if (priv->list_to_move) {
+ g_object_unref (priv->list_to_move);
+ priv->list_to_move = NULL;
+ }
+}
+
+static void
modest_folder_view_finalize (GObject *obj)
{
ModestFolderViewPrivate *priv;
g_object_unref (local_account);
}
- 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;
- }
-
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 = 0;
}
-#ifdef MODEST_TOOLKIT_HILDON2
- GtkTreeModel *tny_model;
-
- if (get_inner_models (MODEST_FOLDER_VIEW (obj), NULL, NULL, &tny_model)) {
- if (g_signal_handler_is_connected (tny_model,
- priv->activity_changed_handler)) {
- g_signal_handler_disconnect (tny_model,
- priv->activity_changed_handler);
- priv->activity_changed_handler = 0;
- }
- }
-#endif
-
- if (priv->query) {
- g_object_unref (G_OBJECT (priv->query));
- priv->query = NULL;
- }
-
- if (priv->folder_to_select) {
- g_object_unref (G_OBJECT(priv->folder_to_select));
- priv->folder_to_select = NULL;
- }
-
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(obj));
if (sel)
g_signal_handler_disconnect (G_OBJECT(sel), priv->changed_signal);
priv->conf_key_signal = 0;
}
- if (priv->cur_folder_store) {
- g_object_unref (priv->cur_folder_store);
- priv->cur_folder_store = NULL;
- }
-
- if (priv->list_to_move) {
- g_object_unref (priv->list_to_move);
- priv->list_to_move = NULL;
- }
-
/* Clear hidding array created by cut operation */
_clear_hidding_filter (MODEST_FOLDER_VIEW (obj));
self,
NULL);
- if (priv->activity_changed_handler > 0) {
+ if (priv->signal_handlers > 0) {
GtkTreeModel *old_tny_model;
if (get_inner_models (self, NULL, NULL, &old_tny_model)) {
- g_signal_handler_disconnect (G_OBJECT (old_tny_model), priv->activity_changed_handler);
+ priv->signal_handlers = modest_signal_mgr_disconnect (priv->signal_handlers,
+ G_OBJECT (old_tny_model),
+ "activity-changed");
}
- priv->activity_changed_handler = 0;
}
/* Set new model */
#endif
#ifdef MODEST_TOOLKIT_HILDON2
- priv->activity_changed_handler =
- g_signal_connect (G_OBJECT (model), "activity-changed", G_CALLBACK (on_activity_changed), self);
+ priv->signal_handlers = modest_signal_mgr_connect (priv->signal_handlers,
+ G_OBJECT (model),
+ "activity-changed",
+ G_CALLBACK (on_activity_changed),
+ self);
#endif
g_object_unref (model);
/* Get src model*/
if (get_inner_models (folder_view_dst, NULL, NULL, &old_tny_model)) {
- g_signal_handler_disconnect (G_OBJECT (old_tny_model), dst_priv->activity_changed_handler);
- dst_priv->activity_changed_handler = 0;
+ modest_signal_mgr_disconnect (dst_priv->signal_handlers,
+ G_OBJECT (old_tny_model),
+ "activity-changed");
}
filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view_src));
model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER(filter_model));
(GCallback) on_row_inserted_maybe_select_folder, folder_view_dst);
#endif
#ifdef MODEST_TOOLKIT_HILDON2
- if (new_tny_model)
- dst_priv->activity_changed_handler = g_signal_connect (G_OBJECT (new_tny_model), "activity-changed",
- G_CALLBACK (on_activity_changed), folder_view_dst);
+ if (new_tny_model) {
+ dst_priv->signal_handlers = modest_signal_mgr_connect (dst_priv->signal_handlers,
+ G_OBJECT (new_tny_model),
+ "activity-changed",
+ G_CALLBACK (on_activity_changed),
+ folder_view_dst);
+ }
#endif
/* Free */