[mutter/wip/carlosg/text-input: 21/24] wayland: Bolt MetaWaylandTextInput in.



commit 8ec46e8021ff0ed8c14874f4cdd3b38f007618f8
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Dec 6 12:55:25 2017 +0100

    wayland: Bolt MetaWaylandTextInput in.
    
    Offer the text-input interface global, so it can be used by clients. The
    MetaWaylandSeat will also let MetaWaylandTextInput intercept key events
    before the keyboard interface handles those.

 src/wayland/meta-wayland-seat.c |   10 ++++++++++
 src/wayland/meta-wayland-seat.h |    3 +++
 src/wayland/meta-wayland.c      |    1 +
 3 files changed, 14 insertions(+), 0 deletions(-)
---
diff --git a/src/wayland/meta-wayland-seat.c b/src/wayland/meta-wayland-seat.c
index a574594..cedb3e3 100644
--- a/src/wayland/meta-wayland-seat.c
+++ b/src/wayland/meta-wayland-seat.c
@@ -225,6 +225,8 @@ meta_wayland_seat_new (MetaWaylandCompositor *compositor,
                               "seat", seat,
                               NULL);
 
+  seat->text_input = meta_wayland_text_input_new (seat);
+
   meta_wayland_data_device_init (&seat->data_device);
 
   device_manager = clutter_device_manager_get_default ();
@@ -260,6 +262,7 @@ meta_wayland_seat_free (MetaWaylandSeat *seat)
   g_object_unref (seat->pointer);
   g_object_unref (seat->keyboard);
   g_object_unref (seat->touch);
+  g_object_unref (seat->text_input);
 
   g_slice_free (MetaWaylandSeat, seat);
 }
@@ -376,6 +379,11 @@ meta_wayland_seat_handle_event (MetaWaylandSeat *seat,
 
     case CLUTTER_KEY_PRESS:
     case CLUTTER_KEY_RELEASE:
+      if (seat->text_input &&
+          clutter_input_focus_filter_key_event (CLUTTER_INPUT_FOCUS (seat->text_input),
+                                                (const ClutterKeyEvent *) event))
+        return TRUE;
+
       if (meta_wayland_seat_has_keyboard (seat))
         return meta_wayland_keyboard_handle_event (seat->keyboard,
                                                    (const ClutterKeyEvent *) event);
@@ -416,6 +424,8 @@ meta_wayland_seat_set_input_focus (MetaWaylandSeat    *seat,
 
   tablet_seat = meta_wayland_tablet_manager_ensure_seat (compositor->tablet_manager, seat);
   meta_wayland_tablet_seat_set_pad_focus (tablet_seat, surface);
+
+  meta_wayland_text_input_set_focus (seat->text_input, surface);
 }
 
 gboolean
diff --git a/src/wayland/meta-wayland-seat.h b/src/wayland/meta-wayland-seat.h
index 78abb15..2f3df5f 100644
--- a/src/wayland/meta-wayland-seat.h
+++ b/src/wayland/meta-wayland-seat.h
@@ -32,6 +32,7 @@
 #include "meta-wayland-touch.h"
 #include "meta-wayland-data-device.h"
 #include "meta-wayland-tablet-tool.h"
+#include "meta-wayland-text-input.h"
 
 struct _MetaWaylandSeat
 {
@@ -42,6 +43,8 @@ struct _MetaWaylandSeat
   MetaWaylandKeyboard *keyboard;
   MetaWaylandTouch *touch;
 
+  MetaWaylandTextInput *text_input;
+
   MetaWaylandDataDevice data_device;
 
   guint capabilities;
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c
index adb34c2..ba0233c 100644
--- a/src/wayland/meta-wayland.c
+++ b/src/wayland/meta-wayland.c
@@ -384,6 +384,7 @@ meta_wayland_init (void)
   meta_wayland_dma_buf_init (compositor);
   meta_wayland_keyboard_shortcuts_inhibit_init (compositor);
   meta_wayland_surface_inhibit_shortcuts_dialog_init ();
+  meta_wayland_text_input_init_global (compositor);
 
   /* Xwayland specific protocol, needs to be filtered out for all other clients */
   if (meta_xwayland_grab_keyboard_init (compositor))


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