static GQuark spi_dec_private_quark = 0;
-int (*x_default_error_handler) (Display *display, XErrorEvent *error_event);
+static int (*x_default_error_handler) (Display *display, XErrorEvent *error_event);
typedef enum {
SPI_DEVICE_TYPE_KBD,
e.source = BONOBO_OBJREF (controller->registry->desktop);
e.detail1 = last_mouse_pos->x;
e.detail2 = last_mouse_pos->y;
- spi_init_any_nil (&e.any_data);
+ spi_init_any_nil (&e.any_data,
+ spi_accessible_new_return (atk_get_root (), FALSE, NULL),
+ Accessibility_ROLE_UNKNOWN,
+ "");
CORBA_exception_init (&ev);
if (!is_consumed)
{
}
else
spi_dec_set_unlatch_pending (controller, mask_return);
+
+ CORBA_free (e.any_data._value);
}
return TRUE;
}
int *x, int *y, gboolean *moved)
{
Accessibility_Event e;
+ Accessibility_EventDetails *details;
CORBA_Environment ev;
int win_x_return,win_y_return;
unsigned int mask_return;
e.source = BONOBO_OBJREF (controller->registry->desktop);
e.detail1 = *x;
e.detail2 = *y;
- spi_init_any_nil (&e.any_data);
+ spi_init_any_nil (&e.any_data,
+ spi_accessible_new_return (atk_get_root (), FALSE, NULL),
+ Accessibility_ROLE_UNKNOWN,
+ "");
CORBA_exception_init (&ev);
Accessibility_Registry_notifyEvent (BONOBO_OBJREF (controller->registry),
&e,
&ev);
+ details = e.any_data._value;
+ CORBA_free (details);
e.type = "mouse:rel";
e.source = BONOBO_OBJREF (controller->registry->desktop);
e.detail1 = *x - last_mouse_pos->x;
e.detail2 = *y - last_mouse_pos->y;
- spi_init_any_nil (&e.any_data);
+ spi_init_any_nil (&e.any_data,
+ spi_accessible_new_return (atk_get_root (), FALSE, NULL),
+ Accessibility_ROLE_UNKNOWN,
+ "");
CORBA_exception_init (&ev);
last_mouse_pos->x = *x;
last_mouse_pos->y = *y;
Accessibility_Registry_notifyEvent (BONOBO_OBJREF (controller->registry),
&e,
&ev);
+ details = e.any_data._value;
+ CORBA_free (details);
*moved = True;
}
else
e.source = BONOBO_OBJREF (controller->registry->desktop);
e.detail1 = prev_mask & key_modifier_mask;
e.detail2 = current_mask & key_modifier_mask;
- spi_init_any_nil (&e.any_data);
+ spi_init_any_nil (&e.any_data,
+ spi_accessible_new_return (atk_get_root (), FALSE, NULL),
+ Accessibility_ROLE_UNKNOWN,
+ "");
CORBA_exception_init (&ev);
Accessibility_Registry_notifyEvent (BONOBO_OBJREF (controller->registry),
&e,
&ev);
+ CORBA_free (e.any_data._value);
}
static gboolean
e.source = BONOBO_OBJREF (controller->registry->desktop);
e.detail1 = last_mouse_pos->x;
e.detail2 = last_mouse_pos->y;
- spi_init_any_nil (&e.any_data);
+ spi_init_any_nil (&e.any_data,
+ spi_accessible_new_return (atk_get_root (), FALSE, NULL),
+ Accessibility_ROLE_UNKNOWN,
+ "");
CORBA_exception_init (&ev);
Accessibility_Registry_notifyEvent (BONOBO_OBJREF (controller->registry),
&e,
&ev);
+ CORBA_free (e.any_data._value);
}
xkb_mod_unlatch_occurred = (xevent->type == ButtonPress ||
return GDK_FILTER_CONTINUE;
}
-int
+static int
_spi_controller_device_error_handler (Display *display, XErrorEvent *error)
{
if (error->error_code == BadAccess)
DEControllerKeyListener *listener,
CORBA_boolean is_system_global)
{
- if ((key_event->modifiers == (CORBA_unsigned_short) (listener->mask & 0xFF)) &&
+ if (((key_event->modifiers & 0xFF) == (CORBA_unsigned_short) (listener->mask & 0xFF)) &&
spi_key_set_contains_key (listener->keys, key_event) &&
spi_eventtype_seq_contains_event (listener->listener.typeseq, key_event) &&
(is_system_global == listener->mode->global))
static gboolean
spi_controller_notify_keylisteners (SpiDEController *controller,
- const Accessibility_DeviceEvent *key_event,
+ Accessibility_DeviceEvent *key_event,
CORBA_boolean is_system_global,
CORBA_Environment *ev)
{
return FALSE;
}
+ /* set the NUMLOCK event mask bit if appropriate: see bug #143702 */
+ if (key_event->modifiers & _numlock_physical_mask)
+ key_event->modifiers |= SPI_KEYMASK_NUMLOCK;
+
for (l = *key_listeners; l; l = l->next)
{
DEControllerKeyListener *key_listener = l->data;
{
GList *l, *next;
gboolean update_failed = FALSE;
- KeyCode keycode;
+ KeyCode keycode = 0;
g_return_val_if_fail (controller != NULL, FALSE);
g_print ("notifylistening listeners synchronously: controller %p, event id %d\n",
controller, (int) event->id);
#endif
- return spi_controller_notify_keylisteners (controller, event, CORBA_FALSE, ev) ?
+ return spi_controller_notify_keylisteners (controller,
+ (Accessibility_DeviceEvent *)
+ event, CORBA_FALSE, ev) ?
CORBA_TRUE : CORBA_FALSE;
}
#ifdef SPI_DEBUG
fprintf (stderr, "notifying listeners asynchronously\n");
#endif
- spi_controller_notify_keylisteners (controller, event, CORBA_FALSE, ev);
+ spi_controller_notify_keylisteners (controller, (Accessibility_DeviceEvent *)
+ event, CORBA_FALSE, ev);
}
static void
}
#ifdef HAVE_XEVIE
-Bool isEvent(dpy,event,arg)
- Display *dpy;
- XEvent *event;
- char *arg;
+static Bool isEvent(Display *dpy, XEvent *event, char *arg)
{
return TRUE;
}
-gboolean
+static gboolean
handle_io (GIOChannel *source,
GIOCondition condition,
gpointer data)
{
CORBA_Environment ev;
Accessibility_DeviceEvent key_event;
+ gboolean ret;
g_assert (event->type == KeyPress || event->type == KeyRelease);
spi_controller_update_key_grabs (controller, &key_event);
/* relay to listeners, and decide whether to consume it or not */
- return spi_controller_notify_keylisteners (controller, &key_event, CORBA_TRUE, &ev);
+ ret = spi_controller_notify_keylisteners (controller, &key_event, CORBA_TRUE, &ev);
+ CORBA_free(key_event.event_string);
+ return ret;
}
SpiDEController *