summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcorrectmost <[email protected]>2024-01-10 04:17:16 -0500
committerraveit65 <[email protected]>2024-02-15 16:59:03 +0100
commitbfa5f0a8ebe12e6e0918ce35e276c1189c8253ff (patch)
treeaace811773d0b13f2eae4f04f233be786f1383a6
parent9dc2785417f29a5354cf5f64f9342e146035372e (diff)
downloadmate-menus-bfa5f0a8ebe12e6e0918ce35e276c1189c8253ff.tar.bz2
mate-menus-bfa5f0a8ebe12e6e0918ce35e276c1189c8253ff.tar.xz
matemenu-tree: Fix crash when adding launcher from compact menu
The emit_changed_signal callback was attempting to run on a submenu that had already been destroyed by its parent menu. Closes #116
-rw-r--r--libmenu/matemenu-tree.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/libmenu/matemenu-tree.c b/libmenu/matemenu-tree.c
index 99c51a2..0260a6d 100644
--- a/libmenu/matemenu-tree.c
+++ b/libmenu/matemenu-tree.c
@@ -85,6 +85,7 @@ struct _MateMenuTree
#ifdef WITH_COLLECTION
GPtrArray *collection_applet;
GSettings *settings;
+ guint emit_changed_signal;
#endif /* WITH_COLLECTION */
MateMenuTreeFlags flags;
@@ -660,6 +661,9 @@ matemenu_tree_finalize (GObject *object)
tree);
g_object_unref (tree->settings);
+ if (tree->emit_changed_signal != 0)
+ g_source_remove (tree->emit_changed_signal);
+ tree->emit_changed_signal = 0;
#endif /* WITH_COLLECTION */
G_OBJECT_CLASS (matemenu_tree_parent_class)->finalize (object);
@@ -708,6 +712,8 @@ static gboolean
emit_changed_signal (gpointer data)
{
MateMenuTree *self = data;
+ self->emit_changed_signal = 0;
+
matemenu_tree_force_rebuild (self);
matemenu_tree_invoke_monitors (self);
@@ -739,7 +745,8 @@ collection_applet_changed (GSettings *settings,
self->collection_applet = NULL;
}
get_panel_collection_applet (self);
- g_idle_add (emit_changed_signal, (gpointer)self);
+ if (self->emit_changed_signal == 0)
+ self->emit_changed_signal = g_idle_add (emit_changed_signal, (gpointer)self);
}
#endif /* WITH_COLLECTION */
@@ -754,6 +761,7 @@ matemenu_tree_init (MateMenuTree *self)
g_signal_connect (self->settings, "changed::object-id-list",
G_CALLBACK (collection_applet_changed),
self);
+ self->emit_changed_signal = 0;
#endif /* WITH_COLLECTION */
}