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.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@23356 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Geert Janssens 2013-10-30 14:43:58 +00:00
parent 9ae7cb08d8
commit 36778dae52
2 changed files with 8 additions and 13 deletions

View File

@ -192,30 +192,26 @@ gnc_gsettings_remove_cb_by_func (const gchar *schema,
{
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);
}

View File

@ -621,7 +621,6 @@ gnc_plugin_page_invoice_summarybar_position_changed(gpointer prefs, gchar *pref,
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))