* Boston, MA 02111-1307, USA.
*/
+#include <cspi/spi-private.h>
+
/*
*
* Global functions serviced by the registry
*
*/
+#if 0
/* static stuff used only by registry C bindings */
static GList *key_listeners = NULL;
static Display *display = NULL;
+#endif
/**
* registerGlobalEventListener:
* Returns: #TRUE if successful, otherwise #FALSE.
*
**/
-boolean
+SPIBoolean
registerGlobalEventListener (AccessibleEventListener *listener,
char *eventType)
{
+ SPIBoolean retval;
+
Accessibility_Registry_registerGlobalEventListener (
- registry,
+ cspi_registry (),
(Accessibility_EventListener)
bonobo_object_corba_objref (bonobo_object (listener)),
eventType,
- &ev);
+ cspi_ev ());
- if (ev._major != CORBA_NO_EXCEPTION)
- {
- return FALSE;
- }
- else
- {
- return TRUE;
- }
+ retval = !cspi_exception ();
+
+ return retval;
}
/**
* an event type.
*
* deregisters an AccessibleEventListener from the registry, for all
- * event types it may be listening to.
+ * event types it may be listening to. Also unrefs the listener.
+ * The listener cannot subsequently be reused.
*
* Returns: #TRUE if successful, otherwise #FALSE.
*
**/
-boolean
+SPIBoolean
deregisterGlobalEventListenerAll (AccessibleEventListener *listener)
{
Accessibility_Registry_deregisterGlobalEventListenerAll (
- registry,
+ cspi_registry (),
(Accessibility_EventListener)
CORBA_Object_duplicate (
bonobo_object_corba_objref (
- bonobo_object (listener)), &ev),
- &ev);
-
- if (ev._major != CORBA_NO_EXCEPTION)
- {
- return FALSE;
- }
- else
+ bonobo_object (listener)), cspi_ev ()),
+ cspi_ev ());
+ if (!cspi_exception ())
{
- return TRUE;
+ bonobo_object_unref (BONOBO_OBJECT (listener));
+ /* Would prefer that this were not a bonobo object: g_object_unref (listener);*/
}
+
+ return !cspi_exception ();
}
/**
* deregisterGlobalEventListener:
* Returns: #TRUE if successful, otherwise #FALSE.
*
**/
-boolean
+SPIBoolean
deregisterGlobalEventListener (AccessibleEventListener *listener,
char *eventType)
{
Accessibility_Registry_deregisterGlobalEventListener (
- registry,
+ cspi_registry (),
(Accessibility_EventListener)
CORBA_Object_duplicate (
- bonobo_object_corba_objref (bonobo_object (listener)), &ev),
+ bonobo_object_corba_objref (bonobo_object (listener)), cspi_ev ()),
(CORBA_char *) eventType,
- &ev);
+ cspi_ev ());
- if (ev._major != CORBA_NO_EXCEPTION)
- {
- return FALSE;
- }
- else
- {
- return TRUE;
- }
+ return !cspi_exception ();
}
/**
int
getDesktopCount ()
{
- return Accessibility_Registry_getDesktopCount (registry, &ev);
+ return Accessibility_Registry_getDesktopCount (cspi_registry (), cspi_ev ());
}
/**
Accessible*
getDesktop (int i)
{
- return Obj_Add (Accessibility_Registry_getDesktop (registry, (CORBA_short) i, &ev));
+ return cspi_object_add (Accessibility_Registry_getDesktop (cspi_registry (),
+ (CORBA_short) i,
+ cspi_ev ()));
}
/**
return 0;
}
-static gboolean
-key_event_source_func (void *p)
-{
- GList *listeners = (GList *)p;
- XEvent *x_event = g_new0 (XEvent, 1);
- while (XPending (display))
- {
- XNextEvent (display, x_event);
- while (listeners)
- {
- /* if the listener mask matches, notify it*/
- if (1)
- {
- ;
- }
- }
- }
- return TRUE;
-}
-
/**
* registerAccessibleKeystrokeListener:
* @listener: a pointer to the #AccessibleKeystrokeListener for which
* keystroke events are requested.
* @keys: a pointer to the #AccessibleKeySet indicating which
- * keystroke events are requested, or #SPI_KEYSET_ALL_KEYS.
+ * keystroke events are requested, or #CSPI_KEYSET_ALL_KEYS.
* @modmask: an #AccessibleKeyMaskType mask indicating which
* key event modifiers must be set in combination with @keys,
* events will only be reported for key events for which all
* the behavior of the notification/listener transaction.
*
* Register a listener for keystroke events, either pre-emptively for
- * all windows (SPI_KEYLISTENER_ALL_WINDOWS), or
- * non-preemptively (SPI_KEYLISTENER_NOSYNC).
+ * all windows (CSPI_KEYLISTENER_ALL_WINDOWS), or
+ * non-preemptively (CSPI_KEYLISTENER_NOSYNC).
* ( Other sync_type values may be available in the future.)
**/
void
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_Registry_getDeviceEventController (cspi_registry (), cspi_ev ());
+ Accessibility_KeySet *key_set = Accessibility_KeySet__alloc();
Accessibility_KeyEventTypeSeq *key_events = Accessibility_KeyEventTypeSeq__alloc();
- Accessibility_KeystrokeListener spi_listener_corba_ref;
- Accessibility_DeviceEventController_ref (device_event_controller, &ev);
+ Accessibility_KeystrokeListener cspi_listener_corba_ref;
+ gint i, mask;
+ Accessibility_DeviceEventController_ref (device_event_controller, cspi_ev ());
+
+ /* 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)
+ {
+ /* we overload the keyset long w/keycodes, the - bit acts as a flag */
+ 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]); */
+ }
+ }
+ /* copy the event filter values from the C api into the CORBA KeyEventTypeSeq */
+ mask=1;
+ i=0;
+ do
+ {
+ if (mask & eventmask) ++i;
+ mask <<= 1;
+ } while (mask & 0xFFFF);
+
+ key_events->_buffer = Accessibility_KeyEventTypeSeq_allocbuf (i);
+ i=0;
+ if (eventmask & SPI_KEY_PRESSED)
+ {
+ key_events->_buffer[i++] = Accessibility_KEY_PRESSED;
+ }
+ if (eventmask & SPI_KEY_RELEASED)
+ {
+ key_events->_buffer[i++] = Accessibility_KEY_RELEASED;
+ }
+ key_events->_length = i;
+
controller_event_mask->value = (CORBA_unsigned_long) modmask;
controller_event_mask->refcount = (CORBA_unsigned_short) 1;
- spi_listener_corba_ref = (Accessibility_KeystrokeListener)
- CORBA_Object_duplicate (bonobo_object_corba_objref (bonobo_object (listener)), &ev);
+ cspi_listener_corba_ref = (Accessibility_KeystrokeListener)
+ CORBA_Object_duplicate (bonobo_object_corba_objref (bonobo_object (listener)), cspi_ev ());
Accessibility_DeviceEventController_registerKeystrokeListener (
device_event_controller,
- spi_listener_corba_ref,
- all_keys,
+ cspi_listener_corba_ref,
+ key_set,
controller_event_mask,
key_events,
- (CORBA_boolean) ((sync_type | SPI_KEYLISTENER_ALL_WINDOWS)!=0),
- &ev);
+ (CORBA_boolean) ((sync_type & SPI_KEYLISTENER_ALL_WINDOWS)!=0),
+ cspi_ev ());
}
/**
Accessibility_ControllerEventMask *controller_event_mask =
Accessibility_ControllerEventMask__alloc();
Accessibility_DeviceEventController device_event_controller =
- Accessibility_Registry_getDeviceEventController (registry, &ev);
+ Accessibility_Registry_getDeviceEventController (cspi_registry (), cspi_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);
+ 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;
- spi_listener_corba_ref = (Accessibility_KeystrokeListener)
- CORBA_Object_duplicate (bonobo_object_corba_objref (bonobo_object (listener)), &ev);
+ cspi_listener_corba_ref = (Accessibility_KeystrokeListener)
+ CORBA_Object_duplicate (BONOBO_OBJREF(listener), cspi_ev ());
Accessibility_DeviceEventController_deregisterKeystrokeListener (
device_event_controller,
- spi_listener_corba_ref,
+ cspi_listener_corba_ref,
all_keys,
controller_event_mask,
key_events,
(CORBA_boolean) TRUE,
- &ev);
+ cspi_ev ());
}
/**
* being synthesized.
* @synth_type: a #AccessibleKeySynthType flag indicating whether @keyval
* is to be interpreted as a keysym rather than a keycode
- * (SPI_KEYSYM), or whether to synthesize
+ * (CSPI_KEYSYM), or whether to synthesize
* SPI_KEY_PRESS, SPI_KEY_RELEASE, or both (SPI_KEY_PRESSRELEASE).
*
* Synthesize a keyboard event (as if a hardware keyboard event occurred in the
* send keycode to alter, if necessary
*/
Accessibility_DeviceEventController device_event_controller =
- Accessibility_Registry_getDeviceEventController (registry, &ev);
+ Accessibility_Registry_getDeviceEventController (cspi_registry (), cspi_ev ());
Accessibility_DeviceEventController_generateKeyEvent (device_event_controller,
keyval,
(unsigned long) synth_type,
- &ev);
+ cspi_ev ());
}
/**