Changeset 26

Show
Ignore:
Timestamp:
11/01/07 15:01:03
Author:
pvanhoof
Message:
        • Implemented moving folders around
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r25 r26  
    44        * Implementation of copy&move and delete of folders 
    55        * Further refactoring 
     6        * Implemented moving folders around 
    67 
    782007-10-31  Philip Van Hoof  <pvanhoof@gnome.org> 
  • trunk/src/Makefile.am

    r12 r26  
    1010        tmut-folder-view.c \ 
    1111        tmut-folder-view.h \ 
     12        tmut-folder-selector.c \ 
     13        tmut-folder-selector.h \ 
    1214        tmut-msg-view.c \ 
    1315        tmut-msg-view.h \ 
  • trunk/src/tmut-menu-view.c

    r25 r26  
    2020#include "tmut-menu-view.h" 
    2121#include "tmut-folder-view.h" 
     22#include "tmut-folder-selector.h" 
    2223#include "tmut-shell-window.h" 
    2324#include "tmut-shell-child.h" 
     
    3334{ 
    3435        GtkTreeView *folders_treeview; 
    35         GtkButton *newmsg_button; 
    3636        GtkComboBox *accounts_combo; 
    3737        TMutShellWindow *shell; 
     38        TnyAccountStore *account_store; 
    3839}; 
    3940 
     
    5960        TMutMenuView *self = TMUT_MENU_VIEW (user_data); 
    6061        TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (self); 
    61         gchar *msg = err->message
     62        gchar *msg = ""
    6263 
    6364        if (canceled) 
    6465                msg = "User canceled the operation"; 
     66        else if (err) 
     67                msg = err->message; 
     68 
    6569        if (err || canceled)  
    6670        { 
     
    8286} 
    8387 
     88typedef struct { 
     89        TnyFolder *from; 
     90        TMutMenuView *self; 
     91        gboolean del_originals; 
     92} OnMoveSelectedInfo; 
     93 
     94static void 
     95on_folder_selected_for_move (GtkWidget *widget, gpointer user_data) 
     96{ 
     97        OnMoveSelectedInfo *info = (OnMoveSelectedInfo *) user_data; 
     98        TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (info->self); 
     99        TnyFolderStore *into = tmut_folder_selector_get_current (TMUT_FOLDER_SELECTOR (widget)); 
     100 
     101        if (into)  
     102        { 
     103                if (into != (TnyFolderStore *) info->from) 
     104                        tny_folder_copy_async (info->from, into,  
     105                                tny_folder_get_name (info->from),  
     106                                info->del_originals, on_copy_done,  
     107                                status_update, 
     108                                g_object_ref (info->self)); 
     109 
     110                g_object_unref (into); 
     111        } 
     112 
     113        tmut_shell_window_back (priv->shell); 
     114 
     115        return; 
     116} 
     117 
     118static void 
     119on_folder_selected_for_move_destroy (GtkWidget *widget, gpointer user_data) 
     120{ 
     121        OnMoveSelectedInfo *info = (OnMoveSelectedInfo *) user_data; 
     122 
     123        g_object_unref (info->from); 
     124        g_object_unref (info->self); 
     125        g_slice_free (OnMoveSelectedInfo, info); 
     126 
     127        return; 
     128} 
     129 
    84130void 
    85131tmut_menu_view_on_folder_move_activated (GObject *sender, TMutMenuView *self) 
     
    100146                { 
    101147                        TnyFolder *folder; 
    102                         TMutFolderView *view; 
     148                        TMutFolderSelector *view; 
     149                        OnMoveSelectedInfo *info; 
    103150 
    104151                        gtk_tree_model_get (model, &iter,  
     
    109156                                gboolean del_originals = TRUE; 
    110157 
    111                                 /* Select destination folder */ 
    112  
    113                                 if (into) 
    114                                         tny_folder_copy_async (folder, into,  
    115                                                 tny_folder_get_name (folder),  
    116                                                 del_originals, on_copy_done, status_update, 
    117                                                 g_object_ref (self)); 
     158                                info = g_slice_new0 (OnMoveSelectedInfo); 
     159                                info->self = TMUT_MENU_VIEW (g_object_ref (self)); 
     160                                info->from = TNY_FOLDER (g_object_ref (folder)); 
     161 
     162                                /* TODO: make this choosable */ 
     163                                info->del_originals = TRUE; 
     164 
     165                                view = tmut_folder_selector_new (); 
     166                                tny_account_store_view_set_account_store (TNY_ACCOUNT_STORE_VIEW (view), priv->account_store); 
     167 
     168                                g_signal_connect (G_OBJECT (view), "folder-selected", 
     169                                        G_CALLBACK (on_folder_selected_for_move), info); 
     170                                g_signal_connect (G_OBJECT (view), "destroy", 
     171                                        G_CALLBACK (on_folder_selected_for_move_destroy), info); 
     172                                gtk_widget_show (GTK_WIDGET (view)); 
     173 
     174                                tmut_shell_window_set_child ( 
     175                                        tmut_shell_child_get_window (TMUT_SHELL_CHILD (self)),  
     176                                        TMUT_SHELL_CHILD (view), "Select destination"); 
    118177 
    119178                                g_object_unref (folder); 
     
    369428        gtk_combo_box_set_active (priv->accounts_combo, 0); 
    370429 
     430        if (priv->account_store) 
     431                g_object_unref (priv->account_store); 
     432        priv->account_store = TNY_ACCOUNT_STORE (g_object_ref (account_store)); 
     433 
    371434        return; 
    372435} 
     
    421484        GtkTreeViewColumn *column; 
    422485        GtkTreeSelection *select; 
    423         GtkWidget *widget, *sw; 
    424  
     486        GtkWidget *sw; 
     487 
     488        priv->account_store = NULL; 
    425489        priv->accounts_combo = GTK_COMBO_BOX (gtk_combo_box_new ()); 
    426490        gtk_widget_show (GTK_WIDGET (priv->accounts_combo)); 
     
    469533        TMutMenuViewPriv *priv = TMUT_MENU_VIEW_GET_PRIVATE (object); 
    470534 
     535        if (priv->account_store) 
     536                g_object_unref (priv->account_store); 
     537 
    471538        (*parent_class->finalize) (object); 
    472539