Branch: refs/heads/master Author: Nick Treleaven nick.treleaven@btinternet.com Committer: Nick Treleaven nick.treleaven@btinternet.com Date: Tue, 23 Sep 2014 13:53:08 UTC Commit: 06e40e512fd4d88aeed8401e6e433ea24bc31e18 https://github.com/geany/geany/commit/06e40e512fd4d88aeed8401e6e433ea24bc31e...
Log Message: ----------- Confirm whether to save protected documents
(Reuses existing strings).
Modified Paths: -------------- src/document.c
Modified: src/document.c 44 lines changed, 43 insertions(+), 1 deletions(-) =================================================================== @@ -1588,6 +1588,7 @@ static void protect_document(GeanyDocument *doc) sci_set_readonly(doc->editor->sci, TRUE); }
+ static void unprotect_document(GeanyDocument *doc) { g_return_if_fail(doc->priv->protected > 0); @@ -1846,6 +1847,41 @@ static gchar *save_doc(GeanyDocument *doc, const gchar *locale_filename, return NULL; }
+ +static gboolean save_file_handle_infobars(GeanyDocument *doc, gboolean force) +{ + GtkWidget *bar = NULL; + + document_show_tab(doc); + + if (doc->priv->info_bars[MSG_TYPE_RELOAD]) + { + if (!dialogs_show_question_full(NULL, _("_Overwrite"), GTK_STOCK_CANCEL, + _("Overwrite?"), + _("The file '%s' on the disk is more recent than the current buffer."), + doc->file_name)) + return FALSE; + bar = doc->priv->info_bars[MSG_TYPE_RELOAD]; + } + else if (doc->priv->info_bars[MSG_TYPE_RESAVE]) + { + if (!dialogs_show_question_full(NULL, GTK_STOCK_SAVE, GTK_STOCK_CANCEL, + _("Try to resave the file?"), + _("File "%s" was not found on disk!"), + doc->file_name)) + return FALSE; + bar = doc->priv->info_bars[MSG_TYPE_RESAVE]; + } + else + { + g_assert_not_reached(); + return FALSE; + } + gtk_info_bar_response(GTK_INFO_BAR(bar), RESPONSE_DOCUMENT_SAVE); + return TRUE; +} + + /** * Saves the document. * Also shows the Save As dialog if necessary. @@ -1889,10 +1925,14 @@ gboolean document_save_file(GeanyDocument *doc, gboolean force) }
/* the "changed" flag should exclude the "readonly" flag, but check it anyway for safety */ - if (doc->readonly || doc->priv->protected) + if (doc->readonly) return FALSE; if (!force && !doc->changed) return FALSE; + if (doc->priv->protected) + { + return save_file_handle_infobars(doc, force); + }
fp = project_get_file_prefs(); /* replaces tabs with spaces but only if the current file is not a Makefile */ @@ -3220,6 +3260,7 @@ static GtkWidget* document_show_message(GeanyDocument *doc, GtkMessageType msgty return info_widget; }
+ static void on_monitor_reload_file_response(GtkWidget *bar, gint response_id, GeanyDocument *doc) { unprotect_document(doc); @@ -3231,6 +3272,7 @@ static void on_monitor_reload_file_response(GtkWidget *bar, gint response_id, Ge document_save_file(doc, FALSE); }
+ static gboolean on_sci_key(GtkWidget *widget, GdkEventKey *event, gpointer data) { GtkInfoBar *bar = GTK_INFO_BAR(data);
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).