gnucash maint: Bug 784420 - "Save changes on closing" window waits 2^32 seconds when...
John Ralls
jralls at code.gnucash.org
Thu Sep 20 20:19:09 EDT 2018
Updated via https://github.com/Gnucash/gnucash/commit/39575f22 (commit)
from https://github.com/Gnucash/gnucash/commit/77fb01db (commit)
commit 39575f22727dcf1bfe5b5ffd56b28e855e551742
Author: John Ralls <jralls at ceridwen.us>
Date: Thu Sep 20 17:04:25 2018 -0700
Bug 784420 - "Save changes on closing" window waits 2^32 seconds when...
"Time to wait for answer" is set 0.
Set minimum value of 1 for the save_on_close_adj.
Disable the associated spinner if the timeout is disabled.
Protect secs_to_save from rolling over if it's already 0.
diff --git a/gnucash/gnome-utils/dialog-preferences.c b/gnucash/gnome-utils/dialog-preferences.c
index 2e4e779..c38f16e 100644
--- a/gnucash/gnome-utils/dialog-preferences.c
+++ b/gnucash/gnome-utils/dialog-preferences.c
@@ -90,6 +90,7 @@ static QofLogModule log_module = GNC_MOD_PREFS;
void gnc_preferences_response_cb(GtkDialog *dialog, gint response, GtkDialog *unused);
void gnc_account_separator_pref_changed_cb (GtkEntry *entry, GtkWidget *dialog);
gboolean gnc_account_separator_validate_cb (GtkEntry *entry, GdkEvent *event, GtkWidget *dialog);
+void gnc_save_on_close_expires_cb (GtkToggleButton *button, GtkWidget *dialog);
/** This data structure holds the information for a single addition to
* the preferences dialog. */
@@ -200,6 +201,18 @@ gnc_account_separator_validate_cb (GtkEntry *entry, GdkEvent *event, GtkWidget *
return FALSE;
}
+/** Called when the save-on-close checkbutton is toggled.
+ * @internal
+ * @param button the toggle button.
+ * @param dialog the prefs dialog.
+ */
+void
+gnc_save_on_close_expires_cb (GtkToggleButton *button, GtkWidget *dialog)
+{
+ GtkWidget *spinner = g_object_get_data (G_OBJECT (dialog),
+ "save_on_close_wait_time");
+ gtk_widget_set_sensitive(spinner, gtk_toggle_button_get_active(button));
+}
/** This function compares two add-ins to see if they specify the same
* tab name.
@@ -1200,7 +1213,7 @@ static GtkWidget *
gnc_preferences_dialog_create(GtkWindow *parent)
{
GtkBuilder *builder;
- GtkWidget *dialog, *notebook, *label, *image;
+ GtkWidget *dialog, *notebook, *label, *image, *spinner;
GtkWidget *box, *date, *period, *currency, *fcb, *button;
GHashTable *prefs_table;
GDate* gdate = NULL;
@@ -1261,6 +1274,9 @@ gnc_preferences_dialog_create(GtkWindow *parent)
image = GTK_WIDGET(gtk_builder_get_object (builder, "separator_error"));
g_object_set_data(G_OBJECT(dialog), "separator_error", image);
+ spinner = GTK_WIDGET(gtk_builder_get_object (builder, "pref/general/save-on-close-wait-time"));
+ g_object_set_data(G_OBJECT(dialog), "save_on_close_wait_time", spinner);
+
DEBUG("autoconnect");
gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dialog);
@@ -1363,6 +1379,9 @@ gnc_preferences_dialog_create(GtkWindow *parent)
label = GTK_WIDGET(gtk_builder_get_object (builder, "locale_currency2"));
gtk_label_set_label(GTK_LABEL(label), currency_name);
+ button = GTK_WIDGET(gtk_builder_get_object (builder, "pref/general/save-on-close-expires"));
+ gnc_save_on_close_expires_cb (GTK_TOGGLE_BUTTON(button), dialog);
+
g_object_unref(G_OBJECT(builder));
LEAVE("dialog %p", dialog);
diff --git a/gnucash/gnome-utils/gnc-main-window.c b/gnucash/gnome-utils/gnc-main-window.c
index 51fba55..330e02b 100644
--- a/gnucash/gnome-utils/gnc-main-window.c
+++ b/gnucash/gnome-utils/gnc-main-window.c
@@ -1188,7 +1188,9 @@ static gboolean auto_save_countdown (GtkWidget *dialog)
if (!GTK_IS_LABEL (label))
return FALSE; /* remove timer */
- secs_to_save--;
+ /* Protect against rolling over to MAXUINT */
+ if (secs_to_save)
+ --secs_to_save;
DEBUG ("Counting down: %d seconds", secs_to_save);
timeoutstr = g_strdup_printf (MSG_AUTO_SAVE, secs_to_save);
diff --git a/gnucash/gtkbuilder/dialog-preferences.glade b/gnucash/gtkbuilder/dialog-preferences.glade
index b09b754..9d06365 100644
--- a/gnucash/gtkbuilder/dialog-preferences.glade
+++ b/gnucash/gtkbuilder/dialog-preferences.glade
@@ -85,6 +85,7 @@
<property name="page_increment">10</property>
</object>
<object class="GtkAdjustment" id="save_on_close_adj">
+ <property name="lower">1</property>
<property name="upper">300</property>
<property name="value">20</property>
<property name="step_increment">1</property>
@@ -1624,6 +1625,7 @@ many months before the current month:</property>
<property name="margin_left">12</property>
<property name="use_underline">True</property>
<property name="draw_indicator">True</property>
+ <signal name="toggled" handler="gnc_save_on_close_expires_cb" swapped="no"/>
</object>
<packing>
<property name="left_attach">0</property>
Summary of changes:
gnucash/gnome-utils/dialog-preferences.c | 21 ++++++++++++++++++++-
gnucash/gnome-utils/gnc-main-window.c | 4 +++-
gnucash/gtkbuilder/dialog-preferences.glade | 2 ++
3 files changed, 25 insertions(+), 2 deletions(-)
More information about the gnucash-changes
mailing list