From d705c52e659e63e07d22433c517fdddb2a5643bf Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 31 Oct 2012 17:03:31 +0000 Subject: no longer use 'check_existing' to see if we need to have a save popup, instead use 'exec' operator on a saved file and invoke on unsaved files. correct missing memset --> CustomData_reset switch too. --- release/scripts/startup/bl_operators/wm.py | 2 +- release/scripts/startup/bl_ui/space_info.py | 5 +- source/blender/blenkernel/intern/mesh_validate.c | 2 +- .../blender/windowmanager/intern/wm_event_system.c | 87 +++++++++------------- source/blender/windowmanager/intern/wm_operators.c | 11 +-- source/tests/bl_test.py | 2 +- 6 files changed, 45 insertions(+), 64 deletions(-) diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index 5cc041476c9..2bff11a686d 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -1290,7 +1290,7 @@ class WM_OT_blenderplayer_start(Operator): return {'CANCELLED'} filepath = os.path.join(bpy.app.tempdir, "game.blend") - bpy.ops.wm.save_as_mainfile(filepath=filepath, check_existing=False, copy=True) + bpy.ops.wm.save_as_mainfile('EXEC_DEFAULT', filepath=filepath, copy=True) subprocess.call([player_path, filepath]) return {'FINISHED'} diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py index 9ab2a772df0..c0f2d3c361b 100644 --- a/release/scripts/startup/bl_ui/space_info.py +++ b/release/scripts/startup/bl_ui/space_info.py @@ -112,8 +112,9 @@ class INFO_MT_file(Menu): layout.separator() - layout.operator_context = 'INVOKE_AREA' - layout.operator("wm.save_mainfile", text="Save", icon='FILE_TICK').check_existing = False + layout.operator_context = 'EXEC_AREA' if context.blend_data.is_saved else 'INVOKE_AREA' + layout.operator("wm.save_mainfile", text="Save", icon='FILE_TICK') + layout.operator_context = 'INVOKE_AREA' layout.operator("wm.save_as_mainfile", text="Save As...", icon='SAVE_AS') layout.operator_context = 'INVOKE_AREA' diff --git a/source/blender/blenkernel/intern/mesh_validate.c b/source/blender/blenkernel/intern/mesh_validate.c index c4d663e17bd..128b9ae242e 100644 --- a/source/blender/blenkernel/intern/mesh_validate.c +++ b/source/blender/blenkernel/intern/mesh_validate.c @@ -944,7 +944,7 @@ void BKE_mesh_calc_edges(Mesh *mesh, int update) totedge = BLI_edgehash_size(eh); /* write new edges into a temporary CustomData */ - memset(&edata, 0, sizeof(edata)); + CustomData_reset(&edata); CustomData_add_layer(&edata, CD_MEDGE, CD_CALLOC, NULL, totedge); med = CustomData_get_layer(&edata, CD_MEDGE); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 031deb1f010..1900966b5bd 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1576,72 +1576,55 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa /* needed for uiPupMenuReports */ if (event->val == EVT_FILESELECT_EXEC) { -#if 0 // use REDALERT now + int retval; - /* a bit weak, might become arg for WM_event_fileselect? */ - /* XXX also extension code in image-save doesnt work for this yet */ - if (RNA_struct_find_property(handler->op->ptr, "check_existing") && - RNA_boolean_get(handler->op->ptr, "check_existing")) - { - char *path = RNA_string_get_alloc(handler->op->ptr, "filepath", NULL, 0); - /* this gives ownership to pupmenu */ - uiPupMenuSaveOver(C, handler->op, (path) ? path : ""); - if (path) - MEM_freeN(path); - } - else -#endif - { - int retval; - - if (handler->op->type->flag & OPTYPE_UNDO) - wm->op_undo_depth++; - - retval = handler->op->type->exec(C, handler->op); + if (handler->op->type->flag & OPTYPE_UNDO) + wm->op_undo_depth++; - /* XXX check this carefully, CTX_wm_manager(C) == wm is a bit hackish */ - if (handler->op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm) - wm->op_undo_depth--; + retval = handler->op->type->exec(C, handler->op); - if (retval & OPERATOR_FINISHED) - if (G.debug & G_DEBUG_WM) - wm_operator_print(C, handler->op); + /* XXX check this carefully, CTX_wm_manager(C) == wm is a bit hackish */ + if (handler->op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm) + wm->op_undo_depth--; + + if (retval & OPERATOR_FINISHED) + if (G.debug & G_DEBUG_WM) + wm_operator_print(C, handler->op); - /* XXX check this carefully, CTX_wm_manager(C) == wm is a bit hackish */ - if (CTX_wm_manager(C) == wm && wm->op_undo_depth == 0) - if (handler->op->type->flag & OPTYPE_UNDO) - ED_undo_push_op(C, handler->op); + /* XXX check this carefully, CTX_wm_manager(C) == wm is a bit hackish */ + if (CTX_wm_manager(C) == wm && wm->op_undo_depth == 0) + if (handler->op->type->flag & OPTYPE_UNDO) + ED_undo_push_op(C, handler->op); - if (handler->op->reports->list.first) { + if (handler->op->reports->list.first) { - /* FIXME, temp setting window, this is really bad! + /* FIXME, temp setting window, this is really bad! * only have because lib linking errors need to be seen by users :( * it can be removed without breaking anything but then no linking errors - campbell */ - wmWindow *win_prev = CTX_wm_window(C); - ScrArea *area_prev = CTX_wm_area(C); - ARegion *ar_prev = CTX_wm_region(C); + wmWindow *win_prev = CTX_wm_window(C); + ScrArea *area_prev = CTX_wm_area(C); + ARegion *ar_prev = CTX_wm_region(C); - if (win_prev == NULL) - CTX_wm_window_set(C, CTX_wm_manager(C)->windows.first); + if (win_prev == NULL) + CTX_wm_window_set(C, CTX_wm_manager(C)->windows.first); - handler->op->reports->printlevel = RPT_WARNING; - uiPupMenuReports(C, handler->op->reports); + handler->op->reports->printlevel = RPT_WARNING; + uiPupMenuReports(C, handler->op->reports); - /* XXX - copied from 'wm_operator_finished()' */ - /* add reports to the global list, otherwise they are not seen */ - BLI_movelisttolist(&CTX_wm_reports(C)->list, &handler->op->reports->list); - - CTX_wm_window_set(C, win_prev); - CTX_wm_area_set(C, area_prev); - CTX_wm_region_set(C, ar_prev); - } + /* XXX - copied from 'wm_operator_finished()' */ + /* add reports to the global list, otherwise they are not seen */ + BLI_movelisttolist(&CTX_wm_reports(C)->list, &handler->op->reports->list); - if (retval & OPERATOR_FINISHED) { - WM_operator_last_properties_store(handler->op); - } + CTX_wm_window_set(C, win_prev); + CTX_wm_area_set(C, area_prev); + CTX_wm_region_set(C, ar_prev); + } - WM_operator_free(handler->op); + if (retval & OPERATOR_FINISHED) { + WM_operator_last_properties_store(handler->op); } + + WM_operator_free(handler->op); } else { if (handler->op->type->cancel) { diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index af6ec370fea..8d01cdb694d 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -859,6 +859,8 @@ void WM_operator_properties_filesel(wmOperatorType *ot, int filter, short type, RNA_def_collection_runtime(ot->srna, "files", &RNA_OperatorFileListElement, "Files", ""); if (action == FILE_SAVE) { + /* note, this is only used to check if we should highlight the filename area red when the + * filepath is an existing file. */ prop = RNA_def_boolean(ot->srna, "check_existing", 1, "Check Existing", "Check and warn on overwriting existing files"); RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); } @@ -2117,7 +2119,6 @@ static void WM_OT_save_as_mainfile(wmOperatorType *ot) static int wm_save_mainfile_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { char name[FILE_MAX]; - int check_existing = 1; int ret; /* cancel if no active window */ @@ -2137,13 +2138,9 @@ static int wm_save_mainfile_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED( untitled(name); RNA_string_set(op->ptr, "filepath", name); - - if (RNA_struct_find_property(op->ptr, "check_existing")) - if (RNA_boolean_get(op->ptr, "check_existing") == 0) - check_existing = 0; - + if (G.save_over) { - if (check_existing && BLI_exists(name)) { + if (BLI_exists(name)) { uiPupMenuSaveOver(C, op, name); ret = OPERATOR_RUNNING_MODAL; } diff --git a/source/tests/bl_test.py b/source/tests/bl_test.py index cfe91356444..0cb322a21b1 100644 --- a/source/tests/bl_test.py +++ b/source/tests/bl_test.py @@ -145,7 +145,7 @@ def main(): if write_blend is not None: print(" Writing Blend: %s" % write_blend) - bpy.ops.wm.save_mainfile(filepath=write_blend, check_existing=False) + bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=write_blend) print(" Result: '%s'" % str(result)) if not result: -- cgit v1.2.3