diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 347cd6c747e..b2b77e9dfb9 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -98,14 +98,22 @@ static void do_file_buttons(bContext *C, void *arg, int event) char name[FILE_MAX]; area_prevspace(C); - BLI_strncpy(name, sfile->params->dir, sizeof(name)); - strcat(name, sfile->params->file); - RNA_string_set(sfile->op->ptr, "filename", name); - sfile->op->type->exec(C, sfile->op); - /* XXX for Ton: the call to WM_operator_free crashes - WM_operator_free(sfile->op); - sfile->op = NULL; - */ + if(sfile->op) { + wmOperator *op= sfile->op; + + /* if load .blend, all UI pointers after exec are invalid! */ + /* but, operator can be freed still */ + + sfile->op = NULL; + BLI_strncpy(name, sfile->params->dir, sizeof(name)); + strcat(name, sfile->params->file); + RNA_string_set(op->ptr, "filename", name); + + op->type->exec(C, op); + + WM_operator_free(op); + } + } break; case B_FS_CANCEL: diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index f5e7ffa7773..d5d16c07417 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -173,7 +173,7 @@ static void file_main_area_init(wmWindowManager *wm, ARegion *ar) static void file_main_area_draw(const bContext *C, ARegion *ar) { /* draw entirely, view changes should be handled here */ - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); +// SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); FileSelectParams* params = ED_fileselect_get_params(C); View2D *v2d= &ar->v2d; View2DScrollers *scrollers; @@ -322,10 +322,10 @@ static void file_ui_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_restore(C); } -static void file_main_area_listener(ARegion *ar, wmNotifier *wmn) -{ +//static void file_main_area_listener(ARegion *ar, wmNotifier *wmn) +//{ /* context changes */ -} +//} /* only called once, from space/spacetypes.c */ void ED_spacetype_file(void) diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index a703f2b5c0e..9e7988ab6e9 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -402,7 +402,7 @@ static void WM_OT_open_mainfile(wmOperatorType *ot) ot->exec= wm_mainfile_exec; ot->poll= WM_operator_winactive; - ot->flag= OPTYPE_REGISTER; + ot->flag= 0; RNA_def_property(ot->srna, "filename", PROP_STRING, PROP_FILEPATH);