+
+/*
+ * Shows a dialog with an entry that asks for some text. The returned
+ * value must be freed by the caller. The dialog window title will be
+ * set to @title.
+ */
+static gchar *
+ask_for_folder_name (GtkWindow *parent_window,
+ const gchar *title)
+{
+ GtkWidget *dialog, *entry;
+ gchar *folder_name = NULL;
+
+ /* Ask for folder name */
+ dialog = gtk_dialog_new_with_buttons (_("New Folder Name"),
+ parent_window,
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+ gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox),
+ gtk_label_new(title),
+ FALSE, FALSE, 0);
+
+ entry = gtk_entry_new_with_max_length (40);
+ gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox),
+ entry,
+ TRUE, FALSE, 0);
+
+ gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
+
+ if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+ folder_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
+
+ gtk_widget_destroy (dialog);
+
+ return folder_name;
+}
+
+void
+_modest_ui_actions_on_new_folder (GtkWidget *widget,
+ ModestMainWindow *main_window)
+{
+ TnyFolder *parent_folder;
+ ModestFolderView *folder_view;
+
+ folder_view = modest_widget_factory_get_folder_view
+ (modest_runtime_get_widget_factory());
+ parent_folder = modest_folder_view_get_selected (folder_view);
+
+ if (parent_folder) {
+ gchar *folder_name;
+
+ folder_name = ask_for_folder_name (GTK_WINDOW (main_window),
+ _("Please enter a name for the new folder"));
+
+ if (folder_name != NULL && strlen (folder_name) > 0) {
+ TnyFolder *new_folder;
+ ModestMailOperation *mail_op;
+
+ mail_op = modest_mail_operation_new ();
+ new_folder = modest_mail_operation_create_folder (mail_op,
+ TNY_FOLDER_STORE (parent_folder),
+ (const gchar *) folder_name);
+ if (new_folder) {
+ /* Do anything more? The model
+ is automatically updated */
+ g_object_unref (new_folder);
+ }
+ g_object_unref (mail_op);
+ }
+ g_object_unref (parent_folder);
+ }
+}
+
+void
+_modest_ui_actions_on_rename_folder (GtkWidget *widget,
+ ModestMainWindow *main_window)
+{
+ TnyFolder *folder;
+ ModestFolderView *folder_view;
+
+ folder_view = modest_widget_factory_get_folder_view (modest_runtime_get_widget_factory());
+ folder = modest_folder_view_get_selected (folder_view);
+
+ if (folder) {
+ gchar *folder_name;
+
+ folder_name = ask_for_folder_name (GTK_WINDOW (main_window),
+ _("Please enter a new name for the folder"));
+
+ if (folder_name != NULL && strlen (folder_name) > 0) {
+ ModestMailOperation *mail_op;
+
+ mail_op = modest_mail_operation_new ();
+ modest_mail_operation_rename_folder (mail_op,
+ folder,
+ (const gchar *) folder_name);
+ g_object_unref (mail_op);
+ }
+ g_object_unref (folder);
+ }
+}
+
+static void
+delete_folder (ModestMainWindow *main_window,
+ gboolean move_to_trash)
+{
+ TnyFolder *folder;
+ ModestFolderView *folder_view;
+ ModestMailOperation *mail_op;
+
+ folder_view = modest_widget_factory_get_folder_view (modest_runtime_get_widget_factory());
+ folder = modest_folder_view_get_selected (folder_view);
+
+ mail_op = modest_mail_operation_new ();
+ modest_mail_operation_remove_folder (mail_op, folder, move_to_trash);
+ g_object_unref (mail_op);
+}
+
+void
+_modest_ui_actions_on_delete_folder (GtkWidget *widget,
+ ModestMainWindow *main_window)
+{
+ delete_folder (main_window, FALSE);
+}
+
+void
+_modest_ui_actions_on_move_to_trash_folder (GtkWidget *widget,
+ ModestMainWindow *main_window)
+{
+ delete_folder (main_window, TRUE);
+}
+
+static void
+_modest_ui_actions_on_accounts_reloaded (TnyAccountStore *store, gpointer user_data)
+{
+ ModestFolderView *folder_view;
+
+ folder_view = modest_widget_factory_get_folder_view (modest_runtime_get_widget_factory());
+ modest_folder_view_update_model (folder_view, store);
+}