listitemwidget: Activate on release instead of press
authorAlexander Mikhaylenko <alexm@gnome.org>
Mon, 28 Dec 2020 14:41:30 +0000 (19:41 +0500)
committerAlexander Mikhaylenko <alexm@gnome.org>
Tue, 19 Jan 2021 07:36:32 +0000 (12:36 +0500)
Single click activation should only be done on release and not on press,
otherwise it breaks touch scrolling. Double-click activation still can be
done on press.

This matches the GtkListBox behavior as well.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3345

gtk/gtklistitemwidget.c

index abe63526883e634ea09a44ae450bde9bf96f32fd..09ac15d1bfc51e76f93641bf9a2dd2826aa516c5 100644 (file)
@@ -332,7 +332,7 @@ gtk_list_item_widget_click_gesture_pressed (GtkGestureClick   *gesture,
 
   if (!priv->list_item || priv->list_item->activatable)
     {
-      if (n_press == 2 || priv->single_click_activate)
+      if (n_press == 2 && !priv->single_click_activate)
         {
           gtk_widget_activate_action (GTK_WIDGET (self),
                                       "list.activate-item",
@@ -356,6 +356,16 @@ gtk_list_item_widget_click_gesture_released (GtkGestureClick   *gesture,
 {
   GtkListItemWidgetPrivate *priv = gtk_list_item_widget_get_instance_private (self);
 
+  if (priv->single_click_activate)
+    {
+      gtk_widget_activate_action (GTK_WIDGET (self),
+                                  "list.activate-item",
+                                  "u",
+                                  priv->position);
+
+      return;
+    }
+
   if (!priv->list_item || priv->list_item->selectable)
     {
       GdkModifierType state;