summaryrefslogtreecommitdiff
path: root/patches/a11y/vcl-unx-gtk-a11y-atkfactory-cxx.diff
blob: a85e99d8dd03b7f04274cf657373f4c52a1be523 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
--- /dev/null	
+++ vcl/unx/gtk/a11y/atkfactory.cxx	
@@ -0,0 +1,70 @@
+#include <plugins/gtk/atkfactory.hxx>
+#include <plugins/gtk/gtkframe.hxx>
+#include "atkwrapper.hxx"
+
+extern "C" {
+
+static GType
+wrapper_factory_get_accessible_type(void)
+{
+  return atk_object_wrapper_get_type();
+}
+
+static AtkObject*
+wrapper_factory_create_accessible( GObject *pObj )
+{
+	GtkSalFrame *pFrame;
+
+	g_message ("wrapper_factory_create_accessible...");
+
+	pFrame = GtkSalFrame::getFromWindow( GTK_WINDOW( pObj ) );
+	g_return_val_if_fail( pFrame != NULL, NULL );
+
+	::com::sun::star::uno::Reference<
+			  ::com::sun::star::accessibility::XAccessible > xAccessible;
+	xAccessible = pFrame->getAccessible( true );
+
+	return atk_wrapper_get( xAccessible );
+}
+
+static void
+wrapper_factory_class_init( AtkObjectFactoryClass *klass )
+{
+  klass->create_accessible   = wrapper_factory_create_accessible;
+  klass->get_accessible_type = wrapper_factory_get_accessible_type;
+}
+
+static GType
+wrapper_factory_get_type (void)
+{
+  static GType t = 0;
+
+  if (!t) {
+    static const GTypeInfo tinfo =
+    {
+      sizeof (AtkObjectFactoryClass),
+      NULL, NULL, (GClassInitFunc) wrapper_factory_class_init,
+      NULL, NULL, sizeof (AtkObjectFactory), 0, NULL, NULL
+    };
+
+    t = g_type_register_static (
+	    ATK_TYPE_OBJECT_FACTORY, "OOoAtkObjectWrapperFactory",
+		&tinfo, (GTypeFlags) 0);
+  }										
+										
+  return t;									
+}
+
+}; // extern C
+
+void RegisterAtkFactory( GType nWindowType )
+{
+	AtkRegistry *pReg = atk_get_default_registry();
+	if( pReg )
+	{
+		g_warning( "Registering factory" );
+		atk_registry_set_factory_type
+			( pReg, nWindowType,
+			  wrapper_factory_get_type() );
+	}
+}