summaryrefslogtreecommitdiff
path: root/gio/gpropertyaction.c
diff options
context:
space:
mode:
Diffstat (limited to 'gio/gpropertyaction.c')
-rw-r--r--gio/gpropertyaction.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/gio/gpropertyaction.c b/gio/gpropertyaction.c
index 8df765e98..52eae84e5 100644
--- a/gio/gpropertyaction.c
+++ b/gio/gpropertyaction.c
@@ -313,6 +313,15 @@ g_property_action_set_property_name (GPropertyAction *paction,
GParamSpec *pspec;
gchar *detailed;
+ /* In case somebody is constructing GPropertyAction without passing
+ * a property name
+ */
+ if (G_UNLIKELY (property_name == NULL || property_name[0] == '\0'))
+ {
+ g_critical ("Attempted to use an empty property name for GPropertyAction");
+ return;
+ }
+
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (paction->object), property_name);
if (pspec == NULL)
@@ -408,12 +417,24 @@ g_property_action_get_property (GObject *object,
}
static void
+g_property_action_dispose (GObject *object)
+{
+ GPropertyAction *paction = G_PROPERTY_ACTION (object);
+
+ if (paction->object != NULL)
+ {
+ g_signal_handlers_disconnect_by_func (paction->object, g_property_action_notify, paction);
+ g_clear_object (&paction->object);
+ }
+
+ G_OBJECT_CLASS (g_property_action_parent_class)->dispose (object);
+}
+
+static void
g_property_action_finalize (GObject *object)
{
GPropertyAction *paction = G_PROPERTY_ACTION (object);
- g_signal_handlers_disconnect_by_func (paction->object, g_property_action_notify, paction);
- g_object_unref (paction->object);
g_free (paction->name);
G_OBJECT_CLASS (g_property_action_parent_class)
@@ -445,6 +466,7 @@ g_property_action_class_init (GPropertyActionClass *class)
object_class->set_property = g_property_action_set_property;
object_class->get_property = g_property_action_get_property;
+ object_class->dispose = g_property_action_dispose;
object_class->finalize = g_property_action_finalize;
/**