[gtk+] overlay: Handle overlays when no main widget exists



commit 95959ef470e00e0f0c2f6a3684c3693cd0fb3df3
Author: Benjamin Otte <otte redhat com>
Date:   Sun Sep 7 01:52:45 2014 +0200

    overlay: Handle overlays when no main widget exists
    
    Just pretend that the main widget is an empty widget the size of the
    overlay.
    Makes it possible to write testcases where no size requests are run on
    overlay widgets before size_allocate() is called.
    
    Testcase included.

 gtk/gtkoverlay.c                                 |   10 ++----
 testsuite/reftests/Makefile.am                   |    2 +
 testsuite/reftests/overlay-no-main-widget.ref.ui |   33 ++++++++++++++++++++++
 testsuite/reftests/overlay-no-main-widget.ui     |   26 +++++++++++++++++
 4 files changed, 65 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkoverlay.c b/gtk/gtkoverlay.c
index d10bafe..c7c3e27 100644
--- a/gtk/gtkoverlay.c
+++ b/gtk/gtkoverlay.c
@@ -214,8 +214,8 @@ gtk_overlay_get_main_widget_allocation (GtkOverlay *overlay,
     {
       main_alloc.x = 0;
       main_alloc.y = 0;
-      main_alloc.width = 1;
-      main_alloc.height = 1;
+      main_alloc.width = gtk_widget_get_allocated_width (GTK_WIDGET (overlay));
+      main_alloc.height = gtk_widget_get_allocated_height (GTK_WIDGET (overlay));
     }
 
   if (main_alloc_out)
@@ -325,10 +325,8 @@ gtk_overlay_size_allocate (GtkWidget     *widget,
   GTK_WIDGET_CLASS (gtk_overlay_parent_class)->size_allocate (widget, allocation);
 
   main_widget = gtk_bin_get_child (GTK_BIN (overlay));
-  if (!main_widget || !gtk_widget_get_visible (main_widget))
-    return;
-
-  gtk_widget_size_allocate (main_widget, allocation);
+  if (main_widget && gtk_widget_get_visible (main_widget))
+    gtk_widget_size_allocate (main_widget, allocation);
 
   for (children = priv->children; children; children = children->next)
     gtk_overlay_child_allocate (overlay, children->data);
diff --git a/testsuite/reftests/Makefile.am b/testsuite/reftests/Makefile.am
index 19c1a5e..5f84f8c 100644
--- a/testsuite/reftests/Makefile.am
+++ b/testsuite/reftests/Makefile.am
@@ -314,6 +314,8 @@ testdata = \
        opacity.css \
        opacity.ui \
        opacity.ref.ui \
+       overlay-no-main-widget.ref.ui \
+       overlay-no-main-widget.ui \
        paned-undersized.css \
        paned-undersized.ref.ui \
        paned-undersized.ui \
diff --git a/testsuite/reftests/overlay-no-main-widget.ref.ui 
b/testsuite/reftests/overlay-no-main-widget.ref.ui
new file mode 100644
index 0000000..a895631
--- /dev/null
+++ b/testsuite/reftests/overlay-no-main-widget.ref.ui
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.1 -->
+<interface>
+  <requires lib="gtk+" version="3.12"/>
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkOverlay" id="overlay1">
+        <property name="width_request">100</property>
+        <property name="height_request">100</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child>
+          <object class="GtkBox" id="box1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+        </child>
+        <child type="overlay">
+          <object class="GtkLabel" id="label1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">VISIBLE</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/testsuite/reftests/overlay-no-main-widget.ui b/testsuite/reftests/overlay-no-main-widget.ui
new file mode 100644
index 0000000..08abb83
--- /dev/null
+++ b/testsuite/reftests/overlay-no-main-widget.ui
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.1 -->
+<interface>
+  <requires lib="gtk+" version="3.12"/>
+  <object class="GtkWindow" id="window1">
+    <property name="can_focus">False</property>
+    <child>
+      <object class="GtkOverlay" id="overlay1">
+        <property name="width_request">100</property>
+        <property name="height_request">100</property>
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child>
+          <placeholder/>
+        </child>
+        <child type="overlay">
+          <object class="GtkLabel" id="label1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="label" translatable="yes">VISIBLE</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]