2 * AT-SPI - Assistive Technology Service Provider Interface
3 * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap)
5 * Copyright 2001, 2002 Sun Microsystems Inc.,
6 * Copyright 2001, 2002 Ximian, Inc.
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 * Boston, MA 02111-1307, USA.
24 #ifndef SPI_DEVICE_EVENT_CONTROLLER_H_
25 #define SPI_DEVICE_EVENT_CONTROLLER_H_
30 #include <dbus/dbus.h>
32 typedef struct _SpiDEController SpiDEController;
39 #define SPI_DEVICE_EVENT_CONTROLLER_TYPE (spi_device_event_controller_get_type ())
40 #define SPI_DEVICE_EVENT_CONTROLLER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SPI_DEVICE_EVENT_CONTROLLER_TYPE, SpiDEController))
41 #define SPI_DEVICE_EVENT_CONTROLLER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), SPI_DEVICE_EVENT_CONTROLLER_TYPE, SpiDEControllerClass))
42 #define SPI_IS_DEVICE_EVENT_CONTROLLER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SPI_DEVICE_EVENT_CONTROLLER_TYPE))
43 #define SPI_IS_DEVICE_EVENT_CONTROLLER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SPI_DEVICE_EVENT_CONTROLLER_TYPE))
44 #define SPI_DEVICE_EVENT_CONTROLLER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SPI_DEVICE_EVENT_CONTROLLER_TYPE, SpiDEControllerClass))
46 struct _SpiDEController {
49 SpiRegistry *registry;
51 GList *mouse_listeners;
53 GQueue *message_queue;
54 guint message_queue_idle;
60 SPI_DEVICE_TYPE_MOUSE,
61 SPI_DEVICE_TYPE_LAST_DEFINED
62 } SpiDeviceTypeCategory;
67 SpiDeviceTypeCategory type;
69 } DEControllerListener;
72 DEControllerListener listener;
75 Accessibility_ControllerEventMask mask;
76 Accessibility_EventListenerMode *mode;
77 } DEControllerKeyListener;
81 gint (*get_keycode) (SpiDEController *controller,
87 guint (*mouse_check) (SpiDEController *controller,
92 gboolean (*register_global_keygrabs) (SpiDEController *controller,
93 DEControllerKeyListener *key_listener);
95 void (*deregister_global_keygrabs) (SpiDEController *controller,
96 DEControllerKeyListener *key_listener);
98 gboolean (*synth_keycode_press) (SpiDEController *controller,
101 gboolean (*synth_keycode_release) (SpiDEController *controller,
104 gboolean (*lock_modifiers) (SpiDEController *controller,
107 gboolean (*unlock_modifiers) (SpiDEController *controller,
110 gboolean (*synth_keystring) (SpiDEController *controller,
113 const char *keystring);
115 gboolean (*grab_key) (SpiDEController *controller,
117 Accessibility_ControllerEventMask mod_mask);
119 void (*ungrab_key) (SpiDEController *controller,
121 Accessibility_ControllerEventMask mod_mask);
123 void (*emit_modifier_event) (SpiDEController *controller,
127 void (*generate_mouse_event) (SpiDEController *controller,
130 const char *eventName);
132 void (*init) (SpiDEController *controller);
133 void (*finalize) (SpiDEController *controller);
134 } SpiDEControllerPlat;
137 GObjectClass parent_class;
138 SpiDEControllerPlat plat;
139 } SpiDEControllerClass;
141 GType spi_device_event_controller_get_type (void);
142 SpiDEController *spi_device_event_controller_new (SpiRegistry *registry,
143 DBusConnection *bus);
145 gboolean spi_clear_error_state (void);
147 void spi_device_event_controller_start_poll_mouse (SpiRegistry *registry);
148 void spi_device_event_controller_stop_poll_mouse (void);
150 void spi_remove_device_listeners (SpiDEController *controller, const char *bus_name);
152 SpiDEController *spi_registry_dec_new (SpiRegistry *reg, DBusConnection *bus);
155 spi_controller_notify_mouselisteners (SpiDEController *controller,
156 const Accessibility_DeviceEvent *event);
159 spi_controller_notify_keylisteners (SpiDEController *controller,
160 Accessibility_DeviceEvent *key_event,
161 dbus_bool_t is_system_global);
163 gboolean spi_controller_update_key_grabs (SpiDEController *controller,
164 Accessibility_DeviceEvent *recv);
166 gboolean spi_dec_synth_keysym (SpiDEController *controller, long keysym);
168 void spi_dec_dbus_emit(SpiDEController *controller, const char *interface, const char *name, const char *minor, int a1, int a2);
171 void spi_dec_setup_x11 (SpiDEControllerClass *klass);
174 long ucs2keysym (long ucs);
175 long keysym2ucs(long keysym);
179 #endif /* DEVICEEVENTCONTROLLER_H_ */