* Boston, MA 02111-1307, USA.
*/
-#include <cspi/spi-private.h>
-
-/*
- *
- * Global functions serviced by the registry
- *
- */
+/* spi_registry.c: Global functions wrapping the registry */
-#if 0
-/* static stuff used only by registry C bindings */
-static GList *key_listeners = NULL;
-static Display *display = NULL;
-#endif
+#include <cspi/spi-private.h>
/**
* registerGlobalEventListener:
* Returns: #TRUE if successful, otherwise #FALSE.
*
**/
-boolean
+SPIBoolean
registerGlobalEventListener (AccessibleEventListener *listener,
- char *eventType)
+ const char *eventType)
{
- boolean retval;
+ SPIBoolean retval;
Accessibility_Registry_registerGlobalEventListener (
cspi_registry (),
(Accessibility_EventListener)
- bonobo_object_corba_objref (bonobo_object (listener)),
+ BONOBO_OBJREF (bonobo_object (listener)),
eventType,
cspi_ev ());
* an event type.
*
* deregisters an AccessibleEventListener from the registry, for all
- * event types it may be listening to. Also unrefs the listener.
- * The listener cannot subsequently be reused.
+ * event types it may be listening to. Use
+ * AccessibleEventListener_unref to release the
+ * listener reference.
*
* Returns: #TRUE if successful, otherwise #FALSE.
*
**/
-boolean
+SPIBoolean
deregisterGlobalEventListenerAll (AccessibleEventListener *listener)
{
Accessibility_Registry_deregisterGlobalEventListenerAll (
cspi_registry (),
- (Accessibility_EventListener)
- CORBA_Object_duplicate (
- bonobo_object_corba_objref (
- bonobo_object (listener)), cspi_ev ()),
- cspi_ev ());
- if (!cspi_exception ())
- {
- bonobo_object_unref (BONOBO_OBJECT (listener));
- /* Would prefer that this were not a bonobo object: g_object_unref (listener);*/
- }
+ (Accessibility_EventListener) BONOBO_OBJREF (listener),
+ cspi_ev ());
return !cspi_exception ();
}
* Returns: #TRUE if successful, otherwise #FALSE.
*
**/
-boolean
+SPIBoolean
deregisterGlobalEventListener (AccessibleEventListener *listener,
- char *eventType)
+ const char *eventType)
{
Accessibility_Registry_deregisterGlobalEventListener (
cspi_registry (),
- (Accessibility_EventListener)
- CORBA_Object_duplicate (
- bonobo_object_corba_objref (bonobo_object (listener)), cspi_ev ()),
+ (Accessibility_EventListener) BONOBO_OBJREF (listener),
(CORBA_char *) eventType,
cspi_ev ());
int
getDesktopCount ()
{
- return Accessibility_Registry_getDesktopCount (cspi_registry (), cspi_ev ());
+ int retval;
+
+ retval = Accessibility_Registry_getDesktopCount (
+ cspi_registry (), cspi_ev ());
+
+ cspi_return_val_if_ev ("getDesktopCount", -1);
+
+ return retval;
}
/**
AccessibleKeyEventMask eventmask,
AccessibleKeyListenerSyncType sync_type)
{
- Accessibility_ControllerEventMask *controller_event_mask =
- Accessibility_ControllerEventMask__alloc();
- Accessibility_DeviceEventController device_event_controller =
- Accessibility_Registry_getDeviceEventController (cspi_registry (), cspi_ev ());
- Accessibility_KeySet *key_set = Accessibility_KeySet__alloc();
- Accessibility_KeyEventTypeSeq *key_events = Accessibility_KeyEventTypeSeq__alloc();
- Accessibility_KeystrokeListener cspi_listener_corba_ref;
- gint i, mask;
- Accessibility_DeviceEventController_ref (device_event_controller, cspi_ev ());
+ gint i, mask;
+ Accessibility_KeySet key_set;
+ Accessibility_KeyEventTypeSeq key_events;
+ Accessibility_ControllerEventMask controller_event_mask;
+ Accessibility_DeviceEventController device_event_controller;
+
+ device_event_controller =
+ Accessibility_Registry_getDeviceEventController (cspi_registry (), cspi_ev ());
+
+ cspi_return_if_ev ("getting event controller");
/* copy the keyval filter values from the C api into the CORBA KeySet */
if (keys)
{
- key_set->_buffer = Accessibility_KeySet_allocbuf (
- (unsigned long) keys->len);
- key_set->_length = (unsigned long) keys->len;
- for (i=0; i < key_set->_length; ++i)
+ key_set._length = keys->len;
+ key_set._buffer = Accessibility_KeySet_allocbuf (keys->len);
+ for (i = 0; i < key_set._length; ++i)
{
/* we overload the keyset long w/keycodes, the - bit acts as a flag */
- key_set->_buffer[i] = (keys->keysyms[i]) ? keys->keysyms[i] :
+ key_set._buffer[i] = (keys->keysyms[i]) ? keys->keysyms[i] :
-keys->keycodes[i];
/* g_print ("key-set %d = %d\n", i, (int) key_set->_buffer[i]); */
}
}
+ else
+ {
+ key_set._length = 0;
+ key_set._buffer = NULL;
+ }
+
/* copy the event filter values from the C api into the CORBA KeyEventTypeSeq */
- mask=1;
- i=0;
+ mask = 1;
+ i = 0;
do
{
- if (mask & eventmask) ++i;
+ if (mask & eventmask)
+ {
+ ++i;
+ }
mask <<= 1;
- } while (mask & 0xFFFF);
+ }
+ while (mask & 0xFFFF);
- key_events->_buffer = Accessibility_KeyEventTypeSeq_allocbuf (i);
- i=0;
+ key_events._buffer = Accessibility_KeyEventTypeSeq_allocbuf (i);
+ i = 0;
if (eventmask & SPI_KEY_PRESSED)
{
- key_events->_buffer[i++] = Accessibility_KEY_PRESSED;
+ key_events._buffer[i++] = Accessibility_KEY_PRESSED;
}
if (eventmask & SPI_KEY_RELEASED)
{
- key_events->_buffer[i++] = Accessibility_KEY_RELEASED;
+ key_events._buffer[i++] = Accessibility_KEY_RELEASED;
}
- key_events->_length = i;
+ key_events._length = i;
- controller_event_mask->value = (CORBA_unsigned_long) modmask;
- controller_event_mask->refcount = (CORBA_unsigned_short) 1;
+ controller_event_mask.value = (CORBA_unsigned_long) modmask;
+ controller_event_mask.refcount = (CORBA_unsigned_short) 1;
- cspi_listener_corba_ref = (Accessibility_KeystrokeListener)
- CORBA_Object_duplicate (bonobo_object_corba_objref (bonobo_object (listener)), cspi_ev ());
-
- Accessibility_DeviceEventController_registerKeystrokeListener (
+ Accessibility_DeviceEventController_registerKeystrokeListener (
device_event_controller,
- cspi_listener_corba_ref,
- key_set,
- controller_event_mask,
- key_events,
+ BONOBO_OBJREF (listener),
+ &key_set,
+ &controller_event_mask,
+ &key_events,
(CORBA_boolean) ((sync_type & SPI_KEYLISTENER_ALL_WINDOWS)!=0),
cspi_ev ());
+
+ bonobo_object_release_unref (device_event_controller, cspi_ev ());
}
/**
deregisterAccessibleKeystrokeListener (AccessibleKeystrokeListener *listener,
AccessibleKeyMaskType modmask)
{
- Accessibility_ControllerEventMask *controller_event_mask =
- Accessibility_ControllerEventMask__alloc();
- Accessibility_DeviceEventController device_event_controller =
- Accessibility_Registry_getDeviceEventController (cspi_registry (), cspi_ev ());
- Accessibility_KeySet *all_keys = Accessibility_KeySet__alloc();
- Accessibility_KeyEventTypeSeq *key_events = Accessibility_KeyEventTypeSeq__alloc();
- Accessibility_KeystrokeListener cspi_listener_corba_ref;
- Accessibility_DeviceEventController_unref (device_event_controller, cspi_ev ());
- controller_event_mask->value = (CORBA_unsigned_long) modmask;
- controller_event_mask->refcount = (CORBA_unsigned_short) 1;
-
- cspi_listener_corba_ref = (Accessibility_KeystrokeListener)
- CORBA_Object_duplicate (BONOBO_OBJREF(listener), cspi_ev ());
-
+ Accessibility_ControllerEventMask controller_event_mask;
+ Accessibility_KeySet key_set;
+ Accessibility_KeyEventTypeSeq key_events;
+ Accessibility_DeviceEventController device_event_controller;
+
+ device_event_controller =
+ Accessibility_Registry_getDeviceEventController (cspi_registry (), cspi_ev ());
+
+ cspi_return_if_ev ("getting keystroke listener");
+
+ controller_event_mask.value = (CORBA_unsigned_long) modmask;
+ controller_event_mask.refcount = (CORBA_unsigned_short) 1;
+
+ key_events._buffer = NULL;
+ key_events._length = 0;
+
+ key_set._buffer = NULL;
+ key_set._length = 0;
+
Accessibility_DeviceEventController_deregisterKeystrokeListener (
device_event_controller,
- cspi_listener_corba_ref,
- all_keys,
- controller_event_mask,
- key_events,
+ BONOBO_OBJREF (listener),
+ &key_set,
+ &controller_event_mask,
+ &key_events,
(CORBA_boolean) TRUE,
cspi_ev ());
+
+ bonobo_object_release_unref (device_event_controller, NULL);
}
/**
*/
Accessibility_DeviceEventController device_event_controller =
Accessibility_Registry_getDeviceEventController (cspi_registry (), cspi_ev ());
+
+ cspi_return_if_ev ("getting event controller");
+
Accessibility_DeviceEventController_generateKeyEvent (device_event_controller,
keyval,
(unsigned long) synth_type,
cspi_ev ());
+
+ bonobo_object_release_unref (device_event_controller, NULL);
}
/**