[gtk+] overlay: Handle overlays when no main widget exists
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] overlay: Handle overlays when no main widget exists
- Date: Sat, 6 Sep 2014 23:57:33 +0000 (UTC)
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]