[gtk+] entry: Fix a case of disagreeing coordinate systems



commit c4f7fbecfac2cf829fe47c3d30ba09ca9f2e7c4a
Author: Benjamin Otte <otte redhat com>
Date:   Wed Jan 27 14:02:44 2016 +0100

    entry: Fix a case of disagreeing coordinate systems
    
    gesture_get_current_point() returned x/y in layout coordiantes, but
    callers assumed it in textarea coordinates.

 gtk/gtkentry.c |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index cb23fe2..c508a11 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -4369,10 +4369,10 @@ gtk_entry_event (GtkWidget *widget,
 }
 
 static void
-gesture_get_current_point (GtkGestureSingle *gesture,
-                           GtkEntry         *entry,
-                           gint             *x,
-                           gint             *y)
+gesture_get_current_point_in_layout (GtkGestureSingle *gesture,
+                                     GtkEntry         *entry,
+                                     gint             *x,
+                                     gint             *y)
 {
   gint tx, ty;
   GdkEventSequence *sequence;
@@ -4410,7 +4410,7 @@ gtk_entry_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
 
   gtk_gesture_set_sequence_state (GTK_GESTURE (gesture), current,
                                   GTK_EVENT_SEQUENCE_CLAIMED);
-  gesture_get_current_point (GTK_GESTURE_SINGLE (gesture), entry, &x, &y);
+  gesture_get_current_point_in_layout (GTK_GESTURE_SINGLE (gesture), entry, &x, &y);
   gtk_entry_reset_blink_time (entry);
 
   if (!gtk_widget_has_focus (widget))
@@ -4420,7 +4420,7 @@ gtk_entry_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
       priv->in_click = FALSE;
     }
 
-  tmp_pos = gtk_entry_find_position (entry, x + priv->scroll_offset);
+  tmp_pos = gtk_entry_find_position (entry, x);
 
   if (gdk_event_triggers_context_menu ((GdkEvent *) event))
     {
@@ -4472,7 +4472,7 @@ gtk_entry_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
       switch (n_press)
         {
         case 1:
-          if (in_selection (entry, x + priv->scroll_offset))
+          if (in_selection (entry, x))
             {
               if (is_touchscreen)
                 {
@@ -4488,7 +4488,7 @@ gtk_entry_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
                    * clear the selection
                    */
                   priv->in_drag = TRUE;
-                  priv->drag_start_x = x + priv->scroll_offset;
+                  priv->drag_start_x = x;
                   priv->drag_start_y = y;
                }
             }
@@ -4622,7 +4622,7 @@ gtk_entry_drag_gesture_update (GtkGestureDrag *gesture,
 
   gtk_entry_selection_bubble_popup_unset (entry);
 
-  gesture_get_current_point (GTK_GESTURE_SINGLE (gesture), entry, &x, &y);
+  gesture_get_current_point_in_layout (GTK_GESTURE_SINGLE (gesture), entry, &x, &y);
   sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
   event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
 
@@ -4644,7 +4644,7 @@ gtk_entry_drag_gesture_update (GtkGestureDrag *gesture,
       if (gtk_entry_get_display_mode (entry) == DISPLAY_NORMAL &&
           gtk_drag_check_threshold (widget,
                                     priv->drag_start_x, priv->drag_start_y,
-                                    x + priv->scroll_offset, y))
+                                    x, y))
         {
           gint *ranges;
           gint n_ranges;
@@ -4682,7 +4682,7 @@ gtk_entry_drag_gesture_update (GtkGestureDrag *gesture,
       else if (y >= gdk_window_get_height (priv->text_area))
        tmp_pos = length;
       else
-       tmp_pos = gtk_entry_find_position (entry, x + priv->scroll_offset);
+       tmp_pos = gtk_entry_find_position (entry, x);
 
       source = gdk_event_get_source_device (event);
       input_source = gdk_device_get_source (source);
@@ -4737,7 +4737,7 @@ gtk_entry_drag_gesture_update (GtkGestureDrag *gesture,
                                     (priv->current_pos == priv->selection_bound) ?
                                     GTK_TEXT_HANDLE_MODE_CURSOR :
                                     GTK_TEXT_HANDLE_MODE_SELECTION);
-          gtk_entry_show_magnifier (entry, x, y);
+          gtk_entry_show_magnifier (entry, x - priv->scroll_offset, y);
         }
     }
 }


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