Catch toolkit name/version and AT-SPI version per-application
authorMike Gorse <mgorse@novell.com>
Wed, 25 May 2011 15:10:10 +0000 (10:10 -0500)
committerMike Gorse <mgorse@novell.com>
Wed, 25 May 2011 15:10:10 +0000 (10:10 -0500)
atspi/atspi-accessible.c
atspi/atspi-application.c
atspi/atspi-application.h

index 82ee43d..f1f0788 100644 (file)
@@ -756,13 +756,16 @@ atspi_accessible_get_application (AtspiAccessible *obj, GError **error)
 gchar *
 atspi_accessible_get_toolkit_name (AtspiAccessible *obj, GError **error)
 {
-  gchar *ret = NULL;
-
   g_return_val_if_fail (obj != NULL, NULL);
 
-  if (!_atspi_dbus_get_property (obj, atspi_interface_application, "ToolkitName", error, "s", &ret))
-      return NULL;
-  return ret;
+  if (!obj->parent.app)
+    return NULL;
+
+  if (!obj->parent.app->toolkit_name)
+    _atspi_dbus_get_property (obj, atspi_interface_application, "ToolkitName",
+                              error, "s", &obj->parent.app->toolkit_name);
+
+  return g_strdup (obj->parent.app->toolkit_name);
 }
 
 /**
@@ -778,13 +781,16 @@ atspi_accessible_get_toolkit_name (AtspiAccessible *obj, GError **error)
 gchar *
 atspi_accessible_get_toolkit_version (AtspiAccessible *obj, GError **error)
 {
-  gchar *ret = NULL;
-
   g_return_val_if_fail (obj != NULL, NULL);
 
-  if (!_atspi_dbus_get_property (obj, atspi_interface_application, "Version", error, "s", &ret))
-      return NULL;
-  return ret;
+  if (!obj->parent.app)
+    return NULL;
+
+  if (!obj->parent.app->toolkit_version)
+    _atspi_dbus_get_property (obj, atspi_interface_application, "Version",
+                              error, "s", &obj->parent.app->toolkit_version);
+
+  return g_strdup (obj->parent.app->toolkit_version);
 }
 
 /**
@@ -801,13 +807,16 @@ atspi_accessible_get_toolkit_version (AtspiAccessible *obj, GError **error)
 gchar *
 atspi_accessible_get_atspi_version (AtspiAccessible *obj, GError **error)
 {
-  gchar *ret = NULL;
-
   g_return_val_if_fail (obj != NULL, NULL);
 
-  if (!_atspi_dbus_get_property (obj, atspi_interface_application, "AtspiVersion", error, "s", &ret))
-      return NULL;
-  return ret;
+  if (!obj->parent.app)
+    return NULL;
+
+  if (!obj->parent.app->atspi_version)
+    _atspi_dbus_get_property (obj, atspi_interface_application, "AtspiVersion",
+                              error, "s", &obj->parent.app->atspi_version);
+
+  return g_strdup (obj->parent.app->atspi_version);
 }
 
 /**
index 722d8aa..49124ba 100644 (file)
@@ -62,8 +62,10 @@ atspi_application_finalize (GObject *object)
 {
   AtspiApplication *application = ATSPI_APPLICATION (object);
 
-  if (application->bus_name)
-    g_free (application->bus_name);
+  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);
 }
index bb15978..f209275 100644 (file)
@@ -45,6 +45,9 @@ struct _AtspiApplication
   DBusConnection *bus;
   struct _AtspiAccessible *root;
   AtspiCache cache;
+  gchar *toolkit_name;
+  gchar *toolkit_version;
+  gchar *atspi_version;
 };
 
 typedef struct _AtspiApplicationClass AtspiApplicationClass;