diff options
author | Mike Gorse <mgorse@novell.com> | 2010-12-29 19:12:55 -0500 |
---|---|---|
committer | Mike Gorse <mgorse@novell.com> | 2010-12-29 19:12:55 -0500 |
commit | f8230043c35757edf02c2f8ce7217f51294e52e8 (patch) | |
tree | 236dc8f942d2b2d12eb3b3bc4ee525a7863ef9a8 /atspi/atspi-application.c | |
parent | 92511ee7ab20a3781fc9a337b6933ab8ca20d2a2 (diff) | |
download | at-spi2-core-f8230043c35757edf02c2f8ce7217f51294e52e8.tar.gz |
Initial pass at adding i18n and proper object disposal
Objects are now "disposed" when RemoveAccessible is received or the application
goes away. This allows the objects to be dereferenced and properly cleaned up.
Also fix some related bugs and add i18n.
Some reference leaks remain, however.
Diffstat (limited to 'atspi/atspi-application.c')
-rw-r--r-- | atspi/atspi-application.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/atspi/atspi-application.c b/atspi/atspi-application.c index 6dbadce2..c2202a1b 100644 --- a/atspi/atspi-application.c +++ b/atspi/atspi-application.c @@ -31,12 +31,41 @@ atspi_application_init (AtspiApplication *application) } static void -atspi_application_finalize (GObject *obj) +dispose_accessible (gpointer key, gpointer obj_data, gpointer data) { - AtspiApplication *application = ATSPI_APPLICATION (obj); + g_object_run_dispose (obj_data); +} + +static void +atspi_application_dispose (GObject *object) +{ + AtspiApplication *application = ATSPI_APPLICATION (object); + + if (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; + } + + G_OBJECT_CLASS (atspi_application_parent_class)->dispose (object); +} + +static void +atspi_application_finalize (GObject *object) +{ + AtspiApplication *application = ATSPI_APPLICATION (object); if (application->bus_name) g_free (application->bus_name); + + G_OBJECT_CLASS (atspi_application_parent_class)->finalize (object); } static void @@ -44,6 +73,7 @@ atspi_application_class_init (AtspiApplicationClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + object_class->dispose = atspi_application_dispose; object_class->finalize = atspi_application_finalize; } |