From 915c00d90d2a73db49dac99e958c6a8417fdb7da Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Thu, 1 Mar 2007 15:26:31 +0000 Subject: [PATCH] * Commented the popup-menu * Fixed some leaks in the ui actions * Added TnyFolderMonitor support to the header view pmo-trunk-r870 --- src/gtk/modest-main-window.c | 4 +-- src/modest-ui-actions.c | 17 +++------- src/modest-widget-memory.c | 3 ++ src/widgets/modest-folder-view.c | 54 ++++++++---------------------- src/widgets/modest-header-view.c | 68 +++++++++++++++++++++++++++++--------- 5 files changed, 74 insertions(+), 72 deletions(-) diff --git a/src/gtk/modest-main-window.c b/src/gtk/modest-main-window.c index b1a660f..346de74 100644 --- a/src/gtk/modest-main-window.c +++ b/src/gtk/modest-main-window.c @@ -386,8 +386,8 @@ connect_signals (ModestMainWindow *self) G_CALLBACK(modest_ui_actions_on_folder_selection_changed), self); g_signal_connect (G_OBJECT(priv->folder_view), "button-press-event", G_CALLBACK (on_folder_view_button_press_event),self); - g_signal_connect (priv->folder_view,"popup-menu", - G_CALLBACK (on_folder_view_button_press_event),self); +/* g_signal_connect (priv->folder_view, "popup-menu", */ +/* G_CALLBACK (on_folder_view_button_press_event),self); */ /* header view */ g_signal_connect (G_OBJECT(priv->header_view), "status_update", diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 24d0376..550e2ba 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -760,20 +760,10 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, gboolean selected, ModestMainWindow *main_window) { -// GtkLabel *folder_info_label; - gchar *txt; + gchar *txt; ModestConf *conf; GtkWidget *header_view; -/* folder_info_label = */ -/* GTK_LABEL (modest_widget_factory_get_folder_info_label */ -/* (modest_runtime_get_widget_factory())); */ - -/* if (!folder) { */ -/* gtk_label_set_label (GTK_LABEL(folder_info_label), ""); */ -/* return; */ -/* } */ - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); header_view = modest_main_window_get_child_widget(main_window, @@ -1186,7 +1176,7 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash) if (!folder_view) return; - folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); + folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); mail_op = modest_mail_operation_new (); modest_mail_operation_remove_folder (mail_op, folder, move_to_trash); @@ -1195,7 +1185,8 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash) if (error) g_warning ("%s\n", error->message); - g_object_unref (mail_op); + g_object_unref (G_OBJECT (mail_op)); + g_object_unref (G_OBJECT (folder)); } void diff --git a/src/modest-widget-memory.c b/src/modest-widget-memory.c index 81a0fb3..a6b9a1d 100644 --- a/src/modest-widget-memory.c +++ b/src/modest-widget-memory.c @@ -265,6 +265,7 @@ save_settings_header_view (ModestConf *conf, ModestHeaderView *header_view, g_free (key); g_string_free (str, TRUE); g_list_free (cols); + g_object_unref (G_OBJECT (folder)); return TRUE; } @@ -324,6 +325,8 @@ restore_settings_header_view (ModestConf *conf, ModestHeaderView *header_view, } g_free (key); + g_object_unref (G_OBJECT (folder)); + return TRUE; } diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 74671b0..ca97905 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -598,8 +598,11 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data) /* folder was _un_selected if true */ if (!gtk_tree_selection_get_selected (sel, &model_sort, &iter_sort)) { - priv->cur_folder = NULL; /* FIXME: need this? */ - gtk_tree_row_reference_free (priv->cur_row); + if (priv->cur_folder) + g_object_unref (priv->cur_folder); + if (priv->cur_row) + gtk_tree_row_reference_free (priv->cur_row); + priv->cur_folder = NULL; priv->cur_row = NULL; return; } @@ -616,19 +619,21 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data) TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &folder, -1); - if (type == TNY_FOLDER_TYPE_ROOT) { + /* If the folder is the same or is a root folder do not notify */ + if ((type == TNY_FOLDER_TYPE_ROOT) || (priv->cur_folder == folder)) { g_object_unref (folder); return; } /* Current folder was unselected */ - g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTION_CHANGED_SIGNAL], 0, - priv->cur_folder, FALSE); + if (priv->cur_folder) { + g_signal_emit (G_OBJECT(tree_view), signals[FOLDER_SELECTION_CHANGED_SIGNAL], 0, + priv->cur_folder, FALSE); + g_object_unref (priv->cur_folder); + } - if (priv->cur_row) { -/* tny_folder_sync (priv->cur_folder, TRUE, NULL); /\* FIXME *\/ */ + if (priv->cur_row) gtk_tree_row_reference_free (priv->cur_row); - } /* New current references */ path = gtk_tree_model_get_path (model_sort, &iter_sort); @@ -637,7 +642,6 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data) /* Frees */ gtk_tree_path_free (path); - g_object_unref (G_OBJECT (folder)); /* New folder has been selected */ g_signal_emit (G_OBJECT(tree_view), @@ -659,38 +663,6 @@ modest_folder_view_get_selected (ModestFolderView *self) return priv->cur_folder; } -/* static gboolean */ -/* get_model_iter (ModestFolderView *self, */ -/* GtkTreeModel **model, */ -/* GtkTreeIter *iter) */ -/* { */ -/* GtkTreeModel *model_sort; */ -/* GtkTreeIter iter_sort; */ -/* GtkTreePath *path; */ -/* ModestFolderViewPrivate *priv; */ - -/* priv = MODEST_FOLDER_VIEW_GET_PRIVATE(self); */ - -/* if (!priv->cur_folder) */ -/* return FALSE; */ - -/* if (!gtk_tree_row_reference_valid (priv->cur_row)) */ -/* return FALSE; */ - -/* model_sort = gtk_tree_view_get_model (GTK_TREE_VIEW (self)); */ -/* *model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (model_sort)); */ - -/* /\* Get path to retrieve iter *\/ */ -/* path = gtk_tree_row_reference_get_path (priv->cur_row); */ -/* if (!gtk_tree_model_get_iter (model_sort, &iter_sort, path)) */ -/* return FALSE; */ - -/* gtk_tree_model_sort_convert_iter_to_child_iter (GTK_TREE_MODEL_SORT (model_sort), */ -/* iter, */ -/* &iter_sort); */ -/* return TRUE; */ -/* } */ - static gint cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2, gpointer user_data) diff --git a/src/widgets/modest-header-view.c b/src/widgets/modest-header-view.c index 5d8a0ec..753377a 100644 --- a/src/widgets/modest-header-view.c +++ b/src/widgets/modest-header-view.c @@ -602,6 +602,40 @@ modest_header_view_get_style (ModestHeaderView *self) return MODEST_HEADER_VIEW_GET_PRIVATE(self)->style; } +/* + * This function sets a sortable model in the header view. It's just + * used for developing purposes, because it only does a + * gtk_tree_view_set_model + */ +static void +modest_header_view_set_model (GtkTreeView *header_view, GtkTreeModel *model) +{ + GtkTreeModel *old_model_sort = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view)); + + if (old_model_sort && GTK_IS_TREE_MODEL_SORT (old_model_sort)) { + GtkTreeModel *old_model; + + old_model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (old_model_sort)); + gtk_tree_view_set_model (header_view, model); + modest_runtime_verify_object_death (old_model, ""); + modest_runtime_verify_object_death (old_model_sort, ""); + } else { + ModestHeaderViewPrivate *priv; + + priv = MODEST_HEADER_VIEW_GET_PRIVATE(header_view); + g_mutex_lock (priv->monitor_lock); + if (priv->monitor) { + tny_folder_monitor_stop (priv->monitor); + g_object_unref (G_OBJECT (priv->monitor)); + priv->monitor = NULL; + } + g_mutex_unlock (priv->monitor_lock); + gtk_tree_view_set_model (header_view, model); + } + + return; +} + static void on_refresh_folder (TnyFolder *folder, gboolean cancelled, @@ -615,24 +649,26 @@ on_refresh_folder (TnyFolder *folder, TnyList *headers; if (cancelled) { - GtkTreeSelection *selection; +/* GtkTreeSelection *selection; */ + +/* selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (user_data)); */ +/* gtk_tree_selection_unselect_all (selection); */ - g_warning ("Operation cancelled %s\n", (*error) ? (*error)->message : "unknown"); + g_warning ("Operation cancelled %s\n", (*error) ? (*error)->message : "unknown"); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (user_data)); - gtk_tree_selection_unselect_all (selection); return; } self = MODEST_HEADER_VIEW(user_data); priv = MODEST_HEADER_VIEW_GET_PRIVATE(self); - headers = TNY_LIST(tny_gtk_header_list_model_new ()); + headers = TNY_LIST (tny_gtk_header_list_model_new ()); tny_gtk_header_list_model_set_folder (TNY_GTK_HEADER_LIST_MODEL(headers), folder, TRUE); sortable = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL(headers)); + g_object_unref (G_OBJECT (headers)); /* install our special sorting functions */ cursor = cols = gtk_tree_view_get_columns (GTK_TREE_VIEW(self)); @@ -641,7 +677,7 @@ on_refresh_folder (TnyFolder *folder, MODEST_HEADER_VIEW_COLUMN)); gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE(sortable), col_id, - (GtkTreeIterCompareFunc)cmp_rows, + (GtkTreeIterCompareFunc) cmp_rows, cursor->data, NULL); cursor = g_list_next(cursor); } @@ -655,13 +691,11 @@ on_refresh_folder (TnyFolder *folder, } priv->monitor = TNY_FOLDER_MONITOR (tny_folder_monitor_new (folder)); tny_folder_monitor_add_list (priv->monitor, TNY_LIST (headers)); - g_object_unref (G_OBJECT (headers)); tny_folder_monitor_start (priv->monitor); - g_mutex_unlock (priv->monitor_lock); /* Set new model */ - gtk_tree_view_set_model (GTK_TREE_VIEW (self), sortable); + modest_header_view_set_model (GTK_TREE_VIEW (self), sortable); g_object_unref (G_OBJECT (sortable)); } @@ -705,25 +739,25 @@ modest_header_view_set_folder (ModestHeaderView *self, TnyFolder *folder) ModestHeaderViewPrivate *priv; priv = MODEST_HEADER_VIEW_GET_PRIVATE(self); - /* Unset the old one */ - if (priv->folder) + if (priv->folder) { g_object_unref (priv->folder); - - priv->folder = folder; + priv->folder = NULL; + } if (folder) { - g_object_ref (priv->folder); + + priv->folder = g_object_ref (folder); tny_folder_refresh_async (folder, on_refresh_folder, on_refresh_folder_status_update, self); - /* no message selected */ + /* no message selected */ g_signal_emit (G_OBJECT(self), signals[HEADER_SELECTED_SIGNAL], 0, NULL); } else { - gtk_tree_view_set_model (GTK_TREE_VIEW (self), NULL); + modest_header_view_set_model (GTK_TREE_VIEW (self), NULL); } } @@ -792,6 +826,8 @@ on_selection_changed (GtkTreeSelection *sel, gpointer user_data) g_signal_emit (G_OBJECT(self), signals[HEADER_SELECTED_SIGNAL], 0, header); + + g_object_unref (G_OBJECT (header)); } -- 1.7.9.5