+ spi_listener_corba_ref = (Accessibility_KeystrokeListener)
+ CORBA_Object_duplicate (bonobo_object_corba_objref (bonobo_object (listener)), &ev);
+
+ Accessibility_DeviceEventController_registerKeystrokeListener (
+ device_event_controller,
+ spi_listener_corba_ref,
+ all_keys,
+ controller_event_mask,
+ key_events,
+ (CORBA_boolean) ((sync_type | SPI_KEYLISTENER_ALL_WINDOWS)!=0),
+ &ev);
+}
+
+/**
+ * deregisterAccessibleKeystrokeListener:
+ * @listener: a pointer to the #AccessibleKeystrokeListener for which
+ * keystroke events are requested.
+ * @modmask: the key modifier mask for which this listener is to be
+ * 'deregistered' (of type #AccessibleeyMaskType).
+ *
+ * Removes a keystroke event listener from the registry's listener queue,
+ * ceasing notification of events with modifiers matching @modmask.
+ **/
+void
+deregisterAccessibleKeystrokeListener (AccessibleKeystrokeListener *listener,
+ AccessibleKeyMaskType modmask)
+{
+ Accessibility_ControllerEventMask *controller_event_mask =
+ Accessibility_ControllerEventMask__alloc();
+ Accessibility_DeviceEventController device_event_controller =
+ Accessibility_Registry_getDeviceEventController (registry, &ev);
+ Accessibility_KeySet *all_keys = Accessibility_KeySet__alloc();
+ Accessibility_KeyEventTypeSeq *key_events = Accessibility_KeyEventTypeSeq__alloc();
+ Accessibility_KeystrokeListener spi_listener_corba_ref;
+ Accessibility_DeviceEventController_unref (device_event_controller, &ev);
+ controller_event_mask->value = (CORBA_unsigned_long) modmask;
+ controller_event_mask->refcount = (CORBA_unsigned_short) 1;