[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