]> Pileus Git - ~andy/gtk/commitdiff
GtkGrid: Fix a size allocation problem
authorMatthias Clasen <mclasen@redhat.com>
Tue, 7 Jun 2011 15:05:50 +0000 (11:05 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 7 Jun 2011 15:05:50 +0000 (11:05 -0400)
We need pay attention the the request mode when doing size allocation.
The code was using request mode for requisition, but orientation
for allocation.

Also add a reftest that exhibits the issue, courtesy of
Benjamin Otte.

gtk/gtkgrid.c
tests/reftests/Makefile.am
tests/reftests/grid-wfh.ref.ui [new file with mode: 0644]
tests/reftests/grid-wfh.ui [new file with mode: 0644]

index e1c56f948f85955d190661e09e113e4095cb57a8..88fe59de3ae8450fc6e8db75f2afdd33a4897db0 100644 (file)
@@ -1231,6 +1231,7 @@ gtk_grid_size_allocate (GtkWidget     *widget,
   GtkGridPrivate *priv = grid->priv;
   GtkGridRequest request;
   GtkGridLines *lines;
+  GtkOrientation orientation;
 
   if (priv->children == NULL)
     {
@@ -1250,10 +1251,15 @@ gtk_grid_size_allocate (GtkWidget     *widget,
 
   gtk_widget_set_allocation (widget, allocation);
 
-  gtk_grid_request_run (&request, 1 - priv->orientation, FALSE);
-  gtk_grid_request_allocate (&request, 1 - priv->orientation, GET_SIZE (allocation, 1 - priv->orientation));
-  gtk_grid_request_run (&request, priv->orientation, TRUE);
-  gtk_grid_request_allocate (&request, priv->orientation, GET_SIZE (allocation, priv->orientation));
+  if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT)
+    orientation = GTK_ORIENTATION_HORIZONTAL;
+  else
+    orientation = GTK_ORIENTATION_VERTICAL;
+
+  gtk_grid_request_run (&request, 1 - orientation, FALSE);
+  gtk_grid_request_allocate (&request, 1 - orientation, GET_SIZE (allocation, 1 - orientation));
+  gtk_grid_request_run (&request, orientation, TRUE);
+  gtk_grid_request_allocate (&request, orientation, GET_SIZE (allocation, orientation));
 
   gtk_grid_request_position (&request, 0);
   gtk_grid_request_position (&request, 1);
index 761d29490d57cf14f56fa0858ddb7fb79dcf19c0..18fead95f480a20912a60ca456243fad545ea089 100644 (file)
@@ -69,6 +69,8 @@ EXTRA_DIST += \
        grid-expand.css \
        grid-expand.ref.ui \
        grid-expand.ui \
+       grid-wfh.ui \
+       grid-wfh.ref.ui \
        grid-homogeneous.css \
        grid-homogeneous.ref.ui \
        grid-homogeneous.ui \
diff --git a/tests/reftests/grid-wfh.ref.ui b/tests/reftests/grid-wfh.ref.ui
new file mode 100644 (file)
index 0000000..f01a7d7
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child>
+          <object class="GtkLabel" id="label1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">GNOME is awesome!</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">GNOME is awesome!</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/tests/reftests/grid-wfh.ui b/tests/reftests/grid-wfh.ui
new file mode 100644 (file)
index 0000000..8b252ea
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <property name="type">popup</property>
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child>
+          <object class="GtkLabel" id="label1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">GNOME is awesome!</property>
+            <property name="wrap">True</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">GNOME is awesome!</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+            <property name="width">1</property>
+            <property name="height">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>