sizegroup: Don't keep groups around everywhere
The code is only interested in the actual widgets that belong together, not in the groups. So just don't return the groups.
This commit is contained in:
@ -115,7 +115,6 @@ struct _GtkSizeGroupPrivate
|
||||
guint8 mode;
|
||||
|
||||
guint ignore_hidden : 1;
|
||||
guint visited : 1;
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -135,11 +134,9 @@ static void gtk_size_group_get_property (GObject *object,
|
||||
|
||||
static void add_group_to_closure (GtkSizeGroup *group,
|
||||
GtkSizeGroupMode mode,
|
||||
GSList **groups,
|
||||
GSList **widgets);
|
||||
static void add_widget_to_closure (GtkWidget *widget,
|
||||
GtkSizeGroupMode mode,
|
||||
GSList **groups,
|
||||
GSList **widgets);
|
||||
|
||||
/* GtkBuildable */
|
||||
@ -156,12 +153,6 @@ static void gtk_size_group_buildable_custom_finished (GtkBuildable *buildable,
|
||||
const gchar *tagname,
|
||||
gpointer user_data);
|
||||
|
||||
static void
|
||||
mark_group_unvisited (GtkSizeGroup *group)
|
||||
{
|
||||
group->priv->visited = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
mark_widget_unvisited (GtkWidget *widget)
|
||||
{
|
||||
@ -171,30 +162,22 @@ mark_widget_unvisited (GtkWidget *widget)
|
||||
static void
|
||||
add_group_to_closure (GtkSizeGroup *group,
|
||||
GtkSizeGroupMode mode,
|
||||
GSList **groups,
|
||||
GSList **widgets)
|
||||
{
|
||||
GtkSizeGroupPrivate *priv = group->priv;
|
||||
GSList *tmp_widgets;
|
||||
|
||||
if (priv->visited)
|
||||
return;
|
||||
|
||||
*groups = g_slist_prepend (*groups, group);
|
||||
priv->visited = TRUE;
|
||||
|
||||
for (tmp_widgets = priv->widgets; tmp_widgets; tmp_widgets = tmp_widgets->next)
|
||||
{
|
||||
GtkWidget *tmp_widget = tmp_widgets->data;
|
||||
|
||||
add_widget_to_closure (tmp_widget, mode, groups, widgets);
|
||||
add_widget_to_closure (tmp_widget, mode, widgets);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
add_widget_to_closure (GtkWidget *widget,
|
||||
GtkSizeGroupMode mode,
|
||||
GSList **groups,
|
||||
GSList **widgets)
|
||||
{
|
||||
GSList *tmp_groups;
|
||||
@ -216,7 +199,7 @@ add_widget_to_closure (GtkWidget *widget,
|
||||
continue;
|
||||
|
||||
if (tmp_priv->mode == GTK_SIZE_GROUP_BOTH || tmp_priv->mode == mode)
|
||||
add_group_to_closure (tmp_group, mode, groups, widgets);
|
||||
add_group_to_closure (tmp_group, mode, widgets);
|
||||
}
|
||||
}
|
||||
|
||||
@ -255,7 +238,6 @@ queue_resize_on_widget (GtkWidget *widget,
|
||||
while (parent)
|
||||
{
|
||||
GSList *widget_groups;
|
||||
GSList *groups;
|
||||
GSList *widgets;
|
||||
|
||||
if (widget == parent && !check_siblings)
|
||||
@ -275,12 +257,10 @@ queue_resize_on_widget (GtkWidget *widget,
|
||||
continue;
|
||||
}
|
||||
|
||||
groups = NULL;
|
||||
widgets = NULL;
|
||||
|
||||
add_widget_to_closure (parent, GTK_SIZE_GROUP_HORIZONTAL, &groups, &widgets);
|
||||
add_widget_to_closure (parent, GTK_SIZE_GROUP_HORIZONTAL, &widgets);
|
||||
g_slist_foreach (widgets, (GFunc)mark_widget_unvisited, NULL);
|
||||
g_slist_foreach (groups, (GFunc)mark_group_unvisited, NULL);
|
||||
|
||||
for (tmp_list = widgets; tmp_list; tmp_list = tmp_list->next)
|
||||
{
|
||||
@ -298,14 +278,11 @@ queue_resize_on_widget (GtkWidget *widget,
|
||||
}
|
||||
|
||||
g_slist_free (widgets);
|
||||
g_slist_free (groups);
|
||||
|
||||
groups = NULL;
|
||||
widgets = NULL;
|
||||
|
||||
add_widget_to_closure (parent, GTK_SIZE_GROUP_VERTICAL, &groups, &widgets);
|
||||
add_widget_to_closure (parent, GTK_SIZE_GROUP_VERTICAL, &widgets);
|
||||
g_slist_foreach (widgets, (GFunc)mark_widget_unvisited, NULL);
|
||||
g_slist_foreach (groups, (GFunc)mark_group_unvisited, NULL);
|
||||
|
||||
for (tmp_list = widgets; tmp_list; tmp_list = tmp_list->next)
|
||||
{
|
||||
@ -323,7 +300,6 @@ queue_resize_on_widget (GtkWidget *widget,
|
||||
}
|
||||
|
||||
g_slist_free (widgets);
|
||||
g_slist_free (groups);
|
||||
|
||||
parent = gtk_widget_get_parent (parent);
|
||||
}
|
||||
@ -388,7 +364,6 @@ gtk_size_group_init (GtkSizeGroup *size_group)
|
||||
priv->widgets = NULL;
|
||||
priv->mode = GTK_SIZE_GROUP_HORIZONTAL;
|
||||
priv->ignore_hidden = FALSE;
|
||||
priv->visited = FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -673,13 +648,11 @@ compute_dimension (GtkWidget *widget,
|
||||
gint *natural) /* in-out */
|
||||
{
|
||||
GSList *widgets = NULL;
|
||||
GSList *groups = NULL;
|
||||
GSList *tmp_list;
|
||||
gint min_result = 0, nat_result = 0;
|
||||
|
||||
add_widget_to_closure (widget, mode, &groups, &widgets);
|
||||
add_widget_to_closure (widget, mode, &widgets);
|
||||
g_slist_foreach (widgets, (GFunc)mark_widget_unvisited, NULL);
|
||||
g_slist_foreach (groups, (GFunc)mark_group_unvisited, NULL);
|
||||
|
||||
g_slist_foreach (widgets, (GFunc)g_object_ref, NULL);
|
||||
|
||||
@ -708,7 +681,6 @@ compute_dimension (GtkWidget *widget,
|
||||
g_slist_foreach (widgets, (GFunc)g_object_unref, NULL);
|
||||
|
||||
g_slist_free (widgets);
|
||||
g_slist_free (groups);
|
||||
|
||||
*minimum = min_result;
|
||||
*natural = nat_result;
|
||||
|
||||
Reference in New Issue
Block a user