Index: bindings/python/gedit.defs =================================================================== RCS file: /cvs/gnome/gedit/bindings/python/Attic/gedit.defs,v retrieving revision 1.1.2.3 diff -u -p -r1.1.2.3 gedit.defs --- bindings/python/gedit.defs 1 Oct 2005 19:31:28 -0000 1.1.2.3 +++ bindings/python/gedit.defs 9 Oct 2005 12:51:03 -0000 @@ -188,6 +188,9 @@ (define-method save (of-object "GeditDocument") (c-name "gedit_document_save") + (parameters + '("GeditDocumentSaveFlags" "flags") + ) (return-type "none") ) @@ -198,6 +201,7 @@ (parameters '("const-gchar*" "uri") '("const-GeditEncoding*" "encoding") + '("GeditDocumentSaveFlags" "flags") ) ) Index: gedit/gedit-document-saver.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-document-saver.c,v retrieving revision 1.1.2.20 diff -u -p -r1.1.2.20 gedit-document-saver.c --- gedit/gedit-document-saver.c 18 Sep 2005 13:25:25 -0000 1.1.2.20 +++ gedit/gedit-document-saver.c 9 Oct 2005 12:51:03 -0000 @@ -58,6 +58,9 @@ struct _GeditDocumentSaverPrivate gchar *uri; const GeditEncoding *encoding; + + GeditDocumentSaveFlags flags; + gboolean keep_backup; gchar *backup_ext; gboolean backups_in_curr_dir; @@ -463,14 +466,20 @@ save_existing_local_file (GeditDocumentS /* not a regular file */ if (!S_ISREG (statbuf.st_mode)) { - GnomeVFSResult result = S_ISDIR (statbuf.st_mode) ? - GNOME_VFS_ERROR_IS_DIRECTORY : - GEDIT_DOCUMENT_ERROR_NOT_REGULAR_FILE; - - g_set_error (&saver->priv->error, - GEDIT_DOCUMENT_ERROR, - result, - gnome_vfs_result_to_string (result)); + if (S_ISDIR (statbuf.st_mode)) + { + g_set_error (&saver->priv->error, + GEDIT_DOCUMENT_ERROR, + GNOME_VFS_ERROR_IS_DIRECTORY, + gnome_vfs_result_to_string (GNOME_VFS_ERROR_IS_DIRECTORY)); + } + else + { + g_set_error (&saver->priv->error, + GEDIT_DOCUMENT_ERROR, + GEDIT_DOCUMENT_ERROR_NOT_REGULAR_FILE, + "Not a regular file"); + } goto out; } @@ -487,15 +496,17 @@ save_existing_local_file (GeditDocumentS } /* check if someone else modified the file externally, - * except when "saving as" or saving a new doc (mtime = 0) + * except when "saving as", when saving a new doc (mtime = 0) + * or when the mtime check is explicitely disabled */ if (saver->priv->doc_mtime > 0 && - statbuf.st_mtime != saver->priv->doc_mtime) + statbuf.st_mtime != saver->priv->doc_mtime && + ((saver->priv->flags & GEDIT_DOCUMENT_SAVE_IGNORE_MTIME) == 0)) { g_set_error (&saver->priv->error, GEDIT_DOCUMENT_ERROR, - GNOME_VFS_ERROR_GENERIC, //FIXME - gnome_vfs_result_to_string (GNOME_VFS_ERROR_GENERIC)); + GEDIT_DOCUMENT_ERROR_EXTERNALLY_MODIFIED, + "Externally modified"); goto out; } @@ -916,18 +927,21 @@ async_xfer_ok (GnomeVFSXferProgressInfo return 0; } + /* check if someone else modified the file externally, - * except when "saving as" or saving a new doc (mtime = 0) + * except when "saving as", when saving a new doc (mtime = 0) + * or when the mtime check is explicitely disabled */ if (orig_info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_MTIME) { if (saver->priv->doc_mtime > 0 && - orig_info->mtime != saver->priv->doc_mtime) + orig_info->mtime != saver->priv->doc_mtime && + ((saver->priv->flags & GEDIT_DOCUMENT_SAVE_IGNORE_MTIME) == 0)) { g_set_error (&saver->priv->error, GEDIT_DOCUMENT_ERROR, - GNOME_VFS_ERROR_GENERIC, //FIXME - gnome_vfs_result_to_string (GNOME_VFS_ERROR_GENERIC)); + GEDIT_DOCUMENT_ERROR_EXTERNALLY_MODIFIED, + "Externally modified"); /* abort xfer */ return 0; @@ -1165,10 +1179,11 @@ save_remote_file (GeditDocumentSaver *sa /* ---------- public api ---------- */ void -gedit_document_saver_save (GeditDocumentSaver *saver, - const gchar *uri, - const GeditEncoding *encoding, - time_t oldmtime) +gedit_document_saver_save (GeditDocumentSaver *saver, + const gchar *uri, + const GeditEncoding *encoding, + time_t oldmtime, + GeditDocumentSaveFlags flags) { gchar *local_path; @@ -1194,6 +1209,8 @@ gedit_document_saver_save (GeditDocument saver->priv->encoding = gedit_encoding_get_utf8 (); saver->priv->doc_mtime = oldmtime; + + saver->priv->flags = flags; local_path = gnome_vfs_get_local_path_from_uri (uri); if (local_path != NULL) Index: gedit/gedit-document-saver.h =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-document-saver.h,v retrieving revision 1.1.2.5 diff -u -p -r1.1.2.5 gedit-document-saver.h --- gedit/gedit-document-saver.h 14 Sep 2005 18:09:57 -0000 1.1.2.5 +++ gedit/gedit-document-saver.h 9 Oct 2005 12:51:04 -0000 @@ -88,7 +89,8 @@ GeditDocumentSaver *gedit_document_save void gedit_document_saver_save (GeditDocumentSaver *saver, const gchar *uri, const GeditEncoding *encoding, - time_t oldmtime); + time_t oldmtime, + GeditDocumentSaveFlags flags); #if 0 void gedit_document_saver_cancel (GeditDocumentSaver *saver); Index: gedit/gedit-document.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-document.c,v retrieving revision 1.111.2.46 diff -u -p -r1.111.2.46 gedit-document.c --- gedit/gedit-document.c 7 Oct 2005 12:43:37 -0000 1.111.2.46 +++ gedit/gedit-document.c 9 Oct 2005 12:51:05 -0000 @@ -1061,10 +1061,11 @@ document_saver_saving (GeditDocumentSave } static void -document_save_real (GeditDocument *doc, - const gchar *uri, - const GeditEncoding *encoding, - time_t mtime) +document_save_real (GeditDocument *doc, + const gchar *uri, + const GeditEncoding *encoding, + time_t mtime, + GeditDocumentSaveFlags flags) { g_return_if_fail (doc->priv->saver == NULL); @@ -1081,11 +1082,13 @@ document_save_real (GeditDocument gedit_document_saver_save (doc->priv->saver, uri, encoding, - mtime); + mtime, + flags); } void -gedit_document_save (GeditDocument *doc) +gedit_document_save (GeditDocument *doc, + GeditDocumentSaveFlags flags) { g_return_if_fail (GEDIT_IS_DOCUMENT (doc)); g_return_if_fail (doc->priv->uri != NULL); @@ -1093,13 +1096,15 @@ gedit_document_save (GeditDocument *doc) document_save_real (doc, doc->priv->uri, doc->priv->encoding, - doc->priv->mtime); + doc->priv->mtime, + flags); } void -gedit_document_save_as (GeditDocument *doc, - const gchar *uri, - const GeditEncoding *encoding) +gedit_document_save_as (GeditDocument *doc, + const gchar *uri, + const GeditEncoding *encoding, + GeditDocumentSaveFlags flags) { g_return_if_fail (GEDIT_IS_DOCUMENT (doc)); g_return_if_fail (uri != NULL); @@ -1107,7 +1112,7 @@ gedit_document_save_as (GeditDocument doc->priv->is_saving_as = TRUE; - document_save_real (doc, uri, encoding, 0); + document_save_real (doc, uri, encoding, 0, flags); } gboolean Index: gedit/gedit-document.h =================================================================== RCS file: /cvs/gnome/gedit/gedit/gedit-document.h,v retrieving revision 1.41.2.20 diff -u -p -r1.41.2.20 gedit-document.h --- gedit/gedit-document.h 7 Oct 2005 12:43:37 -0000 1.41.2.20 +++ gedit/gedit-document.h 9 Oct 2005 12:51:05 -0000 @@ -106,9 +106,18 @@ struct _GeditDocumentClass void (* can_find_again) (GeditDocument *document); }; + +typedef enum +{ + GEDIT_DOCUMENT_SAVE_IGNORE_MTIME = 1 << 0, + GEDIT_DOCUMENT_SAVE_IGNORE_NOBACKUP = 1 << 1 +} GeditDocumentSaveFlags; + + #define GEDIT_DOCUMENT_ERROR gedit_document_error_quark () -enum { +enum +{ /* start at GNOME_VFS_NUM_ERRORS since we use GnomeVFSResult * for the error codes */ GEDIT_DOCUMENT_ERROR_EXTERNALLY_MODIFIED = GNOME_VFS_NUM_ERRORS, @@ -149,11 +158,13 @@ gboolean gedit_document_insert_file (Ge gboolean gedit_document_load_cancel (GeditDocument *doc); -void gedit_document_save (GeditDocument *doc); +void gedit_document_save (GeditDocument *doc, + GeditDocumentSaveFlags flags); void gedit_document_save_as (GeditDocument *doc, const gchar *uri, - const GeditEncoding *encoding); + const GeditEncoding *encoding, + GeditDocumentSaveFlags flags); gboolean gedit_document_is_untouched (GeditDocument *doc); gboolean gedit_document_is_untitled (GeditDocument *doc); Index: gedit/gedit-tab.c =================================================================== RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-tab.c,v retrieving revision 1.1.2.49 diff -u -p -r1.1.2.49 gedit-tab.c --- gedit/gedit-tab.c 8 Oct 2005 17:53:49 -0000 1.1.2.49 +++ gedit/gedit-tab.c 9 Oct 2005 12:51:06 -0000 @@ -1479,7 +1479,7 @@ _gedit_tab_save (GeditTab *tab) tab->priv->tmp_save_uri = g_strdup (gedit_document_get_uri_ (doc)); tab->priv->tmp_encoding = gedit_document_get_encoding (doc); - gedit_document_save (doc); + gedit_document_save (doc, 0); } void @@ -1507,7 +1507,7 @@ _gedit_tab_save_as (GeditTab tab->priv->tmp_save_uri = g_strdup (uri); tab->priv->tmp_encoding = encoding; - gedit_document_save_as (doc, uri, encoding); + gedit_document_save_as (doc, uri, encoding, 0); } static void