* Commented the popup-menu
authorSergio Villar Senin <svillar@igalia.com>
Thu, 1 Mar 2007 15:26:31 +0000 (15:26 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Thu, 1 Mar 2007 15:26:31 +0000 (15:26 +0000)
* Fixed some leaks in the ui actions
* Added TnyFolderMonitor support to the header view

pmo-trunk-r870

src/gtk/modest-main-window.c
src/modest-ui-actions.c
src/modest-widget-memory.c
src/widgets/modest-folder-view.c
src/widgets/modest-header-view.c

index b1a660f..346de74 100644 (file)
@@ -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",
index 24d0376..550e2ba 100644 (file)
@@ -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 
index 81a0fb3..a6b9a1d 100644 (file)
@@ -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;
 }
 
index 74671b0..ca97905 100644 (file)
@@ -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)
index 5d8a0ec..753377a 100644 (file)
@@ -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));
 }