Changeset 28

Show
Ignore:
Timestamp:
11/01/07 17:52:19
Author:
pvanhoof
Message:
        • Implemented moving messages around
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r26 r28  
    55        * Further refactoring 
    66        * Implemented moving folders around 
     7        * Implemented moving messages around 
    78 
    892007-10-31  Philip Van Hoof  <pvanhoof@gnome.org> 
  • trunk/src/tmut-folder-selector.c

    r27 r28  
    107107                        priv->current = TNY_FOLDER_STORE (g_object_ref (folder)); 
    108108 
     109                        g_object_ref (self); 
    109110                        g_signal_emit (G_OBJECT (self),  
    110111                                tmut_folder_selector_signals [TMUT_FOLDER_SELECTOR_FOLDER_SELECTED], 0); 
    111  
     112                        g_object_unref (self); 
    112113 
    113114                        g_object_unref (folder); 
  • trunk/src/tmut-folder-view.c

    r21 r28  
    1919 
    2020#include "tmut-folder-view.h" 
     21#include "tmut-folder-selector.h" 
    2122#include "tmut-msg-view.h" 
    2223#include "tmut-ringtone-player.h" 
     
    2627#include <tny-folder-monitor.h> 
    2728#include <tny-gtk-header-list-model.h> 
     29#include <tny-simple-list.h> 
    2830 
    2931static GObjectClass *parent_class = NULL; 
     
    3840        TnyFolderObserver *ringtone_player; 
    3941        TMutShellWindow *shell; 
     42        TnyAccountStore *account_store; 
    4043}; 
    4144 
     
    4548 
    4649 
     50static void  
     51status_update (GObject *sender, TnyStatus *status, gpointer user_data) 
     52{ 
     53        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (user_data); 
     54 
     55        if (priv->shell) 
     56                gtk_progress_set_percentage (tmut_shell_window_get_progress (priv->shell),  
     57                                tny_status_get_fraction (status)); 
     58 
     59        return; 
     60} 
     61 
     62 
     63 
     64static void  
     65on_move_done (TnyFolder *folder, gboolean canceled, GError *err, gpointer user_data) 
     66{ 
     67        TMutFolderView *self = TMUT_FOLDER_VIEW (user_data); 
     68        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); 
     69        gchar *msg = ""; 
     70 
     71        if (canceled) 
     72                msg = "User canceled the operation"; 
     73        else if (err) 
     74                msg = err->message; 
     75 
     76        if (err || canceled)  
     77        { 
     78                GtkWidget *dialog = gtk_message_dialog_new ( 
     79                                GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), 
     80                                GTK_DIALOG_DESTROY_WITH_PARENT, 
     81                                GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, msg); 
     82                g_signal_connect_swapped (dialog, "response", 
     83                        G_CALLBACK (gtk_widget_destroy), dialog); 
     84                gtk_widget_show_all (dialog); 
     85        } 
     86 
     87        if (err) 
     88                g_error_free (err); 
     89 
     90        g_object_unref (user_data); 
     91 
     92        return; 
     93} 
     94 
     95typedef struct { 
     96        TMutFolderView *self; 
     97        gboolean delete_originals; 
     98        TnyList *items; 
     99} OnMoveSelectedInfo; 
     100 
     101static void 
     102on_folder_selected_for_move (GtkWidget *widget, gpointer user_data) 
     103{ 
     104        OnMoveSelectedInfo *info = (OnMoveSelectedInfo *) user_data; 
     105        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (info->self); 
     106        TnyFolderStore *into = tmut_folder_selector_get_current (TMUT_FOLDER_SELECTOR (widget)); 
     107 
     108        if (into)  
     109        { 
     110                if (into != (TnyFolderStore *) priv->folder && TNY_IS_FOLDER (into)) 
     111                        tny_folder_transfer_msgs_async (priv->folder,  
     112                                info->items, TNY_FOLDER (into), info->delete_originals, 
     113                                on_move_done, status_update,  
     114                                g_object_ref (info->self)); 
     115 
     116                g_object_unref (into); 
     117        } 
     118 
     119        tmut_shell_window_back (priv->shell); 
     120 
     121        return; 
     122} 
     123 
     124static void 
     125on_folder_selected_for_move_destroy (GtkWidget *widget, gpointer user_data) 
     126{ 
     127        OnMoveSelectedInfo *info = (OnMoveSelectedInfo *) user_data; 
     128 
     129        g_object_unref (info->self); 
     130        g_object_unref (info->items); 
     131 
     132        g_slice_free (OnMoveSelectedInfo, info); 
     133 
     134        return; 
     135} 
     136 
     137void 
     138tmut_folder_view_on_message_move_activated (GObject *sender, TMutFolderView *self) 
     139{ 
     140        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); 
     141        GtkTreeSelection *selection = gtk_tree_view_get_selection (priv->headers_treeview); 
     142        GtkTreeModel *model; 
     143        GtkTreeIter iter; 
     144 
     145        if (gtk_tree_selection_get_selected (selection, &model, &iter))  
     146        { 
     147                TnyHeader *header = NULL; 
     148 
     149                gtk_tree_model_get (model, &iter,  
     150                        TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,  
     151                        &header, -1); 
     152 
     153                if (header)  
     154                { 
     155                        TnyFolder *folder; 
     156                        TMutFolderSelector *view; 
     157                        OnMoveSelectedInfo *info; 
     158                        gboolean del_originals = TRUE; 
     159 
     160                        info = g_slice_new0 (OnMoveSelectedInfo); 
     161                        info->self = TMUT_FOLDER_VIEW (g_object_ref (self)); 
     162                        info->items = tny_simple_list_new (); 
     163 
     164                        tny_list_prepend (info->items, G_OBJECT (header)); 
     165 
     166                        /* TODO: make this choosable */ 
     167                        info->delete_originals = TRUE; 
     168 
     169                        view = tmut_folder_selector_new (); 
     170 
     171                        tny_account_store_view_set_account_store (TNY_ACCOUNT_STORE_VIEW (view),  
     172                                priv->account_store); 
     173 
     174                        g_signal_connect (G_OBJECT (view), "folder-selected", 
     175                                G_CALLBACK (on_folder_selected_for_move), info); 
     176                        g_signal_connect (G_OBJECT (view), "destroy", 
     177                                G_CALLBACK (on_folder_selected_for_move_destroy), info); 
     178                        gtk_widget_show (GTK_WIDGET (view)); 
     179 
     180                        tmut_shell_window_set_child ( 
     181                                tmut_shell_child_get_window (TMUT_SHELL_CHILD (self)),  
     182                                TMUT_SHELL_CHILD (view), "Select destination"); 
     183 
     184                        g_object_unref (folder); 
     185                } 
     186        } 
     187 
     188        return; 
     189} 
     190 
     191 
    47192 
    48193void 
     
    56201} 
    57202 
    58 void 
    59 tmut_folder_view_on_message_move_activated (GObject *sender, TMutFolderView *self) 
    60 { 
    61         TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); 
    62  
    63 g_print ("move message\n"); 
    64  
    65         return; 
    66 } 
    67203 
    68204static void 
     
    111247 
    112248        gtk_box_pack_start (GTK_BOX (self), GTK_WIDGET (menu_button), FALSE, TRUE, 0); 
    113  
    114         return; 
    115 } 
    116  
    117 static void  
    118 status_update (GObject *sender, TnyStatus *status, gpointer user_data) 
    119 { 
    120         TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (user_data); 
    121  
    122         if (priv->shell) 
    123                 gtk_progress_set_percentage (tmut_shell_window_get_progress (priv->shell),  
    124                                 tny_status_get_fraction (status)); 
    125249 
    126250        return; 
     
    252376        GtkWidget *widget, *sw; 
    253377 
     378        priv->account_store = NULL; 
    254379        priv->monitor = NULL; 
    255380        priv->ringtone_player = NULL; 
     
    296421 
    297422        tmut_folder_view_deactivate_folder (priv); 
     423 
     424        if (priv->account_store) 
     425                g_object_unref (priv->account_store); 
    298426 
    299427        if (priv->ringtone_player) 
     
    330458 **/ 
    331459TMutFolderView* 
    332 tmut_folder_view_new (void
     460tmut_folder_view_new (TnyAccountStore *account_store
    333461{ 
    334462        TMutFolderView *self = g_object_new (TMUT_TYPE_FOLDER_VIEW, NULL); 
     463        TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); 
     464 
     465        priv->account_store = TNY_ACCOUNT_STORE (g_object_ref (account_store)); 
    335466 
    336467        return TMUT_FOLDER_VIEW (self); 
  • trunk/src/tmut-folder-view.h

    r21 r28  
    5858 
    5959GType tmut_folder_view_get_type (void); 
    60 TMutFolderView* tmut_folder_view_new (void); 
     60TMutFolderView* tmut_folder_view_new (TnyAccountStore *account_store); 
    6161 
    6262void tmut_folder_view_set_active_folder (TMutFolderView *self, TnyFolder *folder); 
  • trunk/src/tmut-menu-view.c

    r26 r28  
    153153                                &folder, -1); 
    154154                        if (folder) { 
    155                                 TnyFolderStore *into = NULL; 
    156155                                gboolean del_originals = TRUE; 
    157156 
     
    461460                        if (!folder) 
    462461                                return; 
    463                         view = tmut_folder_view_new (); 
     462                        view = tmut_folder_view_new (priv->account_store); 
    464463                        tmut_folder_view_set_active_folder (view, folder); 
    465464                        gtk_widget_show (GTK_WIDGET (view));