Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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, &current, 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, &current, 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);
    }
}