+ g_return_if_fail (myfixed != NULL);
+ g_return_if_fail (GTK_IS_MYFIXED (myfixed));
+ g_return_if_fail (widget != NULL);
+
+ children = myfixed->children;
+ while (children)
+ {
+ child = children->data;
+ children = children->next;
+
+ if (child->widget == widget)
+ {
+ if ((child->x == x) &&
+ (child->y == y) &&
+ (child->width == width) &&
+ (child->height == height)) return;
+
+ child->x = x;
+ child->y = y;
+ child->width = width;
+ child->height = height;
+
+ if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (myfixed))
+ {
+ if ( (child->width > 1) &&
+ (child->height > 1) &&
+ !(GTK_WIDGET_REALIZED(widget) && GTK_IS_NOTEBOOK(widget)) )
+ {
+ child_allocation.x = child->x;
+ child_allocation.y = child->y;
+ child_allocation.width = MAX( child->width, 1 );
+ child_allocation.height = MAX( child->height, 1 );
+
+ /* work around for GTK bug when moving widgets outside
+ the X window -> do NOT move them entirely outside */
+ if (child_allocation.y + child_allocation.height < 0)
+ child_allocation.y = -child_allocation.height;
+ if (child_allocation.x + child_allocation.width < 0)
+ child_allocation.x = -child_allocation.width;
+
+ gtk_widget_size_allocate (widget, &child_allocation);
+ }
+ else
+ {
+ gtk_widget_queue_resize (GTK_WIDGET (myfixed));
+ }
+ }
+ break;