summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2018-09-11 04:19:06 +0200
committerBenjamin Otte <otte@redhat.com>2018-09-16 18:50:17 +0200
commitdb8474e5b1604d41f3c11221ff8d8c6108de2743 (patch)
treeae57fbccb268894eb07d16f5ebf4ef336968d6b0
parent5e8983883e076c8a08e85f04b3bd1136934fbda4 (diff)
downloadgtk+-db8474e5b1604d41f3c11221ff8d8c6108de2743.tar.gz
inspector: Make controllers page use gtk_list_box_bind_model()
-rw-r--r--gtk/gtkwidget.c21
-rw-r--r--gtk/gtkwidgetprivate.h2
-rw-r--r--gtk/inspector/controllers.c54
3 files changed, 16 insertions, 61 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 5b174a7a62..60c8239253 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -12960,27 +12960,6 @@ gtk_widget_remove_controller (GtkWidget *widget,
gtk_list_list_model_item_removed (priv->controller_observer, before);
}
-GList *
-_gtk_widget_list_controllers (GtkWidget *widget,
- GtkPropagationPhase phase)
-{
- GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
- GList *l, *retval = NULL;
-
- g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
-
- for (l = priv->event_controllers; l; l = l->next)
- {
- GtkEventController *controller = l->data;
-
- if (controller != NULL &&
- phase == gtk_event_controller_get_propagation_phase (controller))
- retval = g_list_prepend (retval, controller);
- }
-
- return retval;
-}
-
gboolean
_gtk_widget_consumes_motion (GtkWidget *widget,
GdkEventSequence *sequence)
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index 5e8ff545f0..0cadb237fb 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -262,8 +262,6 @@ void _gtk_widget_update_parent_muxer (GtkWidget *widget
GtkActionMuxer * _gtk_widget_get_action_muxer (GtkWidget *widget,
gboolean create);
-GList * _gtk_widget_list_controllers (GtkWidget *widget,
- GtkPropagationPhase phase);
gboolean _gtk_widget_consumes_motion (GtkWidget *widget,
GdkEventSequence *sequence);
diff --git a/gtk/inspector/controllers.c b/gtk/inspector/controllers.c
index e52ea45a3b..b825d13f7a 100644
--- a/gtk/inspector/controllers.c
+++ b/gtk/inspector/controllers.c
@@ -38,6 +38,7 @@ enum
struct _GtkInspectorControllersPrivate
{
GtkWidget *listbox;
+ GListModel *model;
GtkSizeGroup *sizegroup;
GtkInspectorObjectTree *object_tree;
};
@@ -72,7 +73,6 @@ gtk_inspector_controllers_init (GtkInspectorControllers *sl)
NULL);
frame = gtk_frame_new (NULL);
- gtk_widget_show (frame);
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
sl->priv->listbox = gtk_list_box_new ();
@@ -81,22 +81,6 @@ gtk_inspector_controllers_init (GtkInspectorControllers *sl)
gtk_list_box_set_selection_mode (GTK_LIST_BOX (sl->priv->listbox), GTK_SELECTION_NONE);
gtk_container_add (GTK_CONTAINER (sl), frame);
-
-}
-
-static void
-clear_all (GtkInspectorControllers *sl)
-{
- GList *children, *l;
- GtkWidget *child;
-
- children = gtk_container_get_children (GTK_CONTAINER (sl->priv->listbox));
- for (l = children; l; l = l->next)
- {
- child = l->data;
- gtk_container_remove (GTK_CONTAINER (sl->priv->listbox), child);
- }
- g_list_free (children);
}
static void
@@ -113,27 +97,25 @@ phase_changed_cb (GtkComboBox *combo,
gtk_event_controller_set_propagation_phase (controller, phase);
}
-static void
-add_controller (GtkInspectorControllers *sl,
- GObject *object,
- GtkEventController *controller)
+static GtkWidget *
+create_controller_widget (gpointer item,
+ gpointer user_data)
{
+ GtkEventController *controller = item;
+ GtkInspectorControllers *sl = user_data;
GtkWidget *row;
GtkWidget *box;
GtkWidget *label;
GtkWidget *combo;
row = gtk_list_box_row_new ();
- gtk_container_add (GTK_CONTAINER (sl->priv->listbox), row);
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 40);
gtk_container_add (GTK_CONTAINER (row), box);
g_object_set (box, "margin", 10, NULL);
- gtk_widget_show (box);
label = gtk_label_new (G_OBJECT_TYPE_NAME (controller));
g_object_set (label, "xalign", 0.0, NULL);
gtk_container_add (GTK_CONTAINER (box), label);
gtk_size_group_add_widget (sl->priv->sizegroup, label);
- gtk_widget_show (label);
gtk_widget_set_halign (label, GTK_ALIGN_START);
gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
@@ -144,35 +126,31 @@ add_controller (GtkInspectorControllers *sl,
gtk_combo_box_text_insert_text (GTK_COMBO_BOX_TEXT (combo), GTK_PHASE_TARGET, C_("event phase", "Target"));
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), gtk_event_controller_get_propagation_phase (controller));
gtk_container_add (GTK_CONTAINER (box), combo);
- gtk_widget_show (combo);
gtk_widget_set_halign (label, GTK_ALIGN_END);
gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
g_object_set_data (G_OBJECT (row), "controller", controller);
g_signal_connect (combo, "changed", G_CALLBACK (phase_changed_cb), sl);
+
+ return row;
}
void
gtk_inspector_controllers_set_object (GtkInspectorControllers *sl,
GObject *object)
{
- GtkPropagationPhase phase;
- GList *list, *l;
-
- clear_all (sl);
+ GtkInspectorControllersPrivate *priv = sl->priv;
if (!GTK_IS_WIDGET (object))
return;
- for (phase = GTK_PHASE_NONE; phase <= GTK_PHASE_TARGET; phase++)
- {
- list = _gtk_widget_list_controllers (GTK_WIDGET (object), phase);
- for (l = list; l; l = l->next)
- {
- add_controller (sl, object, l->data);
- }
- g_list_free (list);
- }
+ priv->model = gtk_widget_observe_controllers (GTK_WIDGET (object));
+ gtk_list_box_bind_model (GTK_LIST_BOX (priv->listbox),
+ priv->model,
+ create_controller_widget,
+ sl,
+ NULL);
+ g_object_unref (priv->model);
}
static void