hildon_banner_... changed to modest_platform_...
[modest] / src / widgets / modest-folder-view.c
index 51bfcfc..33ecd49 100644 (file)
@@ -77,6 +77,10 @@ static void         on_account_inserted    (TnyAccountStore *self,
                                            TnyAccount *account,
                                            gpointer user_data);
 
+static void         on_account_changed    (TnyAccountStore *self, 
+                                           TnyAccount *account,
+                                           gpointer user_data);
+
 static gint         cmp_rows               (GtkTreeModel *tree_model, 
                                            GtkTreeIter *iter1, 
                                            GtkTreeIter *iter2,
@@ -120,6 +124,8 @@ static gboolean     on_drag_motion         (GtkWidget      *widget,
                                            guint           time,
                                            gpointer        user_data);
 
+static void expand_root_items (ModestFolderView *self);
+
 static gint         expand_row_timeout     (gpointer data);
 
 static void         setup_drag_and_drop    (GtkTreeView *self);
@@ -152,6 +158,7 @@ struct _ModestFolderViewPrivate {
        gulong                changed_signal;
        gulong                account_inserted_signal;
        gulong                account_removed_signal;
+       gulong                account_changed_signal;
        gulong                conf_key_signal;
        
        /* not unref this object, its a singlenton */
@@ -257,7 +264,8 @@ modest_folder_view_class_init (ModestFolderViewClass *klass)
 }
 
 /* Simplify checks for NULLs: */
-static gboolean strings_are_equal (const gchar *a, const gchar *b)
+static gboolean
+strings_are_equal (const gchar *a, const gchar *b)
 {
        if (!a && !b)
                return TRUE;
@@ -269,7 +277,8 @@ static gboolean strings_are_equal (const gchar *a, const gchar *b)
                return FALSE;
 }
 
-static gboolean on_model_foreach_set_name(GtkTreeModel *model, GtkTreePath *path,  GtkTreeIter *iter, gpointer data)
+static gboolean
+on_model_foreach_set_name(GtkTreeModel *model, GtkTreePath *path,  GtkTreeIter *iter, gpointer data)
 {
        GObject *instance = NULL;
        
@@ -313,7 +322,8 @@ typedef struct
        gchar *previous_name;
 } GetMmcAccountNameData;
 
-static void on_get_mmc_account_name (TnyStoreAccount* account, gpointer user_data)
+static void
+on_get_mmc_account_name (TnyStoreAccount* account, gpointer user_data)
 {
        /* printf ("DEBU1G: %s: account name=%s\n", __FUNCTION__, tny_account_get_name (TNY_ACCOUNT(account))); */
 
@@ -412,8 +422,7 @@ text_cell_data  (GtkTreeViewColumn *column,  GtkCellRenderer *renderer,
                         * added to the model, not when the account is 
                         * changed later, so get the name from the account
                         * instance: */
-                       item_name = g_strdup (tny_account_get_name (
-                               TNY_ACCOUNT (instance)));
+                       item_name = g_strdup (tny_account_get_name (TNY_ACCOUNT (instance)));
                        item_weight = 800;
                } else {
                        item_name = g_strdup (fname);
@@ -695,6 +704,8 @@ modest_folder_view_finalize (GObject *obj)
                                             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;
        }
@@ -760,7 +771,10 @@ modest_folder_view_set_account_store (TnyAccountStoreView *self, TnyAccountStore
                                                   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);
                g_object_unref (G_OBJECT (priv->account_store));
        }
 
@@ -774,11 +788,9 @@ modest_folder_view_set_account_store (TnyAccountStoreView *self, TnyAccountStore
                g_signal_connect (G_OBJECT(account_store), "account_inserted",
                                  G_CALLBACK (on_account_inserted), self);
 
-
-/*     g_signal_connect (G_OBJECT(account_store), "connecting_finished", */
-/*                             G_CALLBACK (on_accounts_reloaded), self); */
-
-/*     on_accounts_reloaded (account_store, (gpointer ) self); */
+       priv->account_changed_signal =
+               g_signal_connect (G_OBJECT(account_store), "account_changed",
+                                 G_CALLBACK (on_account_changed), self);
 
        modest_folder_view_update_model (MODEST_FOLDER_VIEW (self), account_store);
        
@@ -817,6 +829,16 @@ on_account_inserted (TnyAccountStore *account_store,
                         G_OBJECT (account));
 }
 
+
+static void
+on_account_changed (TnyAccountStore *account_store, TnyAccount *tny_account,
+                   gpointer user_data)
+{
+       /* do nothing */
+}
+
+
+
 static void
 on_account_removed (TnyAccountStore *account_store, 
                    TnyAccount *account,
@@ -905,6 +927,9 @@ modest_folder_view_on_map (ModestFolderView *self,
                               signals[FOLDER_DISPLAY_NAME_CHANGED_SIGNAL], 0,
                               NULL);
        }
+
+       expand_root_items (self); 
+
        return FALSE;
 }
 
@@ -1119,7 +1144,7 @@ modest_folder_view_update_model (ModestFolderView *self,
        g_object_unref (model);
        g_object_unref (filter_model);          
        g_object_unref (sortable);
-
+       
        /* Force a reselection of the INBOX next time the widget is shown */
        priv->reselect = TRUE;
                        
@@ -1459,6 +1484,18 @@ tree_path_to_folder (GtkTreeModel *model, GtkTreePath *path)
        return folder;
 }
 
+static void 
+show_banner_move_target_error ()
+{
+       ModestWindow *main_window;
+
+       main_window = modest_window_mgr_get_main_window(
+                       modest_runtime_get_window_mgr());
+                               
+       modest_platform_information_banner(GTK_WIDGET(main_window),
+                       NULL, _("mail_in_ui_folder_move_target_error"));
+}
+
 /*
  * This function is used by drag_data_received_cb to manage drag and
  * drop of a header, i.e, and drag from the header view to the folder
@@ -1475,6 +1512,7 @@ drag_and_drop_from_header_view (GtkTreeModel *source_model,
        TnyFolder *folder = NULL;
        ModestMailOperation *mail_op = NULL;
        GtkTreeIter source_iter;
+       ModestWindowMgr *mgr = NULL;
 
        g_return_if_fail (GTK_IS_TREE_MODEL(source_model));
        g_return_if_fail (GTK_IS_TREE_MODEL(dest_model));
@@ -1491,10 +1529,17 @@ drag_and_drop_from_header_view (GtkTreeModel *source_model,
                goto cleanup;
        }
        
+       /* Check if the selected message is in msg-view. If it is than
+        * do not enable drag&drop on that. */
+       mgr = modest_runtime_get_window_mgr ();
+       if (modest_window_mgr_find_registered_header(mgr, header, NULL))
+               goto cleanup;
+       
        /* Get Folder */
        folder = tree_path_to_folder (dest_model, dest_row);
        if (!TNY_IS_FOLDER(folder)) {
                g_warning ("BUG: %s could not get a valid folder", __FUNCTION__);
+               show_banner_move_target_error();
                goto cleanup;
        }
        if (modest_tny_folder_get_rules(folder) & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE) {
@@ -2111,6 +2156,9 @@ modest_folder_view_select_first_inbox_or_local (ModestFolderView *self)
        /* Select the row and free */
        gtk_tree_view_set_cursor (GTK_TREE_VIEW (self), path, NULL, FALSE);
        gtk_tree_path_free (path);
+
+       /* set focus */
+       gtk_widget_grab_focus (GTK_WIDGET(self));
 }