r23356 - gnucash/trunk/src - Bug 710979 - Crash in gnc_plugin_page_invoice_summarybar_position_changed
Geert Janssens
gjanssens at code.gnucash.org
Wed Oct 30 10:43:59 EDT 2013
Author: gjanssens
Date: 2013-10-30 10:43:58 -0400 (Wed, 30 Oct 2013)
New Revision: 23356
Trac: http://svn.gnucash.org/trac/changeset/23356
Modified:
gnucash/trunk/src/app-utils/gnc-gsettings.c
gnucash/trunk/src/business/business-gnome/gnc-plugin-page-invoice.c
Log:
Bug 710979 - Crash in gnc_plugin_page_invoice_summarybar_position_changed
Signal handlers didn't get removed properly from gsettings keys
when an invoice page was closed, leading to a crash if the
signal handler is later activated again.
Modified: gnucash/trunk/src/app-utils/gnc-gsettings.c
===================================================================
--- gnucash/trunk/src/app-utils/gnc-gsettings.c 2013-10-29 20:53:21 UTC (rev 23355)
+++ gnucash/trunk/src/app-utils/gnc-gsettings.c 2013-10-30 14:43:58 UTC (rev 23356)
@@ -192,30 +192,26 @@
{
gint matched = 0;
gchar *signal = NULL;
+ GQuark quark = 0;
GSettings *schema_ptr = gnc_gsettings_get_schema_ptr (schema);
g_return_if_fail (G_IS_SETTINGS (schema_ptr));
g_return_if_fail (func);
- if ((!key) || (*key == '\0'))
- signal = g_strdup ("changed");
- else
- {
- if (gnc_gsettings_is_valid_key(schema_ptr, key))
- signal = g_strconcat ("changed::", key, NULL);
- }
+ ENTER ();
+ if ((key) && (gnc_gsettings_is_valid_key(schema_ptr, key)))
+ quark = g_quark_from_string (key);
+
matched = g_signal_handlers_disconnect_matched (
schema_ptr,
G_SIGNAL_MATCH_DETAIL | G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA,
- 0, /* signal_id */
- g_quark_from_string (signal), /* signal_detail */
+ g_signal_lookup ("changed", G_TYPE_SETTINGS), /* signal_id */
+ quark, /* signal_detail */
NULL, /* closure */
G_CALLBACK (func), /* callback function */
user_data);
- DEBUG ("Removed %d handlers for signal '%s' from schema '%s'", matched, signal, schema);
-
- g_free (signal);
+ LEAVE ("Schema: %s, key: %s - removed %d handlers for 'changed' signal", schema, key, matched);
}
Modified: gnucash/trunk/src/business/business-gnome/gnc-plugin-page-invoice.c
===================================================================
--- gnucash/trunk/src/business/business-gnome/gnc-plugin-page-invoice.c 2013-10-29 20:53:21 UTC (rev 23355)
+++ gnucash/trunk/src/business/business-gnome/gnc-plugin-page-invoice.c 2013-10-30 14:43:58 UTC (rev 23356)
@@ -621,7 +621,6 @@
plugin_page = GNC_PLUGIN_PAGE(user_data);
page = GNC_PLUGIN_PAGE_INVOICE (user_data);
- g_return_if_fail(page != NULL);
priv = GNC_PLUGIN_PAGE_INVOICE_GET_PRIVATE(page);
if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SUMMARYBAR_POSITION_TOP))
More information about the gnucash-changes
mailing list