diff --git a/gtk/file-list.c b/gtk/file-list.c index f3ea8ab25..39fb40e2d 100644 --- a/gtk/file-list.c +++ b/gtk/file-list.c @@ -801,7 +801,17 @@ on_rename_done_idle (struct rename_data * data) GtkTreeIter iter; if (gtk_tree_model_get_iter_from_string (data->file_data->model, &iter, data->path_string)) - gtk_tree_store_set (data->file_data->store, &iter, FC_LABEL, data->newname, -1); + { + const gboolean isLeaf = !gtk_tree_model_iter_has_child (data->file_data->model, &iter); + const char * mime_type = isLeaf ? gtr_get_mime_type_from_filename (data->newname) : DIRECTORY_MIME_TYPE; + GdkPixbuf * icon = gtr_get_mime_type_icon (mime_type, GTK_ICON_SIZE_MENU, data->file_data->view); + + gtk_tree_store_set (data->file_data->store, &iter, FC_LABEL, data->newname, FC_ICON, icon, -1); + + GtkTreeIter parent; + if (!gtk_tree_model_iter_parent (data->file_data->model, &parent, &iter)) + gtr_core_torrent_changed (data->file_data->core, data->file_data->torrentId); + } } else { diff --git a/gtk/tr-core.c b/gtk/tr-core.c index 346f1ea93..add185a84 100644 --- a/gtk/tr-core.c +++ b/gtk/tr-core.c @@ -1354,6 +1354,19 @@ gtr_core_torrents_added (TrCore * self) core_emit_err (self, TR_CORE_ERR_NO_MORE_TORRENTS, NULL); } +void +gtr_core_torrent_changed (TrCore * self, int id) +{ + GtkTreeIter iter; + GtkTreeModel * model = core_raw_model (self); + + if (find_row_from_torrent_id (model, id, &iter)) + { + GtkTreePath * path = gtk_tree_model_get_path (model, &iter); + gtk_tree_model_row_changed (model, path, &iter); + } +} + void gtr_core_remove_torrent (TrCore * core, int id, gboolean delete_local_data) { diff --git a/gtk/tr-core.h b/gtk/tr-core.h index d858eaf58..f0946e707 100644 --- a/gtk/tr-core.h +++ b/gtk/tr-core.h @@ -125,6 +125,8 @@ void gtr_core_add_torrent (TrCore*, tr_torrent*, gboolean do_notify); */ void gtr_core_torrents_added (TrCore * self); +void gtr_core_torrent_changed (TrCore * self, int id); + /****** ******* ******/ diff --git a/macosx/FileListNode.m b/macosx/FileListNode.m index 5b33b1e08..b8f0b9aae 100644 --- a/macosx/FileListNode.m +++ b/macosx/FileListNode.m @@ -131,6 +131,8 @@ { [fName release]; fName = [newName copy]; + [fIcon release]; + fIcon = nil; return YES; } } diff --git a/macosx/Torrent.m b/macosx/Torrent.m index bd3d60952..740c1eb50 100644 --- a/macosx/Torrent.m +++ b/macosx/Torrent.m @@ -1968,6 +1968,9 @@ bool trashDataFile(const char * filename, tr_error ** error) [fFlatFileList release]; [self sortFileList: flatFileList]; fFlatFileList = flatFileList; + + [fIcon release]; + fIcon = nil; } else NSLog(@"Error renaming %@ to %@", oldPath, [path stringByAppendingPathComponent: newName]);