diff options
author | Andrea Weikert <elubie@gmx.net> | 2013-03-24 23:29:49 +0400 |
---|---|---|
committer | Andrea Weikert <elubie@gmx.net> | 2013-03-24 23:29:49 +0400 |
commit | ae1325c96300795da70f9f386824b9c7cc32261e (patch) | |
tree | cbebe91848a4a2d743c24b881b3f47bdca5d442b /source/blender/editors | |
parent | 814b3933e387fdf4784a855502b7f55bad272078 (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.c | 43 |
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 */ |