text: Respect focus-on-click property
authorSergey Bugaev <bugaevc@gmail.com>
Tue, 5 Sep 2023 05:39:35 +0000 (08:39 +0300)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 19 Sep 2023 20:32:27 +0000 (16:32 -0400)
It does make sense to have GtkText not focus on click in some cases,
such as when its editable property is set to false.

Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
gtk/gtktext.c

index 147c8fa0475b0cc2dcef9a5a3aa559110856e684..2d303f376560b85ffcf2c47734473c431523b07d 100644 (file)
@@ -2745,22 +2745,24 @@ gtk_text_click_gesture_pressed (GtkGestureClick *gesture,
   guint button;
   int tmp_pos;
 
-  button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
-  current = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
-  event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), current);
-
-  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))
     {
+      if (!gtk_widget_get_focus_on_click (widget))
+        return;
       priv->in_click = TRUE;
       gtk_widget_grab_focus (widget);
       gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
       priv->in_click = FALSE;
     }
 
+  button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
+  current = gtk_gesture_single_get_current_sequence (GTK_GESTURE_SINGLE (gesture));
+  event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), current);
+
+  x = gesture_get_current_point_in_layout (GTK_GESTURE_SINGLE (gesture), self);
+  y = widget_y;
+  gtk_text_reset_blink_time (self);
+
   tmp_pos = gtk_text_find_position (self, x);
 
   if (gdk_event_triggers_context_menu (event))