[geany/geany] 5f3867: Do not report incorrect value for GeanyDocument:changed when quitting
Jason Cumbie
git-noreply at xxxxx
Wed Dec 12 19:15:53 UTC 2018
Branch: refs/heads/master
Author: Jason Cumbie <>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Wed, 12 Dec 2018 19:15:53 UTC
Commit: 5f386751141a38efc6a64508afec92c9a82b6c06
https://github.com/geany/geany/commit/5f386751141a38efc6a64508afec92c9a82b6c06
Log Message:
-----------
Do not report incorrect value for GeanyDocument:changed when quitting
Fix document_account_for_unsaved() so it does not alter the `changed`
flag on documents, in order for plugins to have a reliable value there
at all times.
Patch by @chrontec with small additional tidying up.
Closes #1857.
Modified Paths:
--------------
src/document.c
src/libmain.c
Modified: src/document.c
25 lines changed, 6 insertions(+), 19 deletions(-)
===================================================================
@@ -704,7 +704,8 @@ static gboolean remove_page(guint page_num)
g_return_val_if_fail(doc != NULL, FALSE);
- if (doc->changed && ! dialogs_show_unsaved_file(doc))
+ /* if we're closing all, document_account_for_unsaved() has been called already, no need to ask again. */
+ if (! main_status.closing_all && doc->changed && ! dialogs_show_unsaved_file(doc))
return FALSE;
/* tell any plugins that the document is about to be closed */
@@ -3368,12 +3369,10 @@ GeanyDocument *document_clone(GeanyDocument *old_doc)
}
-/* @note If successful, this should always be followed up with a call to
- * document_close_all().
- * @return TRUE if all files were saved or had their changes discarded. */
+/* @return TRUE if all files were saved or had their changes discarded. */
gboolean document_account_for_unsaved(void)
{
- guint i, p, page_count;
+ guint p, page_count;
page_count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(main_widgets.notebook));
/* iterate over documents in tabs order */
@@ -3387,27 +3386,15 @@ gboolean document_account_for_unsaved(void)
return FALSE;
}
}
- /* all documents should now be accounted for, so ignore any changes */
- foreach_document (i)
- {
- documents[i]->changed = FALSE;
- }
+
return TRUE;
}
static void force_close_all(void)
{
- guint i, len = documents_array->len;
+ guint i;
- /* check all documents have been accounted for */
- for (i = 0; i < len; i++)
- {
- if (documents[i]->is_valid)
- {
- g_return_if_fail(!documents[i]->changed);
- }
- }
main_status.closing_all = TRUE;
foreach_document(i)
Modified: src/libmain.c
25 lines changed, 14 insertions(+), 11 deletions(-)
===================================================================
@@ -1262,16 +1262,20 @@ static void queue_free(GQueue *queue)
}
-static void do_main_quit(void)
+static gboolean do_main_quit(void)
{
- geany_debug("Quitting...");
-
configuration_save();
if (app->project != NULL)
- project_close(FALSE); /* save project session files */
+ {
+ if (!project_close(FALSE)) /* save project session files */
+ return FALSE;
+ }
- document_close_all();
+ if (!document_close_all())
+ return FALSE;
+
+ geany_debug("Quitting...");
main_status.quitting = TRUE;
@@ -1364,6 +1368,8 @@ static void do_main_quit(void)
ui_finalize_builder();
gtk_main_quit();
+
+ return TRUE;
}
@@ -1389,19 +1395,16 @@ gboolean main_quit(void)
if (! check_no_unsaved())
{
- if (document_account_for_unsaved())
- {
- do_main_quit();
+ if (do_main_quit())
return TRUE;
- }
}
else
if (! prefs.confirm_exit ||
dialogs_show_question_full(NULL, GTK_STOCK_QUIT, GTK_STOCK_CANCEL, NULL,
_("Do you really want to quit?")))
{
- do_main_quit();
- return TRUE;
+ if (do_main_quit())
+ return TRUE;
}
main_status.quitting = FALSE;
--------------
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