[geany/geany] 06e40e: Confirm whether to save protected documents

Nick Treleaven git-noreply at xxxxx
Tue Sep 23 13:53:08 UTC 2014


Branch:      refs/heads/master
Author:      Nick Treleaven <nick.treleaven at btinternet.com>
Committer:   Nick Treleaven <nick.treleaven at btinternet.com>
Date:        Tue, 23 Sep 2014 13:53:08 UTC
Commit:      06e40e512fd4d88aeed8401e6e433ea24bc31e18
             https://github.com/geany/geany/commit/06e40e512fd4d88aeed8401e6e433ea24bc31e18

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).


More information about the Commits mailing list