[mutter/wip/carlosg/grabs-pt2: 2/3] clutter: Use ClutterGrab for ClutterText implicit grab




commit 7a2a7c02b52e5013f4ab24d271c608be1699568d
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Nov 17 23:27:47 2021 +0100

    clutter: Use ClutterGrab for ClutterText implicit grab
    
    This is used to temporarily redirect input to the entry, while
    text is being selected.

 clutter/clutter/clutter-text.c | 32 ++++++++++++++------------------
 1 file changed, 14 insertions(+), 18 deletions(-)
---
diff --git a/clutter/clutter/clutter-text.c b/clutter/clutter/clutter-text.c
index 9244fc415b..432ddbae66 100644
--- a/clutter/clutter/clutter-text.c
+++ b/clutter/clutter/clutter-text.c
@@ -187,6 +187,8 @@ struct _ClutterTextPrivate
   ClutterInputContentHintFlags input_hints;
   ClutterInputContentPurpose input_purpose;
 
+  ClutterGrab *grab;
+
   float last_click_x;
   float last_click_y;
   uint32_t last_click_time_ms;
@@ -2208,6 +2210,7 @@ clutter_text_press (ClutterActor *actor,
   ClutterText *self = CLUTTER_TEXT (actor);
   ClutterTextPrivate *priv = self->priv;
   ClutterEventType type = clutter_event_type (event);
+  ClutterActor *stage;
   gboolean res = FALSE;
   gfloat x, y;
   gint index_;
@@ -2288,18 +2291,11 @@ clutter_text_press (ClutterActor *actor,
   /* grab the pointer */
   priv->in_select_drag = TRUE;
 
-  if (type == CLUTTER_BUTTON_PRESS)
-    {
-      clutter_input_device_grab (clutter_event_get_device (event),
-                                 actor);
-    }
-  else
-    {
-      clutter_input_device_sequence_grab (clutter_event_get_device (event),
-                                          clutter_event_get_event_sequence (event),
-                                          actor);
-      priv->in_select_touch = TRUE;
-    }
+  stage = clutter_actor_get_stage (actor);
+  priv->grab = clutter_stage_grab (CLUTTER_STAGE (stage), actor);
+
+  if (type != CLUTTER_BUTTON_PRESS)
+    priv->in_select_touch = TRUE;
 
   return CLUTTER_EVENT_STOP;
 }
@@ -2346,11 +2342,16 @@ clutter_text_release (ClutterActor *actor,
 
   if (priv->in_select_drag)
     {
+      if (priv->grab)
+        {
+          clutter_grab_dismiss (priv->grab);
+          g_clear_pointer (&priv->grab, clutter_grab_unref);
+        }
+
       if (type == CLUTTER_BUTTON_RELEASE)
         {
           if (!priv->in_select_touch)
             {
-              clutter_input_device_ungrab (clutter_event_get_device (event));
               priv->in_select_drag = FALSE;
 
               return CLUTTER_EVENT_STOP;
@@ -2360,11 +2361,6 @@ clutter_text_release (ClutterActor *actor,
         {
           if (priv->in_select_touch)
             {
-              ClutterInputDevice *device = clutter_event_get_device (event);
-              ClutterEventSequence *sequence =
-                clutter_event_get_event_sequence (event);
-
-              clutter_input_device_sequence_ungrab (device, sequence);
               priv->in_select_touch = FALSE;
               priv->in_select_drag = FALSE;
 


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