diff --git a/libgnome-control-center/cc-panel.c b/libgnome-control-center/cc-panel.c index dd9b8cd78..9cb5da500 100644 --- a/libgnome-control-center/cc-panel.c +++ b/libgnome-control-center/cc-panel.c @@ -124,26 +124,31 @@ cc_panel_finalize (GObject *object) } static void -cc_panel_size_request (GtkWidget *widget, - GtkRequisition *requisition) +cc_panel_get_preferred_width (GtkWidget *widget, + gint *minimum, + gint *natural) { GtkBin *bin = GTK_BIN (widget); GtkWidget *child; - guint border_width; + + *minimum = *natural = 0; if ((child = gtk_bin_get_child (bin))) - { - GtkRequisition child_requisition; + gtk_widget_get_preferred_width (child, minimum, natural); +} - gtk_widget_size_request (child, &child_requisition); +static void +cc_panel_get_preferred_height (GtkWidget *widget, + gint *minimum, + gint *natural) +{ + GtkBin *bin = GTK_BIN (widget); + GtkWidget *child; - requisition->width = child_requisition.width; - requisition->height = child_requisition.height; - } + *minimum = *natural = 0; - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - requisition->width += 2 * border_width; - requisition->height += 2 * border_width; + if ((child = gtk_bin_get_child (bin))) + gtk_widget_get_preferred_height (child, minimum, natural); } static void @@ -151,18 +156,11 @@ cc_panel_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { GtkAllocation child_allocation; - guint border_width; gtk_widget_set_allocation (widget, allocation); - child_allocation = *allocation; - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - child_allocation.width -= 2 * border_width; - child_allocation.height -= 2 * border_width; - gtk_widget_size_allocate (gtk_bin_get_child (GTK_BIN (widget)), &child_allocation); } @@ -178,9 +176,12 @@ cc_panel_class_init (CcPanelClass *klass) object_class->set_property = cc_panel_set_property; object_class->finalize = cc_panel_finalize; - widget_class->size_request = cc_panel_size_request; + widget_class->get_preferred_width = cc_panel_get_preferred_width; + widget_class->get_preferred_height = cc_panel_get_preferred_height; widget_class->size_allocate = cc_panel_size_allocate; + gtk_container_class_handle_border_width (GTK_CONTAINER_CLASS (klass)); + g_type_class_add_private (klass, sizeof (CcPanelPrivate)); pspec = g_param_spec_object ("shell", diff --git a/panels/datetime/cc-timezone-map.c b/panels/datetime/cc-timezone-map.c index 487d09cef..342f7c747 100644 --- a/panels/datetime/cc-timezone-map.c +++ b/panels/datetime/cc-timezone-map.c @@ -189,17 +189,26 @@ cc_timezone_map_finalize (GObject *object) /* GtkWidget functions */ static void -cc_timezone_map_size_request (GtkWidget *widget, - GtkRequisition *req) +cc_timezone_map_get_preferred_width (GtkWidget *widget, + gint *minimum, + gint *natural) { CcTimezoneMapPrivate *priv = CC_TIMEZONE_MAP (widget)->priv; - GTK_WIDGET_CLASS (cc_timezone_map_parent_class)->size_request (widget, req); - - req->width = gdk_pixbuf_get_width (priv->orig_background) * 0.6; - req->height = gdk_pixbuf_get_height (priv->orig_background) * 0.6; + /* FIXME: should natural == full pixmap size ? */ + *minimum = *natural = gdk_pixbuf_get_width (priv->orig_background) * 0.6; } +static void +cc_timezone_map_get_preferred_height (GtkWidget *widget, + gint *minimum, + gint *natural) +{ + CcTimezoneMapPrivate *priv = CC_TIMEZONE_MAP (widget)->priv; + + /* FIXME: should natural == full pixmap size ? */ + *minimum = *natural = gdk_pixbuf_get_height (priv->orig_background) * 0.6; +} static void cc_timezone_map_size_allocate (GtkWidget *widget, GtkAllocation *allocation) @@ -392,7 +401,8 @@ cc_timezone_map_class_init (CcTimezoneMapClass *klass) object_class->dispose = cc_timezone_map_dispose; object_class->finalize = cc_timezone_map_finalize; - widget_class->size_request = cc_timezone_map_size_request; + widget_class->get_preferred_width = cc_timezone_map_get_preferred_width; + widget_class->get_preferred_height = cc_timezone_map_get_preferred_height; widget_class->size_allocate = cc_timezone_map_size_allocate; widget_class->realize = cc_timezone_map_realize; widget_class->draw = cc_timezone_map_draw; diff --git a/panels/display/scrollarea.c b/panels/display/scrollarea.c index 9844dd4ac..5123511b2 100644 --- a/panels/display/scrollarea.c +++ b/panels/display/scrollarea.c @@ -117,10 +117,14 @@ enum { static guint signals [LAST_SIGNAL] = { 0 }; -static void foo_scroll_area_size_request (GtkWidget *widget, - GtkRequisition *requisition); static gboolean foo_scroll_area_draw (GtkWidget *widget, cairo_t *cr); +static void foo_scroll_area_get_preferred_width (GtkWidget *widget, + gint *minimum, + gint *natural); +static void foo_scroll_area_get_preferred_height (GtkWidget *widget, + gint *minimum, + gint *natural); static void foo_scroll_area_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static void foo_scroll_area_set_hadjustment (FooScrollArea *scroll_area, @@ -224,7 +228,8 @@ foo_scroll_area_class_init (FooScrollAreaClass *class) object_class->set_property = foo_scroll_area_set_property; object_class->get_property = foo_scroll_area_get_property; - widget_class->size_request = foo_scroll_area_size_request; + widget_class->get_preferred_width = foo_scroll_area_get_preferred_width; + widget_class->get_preferred_height = foo_scroll_area_get_preferred_height; widget_class->draw = foo_scroll_area_draw; widget_class->size_allocate = foo_scroll_area_size_allocate; widget_class->realize = foo_scroll_area_realize; @@ -944,17 +949,23 @@ foo_scroll_area_set_size (FooScrollArea *scroll_area, } static void -foo_scroll_area_size_request (GtkWidget *widget, - GtkRequisition *requisition) +foo_scroll_area_get_preferred_width (GtkWidget *widget, + gint *minimum, + gint *natural) { FooScrollArea *scroll_area = FOO_SCROLL_AREA (widget); - - requisition->width = scroll_area->priv->min_width; - requisition->height = scroll_area->priv->min_height; - -#if 0 - g_print ("request %d %d\n", requisition->width, requisition->height); -#endif + + *minimum = *natural = scroll_area->priv->min_width; +} + +static void +foo_scroll_area_get_preferred_height (GtkWidget *widget, + gint *minimum, + gint *natural) +{ + FooScrollArea *scroll_area = FOO_SCROLL_AREA (widget); + + *minimum = *natural = scroll_area->priv->min_height; } static void