}
static void
-atspi_application_finalize (AtspiApplication *application)
+dispose_accessible (gpointer key, gpointer obj_data, gpointer data)
{
- if (application->bus_name)
- g_free (application->bus_name);
+ g_object_run_dispose (obj_data);
+}
+
+static void
+atspi_application_dispose (GObject *object)
+{
+ AtspiApplication *application = ATSPI_APPLICATION (object);
+
+ if (application->bus)
+ {
+ if (application->bus != _atspi_bus ())
+ dbus_connection_close (application->bus);
+ dbus_connection_unref (application->bus);
+ application->bus = NULL;
+ }
+
+ if (application->hash)
+ {
+ g_hash_table_foreach (application->hash, dispose_accessible, NULL);
+ g_hash_table_unref (application->hash);
+ application->hash = NULL;
+ }
+
+ if (application->root)
+ {
+ g_clear_object (&application->root->parent.app);
+ g_object_unref (application->root);
+ application->root = NULL;
+ }
+
+ G_OBJECT_CLASS (atspi_application_parent_class)->dispose (object);
+}
+
+static void
+atspi_application_finalize (GObject *object)
+{
+ AtspiApplication *application = ATSPI_APPLICATION (object);
+
+ g_free (application->bus_name);
+ g_free (application->toolkit_name);
+ g_free (application->toolkit_version);
+ g_free (application->atspi_version);
+
+ G_OBJECT_CLASS (atspi_application_parent_class)->finalize (object);
}
static void
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ object_class->dispose = atspi_application_dispose;
object_class->finalize = atspi_application_finalize;
}
AtspiApplication *application;
application = g_object_new (ATSPI_TYPE_APPLICATION, NULL);
- if (application)
- application->bus_name = g_strdup (bus_name);
+ application->bus_name = g_strdup (bus_name);
+ application->root = NULL;
return application;
}