[gtk+] list, flow box: Make unpaired releases opt-in
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] list, flow box: Make unpaired releases opt-in
- Date: Sun, 31 Dec 2017 04:26:04 +0000 (UTC)
commit 72c9853999c34fd4bd1309bf242173eacf4a67db
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Dec 30 23:23:16 2017 -0500
list, flow box: Make unpaired releases opt-in
We don't want a pointer that is moved off a scrollbar
to trigger a row when it gets released. To avoid this,
require an explicit opt-in to handling unpaired-releases.
gtk/gtkflowbox.c | 33 +++++++++++++++++++++++++++++++--
gtk/gtklistbox.c | 30 +++++++++++++++++++++++++++++-
2 files changed, 60 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkflowbox.c b/gtk/gtkflowbox.c
index ca74b92..0d444f6 100644
--- a/gtk/gtkflowbox.c
+++ b/gtk/gtkflowbox.c
@@ -112,6 +112,9 @@ static void gtk_flow_box_bound_model_changed (GListModel *list,
guint added,
gpointer user_data);
+static void gtk_flow_box_set_accept_unpaired_release (GtkFlowBox *box,
+ gboolean accept);
+
static void gtk_flow_box_check_model_compat (GtkFlowBox *box);
static void
@@ -616,6 +619,7 @@ enum {
PROP_MAX_CHILDREN_PER_LINE,
PROP_SELECTION_MODE,
PROP_ACTIVATE_ON_SINGLE_CLICK,
+ PROP_ACCEPT_UNPAIRED_RELEASE,
/* orientable */
PROP_ORIENTATION,
@@ -642,6 +646,7 @@ struct _GtkFlowBoxPrivate {
GtkAdjustment *hadjustment;
GtkAdjustment *vadjustment;
gboolean activate_on_single_click;
+ gboolean accept_unpaired_release;
guint16 min_children_per_line;
guint16 max_children_per_line;
@@ -2686,7 +2691,7 @@ gtk_flow_box_multipress_unpaired_release (GtkGestureMultiPress *gesture,
GtkFlowBoxPrivate *priv = BOX_PRIV (box);
GtkFlowBoxChild *child;
- if (!priv->activate_on_single_click)
+ if (!priv->activate_on_single_click || !priv->accept_unpaired_release)
return;
child = gtk_flow_box_get_child_at_pos (box, x, y);
@@ -3302,6 +3307,9 @@ gtk_flow_box_get_property (GObject *object,
case PROP_ACTIVATE_ON_SINGLE_CLICK:
g_value_set_boolean (value, priv->activate_on_single_click);
break;
+ case PROP_ACCEPT_UNPAIRED_RELEASE:
+ g_value_set_boolean (value, priv->accept_unpaired_release);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -3350,6 +3358,9 @@ gtk_flow_box_set_property (GObject *object,
case PROP_ACTIVATE_ON_SINGLE_CLICK:
gtk_flow_box_set_activate_on_single_click (box, g_value_get_boolean (value));
break;
+ case PROP_ACCEPT_UNPAIRED_RELEASE:
+ gtk_flow_box_set_accept_unpaired_release (box, g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -3445,6 +3456,13 @@ gtk_flow_box_class_init (GtkFlowBoxClass *class)
TRUE,
GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ props[PROP_ACCEPT_UNPAIRED_RELEASE] =
+ g_param_spec_boolean ("accept-unpaired-release",
+ P_("Accept unpaired release"),
+ P_("Accept an unpaired release event"),
+ FALSE,
+ GTK_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
/**
* GtkFlowBox:homogeneous:
*
@@ -4387,7 +4405,18 @@ gtk_flow_box_get_activate_on_single_click (GtkFlowBox *box)
return BOX_PRIV (box)->activate_on_single_click;
}
-
+
+static void
+gtk_flow_box_set_accept_unpaired_release (GtkFlowBox *box,
+ gboolean accept)
+{
+ if (BOX_PRIV (box)->accept_unpaired_release == accept)
+ return;
+
+ BOX_PRIV (box)->accept_unpaired_release = accept;
+ g_object_notify_by_pspec (G_OBJECT (box), props[PROP_ACCEPT_UNPAIRED_RELEASE]);
+}
+
/* Selection handling {{{2 */
/**
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index 6d704c5..03b35a5 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -104,6 +104,7 @@ typedef struct
GtkWidget *scrollable_parent;
GtkAdjustment *adjustment;
gboolean activate_single_click;
+ gboolean accept_unpaired_release;
GtkGesture *multipress_gesture;
@@ -151,6 +152,7 @@ enum {
PROP_0,
PROP_SELECTION_MODE,
PROP_ACTIVATE_ON_SINGLE_CLICK,
+ PROP_ACCEPT_UNPAIRED_RELEASE,
LAST_PROPERTY
};
@@ -232,6 +234,8 @@ static void gtk_list_box_select_all_between (GtkList
gboolean modify);
static gboolean gtk_list_box_unselect_all_internal (GtkListBox *box);
static void gtk_list_box_selected_rows_changed (GtkListBox *box);
+static void gtk_list_box_set_accept_unpaired_release (GtkListBox *box,
+ gboolean accept);
static void gtk_list_box_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
guint n_press,
@@ -310,6 +314,9 @@ gtk_list_box_get_property (GObject *obj,
case PROP_ACTIVATE_ON_SINGLE_CLICK:
g_value_set_boolean (value, priv->activate_single_click);
break;
+ case PROP_ACCEPT_UNPAIRED_RELEASE:
+ g_value_set_boolean (value, priv->accept_unpaired_release);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
break;
@@ -332,6 +339,9 @@ gtk_list_box_set_property (GObject *obj,
case PROP_ACTIVATE_ON_SINGLE_CLICK:
gtk_list_box_set_activate_on_single_click (box, g_value_get_boolean (value));
break;
+ case PROP_ACCEPT_UNPAIRED_RELEASE:
+ gtk_list_box_set_accept_unpaired_release (box, g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
break;
@@ -415,6 +425,13 @@ gtk_list_box_class_init (GtkListBoxClass *klass)
TRUE,
G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+ properties[PROP_ACCEPT_UNPAIRED_RELEASE] =
+ g_param_spec_boolean ("accept-unpaired-release",
+ P_("Accept unpaired release"),
+ P_("Accept unpaired release"),
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
g_object_class_install_properties (object_class, LAST_PROPERTY, properties);
/**
@@ -1400,6 +1417,17 @@ gtk_list_box_get_activate_on_single_click (GtkListBox *box)
return BOX_PRIV (box)->activate_single_click;
}
+void
+gtk_list_box_set_accept_unpaired_release (GtkListBox *box,
+ gboolean accept)
+{
+ if (BOX_PRIV (box)->accept_unpaired_release == accept)
+ return;
+
+ BOX_PRIV (box)->accept_unpaired_release = accept;
+
+ g_object_notify_by_pspec (G_OBJECT (box), properties[PROP_ACCEPT_UNPAIRED_RELEASE]);
+}
static void
gtk_list_box_add_move_binding (GtkBindingSet *binding_set,
@@ -1791,7 +1819,7 @@ gtk_list_box_multipress_unpaired_release (GtkGestureMultiPress *gesture,
GtkListBoxPrivate *priv = BOX_PRIV (box);
GtkListBoxRow *row;
- if (!priv->activate_single_click)
+ if (!priv->activate_single_click || !priv->accept_unpaired_release)
return;
row = gtk_list_box_get_row_at_y (box, y);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]