[mutter] clutter: add hooks for kbd a11y configuration



commit 32305b453d23b6af331f18a792b0866220784d5f
Author: Olivier Fourdan <ofourdan redhat com>
Date:   Thu Oct 12 16:55:53 2017 +0200

    clutter: add hooks for kbd a11y configuration
    
    Use a set of bitwise enum flags to set different keyboard accessibility
    features and the necessary vfunc hooks in clutter input device so that
    keyboard preferences can be passed to different input device
    implementations.
    
    The idea is to be able to configure either the clutter own
    implementation of keyboard accessibility for evdev, or eventually
    configure AccessX from the X11 clutter input device using the same
    mechanism.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=788564

 clutter/clutter/clutter-device-manager.c |   43 ++++++++++++++++++++++++++++++
 clutter/clutter/clutter-device-manager.h |   30 ++++++++++++++++++++-
 clutter/clutter/clutter-enums.h          |   37 +++++++++++++++++++++++++
 3 files changed, 109 insertions(+), 1 deletions(-)
---
diff --git a/clutter/clutter/clutter-device-manager.c b/clutter/clutter/clutter-device-manager.c
index 92badd8..812e7e2 100644
--- a/clutter/clutter/clutter-device-manager.c
+++ b/clutter/clutter/clutter-device-manager.c
@@ -54,6 +54,9 @@ struct _ClutterDeviceManagerPrivate
 {
   /* back-pointer to the backend */
   ClutterBackend *backend;
+
+  /* Keyboard a11y */
+  ClutterKbdA11ySettings kbd_a11y_settings;
 };
 
 enum
@@ -487,3 +490,43 @@ _clutter_device_manager_compress_motion (ClutterDeviceManager *device_manager,
 
   manager_class->compress_motion (device_manager, event, to_discard);
 }
+
+static gboolean
+are_kbd_a11y_settings_equal (ClutterKbdA11ySettings *a,
+                             ClutterKbdA11ySettings *b)
+{
+  return (a->controls == b->controls &&
+          a->slowkeys_delay == b->slowkeys_delay &&
+          a->debounce_delay == b->debounce_delay &&
+          a->timeout_delay == b->timeout_delay &&
+          a->mousekeys_init_delay == b->mousekeys_init_delay &&
+          a->mousekeys_max_speed == b->mousekeys_max_speed &&
+          a->mousekeys_accel_time == b->mousekeys_accel_time);
+}
+
+void
+clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager   *device_manager,
+                                              ClutterKbdA11ySettings *settings)
+{
+  ClutterDeviceManagerClass *manager_class;
+
+  g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
+
+  if (are_kbd_a11y_settings_equal (&device_manager->priv->kbd_a11y_settings, settings))
+    return;
+
+  device_manager->priv->kbd_a11y_settings = *settings;
+
+  manager_class = CLUTTER_DEVICE_MANAGER_GET_CLASS (device_manager);
+  if (manager_class->apply_kbd_a11y_settings)
+    manager_class->apply_kbd_a11y_settings (device_manager, settings);
+}
+
+void
+clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager   *device_manager,
+                                              ClutterKbdA11ySettings *settings)
+{
+  g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER (device_manager));
+
+  *settings = device_manager->priv->kbd_a11y_settings;
+}
diff --git a/clutter/clutter/clutter-device-manager.h b/clutter/clutter/clutter-device-manager.h
index 84f8f0b..2a152c9 100644
--- a/clutter/clutter/clutter-device-manager.h
+++ b/clutter/clutter/clutter-device-manager.h
@@ -44,6 +44,25 @@ typedef struct _ClutterDeviceManager            ClutterDeviceManager;
 typedef struct _ClutterDeviceManagerPrivate     ClutterDeviceManagerPrivate;
 typedef struct _ClutterDeviceManagerClass       ClutterDeviceManagerClass;
 
+
+/**
+ * ClutterKbdA11ySettings:
+ *
+ * The #ClutterKbdA11ySettings structure contains keyboard accessibility
+ * settings
+ *
+ */
+typedef struct _ClutterKbdA11ySettings
+{
+  ClutterKeyboardA11yFlags controls;
+  gint slowkeys_delay;
+  gint debounce_delay;
+  gint timeout_delay;
+  gint mousekeys_init_delay;
+  gint mousekeys_max_speed;
+  gint mousekeys_accel_time;
+} ClutterKbdA11ySettings;
+
 /**
  * ClutterDeviceManager:
  *
@@ -88,7 +107,9 @@ struct _ClutterDeviceManagerClass
   void                (* compress_motion) (ClutterDeviceManager *device_manger,
                                            ClutterEvent         *event,
                                            const ClutterEvent   *to_discard);
-
+  /* Keyboard accessbility */
+  void                (* apply_kbd_a11y_settings) (ClutterDeviceManager   *device_manger,
+                                                   ClutterKbdA11ySettings *settings);
   /* padding */
   gpointer _padding[6];
 };
@@ -114,6 +135,13 @@ CLUTTER_AVAILABLE_IN_ALL
 ClutterVirtualInputDevice *clutter_device_manager_create_virtual_device (ClutterDeviceManager  
*device_manager,
                                                                          ClutterInputDeviceType device_type);
 
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_device_manager_set_kbd_a11y_settings (ClutterDeviceManager   *device_manager,
+                                                   ClutterKbdA11ySettings *settings);
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_device_manager_get_kbd_a11y_settings (ClutterDeviceManager   *device_manager,
+                                                   ClutterKbdA11ySettings *settings);
+
 G_END_DECLS
 
 #endif /* __CLUTTER_DEVICE_MANAGER_H__ */
diff --git a/clutter/clutter/clutter-enums.h b/clutter/clutter/clutter-enums.h
index 03c0395..38a142d 100644
--- a/clutter/clutter/clutter-enums.h
+++ b/clutter/clutter/clutter-enums.h
@@ -397,6 +397,43 @@ typedef enum {
 } ClutterModifierType;
 
 /**
+ * ClutterKeyboardA11yFlags:
+ * @CLUTTER_A11Y_KEYBOARD_ENABLED:
+ * @CLUTTER_A11Y_TIMEOUT_ENABLED:
+ * @CLUTTER_A11Y_MOUSE_KEYS_ENABLED:
+ * @CLUTTER_A11Y_SLOW_KEYS_ENABLED:
+ * @CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS:
+ * @CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT:
+ * @CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT:
+ * @CLUTTER_A11Y_BOUNCE_KEYS_ENABLED:
+ * @CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT:
+ * @CLUTTER_A11Y_TOGGLE_KEYS_ENABLED:
+ * @CLUTTER_A11Y_STICKY_KEYS_ENABLED:
+ * @CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF:
+ * @CLUTTER_A11Y_STICKY_KEYS_BEEP:
+ * @CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP:
+ *
+ * Keyboard accessibility features applied to a ClutterInputDevice keyboard.
+ *
+ */
+typedef enum {
+  CLUTTER_A11Y_KEYBOARD_ENABLED          = 1 << 0,
+  CLUTTER_A11Y_TIMEOUT_ENABLED           = 1 << 1,
+  CLUTTER_A11Y_MOUSE_KEYS_ENABLED        = 1 << 2,
+  CLUTTER_A11Y_SLOW_KEYS_ENABLED         = 1 << 3,
+  CLUTTER_A11Y_SLOW_KEYS_BEEP_PRESS      = 1 << 4,
+  CLUTTER_A11Y_SLOW_KEYS_BEEP_ACCEPT     = 1 << 5,
+  CLUTTER_A11Y_SLOW_KEYS_BEEP_REJECT     = 1 << 6,
+  CLUTTER_A11Y_BOUNCE_KEYS_ENABLED       = 1 << 7,
+  CLUTTER_A11Y_BOUNCE_KEYS_BEEP_REJECT   = 1 << 8,
+  CLUTTER_A11Y_TOGGLE_KEYS_ENABLED       = 1 << 9,
+  CLUTTER_A11Y_STICKY_KEYS_ENABLED       = 1 << 10,
+  CLUTTER_A11Y_STICKY_KEYS_TWO_KEY_OFF   = 1 << 11,
+  CLUTTER_A11Y_STICKY_KEYS_BEEP          = 1 << 12,
+  CLUTTER_A11Y_FEATURE_STATE_CHANGE_BEEP = 1 << 13,
+} ClutterKeyboardA11yFlags;
+
+/**
  * ClutterActorFlags:
  * @CLUTTER_ACTOR_MAPPED: the actor will be painted (is visible, and inside
  *   a toplevel, and all parents visible)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]