mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
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:
parent
9ae7cb08d8
commit
36778dae52
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user