static void queue_resize_on_widget (GtkWidget *widget, gboolean check_siblings, GtkQueueResizeFlags flags) { GtkWidget *parent = widget; GSList *tmp_list; while (parent) { GSList *widget_groups; GSList *groups; GSList *widgets; if (widget == parent && !check_siblings) { real_queue_resize (widget, flags); parent = gtk_widget_get_parent (parent); continue; } widget_groups = _gtk_widget_get_sizegroups (parent); if (!widget_groups) { if (widget == parent) real_queue_resize (widget, flags); parent = gtk_widget_get_parent (parent); continue; } groups = NULL; widgets = NULL; add_widget_to_closure (parent, GTK_SIZE_GROUP_HORIZONTAL, &groups, &widgets); g_slist_foreach (widgets, (GFunc)mark_widget_unvisited, NULL); g_slist_foreach (groups, (GFunc)mark_group_unvisited, NULL); reset_group_sizes (groups); tmp_list = widgets; while (tmp_list) { if (tmp_list->data == parent) { if (widget == parent) real_queue_resize (parent, flags); } else if (tmp_list->data == widget) { g_warning ("A container and its child are part of this SizeGroup"); } else queue_resize_on_widget (tmp_list->data, FALSE, flags); tmp_list = tmp_list->next; } g_slist_free (widgets); g_slist_free (groups); groups = NULL; widgets = NULL; add_widget_to_closure (parent, GTK_SIZE_GROUP_VERTICAL, &groups, &widgets); g_slist_foreach (widgets, (GFunc)mark_widget_unvisited, NULL); g_slist_foreach (groups, (GFunc)mark_group_unvisited, NULL); reset_group_sizes (groups); tmp_list = widgets; while (tmp_list) { if (tmp_list->data == parent) { if (widget == parent) real_queue_resize (parent, flags); } else if (tmp_list->data == widget) { g_warning ("A container and its child are part of this SizeGroup"); } else queue_resize_on_widget (tmp_list->data, FALSE, flags); tmp_list = tmp_list->next; } g_slist_free (widgets); g_slist_free (groups); parent = gtk_widget_get_parent (parent); } }
static void queue_resize_on_widget (GtkWidget *widget, gboolean check_siblings, GtkQueueResizeFlags flags) { GtkWidget *parent = widget; while (parent) { GSList *widget_groups; GHashTable *widgets; GHashTableIter iter; gpointer current; if (widget == parent && !check_siblings) { real_queue_resize (widget, flags); parent = gtk_widget_get_parent (parent); continue; } widget_groups = _gtk_widget_get_sizegroups (parent); if (!widget_groups) { if (widget == parent) real_queue_resize (widget, flags); parent = gtk_widget_get_parent (parent); continue; } widgets = _gtk_size_group_get_widget_peers (parent, GTK_ORIENTATION_HORIZONTAL); g_hash_table_iter_init (&iter, widgets); while (g_hash_table_iter_next (&iter, ¤t, NULL)) { if (current == parent) { if (widget == parent) real_queue_resize (parent, flags); } else if (current == widget) { g_warning ("A container and its child are part of this SizeGroup"); } else queue_resize_on_widget (current, FALSE, flags); } g_hash_table_destroy (widgets); widgets = _gtk_size_group_get_widget_peers (parent, GTK_ORIENTATION_VERTICAL); g_hash_table_iter_init (&iter, widgets); while (g_hash_table_iter_next (&iter, ¤t, NULL)) { if (current == parent) { if (widget == parent) real_queue_resize (parent, flags); } else if (current == widget) { g_warning ("A container and its child are part of this SizeGroup"); } else queue_resize_on_widget (current, FALSE, flags); } g_hash_table_destroy (widgets); parent = gtk_widget_get_parent (parent); } }