Workaround/error trapping for failed keygrabs in device event controller;
authorbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Mon, 14 Jan 2002 17:48:47 +0000 (17:48 +0000)
committerbillh <billh@e2bd861d-eb25-0410-b326-f6ed22b6b98c>
Mon, 14 Jan 2002 17:48:47 +0000 (17:48 +0000)
helpful when running on Solaris in particular.

git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@222 e2bd861d-eb25-0410-b326-f6ed22b6b98c

14 files changed:
ChangeLog
docs/reference/cspi/tmpl/spi_accessible.sgml
docs/reference/cspi/tmpl/spi_action.sgml
docs/reference/cspi/tmpl/spi_component.sgml
docs/reference/cspi/tmpl/spi_editabletext.sgml
docs/reference/cspi/tmpl/spi_hyperlink.sgml
docs/reference/cspi/tmpl/spi_hypertext.sgml
docs/reference/cspi/tmpl/spi_image.sgml
docs/reference/cspi/tmpl/spi_registry.sgml
docs/reference/cspi/tmpl/spi_selection.sgml
docs/reference/cspi/tmpl/spi_table.sgml
docs/reference/cspi/tmpl/spi_text.sgml
registryd/deviceeventcontroller.c
test/keysynth-demo.c

index d3aa428..365b29a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
 2002-01-11  Bill Haneman <bill.haneman@sun.com>
 
+        * registryd/deviceeventcontroller.c:
+       Replaced standard X error handler with a special handler that 
+       is non-fatal for failed keygrabs.  This works around 
+       problems with keygrab clashes sometimes observed on 
+       Solaris using CDE.
+       Re-instated SPI_DEVICE_TYPE_MOUSE in enum (didn't reinstate 
+       mouse handling code as yet).
+       
+2002-01-11  Bill Haneman <bill.haneman@sun.com>
+
        * configure.in:
        Incremented revision for desktop alpha release.
 
index f177805..449ffe5 100644 (file)
@@ -76,8 +76,9 @@ Accessible Objects
 </para>
 
 @obj: 
-@childIndex: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@childIndex: 
 
 
 <!-- ##### FUNCTION Accessible_getIndexInParent ##### -->
index 4674885..e9b2142 100644 (file)
@@ -49,8 +49,9 @@ AccessibleAction Interface
 </para>
 
 @obj: 
-@i: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@i: 
 
 
 <!-- ##### FUNCTION AccessibleAction_getKeyBinding ##### -->
@@ -59,8 +60,9 @@ AccessibleAction Interface
 </para>
 
 @obj: 
-@i: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@i: 
 
 
 <!-- ##### FUNCTION AccessibleAction_getName ##### -->
@@ -69,8 +71,9 @@ AccessibleAction Interface
 </para>
 
 @obj: 
-@i: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@i: 
 
 
 <!-- ##### FUNCTION AccessibleAction_getDescription ##### -->
@@ -79,7 +82,8 @@ AccessibleAction Interface
 </para>
 
 @obj: 
-@i: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@i: 
 
 
index b6a1372..bba2e1d 100644 (file)
@@ -62,10 +62,11 @@ AccessibleComponent Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @x: 
 @y: 
 @ctype: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleComponent_getAccessibleAtPoint ##### -->
@@ -74,10 +75,11 @@ AccessibleComponent Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @x: 
 @y: 
 @ctype: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleComponent_getExtents ##### -->
@@ -86,6 +88,7 @@ AccessibleComponent Interface
 </para>
 
 @obj: 
+<!-- # Unused Parameters # -->
 @x: 
 @y: 
 @width: 
@@ -99,6 +102,7 @@ AccessibleComponent Interface
 </para>
 
 @obj: 
+<!-- # Unused Parameters # -->
 @x: 
 @y: 
 @ctype: 
@@ -110,6 +114,7 @@ AccessibleComponent Interface
 </para>
 
 @obj: 
+<!-- # Unused Parameters # -->
 @width: 
 @height: 
 
index 730d515..8fa6fdd 100644 (file)
@@ -40,9 +40,10 @@ AccessibleEditableText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @startPos: 
 @endPos: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleEditableText_deleteText ##### -->
@@ -51,9 +52,10 @@ AccessibleEditableText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @startPos: 
 @endPos: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleEditableText_insertText ##### -->
@@ -62,10 +64,11 @@ AccessibleEditableText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @position: 
 @text: 
 @length: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleEditableText_cutText ##### -->
@@ -74,9 +77,10 @@ AccessibleEditableText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @startPos: 
 @endPos: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleEditableText_pasteText ##### -->
@@ -85,8 +89,9 @@ AccessibleEditableText Interface
 </para>
 
 @obj: 
-@position: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@position: 
 
 
 <!-- ##### FUNCTION AccessibleEditableText_setTextContents ##### -->
@@ -106,8 +111,9 @@ AccessibleEditableText Interface
 
 @obj: 
 @attributes: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @startOffset: 
 @endOffset: 
-@Returns: 
 
 
index 8d03b55..2f923b0 100644 (file)
@@ -45,6 +45,7 @@ AccessibleHyperlink Interface
 </para>
 
 @obj: 
+<!-- # Unused Parameters # -->
 @startIndex: 
 @endIndex: 
 
@@ -55,8 +56,9 @@ AccessibleHyperlink Interface
 </para>
 
 @obj: 
-@i: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@i: 
 
 
 <!-- ##### FUNCTION AccessibleHyperlink_getURI ##### -->
@@ -65,8 +67,9 @@ AccessibleHyperlink Interface
 </para>
 
 @obj: 
-@i: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@i: 
 
 
 <!-- ##### FUNCTION AccessibleHyperlink_isValid ##### -->
index 5a7f2c0..30d313a 100644 (file)
@@ -49,8 +49,9 @@ AccessibleHypertext Interface
 </para>
 
 @obj: 
-@linkIndex: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@linkIndex: 
 
 
 <!-- ##### FUNCTION AccessibleHypertext_getLinkIndex ##### -->
@@ -59,7 +60,8 @@ AccessibleHypertext Interface
 </para>
 
 @obj: 
-@characterOffset: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@characterOffset: 
 
 
index 32f036e..f666d78 100644 (file)
@@ -49,6 +49,7 @@ AccessibleImage Interface
 </para>
 
 @obj: 
+<!-- # Unused Parameters # -->
 @width: 
 @height: 
 
@@ -59,6 +60,7 @@ AccessibleImage Interface
 </para>
 
 @obj: 
+<!-- # Unused Parameters # -->
 @x: 
 @y: 
 @ctype: 
@@ -70,6 +72,7 @@ AccessibleImage Interface
 </para>
 
 @obj: 
+<!-- # Unused Parameters # -->
 @x: 
 @y: 
 @width: 
index 09ab7cd..fb55349 100644 (file)
@@ -195,10 +195,11 @@ Registry queries
 
 </para>
 
+@Returns: 
+<!-- # Unused Parameters # -->
 @keyval: 
 @keystring: 
 @synth_type: 
-@Returns: 
 
 
 <!-- ##### FUNCTION SPI_generateMouseEvent ##### -->
@@ -206,9 +207,10 @@ Registry queries
 
 </para>
 
+@Returns: 
+<!-- # Unused Parameters # -->
 @x: 
 @y: 
 @name: 
-@Returns: 
 
 
index d46f4ae..2668a50 100644 (file)
@@ -49,8 +49,9 @@ AccessibleSelection Interface
 </para>
 
 @obj: 
-@selectedChildIndex: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@selectedChildIndex: 
 
 
 <!-- ##### FUNCTION AccessibleSelection_selectChild ##### -->
@@ -59,8 +60,9 @@ AccessibleSelection Interface
 </para>
 
 @obj: 
-@childIndex: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@childIndex: 
 
 
 <!-- ##### FUNCTION AccessibleSelection_isChildSelected ##### -->
@@ -69,8 +71,9 @@ AccessibleSelection Interface
 </para>
 
 @obj: 
-@childIndex: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@childIndex: 
 
 
 <!-- ##### FUNCTION AccessibleSelection_deselectSelectedChild ##### -->
@@ -79,8 +82,9 @@ AccessibleSelection Interface
 </para>
 
 @obj: 
-@selectedChildIndex: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@selectedChildIndex: 
 
 
 <!-- ##### FUNCTION AccessibleSelection_clearSelection ##### -->
index 331c16a..38d142a 100644 (file)
@@ -40,9 +40,10 @@ AccessibleTable Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @row: 
 @column: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getCaption ##### -->
@@ -60,8 +61,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@index: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@index: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getColumnDescription ##### -->
@@ -70,8 +72,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@column: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@column: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getColumnExtentAt ##### -->
@@ -80,9 +83,10 @@ AccessibleTable Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @row: 
 @column: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getColumnHeader ##### -->
@@ -91,8 +95,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@column: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@column: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getIndexAt ##### -->
@@ -101,9 +106,10 @@ AccessibleTable Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @row: 
 @column: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getNColumns ##### -->
@@ -148,8 +154,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@index: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@index: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getRowDescription ##### -->
@@ -158,8 +165,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@row: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@row: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getRowExtentAt ##### -->
@@ -168,9 +176,10 @@ AccessibleTable Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @row: 
 @column: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getRowHeader ##### -->
@@ -179,8 +188,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@row: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@row: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getSelectedRows ##### -->
@@ -189,8 +199,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@selectedRows: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@selectedRows: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getSelectedColumns ##### -->
@@ -199,8 +210,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@selectedColumns: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@selectedColumns: 
 
 
 <!-- ##### FUNCTION AccessibleTable_getSummary ##### -->
@@ -218,8 +230,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@column: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@column: 
 
 
 <!-- ##### FUNCTION AccessibleTable_isRowSelected ##### -->
@@ -228,8 +241,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
-@row: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@row: 
 
 
 <!-- ##### FUNCTION AccessibleTable_isSelected ##### -->
@@ -238,8 +252,9 @@ AccessibleTable Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @row: 
 @column: 
-@Returns: 
 
 
index c4e6c77..b3bc9dd 100644 (file)
@@ -55,9 +55,10 @@ AccessibleText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @startOffset: 
 @endOffset: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleText_getAttributes ##### -->
@@ -66,10 +67,11 @@ AccessibleText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @offset: 
 @startOffset: 
 @endOffset: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleText_getCaretOffset ##### -->
@@ -96,6 +98,7 @@ AccessibleText Interface
 </para>
 
 @obj: 
+<!-- # Unused Parameters # -->
 @offset: 
 @x: 
 @y: 
@@ -119,10 +122,11 @@ AccessibleText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @x: 
 @y: 
 @type: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleText_getSelection ##### -->
@@ -131,6 +135,7 @@ AccessibleText Interface
 </para>
 
 @obj: 
+<!-- # Unused Parameters # -->
 @selectionNum: 
 @startOffset: 
 @endOffset: 
@@ -142,9 +147,10 @@ AccessibleText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @startOffset: 
 @endOffset: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleText_getTextBeforeOffset ##### -->
@@ -153,11 +159,12 @@ AccessibleText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @offset: 
 @type: 
 @startOffset: 
 @endOffset: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleText_getTextAfterOffset ##### -->
@@ -166,11 +173,12 @@ AccessibleText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @offset: 
 @type: 
 @startOffset: 
 @endOffset: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleText_getTextAtOffset ##### -->
@@ -179,11 +187,12 @@ AccessibleText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @offset: 
 @type: 
 @startOffset: 
 @endOffset: 
-@Returns: 
 
 
 <!-- ##### FUNCTION AccessibleText_removeSelection ##### -->
@@ -192,8 +201,9 @@ AccessibleText Interface
 </para>
 
 @obj: 
-@selectionNum: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@selectionNum: 
 
 
 <!-- ##### FUNCTION AccessibleText_setCaretOffset ##### -->
@@ -202,8 +212,9 @@ AccessibleText Interface
 </para>
 
 @obj: 
-@newOffset: 
 @Returns: 
+<!-- # Unused Parameters # -->
+@newOffset: 
 
 
 <!-- ##### FUNCTION AccessibleText_setSelection ##### -->
@@ -212,9 +223,10 @@ AccessibleText Interface
 </para>
 
 @obj: 
+@Returns: 
+<!-- # Unused Parameters # -->
 @selectionNum: 
 @startOffset: 
 @endOffset: 
-@Returns: 
 
 
index 04586e0..4338cb8 100644 (file)
 /* A pointer to our parent object class */
 static GObjectClass *spi_device_event_controller_parent_class;
 
+int (*x_default_error_handler) (Display *display, XErrorEvent *error_event);
+
 typedef enum {
   SPI_DEVICE_TYPE_KBD,
+  SPI_DEVICE_TYPE_MOUSE,
   SPI_DEVICE_TYPE_LAST_DEFINED
 } SpiDeviceTypeCategory;
 
@@ -309,6 +312,19 @@ global_filter_fn (GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data)
   return GDK_FILTER_CONTINUE;
 }
 
+int
+_spi_controller_device_error_handler (Display *display, XErrorEvent *error)
+{
+  if (error->error_code == BadAccess) 
+    {  
+      g_message ("Could not complete key grab: grab already in use.\n");
+    }
+  else 
+    {
+      (*x_default_error_handler) (display, error);
+    }
+}
+
 static void
 spi_controller_register_with_devices (SpiDEController *controller)
 {
@@ -321,6 +337,8 @@ spi_controller_register_with_devices (SpiDEController *controller)
   gdk_window_set_events (gdk_get_default_root_window (),
                         GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
 
+  x_default_error_handler = XSetErrorHandler (_spi_controller_device_error_handler);
+
   XSelectInput (GDK_DISPLAY (),
                DefaultRootWindow (GDK_DISPLAY ()),
                KeyPressMask | KeyReleaseMask);
@@ -597,6 +615,9 @@ spi_controller_update_key_grabs (SpiDEController           *controller,
        }
       else if (grab_mask->pending_remove)
         {
+#ifdef SPI_DEBUG
+      fprintf (stderr, "ungrabbing, mask=%x\n", grab_mask->mod_mask);
+#endif
          XUngrabKey (GDK_DISPLAY (),
                      grab_mask->key_val,
                      grab_mask->mod_mask,
@@ -606,6 +627,10 @@ spi_controller_update_key_grabs (SpiDEController           *controller,
        }
       else if (grab_mask->pending_add || re_issue_grab)
         {
+
+#ifdef SPI_DEBUG
+         fprintf (stderr, "grab with mask %x\n", grab_mask->mod_mask);
+#endif
           XGrabKey (GDK_DISPLAY (),
                    grab_mask->key_val,
                    grab_mask->mod_mask,
@@ -648,6 +673,7 @@ spi_device_event_controller_object_finalize (GObject *object)
   fprintf(stderr, "spi_device_event_controller_object_finalize called\n");
 #endif
   /* disconnect any special listeners, get rid of outstanding keygrabs */
+  XUngrabKey (GDK_DISPLAY (), AnyKey, AnyModifier, DefaultRootWindow (GDK_DISPLAY ()));
        
   spi_device_event_controller_parent_class->finalize (object);
 }
index e3713eb..305f805 100644 (file)
@@ -480,7 +480,7 @@ main (int argc, char **argv)
   /* will listen only to Alt-key combinations */
   SPI_registerAccessibleKeystrokeListener (key_listener,
                                           (AccessibleKeySet *) SPI_KEYSET_ALL_KEYS,
-                                          SPI_KEYMASK_ALT,
+                                          SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL,
                                           (unsigned long) ( KeyPress | KeyRelease),
                                           SPI_KEYLISTENER_CANCONSUME | SPI_KEYLISTENER_ALL_WINDOWS);
   create_vkbd ();