Minimize the GList usage throughout the code base.
{
GtkComboBoxPrivate *priv = gtk_combo_box_get_instance_private (combo_box);
GtkEventController *controller;
- GList *controllers, *list;
+ GtkEventController **controllers;
+ guint n_controllers, i;
priv->active = -1;
priv->active_row = NULL;
combo_box);
gtk_widget_add_controller (GTK_WIDGET (combo_box), controller);
- controllers = gtk_widget_list_controllers (priv->popup_widget, GTK_PHASE_BUBBLE);
- for (list = controllers; list; list = list->next)
+ controllers = gtk_widget_list_controllers (priv->popup_widget, GTK_PHASE_BUBBLE, &n_controllers);
+ for (i = 0; i < n_controllers; i ++)
{
- if (GTK_IS_SHORTCUT_CONTROLLER (list->data))
+ controller = controllers[i];
+
+ if (GTK_IS_SHORTCUT_CONTROLLER (controller))
{
- g_object_ref (list->data);
- gtk_widget_remove_controller (priv->popup_widget, list->data);
- gtk_widget_add_controller (priv->popup_widget, list->data);
+ g_object_ref (controller);
+ gtk_widget_remove_controller (priv->popup_widget, controller);
+ gtk_widget_add_controller (priv->popup_widget, controller);
break;
}
}
- g_list_free (controllers);
+ g_free (controllers);
}
static void
{
GtkWidget *stack;
GtkEventController *controller;
- GList *controllers, *l;
+ GtkEventController **controllers;
+ guint n_controllers, i;
stack = gtk_stack_new ();
gtk_stack_set_vhomogeneous (GTK_STACK (stack), FALSE);
g_signal_connect (controller, "leave", G_CALLBACK (leave_cb), popover);
gtk_widget_add_controller (GTK_WIDGET (popover), controller);
- controllers = gtk_widget_list_controllers (GTK_WIDGET (popover), GTK_PHASE_CAPTURE);
- for (l = controllers; l; l = l->next)
+ controllers = gtk_widget_list_controllers (GTK_WIDGET (popover), GTK_PHASE_CAPTURE, &n_controllers);
+ for (i = 0; i < n_controllers; i ++)
{
- controller = l->data;
+ controller = controllers[i];
if (GTK_IS_SHORTCUT_CONTROLLER (controller) &&
strcmp (gtk_event_controller_get_name (controller), "gtk-shortcut-manager-capture") == 0)
gtk_shortcut_controller_set_mnemonics_modifiers (GTK_SHORTCUT_CONTROLLER (controller), 0);
}
- g_list_free (controllers);
+ g_free (controllers);
gtk_popover_disable_auto_mnemonics (GTK_POPOVER (popover));
}
GtkCssNode *widget_node;
GtkGesture *gesture;
GtkEventController *controller;
- GList *list, *controllers;
+ GtkEventController **controllers;
+ guint n_controllers, i;
gtk_widget_set_can_focus (GTK_WIDGET (tree_view), TRUE);
gtk_widget_set_overflow (GTK_WIDGET (tree_view), GTK_OVERFLOW_HIDDEN);
G_CALLBACK (gtk_tree_view_forward_controller_key_pressed), tree_view);
gtk_widget_add_controller (GTK_WIDGET (tree_view), controller);
- controllers = gtk_widget_list_controllers (GTK_WIDGET (tree_view), GTK_PHASE_BUBBLE);
- for (list = controllers; list; list = list->next)
+ controllers = gtk_widget_list_controllers (GTK_WIDGET (tree_view), GTK_PHASE_BUBBLE, &n_controllers);
+ for (i = 0; i < n_controllers; i ++)
{
- if (GTK_IS_SHORTCUT_CONTROLLER (list->data))
+ controller = controllers[i];
+ if (GTK_IS_SHORTCUT_CONTROLLER (controller))
{
- g_object_ref (list->data);
- gtk_widget_remove_controller (GTK_WIDGET (tree_view), list->data);
- gtk_widget_add_controller (GTK_WIDGET (tree_view), list->data);
+ g_object_ref (controller);
+ gtk_widget_remove_controller (GTK_WIDGET (tree_view), controller);
+ gtk_widget_add_controller (GTK_WIDGET (tree_view), controller);
break;
}
}
- g_list_free (controllers);
+ g_free (controllers);
tree_view->click_gesture = gtk_gesture_click_new ();
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (tree_view->click_gesture), 0);
}
}
-GList *
+GtkEventController **
gtk_widget_list_controllers (GtkWidget *widget,
- GtkPropagationPhase phase)
+ GtkPropagationPhase phase,
+ guint *out_n_controllers)
{
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
- GList *res = NULL, *l;
+ GPtrArray *controllers = g_ptr_array_new ();
+ GList *l;
+
+ g_assert (out_n_controllers);
for (l = priv->event_controllers; l; l = l->next)
{
GtkEventController *controller = l->data;
if (gtk_event_controller_get_propagation_phase (controller) == phase)
- res = g_list_prepend (res, controller);
+ g_ptr_array_add (controllers, controller);
}
- return g_list_reverse (res);
+ *out_n_controllers = controllers->len;
+
+ return (GtkEventController **)g_ptr_array_free (controllers, FALSE);
}
static inline void
void gtk_widget_reset_controllers (GtkWidget *widget);
-GList * gtk_widget_list_controllers (GtkWidget *widget,
- GtkPropagationPhase phase);
+GtkEventController **gtk_widget_list_controllers (GtkWidget *widget,
+ GtkPropagationPhase phase,
+ guint *out_n_controllers);
gboolean gtk_widget_query_tooltip (GtkWidget *widget,
gint x,