X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cspi%2Fspi_registry.c;h=aa294c11fbd5036221de0ce904e47dc9eb3a485b;hb=e30f7b7a51a42a19765deedc3de17f489fca1d48;hp=28f39decd77668ce2b1daa94318f6af24591c05c;hpb=69dd1d7ca8ce918c393b673f56e012aed6973c90;p=platform%2Fcore%2Fuifw%2Fat-spi2-atk.git diff --git a/cspi/spi_registry.c b/cspi/spi_registry.c index 28f39de..aa294c1 100644 --- a/cspi/spi_registry.c +++ b/cspi/spi_registry.c @@ -5,6 +5,10 @@ * */ +/* static stuff used only by registry C bindings */ +static GList *key_listeners = NULL; +static Display *display = NULL; + /** * registerGlobalEventListener: * @listener: the #AccessibleEventListener to be registered against an event type. @@ -48,6 +52,34 @@ registerGlobalEventListener (AccessibleEventListener *listener, } /** + * deregisterGlobalEventListener: + * @listener: the #AccessibleEventListener to be registered against an event type. + * + * deregisters an AccessibleEventListener from the registry, for all event types it may be listening to. + * + * Returns: #TRUE if successful, otherwise #FALSE. + * + **/ +boolean +deregisterGlobalEventListenerAll (AccessibleEventListener *listener) +{ + Accessibility_Registry_deregisterGlobalEventListenerAll ( + registry, + (Accessibility_EventListener) + CORBA_Object_duplicate (bonobo_object_corba_objref (bonobo_object (listener)), &ev), + &ev); + + if (ev._major != CORBA_NO_EXCEPTION) + { + return FALSE; + } + else + { + return TRUE; + } +} + +/** * getDesktopCount: * * Get the number of virtual desktops. @@ -101,16 +133,68 @@ getDesktopList (Accessible **list) 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; +} + +void +save_this_impl_registerKeystrokeListener (KeystrokeListener *listener, KeyMaskType keymask) +{ + static gboolean initialized = FALSE; + static Window grab_window; + XEvent *x_event = g_new0(XEvent, 1); + key_listeners = g_list_append (key_listeners, listener); + if (!initialized) + { + g_timeout_add_full (G_PRIORITY_HIGH_IDLE, 200, key_event_source_func, key_listeners, NULL); + display = XOpenDisplay (getenv ("DISPLAY")); + grab_window = DefaultRootWindow (display); + XSelectInput (display, grab_window, KeyPress | KeyRelease); + initialized = TRUE; + } + /* */ + XGrabKey (display, + AnyKey, + LockMask, + grab_window, + False, + GrabModeAsync, + GrabModeAsync); + while (0) + { + XNextEvent (display, x_event); + g_print ("foo!\n"); + } +} + /** * registerKeystrokeListener: * @listener: a pointer to the #KeystrokeListener for which * keystroke events are requested. * - * Not Yet Implemented. - * **/ void -registerKeystrokeListener (KeystrokeListener *listener, KeyMaskType keymask) +registerKeystrokeListener (KeystrokeListener *listener, + KeySet *keys, + KeyMaskType modmask, + KeyEventMask eventmask, + KeyListenerSyncType sync_type) { Accessibility_ControllerEventMask *controller_event_mask = Accessibility_ControllerEventMask__alloc(); @@ -118,19 +202,50 @@ registerKeystrokeListener (KeystrokeListener *listener, KeyMaskType keymask) Accessibility_Registry_getDeviceEventController (registry, &ev); Accessibility_KeySet *all_keys = Accessibility_KeySet__alloc(); Accessibility_KeyEventTypeSeq *key_events = Accessibility_KeyEventTypeSeq__alloc(); + Accessibility_KeystrokeListener listener_corba_ref; Accessibility_DeviceEventController_ref (device_event_controller, &ev); - controller_event_mask->value = (CORBA_unsigned_long) keymask; + controller_event_mask->value = (CORBA_unsigned_long) modmask; controller_event_mask->refcount = (CORBA_unsigned_short) 1; - /* - fprintf (stderr, "controller %p, mask value %lu\n", (void *) device_event_controller, - (unsigned long) controller_event_mask->value ); - */ + listener_corba_ref = (Accessibility_KeystrokeListener) + CORBA_Object_duplicate (bonobo_object_corba_objref (bonobo_object (listener)), &ev); + + Accessibility_DeviceEventController_registerKeystrokeListener ( + device_event_controller, + listener_corba_ref, + all_keys, + controller_event_mask, + key_events, + (CORBA_boolean) ((sync_type | KEYLISTENER_CANCONSUME)!=0), + &ev); +} - Accessibility_DeviceEventController_registerKeystrokeListener ( +/** + * deregisterKeystrokeListener: + * @listener: a pointer to the #KeystrokeListener for which + * keystroke events are requested. + * + **/ +void +deregisterKeystrokeListener (KeystrokeListener *listener, KeyMaskType keymask) +{ + 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 listener_corba_ref; + Accessibility_DeviceEventController_unref (device_event_controller, &ev); + controller_event_mask->value = (CORBA_unsigned_long) keymask; + controller_event_mask->refcount = (CORBA_unsigned_short) 1; + + listener_corba_ref = (Accessibility_KeystrokeListener) + CORBA_Object_duplicate (bonobo_object_corba_objref (bonobo_object (listener)), &ev); + + Accessibility_DeviceEventController_deregisterKeystrokeListener ( device_event_controller, - (Accessibility_KeystrokeListener) - bonobo_object_corba_objref (bonobo_object (listener)), + listener_corba_ref, all_keys, controller_event_mask, key_events, @@ -151,9 +266,17 @@ registerKeystrokeListener (KeystrokeListener *listener, KeyMaskType keymask) * **/ void -generateKeyEvent (long keyCode, long meta) +generateKeyEvent (long keyval, KeySynthType type) { - ; +/* TODO: check current modifier status and + * send keycode to alter, if necessary + */ + Accessibility_DeviceEventController device_event_controller = + Accessibility_Registry_getDeviceEventController (registry, &ev); + Accessibility_DeviceEventController_generateKeyEvent (device_event_controller, + keyval, + (unsigned long) type, + &ev); } /**