diff --git a/gtk/gtksizerequest.c b/gtk/gtksizerequest.c
index 976b56f..ed66522 100644
--- a/gtk/gtksizerequest.c
+++ b/gtk/gtksizerequest.c
@@ -697,7 +697,7 @@ gtk_widget_get_preferred_size (GtkWidget      *widget,
                                                      NULL, &natural_size->height);
 	}
     }
-  else /* GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT or CONSTANT_SIZE */
+  else if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT)
     {
       gtk_widget_get_preferred_height (widget, &min_height, &nat_height);
 
@@ -715,6 +715,23 @@ gtk_widget_get_preferred_size (GtkWidget      *widget,
                                                      NULL, &natural_size->width);
 	}
     }
+  else /* GTK_SIZE_REQUEST_CONSTANT_SIZE */
+    {
+      gtk_widget_get_preferred_width (widget, &min_width, &nat_width);
+      gtk_widget_get_preferred_height (widget, &min_height, &nat_height);
+
+      if (minimum_size)
+	{
+	  minimum_size->width  = min_width;
+	  minimum_size->height = min_height;
+	}
+
+      if (natural_size)
+	{
+	  natural_size->width  = nat_width;
+	  natural_size->height = nat_height;
+	}      
+    }
 }
 
 
