Changeset 3485

Show
Ignore:
Timestamp:
03/07/08 16:39:39
Author:
jdapena
Message:

* tests/c-demo/tny-demoui-summary-view.c:

Added a simple syntax to provide different parent folders
in rename/copy operation. Now you can provide
paths as "/newfolder", "../another-parent/folder", etc.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r3477 r3485  
     12008-03-07  Jose Dapena Paz  <jdapena@igalia.com> 
     2 
     3        * tests/c-demo/tny-demoui-summary-view.c: 
     4        Added a simple syntax to provide different parent folders 
     5        in rename/copy operation. Now you can provide 
     6        paths as "/newfolder", "../another-parent/folder", etc. 
     7 
    182008-03-06  Alberto Garcia Gonzalez <agarcia@igalia.com> 
    29 
  • trunk/tests/c-demo/tny-demoui-summary-view.c

    r3482 r3485  
    11241124} 
    11251125 
     1126static void 
     1127fetch_folder_store_from_path (const gchar *path, TnyFolder *origin, gchar **name, TnyFolderStore **into) 
     1128{ 
     1129        TnyFolderStore *origin_store; 
     1130        *name = NULL; 
     1131        *into = NULL; 
     1132 
     1133        if (path == NULL || path[0] == '\0') { 
     1134                return; 
     1135        } 
     1136 
     1137        if (path[0] == '/') { 
     1138                origin_store = TNY_FOLDER_STORE (tny_folder_get_account (origin)); 
     1139                path++; 
     1140        } else { 
     1141                origin_store = tny_folder_get_folder_store (origin); 
     1142        } 
     1143 
     1144        while (*path != '\0') { 
     1145                char *slash_pos; 
     1146                if (strncmp (path, "../", 3)== 0) { 
     1147                        if (!TNY_IS_ACCOUNT (origin_store)) { 
     1148                                TnyFolderStore *tmp; 
     1149                                tmp = tny_folder_get_folder_store (TNY_FOLDER (origin_store)); 
     1150                                if (tmp) { 
     1151                                        g_object_unref (origin_store); 
     1152                                        origin_store = tmp; 
     1153                                } 
     1154                        } 
     1155                        path += 3; 
     1156                } else if ((slash_pos = strstr (path, "/")) != NULL) { 
     1157                        TnyFolderStoreQuery *query; 
     1158                        TnyList *list; 
     1159                        gchar *folder_name; 
     1160                         
     1161                        query = tny_folder_store_query_new (); 
     1162                        folder_name = g_strndup (path, slash_pos - path); 
     1163                        tny_folder_store_query_add_item (query, folder_name, TNY_FOLDER_STORE_QUERY_OPTION_MATCH_ON_NAME); 
     1164                        g_free (folder_name); 
     1165                        list = tny_simple_list_new (); 
     1166                        tny_folder_store_get_folders (origin_store, list, query, NULL); 
     1167                        g_object_unref (query); 
     1168                        if (tny_list_get_length (list) == 1) { 
     1169                                TnyIterator *iter; 
     1170                                TnyFolderStore *tmp; 
     1171                                iter = tny_list_create_iterator (list); 
     1172                                tmp = TNY_FOLDER_STORE (tny_iterator_get_current (iter)); 
     1173                                g_object_unref (origin_store); 
     1174                                origin_store = tmp; 
     1175                                g_object_unref (iter); 
     1176                        } 
     1177                        g_object_unref (list); 
     1178                        path = slash_pos + 1; 
     1179                } else { 
     1180                        *name = g_strdup (path); 
     1181                        *into = origin_store; 
     1182                        break; 
     1183                } 
     1184        } 
     1185} 
     1186 
    11261187static void  
    11271188on_rename_folder_activate (GtkMenuItem *mitem, gpointer user_data) 
     
    11751236                                        gboolean move = (result == GTK_RESPONSE_ACCEPT); 
    11761237                                        GError *err = NULL; 
    1177                                         const gchar *newname = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); 
     1238                                        gchar *entry_value = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); 
     1239                                        gchar *new_name; 
    11781240                                        TnyFolderStore *into; 
    11791241 
    11801242                                        clear_header_view (priv); 
    11811243 
    1182                                         into = tny_folder_get_folder_store (folder); 
     1244                                         
     1245                                        fetch_folder_store_from_path (entry_value, folder, &new_name, &into); 
    11831246 
    11841247                                        gtk_widget_destroy (dialog); 
    11851248                                        dialog = NULL; 
    11861249 
    1187                                         tny_folder_copy_async (folder, into, newname, move,  
    1188                                                 on_rename, NULL, g_object_ref (self)); 
    1189  
    1190                                         g_free (newname); 
     1250                                        if (new_name != NULL) { 
     1251 
     1252                                                tny_folder_copy_async (folder, into, new_name, move,  
     1253                                                                       on_rename, NULL, g_object_ref (self)); 
     1254 
     1255                                                g_free (new_name); 
     1256                                        } 
    11911257 
    11921258                                        if (into)