diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-07-23 20:29:07 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-07-23 20:29:07 +0000 |
commit | 6f04ec9dae473cc69c46154c09e34dbd5aecd108 (patch) | |
tree | 45ef29d707f8381cee796aaa3d0f9e2f93208359 | |
parent | e51fdc1c9b28133d7ed070e98287b440ac8a6502 (diff) | |
parent | 00cc99818d649ac0f77dd1c637d78967aba5d8e5 (diff) | |
download | gtk+-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.c | 28 |
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); |