Re: [g-a-devel]Patch for bug 93658
- From: Bill Haneman <bill haneman sun com>
- To: "Padraig O'Briain" <Padraig Obriain sun com>
- Cc: gnome-accessibility-devel gnome org
- Subject: Re: [g-a-devel]Patch for bug 93658
- Date: 10 Oct 2002 11:42:14 +0100
We chatted about this off-list. Padraig, if tests work out OK, then
please commit.
I was surprised about the fix since I thought "for sure" I had
encountered problems with the proposed solution before, but the root
causes must have been elsewhere.
Thanks Padraig for the fix, this will remove a major aggravation for our
AT developers (meaning that they will be able to listen for "global"
command keys without consuming them).
-Bill
On Tue, 2002-10-08 at 16:42, Padraig O'Briain wrote:
> Bill,
>
> spi_controller_update_key_grabs() is called in
> spi_device_event_controller_forward_key_event() to call XGrabKey for the key and
> modifier before XAllowEvents() is called.
>
> If the key event is not consumed XAllowEvents() is called with event-mode of
> ReplayKeyboard. This causes the grab to be released and the vent is processed
> successfully.
>
> If the event is not consumed XAllowEvents() is called with event-mode of
> AsyncKeyboard.
>
> As I as I can see from my testing it seems to work correclty.
>
> Can you suggest a test case to try and reproduce the problem of hanging the
> server you referred to?
>
> Padraig
>
> ------------- Begin Forwarded Message -------------
>
> Bug 93658 is ALL_WINDOWS key listeners always consume keys.
>
> Attached is a proposed patch.
>
> Padraig
>
> ------------- End Forwarded Message -------------
>
> ----
>
> Index: ChangeLog
> ===================================================================
> RCS file: /cvs/gnome/at-spi/ChangeLog,v
> retrieving revision 1.247
> diff -u -p -r1.247 ChangeLog
> --- ChangeLog 8 Oct 2002 08:53:58 -0000 1.247
> +++ ChangeLog 8 Oct 2002 09:20:54 -0000
> @@ -1,5 +1,15 @@
> 2002-10-08 Padraig O'Briain <padraig obriain sun com>
>
> + * registryd/deviceeventcontroller.c
> + (global_filter_fn): Correct typo which caused Keypress and KeyRelease
> + events to be ignored.
> + (spi_controller_update_key_grabs): Use GrabModeSync for pointer_mode
> + keyboard_mode so that XAllowEvents() can be called.
> +
> + Fixes bug #93658.
> +
> +2002-10-08 Padraig O'Briain <padraig obriain sun com>
> +
> * cspi/spi-accessible.c: Correct names of roles returned by
> AccessibleRole_getName(). Fixes bug #95055.
>
> Index: registryd/deviceeventcontroller.c
> ===================================================================
> RCS file: /cvs/gnome/at-spi/registryd/deviceeventcontroller.c,v
> retrieving revision 1.46
> diff -u -p -r1.46 deviceeventcontroller.c
> --- registryd/deviceeventcontroller.c 16 Sep 2002 11:03:39 -0000 1.46
> +++ registryd/deviceeventcontroller.c 8 Oct 2002 09:20:54 -0000
> @@ -416,7 +416,7 @@ handle_keygrab (SpiDEController
> {
> grab_mask.key_val = AnyKey;
> #ifdef SPI_DEBUG
> - fprintf (stderr, "AnyKey grab!"); */
> + fprintf (stderr, "AnyKey grab!");
> #endif
> process_cb (controller, &grab_mask);
> }
> @@ -548,7 +548,7 @@ global_filter_fn (GdkXEvent *gdk_xevent,
> XEvent *xevent = gdk_xevent;
> SpiDEController *controller;
>
> - if (xevent->type == KeyPress && xevent->type == KeyRelease)
> + if (xevent->type == KeyPress || xevent->type == KeyRelease)
> {
> controller = SPI_DEVICE_EVENT_CONTROLLER (data);
> spi_device_event_controller_forward_key_event (controller, xevent);
> @@ -594,7 +594,6 @@ spi_controller_register_with_devices (Sp
> x_default_error_handler = XSetErrorHandler (_spi_controller_device_error_handler);
> }
>
> -#define SPI_KEYEVENT_DEBUG
> static gboolean
> spi_key_set_contains_key (Accessibility_KeySet *key_set,
> const Accessibility_DeviceEvent *key_event)
> @@ -973,15 +972,15 @@ spi_controller_update_key_grabs (SpiDECo
> {
>
> #ifdef SPI_DEBUG
> - fprintf (stderr, "grab with mask %x\n", grab_mask->mod_mask);
> + fprintf (stderr, "grab %d with mask %x\n", grab_mask->key_val, grab_mask->mod_mask);
> #endif
> XGrabKey (spi_get_display (),
> grab_mask->key_val,
> grab_mask->mod_mask,
> gdk_x11_get_default_root_xwindow (),
> True,
> - GrabModeAsync,
> - GrabModeAsync);
> + GrabModeSync,
> + GrabModeSync);
> XSync (spi_get_display (), False);
> update_failed = spi_clear_error_state ();
> if (update_failed) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]