summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-07-23 20:29:07 +0000
committerMatthias Clasen <mclasen@redhat.com>2021-07-23 20:29:07 +0000
commit6f04ec9dae473cc69c46154c09e34dbd5aecd108 (patch)
tree45ef29d707f8381cee796aaa3d0f9e2f93208359
parente51fdc1c9b28133d7ed070e98287b440ac8a6502 (diff)
parent00cc99818d649ac0f77dd1c637d78967aba5d8e5 (diff)
downloadgtk+-6f04ec9dae473cc69c46154c09e34dbd5aecd108.tar.gz
Merge branch 'wip/exalm/gtktext-selection-fix' into 'master'
text: Use the widget y coordinate for gestures See merge request GNOME/gtk!3780
-rw-r--r--gtk/gtktext.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/gtk/gtktext.c b/gtk/gtktext.c
index 8d1bde4674..8e051fe413 100644
--- a/gtk/gtktext.c
+++ b/gtk/gtktext.c
@@ -2662,24 +2662,19 @@ in_selection (GtkText *self,
return retval;
}
-static void
+static int
gesture_get_current_point_in_layout (GtkGestureSingle *gesture,
- GtkText *self,
- int *x,
- int *y)
+ GtkText *self)
{
- int tx, ty;
+ int tx;
GdkEventSequence *sequence;
- double px, py;
+ double px;
sequence = gtk_gesture_single_get_current_sequence (gesture);
- gtk_gesture_get_point (GTK_GESTURE (gesture), sequence, &px, &py);
- gtk_text_get_layout_offsets (self, &tx, &ty);
+ gtk_gesture_get_point (GTK_GESTURE (gesture), sequence, &px, NULL);
+ gtk_text_get_layout_offsets (self, &tx, NULL);
- if (x)
- *x = px - tx;
- if (y)
- *y = py - ty;
+ return px - tx;
}
static void
@@ -2737,7 +2732,8 @@ gtk_text_click_gesture_pressed (GtkGestureClick *gesture,
current = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), current);
- gesture_get_current_point_in_layout (GTK_GESTURE_SINGLE (gesture), self, &x, &y);
+ x = gesture_get_current_point_in_layout (GTK_GESTURE_SINGLE (gesture), self);
+ y = widget_y;
gtk_text_reset_blink_time (self);
if (!gtk_widget_has_focus (widget))
@@ -2989,10 +2985,14 @@ gtk_text_drag_gesture_update (GtkGestureDrag *gesture,
GdkEventSequence *sequence;
GdkEvent *event;
int x, y;
+ double start_y;
gtk_text_selection_bubble_popup_unset (self);
- gesture_get_current_point_in_layout (GTK_GESTURE_SINGLE (gesture), self, &x, &y);
+ x = gesture_get_current_point_in_layout (GTK_GESTURE_SINGLE (gesture), self);
+ gtk_gesture_drag_get_start_point (gesture, NULL, &start_y);
+ y = start_y + offset_y;
+
sequence = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);