forked from AuroraMiddleware/gtk
bf0ea7b7bc
This was ruined, with only 1 of the 8 subwindows rendering any content.
This commit fixes the responsible errors in the embedded GtkBuilder UIs:
• Fix broken replace by commit fb3d9022ad
of HBox with a Box having a broken orientation <property>
• Replace VBox and [HV]Paned with GtkOrientable successors (properly!)
• Remove use of Button:use_action_appearance, as this no longer exists
This commit also adds error reporting, in case other errors creep into
the GtkBuilder UI definitions, plus cleanup for the Builders and Windows
1015 lines
45 KiB
C
1015 lines
45 KiB
C
/* extendedlayoutexample.c
|
|
* Copyright (C) 2010 Openismus GmbH
|
|
*
|
|
* Author:
|
|
* Tristan Van Berkom <tristan.van.berkom@gmail.com>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <gtk/gtk.h>
|
|
|
|
typedef struct {
|
|
const gchar *name;
|
|
const gchar *tooltip;
|
|
const gchar *interface;
|
|
GtkWidget *window;
|
|
} TestInterface;
|
|
|
|
|
|
/* These strings were generated with:
|
|
*
|
|
* IFS=""; while read line; do echo -n \"; echo -n $line | sed -e 's|\"|\\"|g'; echo \"; done < file.glade
|
|
*/
|
|
static TestInterface interfaces[] = {
|
|
{
|
|
"Ellipsizing Labels",
|
|
"Demonstrates how labels will request a natural size in a horizontal space",
|
|
"<interface>"
|
|
" <requires lib=\"gtk+\" version=\"3.22\"/>"
|
|
" <!-- interface-naming-policy project-wide -->"
|
|
" <object class=\"GtkWindow\" id=\"window\">"
|
|
" <property name=\"default_width\">450</property>"
|
|
" <property name=\"default_height\">50</property>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"hbox5\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label9\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">Some labels do ellipsize</property>"
|
|
" <property name=\"ellipsize\">end</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#09610feefe03\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label10\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">but some</property>"
|
|
" <property name=\"ellipsize\">end</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#0000af6b0993\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label11\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">do not at all</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"style\" value=\"normal\"/>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#ffff00000000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">2</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
"</interface>",
|
|
NULL
|
|
},
|
|
|
|
{
|
|
"Wrapping Label",
|
|
"Demonstrates how a wrapping label can require a height contextual to its allocated width",
|
|
"<interface>"
|
|
" <requires lib=\"gtk+\" version=\"3.22\"/>"
|
|
" <!-- interface-naming-policy project-wide -->"
|
|
" <object class=\"GtkWindow\" id=\"window\">"
|
|
" <property name=\"default_width\">300</property>"
|
|
" <child>"
|
|
" <object class=\"GtkPaned\" id=\"hpaned1\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"vbox2\">"
|
|
" <property name=\"orientation\">vertical</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label3\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">A short static label.</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkFrame\" id=\"frame1\">"
|
|
" <property name=\"label\">Long label</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">This is a really long label for the purpose of testing line wrapping is working correctly in conjunction with height-for-width support in GTK+</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"max_width_chars\">30</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"foreground\" value=\"#18c52119f796\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">False</property>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkButton\" id=\"button2\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <property name=\"receives_default\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label2\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">A really really long label inside a button to demonstrate height for width working inside buttons</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"max_width_chars\">25</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"foreground\" value=\"#1e3687ab0a52\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">False</property>"
|
|
" <property name=\"position\">2</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">False</property>"
|
|
" <property name=\"shrink\">False</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label4\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">This static label\n"
|
|
"can shrink.</property>"
|
|
" <property name=\"justify\">center</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"style\" value=\"normal\"/>"
|
|
" <attribute name=\"foreground\" value=\"#ffff00000000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">True</property>"
|
|
" <property name=\"shrink\">True</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
"</interface>",
|
|
NULL
|
|
},
|
|
|
|
{
|
|
"Horizontal Box",
|
|
"Demonstrates how a horizontal box can calculate the collective height for an allocated width",
|
|
"<interface>"
|
|
" <requires lib=\"gtk+\" version=\"3.22\"/>"
|
|
" <!-- interface-naming-policy project-wide -->"
|
|
" <object class=\"GtkWindow\" id=\"window\">"
|
|
" <property name=\"default_height\">200</property>"
|
|
" <property name=\"default_width\">600</property>"
|
|
" <child>"
|
|
" <object class=\"GtkPaned\" id=\"hpaned1\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"vbox1\">"
|
|
" <property name=\"orientation\">vertical</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"hbox1\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkButton\" id=\"button1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <property name=\"receives_default\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label2\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">A button that wraps.</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"foreground\" value=\"#0000041dffff\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">False</property>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">Lets try setting up some long text to wrap up in this hbox and see if the height-for-width is gonna work !</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"width_chars\">30</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"foreground\" value=\"#07d0a9b20972\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">False</property>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkButton\" id=\"button2\">"
|
|
" <property name=\"label\" translatable=\"yes\">A button that expands in the vbox</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <property name=\"receives_default\">True</property>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">False</property>"
|
|
" <property name=\"shrink\">False</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label4\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">This label is\n"
|
|
"set to shrink inside\n"
|
|
"the paned window.</property>"
|
|
" <property name=\"justify\">center</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"style\" value=\"normal\"/>"
|
|
" <attribute name=\"foreground\" value=\"#ffff00000000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">True</property>"
|
|
" <property name=\"shrink\">True</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
"</interface>",
|
|
NULL
|
|
},
|
|
|
|
{
|
|
"Vertical Labels",
|
|
"Demonstrates how a horizontal box will consider width-for-height when allocating children "
|
|
"even if the toplevel window is requested as height-for-width.",
|
|
"<interface>"
|
|
" <requires lib=\"gtk+\" version=\"3.22\"/>"
|
|
" <!-- interface-naming-policy project-wide -->"
|
|
" <object class=\"GtkWindow\" id=\"window\">"
|
|
" <property name=\"default_width\">400</property>"
|
|
" <property name=\"default_height\">300</property>"
|
|
" <child>"
|
|
" <object class=\"GtkPaned\" id=\"vpaned1\">"
|
|
" <property name=\"orientation\">vertical</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"hbox1\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">Some long width-for-height text that wraps</property>"
|
|
" <property name=\"justify\">center</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" <property name=\"angle\">90</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#03e307ddfb5f\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">False</property>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkFrame\" id=\"frame1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label_xalign\">0</property>"
|
|
" <property name=\"shadow_type\">out</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label5\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">Neither of the panes are\n"
|
|
"set to shrink.</property>"
|
|
" <property name=\"justify\">center</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"foreground\" value=\"#ffff00000000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" </child>"
|
|
" <child type=\"label_item\">"
|
|
" <placeholder/>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">False</property>"
|
|
" <property name=\"shrink\">False</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"hbox2\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkFrame\" id=\"frame2\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label_xalign\">0</property>"
|
|
" <property name=\"shadow_type\">out</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label4\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">The interface is allocated as height\n"
|
|
"for width, but the horizontal boxes\n"
|
|
"allocate in width for height mode.</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"foreground\" value=\"#000097970808\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" </child>"
|
|
" <child type=\"label_item\">"
|
|
" <placeholder/>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label3\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">Some long width-for-height text that wraps</property>"
|
|
" <property name=\"justify\">center</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" <property name=\"angle\">270</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#03e307ddfb5f\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">False</property>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">False</property>"
|
|
" <property name=\"shrink\">False</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
"</interface>",
|
|
NULL
|
|
},
|
|
|
|
{
|
|
"Label Parameters",
|
|
"This test demonstrates how \"width-chars\" and \"max-width-chars\" can be used "
|
|
"to effect minimum and natural widths in wrapping labels.",
|
|
"<interface>"
|
|
" <requires lib=\"gtk+\" version=\"3.22\"/>"
|
|
" <!-- interface-naming-policy project-wide -->"
|
|
" <object class=\"GtkWindow\" id=\"window\">"
|
|
" <property name=\"default_width\">900</property>"
|
|
" <child>"
|
|
" <object class=\"GtkPaned\" id=\"hpaned1\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"vbox1\">"
|
|
" <property name=\"orientation\">vertical</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"hbox1\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"spacing\">6</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">The first 2 labels require 10 characters.</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#ffff00000000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">False</property>"
|
|
" <property name=\"fill\">False</property>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label2\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">This label has a maximum natural width of 20 characters. The second two labels expand.</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" <property name=\"max_width_chars\">20</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#05c2a161134b\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">True</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label3\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">This label requires a default minimum size.</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#03e30758fb5f\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">2</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label4\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">This test demonstrates how the \"width-chars\" and \"max-width-chars\"\n"
|
|
"properties can be used to specify the minimum requested wrap width\n"
|
|
"and the maximum natural wrap width respectively.</property>"
|
|
" <property name=\"ellipsize\">end</property>"
|
|
" <property name=\"width_chars\">30</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"style\" value=\"normal\"/>"
|
|
" <attribute name=\"foreground\" value=\"#05470000abaf\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">False</property>"
|
|
" <property name=\"shrink\">False</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label5\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">Some static\n"
|
|
"text that shrinks.\n"
|
|
"\n"
|
|
"You will need to stretch\n"
|
|
"this window quite wide\n"
|
|
"to see the effects.</property>"
|
|
" <property name=\"justify\">center</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"foreground\" value=\"#ffff00000000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">True</property>"
|
|
" <property name=\"shrink\">True</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
"</interface>",
|
|
NULL
|
|
},
|
|
|
|
{
|
|
"Wrapping Expander",
|
|
"This test demonstrates how the expander label can fill to its natural width "
|
|
"and also trade height for width.",
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
|
|
"<interface>"
|
|
" <requires lib=\"gtk+\" version=\"3.22\"/>"
|
|
" <!-- interface-naming-policy project-wide -->"
|
|
" <object class=\"GtkWindow\" id=\"window\">"
|
|
" <property name=\"default_width\">500</property>"
|
|
" <child>"
|
|
" <object class=\"GtkPaned\" id=\"hpaned1\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkExpander\" id=\"expander1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label2\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">More wrapping text to fill the largish content area in the expander </property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#0000D0F00000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" </child>"
|
|
" <child type=\"label\">"
|
|
" <object class=\"GtkLabel\" id=\"label1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">Here is some expander text that wraps</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"blue\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">False</property>"
|
|
" <property name=\"shrink\">False</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label3\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">static\n"
|
|
"text\n"
|
|
"here</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"foreground\" value=\"red\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">True</property>"
|
|
" <property name=\"shrink\">True</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
"</interface>",
|
|
NULL
|
|
},
|
|
|
|
{
|
|
"Wrapping Frame Label",
|
|
"This test demonstrates how the frame label can fill to its natural width "
|
|
"and also trade height for width.",
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
|
|
"<interface>"
|
|
" <requires lib=\"gtk+\" version=\"3.22\"/>"
|
|
" <!-- interface-naming-policy project-wide -->"
|
|
" <object class=\"GtkWindow\" id=\"window\">"
|
|
" <property name=\"default_width\">400</property>"
|
|
" <property name=\"default_height\">150</property>"
|
|
" <child>"
|
|
" <object class=\"GtkFrame\" id=\"frame1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label_xalign\">0</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label2\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"margin_start\">12</property>"
|
|
" <property name=\"label\" translatable=\"yes\">some content</property>"
|
|
" </object>"
|
|
" </child>"
|
|
" <child type=\"label\">"
|
|
" <object class=\"GtkLabel\" id=\"label1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">A frame label that's a little long and wraps</property>"
|
|
" <property name=\"use_markup\">True</property>"
|
|
" <property name=\"wrap\">True</property>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
"</interface>",
|
|
NULL
|
|
},
|
|
|
|
{
|
|
"Combo Boxes and Menus",
|
|
"This test shows wrapping and ellipsizing text in combo boxes (and consequently in menu items).",
|
|
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
|
|
"<interface>"
|
|
" <requires lib=\"gtk+\" version=\"3.22\"/>"
|
|
" <!-- interface-naming-policy project-wide -->"
|
|
" <object class=\"GtkWindow\" id=\"window\">"
|
|
" <property name=\"default_width\">600</property>"
|
|
" <child>"
|
|
" <object class=\"GtkPaned\" id=\"hpaned1\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"can_focus\">True</property>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"vbox1\">"
|
|
" <property name=\"orientation\">vertical</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"spacing\">5</property>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"hbox1\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"spacing\">5</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">this combo box</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#b3460000eb1c\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">True</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label2\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">contains some wrapping locations</property>"
|
|
" <property name=\"ellipsize\">end</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#b3460000eb1c\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">True</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkComboBox\" id=\"combobox1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"model\">liststore1</property>"
|
|
" <property name=\"active\">0</property>"
|
|
" <child>"
|
|
" <object class=\"GtkCellRendererPixbuf\" id=\"cellrenderertext1\"/>"
|
|
" <attributes>"
|
|
" <attribute name=\"icon-name\">1</attribute>"
|
|
" </attributes>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkCellRendererText\" id=\"cellrenderertext2\">"
|
|
" <property name=\"foreground\">purple</property>"
|
|
" <property name=\"weight\">600</property>"
|
|
" <property name=\"wrap_mode\">word</property>"
|
|
" <property name=\"wrap_width\">100</property>"
|
|
" </object>"
|
|
" <attributes>"
|
|
" <attribute name=\"text\">0</attribute>"
|
|
" </attributes>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">True</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">2</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">False</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkFrame\" id=\"frame1\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label_xalign\">0</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label3\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">This test shows combo boxes\n"
|
|
"requesting and allocating space\n"
|
|
"for its backing content using\n"
|
|
"height-for-width geometry\n"
|
|
"management.\n"
|
|
"\n"
|
|
"Note this test also demonstrates\n"
|
|
"height-for-width menu items.</property>"
|
|
" <property name=\"justify\">center</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#00000000ffff\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">True</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkBox\" id=\"hbox2\">"
|
|
" <property name=\"orientation\">horizontal</property>"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"spacing\">5</property>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label4\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">this combo box</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#ffffa5a50000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">True</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">0</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label5\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">contains some ellipsizing locations</property>"
|
|
" <property name=\"ellipsize\">end</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"weight\" value=\"bold\"/>"
|
|
" <attribute name=\"foreground\" value=\"#ffffa5a50000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">True</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">1</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkComboBox\" id=\"combobox2\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"model\">liststore1</property>"
|
|
" <property name=\"active\">0</property>"
|
|
" <child>"
|
|
" <object class=\"GtkCellRendererPixbuf\" id=\"cellrenderertext3\"/>"
|
|
" <attributes>"
|
|
" <attribute name=\"icon-name\">1</attribute>"
|
|
" </attributes>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkCellRendererText\" id=\"cellrenderertext4\">"
|
|
" <property name=\"ellipsize\">end</property>"
|
|
" <property name=\"foreground\">orange</property>"
|
|
" <property name=\"weight\">600</property>"
|
|
" <property name=\"width_chars\">10</property>"
|
|
" </object>"
|
|
" <attributes>"
|
|
" <attribute name=\"text\">0</attribute>"
|
|
" </attributes>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">True</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">2</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"expand\">False</property>"
|
|
" <property name=\"fill\">True</property>"
|
|
" <property name=\"position\">2</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">True</property>"
|
|
" <property name=\"shrink\">False</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" <child>"
|
|
" <object class=\"GtkLabel\" id=\"label6\">"
|
|
" <property name=\"visible\">True</property>"
|
|
" <property name=\"label\" translatable=\"yes\">Some static\n"
|
|
"text here\n"
|
|
"that shrinks.</property>"
|
|
" <property name=\"justify\">center</property>"
|
|
" <attributes>"
|
|
" <attribute name=\"foreground\" value=\"#ffff00000000\"/>"
|
|
" </attributes>"
|
|
" </object>"
|
|
" <packing>"
|
|
" <property name=\"resize\">False</property>"
|
|
" <property name=\"shrink\">True</property>"
|
|
" </packing>"
|
|
" </child>"
|
|
" </object>"
|
|
" </child>"
|
|
" </object>"
|
|
" <object class=\"GtkListStore\" id=\"liststore1\">"
|
|
" <columns>"
|
|
" <!-- column-name item-text -->"
|
|
" <column type=\"gchararray\"/>"
|
|
" <!-- column-name icon-name -->"
|
|
" <column type=\"gchararray\"/>"
|
|
" </columns>"
|
|
" <data>"
|
|
" <row>"
|
|
" <col id=\"0\" translatable=\"yes\">Montreal, Quebec Canada</col>"
|
|
" <col id=\"1\" translatable=\"yes\">edit-undo</col>"
|
|
" </row>"
|
|
" <row>"
|
|
" <col id=\"0\" translatable=\"yes\">Sao Paulo, SP Brazil</col>"
|
|
" <col id=\"1\" translatable=\"yes\">edit-redo</col>"
|
|
" </row>"
|
|
" <row>"
|
|
" <col id=\"0\" translatable=\"yes\">Buenos Aires, Argentina</col>"
|
|
" <col id=\"1\" translatable=\"yes\">process-stop</col>"
|
|
" </row>"
|
|
" <row>"
|
|
" <col id=\"0\" translatable=\"yes\">Los Angelos, California USA</col>"
|
|
" <col id=\"1\" translatable=\"yes\">media-record</col>"
|
|
" </row>"
|
|
" <row>"
|
|
" <col id=\"0\" translatable=\"yes\">Rio de Janeiro, RJ Brazil</col>"
|
|
" <col id=\"1\" translatable=\"yes\">dialog-error</col>"
|
|
" </row>"
|
|
" <row>"
|
|
" <col id=\"0\" translatable=\"yes\">Seoul, South Korea</col>"
|
|
" <col id=\"1\" translatable=\"yes\">dialog-information</col>"
|
|
" </row>"
|
|
" </data>"
|
|
" </object>"
|
|
"</interface>",
|
|
NULL
|
|
},
|
|
|
|
};
|
|
|
|
|
|
static void
|
|
test_clicked (GtkWidget *button,
|
|
TestInterface *interface)
|
|
{
|
|
if (!interface->window)
|
|
{
|
|
GtkBuilder *builder = gtk_builder_new ();
|
|
GError *error = NULL;
|
|
|
|
gtk_builder_add_from_string (builder, interface->interface, -1, &error);
|
|
|
|
if (error)
|
|
{
|
|
g_printerr ("GtkBuilder for interface \"%s\" returned error \"%s\"\n",
|
|
interface->name, error->message);
|
|
g_error_free (error);
|
|
return;
|
|
}
|
|
|
|
interface->window = (GtkWidget *)gtk_builder_get_object (builder, "window");
|
|
|
|
g_signal_connect (interface->window, "delete_event",
|
|
G_CALLBACK (gtk_widget_hide_on_delete), NULL);
|
|
|
|
g_object_unref (builder);
|
|
}
|
|
|
|
gtk_widget_show (interface->window);
|
|
}
|
|
|
|
|
|
static GtkWidget *
|
|
create_window (void)
|
|
{
|
|
GtkWidget *window, *vbox, *button;
|
|
gint i;
|
|
|
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
|
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
|
|
|
|
gtk_widget_show (vbox);
|
|
gtk_container_add (GTK_CONTAINER (window), vbox);
|
|
|
|
for (i = 0; i < G_N_ELEMENTS (interfaces); i++)
|
|
{
|
|
button = gtk_button_new_with_label (interfaces[i].name);
|
|
|
|
gtk_widget_set_tooltip_text (button, interfaces[i].tooltip);
|
|
|
|
g_signal_connect (G_OBJECT (button), "clicked",
|
|
G_CALLBACK (test_clicked), &interfaces[i]);
|
|
|
|
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE);
|
|
gtk_widget_show (button);
|
|
}
|
|
|
|
return window;
|
|
}
|
|
|
|
static void
|
|
main_window_delete_cb (GtkWidget *widget, GdkEvent *event, gpointer user_data)
|
|
{
|
|
for (gsize i = 0; i < sizeof(interfaces) / sizeof(TestInterface); ++i)
|
|
{
|
|
if (interfaces[i].window)
|
|
{
|
|
gtk_widget_destroy (interfaces[i].window);
|
|
}
|
|
}
|
|
|
|
gtk_main_quit ();
|
|
}
|
|
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
GtkWidget *window;
|
|
|
|
gtk_init ();
|
|
|
|
window = create_window ();
|
|
|
|
g_signal_connect (window, "delete-event",
|
|
G_CALLBACK (main_window_delete_cb), window);
|
|
|
|
gtk_widget_show (window);
|
|
|
|
gtk_main ();
|
|
|
|
return 0;
|
|
}
|