21
22
// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
22
23
// Boston, MA 02111-1307, USA.
24
[DllImport("atksharpglue-2")]
25
static extern void atksharp_object_factory_override_create_accessible (IntPtr type, CreateAccessibleDelegate cb);
25
static Hashtable instances = new Hashtable ();
27
protected override IntPtr Raw {
28
get { return base.Raw; }
31
if (value != IntPtr.Zero)
32
instances [LookupGType (GetType ())] = this;
36
static Hashtable marshalers = new Hashtable ();
38
static Marshaler GetMarshaler (GLib.GType gtype)
40
Marshaler marshaler = marshalers [gtype] as Marshaler;
41
if (marshaler == null) {
42
marshaler = new Marshaler (gtype);
43
marshalers [gtype] = marshaler;
27
48
[GLib.CDeclCallback]
28
49
delegate IntPtr CreateAccessibleDelegate (IntPtr raw);
30
static CreateAccessibleDelegate CreateAccessibleCallback;
32
[DllImport("libgobject-2.0-0.dll")]
33
static extern IntPtr g_object_ref (IntPtr handle);
35
static IntPtr CreateAccessible_cb (IntPtr raw)
38
Atk.ObjectFactory obj = GLib.Object.GetObject (raw, false) as Atk.ObjectFactory;
39
Atk.Object ret = obj.OnCreateAccessible ();
41
g_object_ref (ret.Handle);
42
return ret == null ? IntPtr.Zero : ret.Handle;
43
} catch (Exception e) {
44
GLib.ExceptionManager.RaiseUnhandledException (e, false);
52
delegate void InvalidateDelegate (IntPtr raw);
55
delegate IntPtr GetAccessibleTypeDelegate (IntPtr raw);
60
CreateAccessibleDelegate create_cb;
61
InvalidateDelegate invalidate_cb;
62
GetAccessibleTypeDelegate gettype_cb;
64
public Marshaler (GLib.GType gtype)
69
[DllImport("libgobject-2.0-0.dll")]
70
static extern IntPtr g_object_ref (IntPtr handle);
72
IntPtr CreateAccessible_cb (IntPtr raw)
75
Atk.ObjectFactory obj = instances [gtype] as Atk.ObjectFactory;
78
Atk.Object ret = obj.OnCreateAccessible (GLib.Object.GetObject (raw, false));
80
g_object_ref (ret.Handle);
81
return ret == null ? IntPtr.Zero : ret.Handle;
82
} catch (Exception e) {
83
GLib.ExceptionManager.RaiseUnhandledException (e, false);
89
void Invalidate_cb (IntPtr raw)
92
Atk.ObjectFactory obj = GLib.Object.GetObject (raw, false) as Atk.ObjectFactory;
94
instances.Remove (gtype);
95
marshalers.Remove (gtype);
96
} catch (Exception e) {
97
GLib.ExceptionManager.RaiseUnhandledException (e, false);
101
IntPtr GetAccessibleType_cb (IntPtr raw)
104
Atk.ObjectFactory obj = instances [gtype] as Atk.ObjectFactory;
106
return GLib.GType.Invalid.Val;
107
return obj.OnGetAccessibleType ().Val;
108
} catch (Exception e) {
109
GLib.ExceptionManager.RaiseUnhandledException (e, false);
112
return GLib.GType.Invalid.Val;
115
[DllImport("atksharpglue-2")]
116
static extern void atksharp_object_factory_override_create_accessible (IntPtr type, CreateAccessibleDelegate cb);
118
public void ConnectCreateAccessible ()
120
create_cb = new CreateAccessibleDelegate (CreateAccessible_cb);
121
atksharp_object_factory_override_create_accessible (gtype.Val, create_cb);
124
[DllImport("atksharpglue-2")]
125
static extern void atksharp_object_factory_override_invalidate (IntPtr type, InvalidateDelegate cb);
127
public void ConnectInvalidate ()
129
invalidate_cb = new InvalidateDelegate (Invalidate_cb);
130
atksharp_object_factory_override_invalidate (gtype.Val, invalidate_cb);
133
[DllImport("atksharpglue-2")]
134
static extern void atksharp_object_factory_override_get_accessible_type (IntPtr type, GetAccessibleTypeDelegate cb);
136
public void ConnectGetAccessibleType ()
138
gettype_cb = new GetAccessibleTypeDelegate (GetAccessibleType_cb);
139
atksharp_object_factory_override_get_accessible_type (gtype.Val, gettype_cb);
50
143
static void OverrideCreateAccessible (GLib.GType gtype)
52
if (CreateAccessibleCallback == null)
53
CreateAccessibleCallback = new CreateAccessibleDelegate (CreateAccessible_cb);
54
atksharp_object_factory_override_create_accessible (gtype.Val, CreateAccessibleCallback);
145
GetMarshaler (gtype).ConnectCreateAccessible ();
57
148
[GLib.DefaultSignalHandler (Type=typeof(Atk.ObjectFactory), ConnectionMethod="OverrideCreateAccessible")]
58
protected virtual Atk.Object OnCreateAccessible ()
149
protected virtual Atk.Object OnCreateAccessible (GLib.Object obj)
63
[DllImport("atksharpglue-2")]
64
static extern void atksharp_object_factory_override_invalidate (IntPtr type, InvalidateDelegate cb);
67
delegate void InvalidateDelegate (IntPtr raw);
69
static InvalidateDelegate InvalidateCallback;
71
static void Invalidate_cb (IntPtr raw)
74
Atk.ObjectFactory obj = GLib.Object.GetObject (raw, false) as Atk.ObjectFactory;
76
} catch (Exception e) {
77
GLib.ExceptionManager.RaiseUnhandledException (e, false);
81
154
static void OverrideInvalidate (GLib.GType gtype)
83
if (InvalidateCallback == null)
84
InvalidateCallback = new InvalidateDelegate (Invalidate_cb);
85
atksharp_object_factory_override_invalidate (gtype.Val, InvalidateCallback);
156
GetMarshaler (gtype).ConnectInvalidate ();
88
159
[GLib.DefaultSignalHandler (Type=typeof(Atk.ObjectFactory), ConnectionMethod="OverrideInvalidate")]
93
[DllImport("atksharpglue-2")]
94
static extern void atksharp_object_factory_override_get_accessible_type (IntPtr type, GetAccessibleTypeDelegate cb);
97
delegate IntPtr GetAccessibleTypeDelegate (IntPtr raw);
99
static GetAccessibleTypeDelegate GetAccessibleTypeCallback;
101
static IntPtr GetAccessibleType_cb (IntPtr raw)
104
Atk.ObjectFactory obj = GLib.Object.GetObject (raw, false) as Atk.ObjectFactory;
105
return obj.OnGetAccessibleType ().Val;
106
} catch (Exception e) {
107
GLib.ExceptionManager.RaiseUnhandledException (e, false);
113
164
static void OverrideGetAccessibleType (GLib.GType gtype)
115
if (GetAccessibleTypeCallback == null)
116
GetAccessibleTypeCallback = new GetAccessibleTypeDelegate (GetAccessibleType_cb);
117
atksharp_object_factory_override_get_accessible_type (gtype.Val, GetAccessibleTypeCallback);
166
GetMarshaler (gtype).ConnectGetAccessibleType ();
120
169
[GLib.DefaultSignalHandler (Type=typeof(Atk.ObjectFactory), ConnectionMethod="OverrideGetAccessibleType")]
121
170
protected virtual GLib.GType OnGetAccessibleType ()
123
172
return GLib.GType.Invalid;