summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPadraig O'Briain <padraigo@src.gnome.org>2001-12-04 17:12:48 +0000
committerPadraig O'Briain <padraigo@src.gnome.org>2001-12-04 17:12:48 +0000
commitcecce1cf6a6be8eb707462a5b2c80124fc84e7c7 (patch)
tree9cfc6cee270a9e40d4fa7ddae142672d45633c3f
parente689f7a2522ed2b860a6978af71bca34f1a55870 (diff)
downloadatk-cecce1cf6a6be8eb707462a5b2c80124fc84e7c7.tar.gz
Update atk_role_register() to allow extra roles to be defined Update
* atk/atkobject.c: Update atk_role_register() to allow extra roles to be defined Update atk_role_get_name() and atk_role_for_name() for newly defined roles * tests/testrelation.c: Add tests for roles
-rw-r--r--ChangeLog10
-rwxr-xr-xatk/atkobject.c47
-rw-r--r--tests/testrelation.c69
3 files changed, 115 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index a4493f0..39ee883 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2001-12-04 Padraig O'Briain <padraig.obriain@sun.com>
+
+ * atk/atkobject.c:
+ Update atk_role_register() to allow extra roles to be defined
+ Update atk_role_get_name() and atk_role_for_name() for newly defined
+ roles
+
+ * tests/testrelation.c:
+ Add tests for roles
+
2001-12-03 Padraig O'Briain <padraig.obriain@sun.com>
* atk/atkrelation.c:
diff --git a/atk/atkobject.c b/atk/atkobject.c
index 81ac0e1..c762db7 100755
--- a/atk/atkobject.c
+++ b/atk/atkobject.c
@@ -25,6 +25,8 @@
#include "atkmarshal.h"
#include "atk-enum-types.h"
+GPtrArray *extra_roles = NULL;
+
enum
{
PROP_0, /* gobject convention */
@@ -521,9 +523,11 @@ atk_object_ref_relation_set (AtkObject *accessible)
AtkRole
atk_role_register (const gchar *name)
{
- /* TODO: associate name with new type */
- static guint type = ATK_ROLE_LAST_DEFINED;
- return (++type);
+ if (!extra_roles)
+ extra_roles = g_ptr_array_new ();
+
+ g_ptr_array_add (extra_roles, g_strdup (name));
+ return extra_roles->len + ATK_ROLE_LAST_DEFINED;
}
/**
@@ -1082,7 +1086,7 @@ atk_role_get_name (AtkRole role)
{
GTypeClass *type_class;
GEnumValue *value;
- gchar *name;
+ gchar *name = NULL;
type_class = g_type_class_ref (ATK_TYPE_ROLE);
g_return_val_if_fail (G_IS_ENUM_CLASS (type_class), NULL);
@@ -1091,12 +1095,19 @@ atk_role_get_name (AtkRole role)
if (value)
{
- name = value->value_name;
+ name = value->value_nick;
}
else
{
- value = g_enum_get_value (G_ENUM_CLASS (type_class), ATK_ROLE_INVALID);
- name = value->value_name;
+ if (extra_roles)
+ {
+ gint n = role;
+
+ n -= ATK_ROLE_LAST_DEFINED + 1;
+
+ if (n < extra_roles->len)
+ name = g_ptr_array_index (extra_roles, n);
+ }
}
g_type_class_unref (type_class);
return name;
@@ -1117,14 +1128,14 @@ atk_role_for_name (const gchar *name)
{
GTypeClass *type_class;
GEnumValue *value;
- AtkRole role;
+ AtkRole role = ATK_ROLE_INVALID;
g_return_val_if_fail (name, ATK_ROLE_INVALID);
type_class = g_type_class_ref (ATK_TYPE_ROLE);
g_return_val_if_fail (G_IS_ENUM_CLASS (type_class), ATK_ROLE_INVALID);
- value = g_enum_get_value_by_name (G_ENUM_CLASS (type_class), name);
+ value = g_enum_get_value_by_nick (G_ENUM_CLASS (type_class), name);
if (value)
{
@@ -1132,7 +1143,23 @@ atk_role_for_name (const gchar *name)
}
else
{
- role = ATK_ROLE_INVALID;
+ gint i;
+
+ if (extra_roles)
+ {
+ for (i = 0; i < extra_roles->len; i++)
+ {
+ gchar *extra_role = (gchar *)g_ptr_array_index (extra_roles, i);
+
+ g_return_val_if_fail (extra_role, ATK_ROLE_INVALID);
+
+ if (strcmp (name, extra_role) == 0)
+ {
+ role = i + 1 + ATK_ROLE_LAST_DEFINED;
+ break;
+ }
+ }
+ }
}
g_type_class_unref (type_class);
diff --git a/tests/testrelation.c b/tests/testrelation.c
index 26907fa..6ea90ac 100644
--- a/tests/testrelation.c
+++ b/tests/testrelation.c
@@ -22,6 +22,7 @@
#include <string.h>
static gboolean test_relation (void);
+static gboolean test_role (void);
static gboolean
test_relation (void)
@@ -41,7 +42,7 @@ test_relation (void)
g_return_val_if_fail (name, FALSE);
if (strcmp (name, "node-child-of") != 0)
{
- g_print ("Unexpected name for ATK_STATE_MODAL %s\n", name);
+ g_print ("Unexpected name for ATK_RELATION_NODE_CHILD_OF %s\n", name);
return FALSE;
}
@@ -84,6 +85,67 @@ test_relation (void)
return TRUE;
}
+static gboolean
+test_role (void)
+{
+ AtkRole role1, role2;
+ G_CONST_RETURN gchar *name;
+
+ name = atk_role_get_name (ATK_ROLE_PAGE_TAB);
+ g_return_val_if_fail (name, FALSE);
+ if (strcmp (name, "page-tab") != 0)
+ {
+ g_print ("Unexpected name for ATK_ROLE_PAGE_TAB %s\n", name);
+ return FALSE;
+ }
+
+ name = atk_role_get_name (ATK_ROLE_LAYERED_PANE);
+ g_return_val_if_fail (name, FALSE);
+ if (strcmp (name, "layered-pane") != 0)
+ {
+ g_print ("Unexpected name for ATK_ROLE_LAYERED_PANE %s\n", name);
+ return FALSE;
+ }
+
+ role1 = atk_role_for_name ("list-item");
+ if (role1 != ATK_ROLE_LIST_ITEM)
+ {
+ g_print ("Unexpected role for list_item\n");
+ return FALSE;
+ }
+
+ role1 = atk_role_register ("test-role");
+ name = atk_role_get_name (role1);
+ g_return_val_if_fail (name, FALSE);
+ if (strcmp (name, "test-role") != 0)
+ {
+ g_print ("Unexpected name for test-role %s\n", name);
+ return FALSE;
+ }
+ role2 = atk_role_for_name ("test-role");
+ if (role1 != role2)
+ {
+ g_print ("Unexpected role for test-role\n");
+ return FALSE;
+ }
+ role2 = atk_role_for_name ("TEST_ROLE");
+ if (role2 != 0)
+ {
+ g_print ("Unexpected role for TEST_ROLE\n");
+ return FALSE;
+ }
+ /*
+ * Check that a non-existent type returns NULL
+ */
+ name = atk_role_get_name (ATK_ROLE_LAST_DEFINED + 2);
+ if (name)
+ {
+ g_print ("Unexpected name for undefined role %s\n", name);
+ return FALSE;
+ }
+ return TRUE;
+}
+
int
gtk_module_init (gint argc,
char* argv[])
@@ -97,5 +159,10 @@ gtk_module_init (gint argc,
g_print ("Relation tests succeeded\n");
else
g_print ("Relation tests failed\n");
+ b_ret = test_role ();
+ if (b_ret)
+ g_print ("Role tests succeeded\n");
+ else
+ g_print ("Role tests failed\n");
return 0;
}