Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Weikert <elubie@gmx.net>2013-03-24 23:29:49 +0400
committerAndrea Weikert <elubie@gmx.net>2013-03-24 23:29:49 +0400
commitae1325c96300795da70f9f386824b9c7cc32261e (patch)
treecbebe91848a4a2d743c24b881b3f47bdca5d442b /source/blender/editors
parent814b3933e387fdf4784a855502b7f55bad272078 (diff)
FIX: [#34467] File Browser Deletes Unselected Files
* delete now acts on selected file(s) rather than the highlighted file.
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/space_file/file_ops.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index f705831c715..ba931b05214 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -1462,16 +1462,21 @@ static int file_delete_poll(bContext *C)
SpaceFile *sfile = CTX_wm_space_file(C);
struct direntry *file;
- if (sfile && sfile->params) {
- if (sfile->params->active_file < 0) {
- poll = 0;
- }
- else {
- char dir[FILE_MAX], group[FILE_MAX];
- if (filelist_islibrary(sfile->files, dir, group)) poll = 0;
- file = filelist_file(sfile->files, sfile->params->active_file);
- if (file && S_ISDIR(file->type)) poll = 0;
+ if (sfile && sfile->params) {
+ char dir[FILE_MAX], group[FILE_MAX];
+ int numfiles = filelist_numfiles(sfile->files);
+ int i;
+ int num_selected = 0;
+
+ if (filelist_islibrary(sfile->files, dir, group)) poll = 0;
+ for (i = 0; i < numfiles; i++) {
+ if (filelist_is_selected(sfile->files, i, CHECK_FILES)) {
+ num_selected++;
+ }
}
+ if (num_selected <= 0) {
+ poll = 0;
+ }
}
else
poll = 0;
@@ -1484,12 +1489,18 @@ int file_delete_exec(bContext *C, wmOperator *UNUSED(op))
char str[FILE_MAX];
wmWindowManager *wm = CTX_wm_manager(C);
SpaceFile *sfile = CTX_wm_space_file(C);
- struct direntry *file;
-
+ struct direntry *file;
+ int numfiles = filelist_numfiles(sfile->files);
+ int i;
+
+ for (i = 0; i < numfiles; i++) {
+ if (filelist_is_selected(sfile->files, i, CHECK_FILES)) {
+ file = filelist_file(sfile->files, i);
+ BLI_make_file_string(G.main->name, str, sfile->params->dir, file->relname);
+ BLI_delete(str, false, false);
+ }
+ }
- file = filelist_file(sfile->files, sfile->params->active_file);
- BLI_make_file_string(G.main->name, str, sfile->params->dir, file->relname);
- BLI_delete(str, false, false);
ED_fileselect_clear(wm, sfile);
WM_event_add_notifier(C, NC_SPACE | ND_SPACE_FILE_LIST, NULL);
@@ -1500,8 +1511,8 @@ int file_delete_exec(bContext *C, wmOperator *UNUSED(op))
void FILE_OT_delete(struct wmOperatorType *ot)
{
/* identifiers */
- ot->name = "Delete File";
- ot->description = "Delete selected file";
+ ot->name = "Delete Selected Files";
+ ot->description = "Delete selected files";
ot->idname = "FILE_OT_delete";
/* api callbacks */