no longer use 'check_existing' to see if we need to have a save popup, instead use...
authorCampbell Barton <ideasman42@gmail.com>
Wed, 31 Oct 2012 17:03:31 +0000 (17:03 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 31 Oct 2012 17:03:31 +0000 (17:03 +0000)
invoke on unsaved files.

correct missing memset --> CustomData_reset switch too.

release/scripts/startup/bl_operators/wm.py
release/scripts/startup/bl_ui/space_info.py
source/blender/blenkernel/intern/mesh_validate.c
source/blender/windowmanager/intern/wm_event_system.c
source/blender/windowmanager/intern/wm_operators.c
source/tests/bl_test.py

index 5cc041476c96a1758b358c79129a9360477263f8..2bff11a686d43984088ff9260d742ca9ec1e5755 100644 (file)
@@ -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'}
 
index 9ab2a772df0d812c81cb3323b47c52861935b992..c0f2d3c361bab6cd91f1bdaaa7f8494b560bad6f 100644 (file)
@@ -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'
index c4d663e17bdc9e373fc7551170188e22428468f3..128b9ae242eead6c976e3738562a54c008c8064b 100644 (file)
@@ -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);
index 031deb1f010f6efe3898cafe4abfff6fb6f528cd..1900966b5bd3b47787b173295969384cdb0f7ea6 100644 (file)
@@ -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) {
index af6ec370fea625a18ae50cfb1c9c412033c3abbb..8d01cdb694dc7d645cece9d6c1ac190d01b8a55f 100644 (file)
@@ -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;
                }
index cfe91356444f60f3bddbef3c7b737c090ee233de..0cb322a21b12cfc6bbd67a6c9e5d8ecdf0fe161a 100644 (file)
@@ -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: