Page MenuHome

FileBrowser_Handler_Release_Fix.patch

FileBrowser_Handler_Release_Fix.patch

Index: source/blender/editors/screen/area.c
===================================================================
--- source/blender/editors/screen/area.c (revision 31955)
+++ source/blender/editors/screen/area.c (working copy)
@@ -1095,13 +1095,6 @@
{
SpaceLink *sl = (sa) ? sa->spacedata.first : CTX_wm_space_data(C);
- /* Special handling of filebrowser to stop background thread for
- thumbnail creation - don't want to waste cpu resources if not showing
- the filebrowser */
- if (sl->spacetype == SPACE_FILE) {
- ED_fileselect_exit(C, (SpaceFile*)sl);
- }
-
if(sl->next) {
/* workaround for case of double prevspace, render window
with a file browser on top of it */
Index: source/blender/editors/screen/screen_edit.c
===================================================================
--- source/blender/editors/screen/screen_edit.c (revision 31955)
+++ source/blender/editors/screen/screen_edit.c (working copy)
@@ -1090,6 +1090,10 @@
ScrArea *prevsa= CTX_wm_area(C);
ARegion *ar;
+ if (sa->spacetype == SPACE_FILE) {
+ ED_fileselect_exit(C, (SpaceFile*)(sa) ? sa->spacedata.first : CTX_wm_space_data(C));
+ }
+
CTX_wm_area_set(C, sa);
for(ar= sa->regionbase.first; ar; ar= ar->next)
ED_region_exit(C, ar);
Index: source/blender/editors/space_file/file_ops.c
===================================================================
--- source/blender/editors/space_file/file_ops.c (revision 31955)
+++ source/blender/editors/space_file/file_ops.c (working copy)
@@ -503,19 +503,12 @@
int file_cancel_exec(bContext *C, wmOperator *unused)
{
SpaceFile *sfile= CTX_wm_space_file(C);
+ wmOperator *op = sfile->op;
+
+ sfile->op = NULL;
- folderlist_free(sfile->folders_prev);
- folderlist_free(sfile->folders_next);
+ WM_event_fileselect_event(C, op, EVT_FILESELECT_CANCEL);
- WM_event_fileselect_event(C, sfile->op, EVT_FILESELECT_CANCEL);
- sfile->op = NULL;
-
- if (sfile->files) {
- ED_fileselect_clear(C, sfile);
- MEM_freeN(sfile->files);
- sfile->files= NULL;
- }
-
return OPERATOR_FINISHED;
}
@@ -614,18 +607,11 @@
}
}
}
-
- folderlist_free(sfile->folders_prev);
- folderlist_free(sfile->folders_next);
fsmenu_insert_entry(fsmenu_get(), FS_CATEGORY_RECENT, sfile->params->dir,0, 1);
BLI_make_file_string(G.sce, filepath, BLI_get_folder_create(BLENDER_USER_CONFIG, NULL), BLENDER_BOOKMARK_FILE);
fsmenu_write_file(fsmenu_get(), filepath);
WM_event_fileselect_event(C, op, EVT_FILESELECT_EXEC);
-
- ED_fileselect_clear(C, sfile);
- MEM_freeN(sfile->files);
- sfile->files= NULL;
}
return OPERATOR_FINISHED;
Index: source/blender/editors/space_file/filesel.c
===================================================================
--- source/blender/editors/space_file/filesel.c (revision 31955)
+++ source/blender/editors/space_file/filesel.c (working copy)
@@ -531,5 +531,18 @@
void ED_fileselect_exit(struct bContext *C, struct SpaceFile *sfile)
{
- thumbnails_stop(sfile->files, C);
+ if(!sfile) return;
+ if(sfile->op)
+ WM_event_fileselect_event(C, sfile->op, EVT_FILESELECT_EXTERNAL_CANCEL);
+ sfile->op = NULL;
+
+ folderlist_free(sfile->folders_prev);
+ folderlist_free(sfile->folders_next);
+
+ if (sfile->files) {
+ ED_fileselect_clear(C, sfile);
+ MEM_freeN(sfile->files);
+ sfile->files= NULL;
+ }
+
}
Index: source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- source/blender/windowmanager/intern/wm_event_system.c (revision 31955)
+++ source/blender/windowmanager/intern/wm_event_system.c (working copy)
@@ -1224,18 +1224,20 @@
case EVT_FILESELECT_EXEC:
case EVT_FILESELECT_CANCEL:
+ case EVT_FILESELECT_EXTERNAL_CANCEL:
{
/* XXX validate area and region? */
bScreen *screen= CTX_wm_screen(C);
+
+ /* remlink now, for load file case before removing*/
+ BLI_remlink(handlers, handler);
- if(screen != handler->filescreen)
- ED_screen_full_prevspace(C, CTX_wm_area(C));
- else
- ED_area_prevspace(C, CTX_wm_area(C));
+ if(event->val!=EVT_FILESELECT_EXTERNAL_CANCEL)
+ if(screen != handler->filescreen)
+ ED_screen_full_prevspace(C, CTX_wm_area(C));
+ else
+ ED_area_prevspace(C, CTX_wm_area(C));
- /* remlink now, for load file case */
- BLI_remlink(handlers, handler);
-
wm_handler_op_context(C, handler);
/* needed for uiPupMenuReports */
Index: source/blender/windowmanager/wm_event_types.h
===================================================================
--- source/blender/windowmanager/wm_event_types.h (revision 31955)
+++ source/blender/windowmanager/wm_event_types.h (working copy)
@@ -269,10 +269,11 @@
#define EVT_FILESELECT 0x5020
/* event->val */
-#define EVT_FILESELECT_OPEN 1
-#define EVT_FILESELECT_FULL_OPEN 2
-#define EVT_FILESELECT_EXEC 3
-#define EVT_FILESELECT_CANCEL 4
+#define EVT_FILESELECT_OPEN 1
+#define EVT_FILESELECT_FULL_OPEN 2
+#define EVT_FILESELECT_EXEC 3
+#define EVT_FILESELECT_CANCEL 4
+#define EVT_FILESELECT_EXTERNAL_CANCEL 5
/* event->type */
#define EVT_BUT_OPEN 0x5021

File Metadata

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
b0/7f/a1712c5ff8ff8851b646985d2095

Event Timeline