We can't use a uri to do a lookup of a store-info on the store_hash, we
2003-11-14 Jeffrey Stedfast <fejj@ximian.com> * em-folder-tree.c (emft_popup_new_folder_response): We can't use a uri to do a lookup of a store-info on the store_hash, we have to get a CamelStore first. (row_draggable_cb): validate the iter before using it. (row_drop_possible_cb): Same. (drag_data_received_cb): Here too. (drag_data_get_cb): Same. (drag_data_delete_cb): Again here. (tree_store_set_folder_info): Recursively add nodes if fi->child is non-NULL rather than adding a dummy node. (folder_renamed_cb): Implemented. svn path=/trunk/; revision=23367
This commit is contained in:

committed by
Jeffrey Stedfast

parent
c02fe8b8c2
commit
83c14461d1
@ -8,6 +8,9 @@
|
||||
(drag_data_received_cb): Here too.
|
||||
(drag_data_get_cb): Same.
|
||||
(drag_data_delete_cb): Again here.
|
||||
(tree_store_set_folder_info): Recursively add nodes if fi->child
|
||||
is non-NULL rather than adding a dummy node.
|
||||
(folder_renamed_cb): Implemented.
|
||||
|
||||
2003-11-14 Jeffrey Stedfast <fejj@ximian.com>
|
||||
|
||||
|
@ -891,7 +891,15 @@ tree_store_set_folder_info (GtkTreeStore *model, GtkTreeIter *iter,
|
||||
COL_BOOL_LOAD_SUBDIRS, load,
|
||||
-1);
|
||||
|
||||
if (load) {
|
||||
if (fi->child) {
|
||||
fi = fi->child;
|
||||
|
||||
do {
|
||||
gtk_tree_store_append (model, &sub, iter);
|
||||
tree_store_set_folder_info ((GtkTreeStore *) model, &sub, priv, si, fi);
|
||||
fi = fi->sibling;
|
||||
} while (fi);
|
||||
} else if (load) {
|
||||
/* create a placeholder node for our subfolders... */
|
||||
gtk_tree_store_append (model, &sub, iter);
|
||||
gtk_tree_store_set (model, &sub,
|
||||
@ -1866,7 +1874,65 @@ folder_deleted_cb (CamelStore *store, void *event_data, EMFolderTree *emft)
|
||||
static void
|
||||
folder_renamed_cb (CamelStore *store, void *event_data, EMFolderTree *emft)
|
||||
{
|
||||
/* FIXME: implement me */
|
||||
struct _EMFolderTreePrivate *priv = emft->priv;
|
||||
struct _EMFolderTreeModelStoreInfo *si;
|
||||
CamelRenameInfo *info = event_data;
|
||||
GtkTreeRowReference *row;
|
||||
GtkTreeIter root, iter;
|
||||
GtkTreeModel *model;
|
||||
GtkTreePath *path;
|
||||
char *parent, *p;
|
||||
|
||||
if (!(si = g_hash_table_lookup (priv->model->store_hash, store)))
|
||||
return;
|
||||
|
||||
parent = g_strdup_printf ("/%s", info->old_base);
|
||||
if (!(row = g_hash_table_lookup (si->path_hash, parent))) {
|
||||
g_free (parent);
|
||||
return;
|
||||
}
|
||||
g_free (parent);
|
||||
|
||||
path = gtk_tree_row_reference_get_path (row);
|
||||
model = gtk_tree_view_get_model (emft->priv->treeview);
|
||||
if (!(gtk_tree_model_get_iter (model, &iter, path))) {
|
||||
gtk_tree_path_free (path);
|
||||
return;
|
||||
}
|
||||
|
||||
remove_folders (emft, model, si, &iter);
|
||||
|
||||
parent = g_strdup (info->new->path);
|
||||
if ((p = strrchr (parent + 1, '/')))
|
||||
*p = '\0';
|
||||
|
||||
if (!strcmp (parent, "/")) {
|
||||
/* renamed to a toplevel folder on the store */
|
||||
path = gtk_tree_row_reference_get_path (si->row);
|
||||
} else {
|
||||
if (!(row = g_hash_table_lookup (si->path_hash, parent))) {
|
||||
/* NOTE: this should never happen, but I
|
||||
* suppose if it does in reality, we can add
|
||||
* code here to add the missing nodes to the
|
||||
* tree */
|
||||
g_assert_not_reached ();
|
||||
g_free (parent);
|
||||
return;
|
||||
}
|
||||
|
||||
path = gtk_tree_row_reference_get_path (row);
|
||||
}
|
||||
|
||||
g_free (parent);
|
||||
|
||||
if (!gtk_tree_model_get_iter (model, &root, path)) {
|
||||
gtk_tree_path_free (path);
|
||||
g_assert_not_reached ();
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_tree_store_append ((GtkTreeStore *) model, &iter, &root);
|
||||
tree_store_set_folder_info ((GtkTreeStore *) model, &iter, priv, si, info->new);
|
||||
}
|
||||
|
||||
|
||||
|
@ -719,9 +719,7 @@ store_folder_renamed(CamelObject *o, void *event_data, void *data)
|
||||
char *user;
|
||||
char *key;
|
||||
CamelFolder *folder;
|
||||
|
||||
store = store;
|
||||
|
||||
|
||||
/* This should be more-or-less thread-safe */
|
||||
|
||||
d(printf("Folder renamed to '%s' from '%s'\n", info->new->full_name, info->old_base));
|
||||
|
Reference in New Issue
Block a user