[mutter/wayland] Revert "MetaWaylandKeyboard: use the new clutter-evdev support for xkbcommon"



commit 7d9141c56fe64a306329bde5e97611a3e89895a5
Author: Giovanni Campagna <gcampagn redhat com>
Date:   Wed Aug 28 18:04:01 2013 +0200

    Revert "MetaWaylandKeyboard: use the new clutter-evdev support for xkbcommon"
    
    This reverts commit 519a06b93da417d13821650a6db7404e2b3cb679.
    Depends on unreviewed stuff and breaks the build.

 src/wayland/meta-wayland-keyboard.c |  105 ++++++++--------------------------
 src/wayland/meta-wayland-keyboard.h |    3 +-
 src/wayland/meta-wayland-pointer.c  |    8 +-
 src/wayland/meta-wayland-private.h  |   20 +++----
 src/wayland/meta-wayland-seat.c     |    5 +-
 src/wayland/meta-wayland-seat.h     |    3 +-
 src/wayland/meta-wayland.c          |    3 +-
 7 files changed, 43 insertions(+), 104 deletions(-)
---
diff --git a/src/wayland/meta-wayland-keyboard.c b/src/wayland/meta-wayland-keyboard.c
index 70d29b2..c43de91 100644
--- a/src/wayland/meta-wayland-keyboard.c
+++ b/src/wayland/meta-wayland-keyboard.c
@@ -56,7 +56,6 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <sys/mman.h>
-#include <clutter/evdev/clutter-evdev.h>
 
 #include "meta-wayland-keyboard.h"
 
@@ -259,11 +258,12 @@ default_grab_modifiers (MetaWaylandKeyboardGrab *grab, uint32_t serial,
                                       pointer->focus);
       if (pr)
         {
-          wl_keyboard_send_modifiers (pr, serial,
-                                     mods_depressed,
-                                      mods_latched,
-                                      mods_locked,
-                                      group);
+          wl_keyboard_send_modifiers (pr,
+                                      serial,
+                                      keyboard->modifiers.mods_depressed,
+                                      keyboard->modifiers.mods_latched,
+                                      keyboard->modifiers.mods_locked,
+                                      keyboard->modifiers.group);
         }
     }
 }
@@ -276,11 +276,8 @@ static const MetaWaylandKeyboardGrabInterface
 
 gboolean
 meta_wayland_keyboard_init (MetaWaylandKeyboard *keyboard,
-                            struct wl_display   *display,
-                           gboolean             is_evdev)
+                            struct wl_display *display)
 {
-  ClutterDeviceManager *manager;
-
   memset (keyboard, 0, sizeof *keyboard);
 
   wl_list_init (&keyboard->resource_list);
@@ -296,22 +293,8 @@ meta_wayland_keyboard_init (MetaWaylandKeyboard *keyboard,
   keyboard->xkb_context = xkb_context_new (0 /* flags */);
 
   meta_wayland_keyboard_build_global_keymap (keyboard->xkb_context,
-                                            &keyboard->xkb_names,
-                                            &keyboard->xkb_info);
-
-  keyboard->is_evdev = is_evdev;
-  if (is_evdev)
-    {
-      manager = clutter_device_manager_get_default ();
-
-      clutter_evdev_set_keyboard_map (manager, keyboard->xkb_info.keymap);
-      keyboard->xkb_state = clutter_evdev_get_keyboard_state (manager);
-      xkb_state_ref (keyboard->xkb_state);
-    }
-  else
-    {
-      keyboard->xkb_state = xkb_state_new (keyboard->xkb_info.keymap);
-    }
+                                         &keyboard->xkb_names,
+                                         &keyboard->xkb_info);
 
   return TRUE;
 }
@@ -329,12 +312,17 @@ meta_wayland_xkb_info_destroy (MetaWaylandXkbInfo *xkb_info)
 }
 
 static void
-update_state_from_clutter (MetaWaylandKeyboard *keyboard,
-                          ClutterModifierType  modifier_state)
+set_modifiers (MetaWaylandKeyboard *keyboard,
+               guint32 serial,
+               ClutterModifierType modifier_state)
 {
+  MetaWaylandKeyboardGrab *grab = keyboard->grab;
   uint32_t depressed_mods = 0;
   uint32_t locked_mods = 0;
 
+  if (keyboard->last_modifier_state == modifier_state)
+    return;
+
   if ((modifier_state & CLUTTER_SHIFT_MASK) &&
       keyboard->xkb_info.shift_mod != XKB_MOD_INVALID)
     depressed_mods |= (1 << keyboard->xkb_info.shift_mod);
@@ -367,56 +355,14 @@ update_state_from_clutter (MetaWaylandKeyboard *keyboard,
       keyboard->xkb_info.mod5_mod != XKB_MOD_INVALID)
     depressed_mods |= (1 << keyboard->xkb_info.mod5_mod);
 
-  xkb_state_update_mask (keyboard->xkb_state,
-                        depressed_mods,
-                        0,
-                        locked_mods,
-                        0, 0, 0);
-}
-
-static gboolean
-state_equal (MetaWaylandXkbState *one,
-            MetaWaylandXkbState *two)
-{
-  return one->mods_depressed == two->mods_depressed &&
-    one->mods_latched == two->mods_latched &&
-    one->mods_locked == two->mods_locked &&
-    one->group == two->group;
-}
-
-static void
-set_modifiers (MetaWaylandKeyboard *keyboard,
-               guint32 serial,
-               ClutterModifierType modifier_state)
-{
-  MetaWaylandKeyboardGrab *grab = keyboard->grab;
-  MetaWaylandXkbState new_state;
-
-  /* In the evdev case, the state is shared with the clutter backend, so
-     we don't need to update it */
-  if (!keyboard->is_evdev)
-    update_state_from_clutter (keyboard, modifier_state);
-
-  new_state.mods_depressed = xkb_state_serialize_mods (keyboard->xkb_state,
-                                                      XKB_STATE_MODS_DEPRESSED);
-  new_state.mods_latched = xkb_state_serialize_mods (keyboard->xkb_state,
-                                                    XKB_STATE_MODS_LATCHED);
-  new_state.mods_locked = xkb_state_serialize_mods (keyboard->xkb_state,
-                                                   XKB_STATE_MODS_LOCKED);
-  new_state.group = xkb_state_serialize_layout (keyboard->xkb_state,
-                                               XKB_STATE_LAYOUT_EFFECTIVE);
-
-  if (state_equal (&keyboard->modifier_state, &new_state))
-    return;
-
-  keyboard->modifier_state = new_state;
+  keyboard->last_modifier_state = modifier_state;
 
   grab->interface->modifiers (grab,
                               serial,
-                              new_state.mods_depressed,
-                             new_state.mods_latched,
-                             new_state.mods_locked,
-                              new_state.group);
+                              depressed_mods,
+                              0, /* latched_modes */
+                              locked_mods,
+                              0 /* group */);
 }
 
 void
@@ -516,10 +462,10 @@ meta_wayland_keyboard_set_focus (MetaWaylandKeyboard *keyboard,
       display = wl_client_get_display (client);
       serial = wl_display_next_serial (display);
       wl_keyboard_send_modifiers (resource, serial,
-                                  keyboard->modifier_state.mods_depressed,
-                                  keyboard->modifier_state.mods_latched,
-                                  keyboard->modifier_state.mods_locked,
-                                  keyboard->modifier_state.group);
+                                  keyboard->modifiers.mods_depressed,
+                                  keyboard->modifiers.mods_latched,
+                                  keyboard->modifiers.mods_locked,
+                                  keyboard->modifiers.group);
       wl_keyboard_send_enter (resource, serial, surface->resource,
                               &keyboard->keys);
       wl_resource_add_destroy_listener (resource, &keyboard->focus_listener);
@@ -558,7 +504,6 @@ meta_wayland_keyboard_release (MetaWaylandKeyboard *keyboard)
 
   meta_wayland_xkb_info_destroy (&keyboard->xkb_info);
   xkb_context_unref (keyboard->xkb_context);
-  xkb_state_unref (keyboard->xkb_state);
 
   /* XXX: What about keyboard->resource_list? */
   if (keyboard->focus_resource)
diff --git a/src/wayland/meta-wayland-keyboard.h b/src/wayland/meta-wayland-keyboard.h
index e092366..fd0d0b3 100644
--- a/src/wayland/meta-wayland-keyboard.h
+++ b/src/wayland/meta-wayland-keyboard.h
@@ -52,8 +52,7 @@
 
 gboolean
 meta_wayland_keyboard_init (MetaWaylandKeyboard *keyboard,
-                            struct wl_display   *display,
-                           gboolean             is_evdev);
+                            struct wl_display *display);
 
 void
 meta_wayland_keyboard_handle_event (MetaWaylandKeyboard *keyboard,
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index 49ac2ec..7564a5c 100644
--- a/src/wayland/meta-wayland-pointer.c
+++ b/src/wayland/meta-wayland-pointer.c
@@ -194,10 +194,10 @@ meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
             {
               wl_keyboard_send_modifiers (kr,
                                           serial,
-                                          kbd->modifier_state.mods_depressed,
-                                          kbd->modifier_state.mods_latched,
-                                          kbd->modifier_state.mods_locked,
-                                          kbd->modifier_state.group);
+                                          kbd->modifiers.mods_depressed,
+                                          kbd->modifiers.mods_latched,
+                                          kbd->modifiers.mods_locked,
+                                          kbd->modifiers.group);
             }
         }
       wl_pointer_send_enter (resource, serial, surface->resource, sx, sy);
diff --git a/src/wayland/meta-wayland-private.h b/src/wayland/meta-wayland-private.h
index 190e6ad..40fc88a 100644
--- a/src/wayland/meta-wayland-private.h
+++ b/src/wayland/meta-wayland-private.h
@@ -234,14 +234,6 @@ typedef struct
   xkb_mod_index_t mod5_mod;
 } MetaWaylandXkbInfo;
 
-typedef struct
-{
-  uint32_t mods_depressed;
-  uint32_t mods_latched;
-  uint32_t mods_locked;
-  uint32_t group;
-} MetaWaylandXkbState;
-
 struct _MetaWaylandKeyboard
 {
   struct wl_list resource_list;
@@ -259,19 +251,25 @@ struct _MetaWaylandKeyboard
 
   struct wl_array keys;
 
-  MetaWaylandXkbState modifier_state;
+  struct
+  {
+    uint32_t mods_depressed;
+    uint32_t mods_latched;
+    uint32_t mods_locked;
+    uint32_t group;
+  } modifiers;
 
   struct wl_display *display;
 
   struct xkb_context *xkb_context;
-  struct xkb_state *xkb_state;
-  gboolean is_evdev;
 
   MetaWaylandXkbInfo xkb_info;
   struct xkb_rule_names xkb_names;
 
   MetaWaylandKeyboardGrab input_method_grab;
   struct wl_resource *input_method_resource;
+
+  ClutterModifierType last_modifier_state;
 };
 
 struct _MetaWaylandDataOffer
diff --git a/src/wayland/meta-wayland-seat.c b/src/wayland/meta-wayland-seat.c
index 3720919..82dcb20 100644
--- a/src/wayland/meta-wayland-seat.c
+++ b/src/wayland/meta-wayland-seat.c
@@ -271,8 +271,7 @@ pointer_handle_sprite_destroy (struct wl_listener *listener, void *data)
 }
 
 MetaWaylandSeat *
-meta_wayland_seat_new (struct wl_display *display,
-                      gboolean           is_native)
+meta_wayland_seat_new (struct wl_display *display)
 {
   MetaWaylandSeat *seat = g_new0 (MetaWaylandSeat, 1);
 
@@ -286,7 +285,7 @@ meta_wayland_seat_new (struct wl_display *display,
 
   meta_wayland_pointer_init (&seat->pointer);
 
-  meta_wayland_keyboard_init (&seat->keyboard, display, is_native);
+  meta_wayland_keyboard_init (&seat->keyboard, display);
 
   seat->display = display;
 
diff --git a/src/wayland/meta-wayland-seat.h b/src/wayland/meta-wayland-seat.h
index d5a0597..89bcd76 100644
--- a/src/wayland/meta-wayland-seat.h
+++ b/src/wayland/meta-wayland-seat.h
@@ -30,8 +30,7 @@
 #include "meta-wayland-private.h"
 
 MetaWaylandSeat *
-meta_wayland_seat_new (struct wl_display *display,
-                      gboolean           is_native);
+meta_wayland_seat_new (struct wl_display *display);
 
 void
 meta_wayland_seat_handle_event (MetaWaylandSeat *seat,
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c
index cd8b865..5908ed6 100644
--- a/src/wayland/meta-wayland.c
+++ b/src/wayland/meta-wayland.c
@@ -1584,8 +1584,7 @@ meta_wayland_init (void)
 
   meta_wayland_data_device_manager_init (compositor->wayland_display);
 
-  compositor->seat = meta_wayland_seat_new (compositor->wayland_display,
-                                           compositor->drm_fd >= 0);
+  compositor->seat = meta_wayland_seat_new (compositor->wayland_display);
 
   g_signal_connect (compositor->stage,
                     "captured-event",


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