[DRE-commits] [ruby-gnome2] 14/31: New upstream version 3.0.6

Daisuke Higuchi dai at moszumanska.debian.org
Mon Oct 10 13:40:18 UTC 2016


This is an automated email from the git hooks/post-receive script.

dai pushed a commit to branch exp/debian
in repository ruby-gnome2.

commit 3a797e7ae3bbf8b64364828dc17b911fbfb12806
Author: HIGUCHI Daisuke (VDR dai) <dai at debian.org>
Date:   Sun Oct 9 21:56:39 2016 +0900

    New upstream version 3.0.6
---
 .gitignore                                         |   1 +
 NEWS                                               | 105 +++
 atk/test/run-test.rb                               |   4 +-
 cairo-gobject/test/run-test.rb                     |   4 +-
 clutter-gstreamer/test/run-test.rb                 |   2 +-
 clutter/test/run-test.rb                           |   2 +-
 gdk3/test/run-test.rb                              |   4 +-
 gdk_pixbuf2/test/run-test.rb                       |   2 +-
 gio2/lib/gio2.rb                                   |   2 +
 .../gio2/application-command-line.rb}              |  11 +-
 gio2/lib/gio2/loader.rb                            |   1 +
 gio2/test/gio2-test-utils/omissions.rb             |   4 +
 gio2/test/gio2-test-utils/socket-client.rb         |   6 +-
 gio2/test/run-test.rb                              |   4 +-
 .../test/test-application-command-line.rb          |  17 +-
 gio2/test/test-version.rb                          |  47 +
 glib2/ext/glib2/rbglib.h                           |   2 +-
 glib2/ext/glib2/rbglib_fileutils.c                 |   6 +-
 glib2/ext/glib2/rbgobj_flags.c                     |   5 +-
 glib2/ext/glib2/rbgobj_object.c                    |   2 +-
 glib2/ext/glib2/rbgobj_signal.c                    |  15 +-
 glib2/ext/glib2/rbgobject.c                        |   5 +-
 glib2/ext/glib2/rbgutil.c                          |  12 +-
 glib2/lib/glib-mkenums.rb                          |   2 +-
 glib2/lib/glib2.rb                                 |  17 +-
 glib2/lib/glib2/deprecatable.rb                    |  16 +
 .../lib/glib2/version.rb                           |  30 +-
 glib2/lib/gnome2-raketask.rb                       |   2 +-
 glib2/lib/gnome2/rake/external-package.rb          |   2 +-
 glib2/lib/gnome2/rake/native-binary-build-task.rb  |   2 +-
 glib2/lib/gnome2/rake/package-task.rb              |   2 +-
 glib2/lib/gnome2/rake/package.rb                   |   2 +-
 glib2/lib/gnome2/rake/source-download-task.rb      |   2 +-
 glib2/lib/gnome2/rake/windows-binary-build-task.rb |   2 +-
 .../gnome2/rake/windows-binary-download-task.rb    |   2 +-
 glib2/lib/mkmf-gnome2.rb                           |   2 +-
 glib2/test/glib-test-init.rb                       |  16 +
 glib2/test/glib-test-utils.rb                      |  16 +
 glib2/test/run-test.rb                             |  16 +
 glib2/test/test-version.rb                         |  47 +
 glib2/test/test_enum.rb                            |  17 +-
 glib2/test/test_file_utils.rb                      |  18 +-
 glib2/test/test_flags.rb                           |  18 +-
 glib2/test/test_glib2.rb                           |  18 +-
 glib2/test/test_iochannel.rb                       |  18 +-
 glib2/test/test_key_file.rb                        |  18 +-
 glib2/test/test_mkenums.rb                         |  18 +-
 glib2/test/test_poll_fd.rb                         |   2 +-
 glib2/test/test_signal.rb                          |  18 +-
 glib2/test/test_source.rb                          |   2 +-
 glib2/test/test_spawn.rb                           |  17 +-
 glib2/test/test_timeout.rb                         |  18 +-
 glib2/test/test_unicode.rb                         |  18 +-
 glib2/test/test_utils.rb                           |  18 +-
 glib2/test/test_value.rb                           |   2 +-
 glib2/test/test_win32.rb                           |  18 +-
 .../ext/gobject-introspection/rb-gi-argument.c     |   4 +-
 gobject-introspection/lib/gobject-introspection.rb |   1 +
 .../lib/gobject-introspection/version.rb           |  29 +-
 gobject-introspection/test/run-test.rb             |   5 +-
 gobject-introspection/test/test-version.rb         |  47 +
 gstreamer/lib/gst.rb                               |   1 +
 .../lib/gst/version.rb                             |  31 +-
 gstreamer/test/run-test.rb                         |   4 +-
 gstreamer/test/test-version.rb                     |  50 ++
 gtk2/lib/gtk2/base.rb                              |  15 +
 gtk2/test/run-test.rb                              |   2 +-
 gtk2/test/test_gtk_version.rb                      |  47 +
 .../{rb-gtk3-private.h => rb-gtk3-cell-layout.c}   |  28 +-
 gtk3/ext/gtk3/rb-gtk3-private.h                    |   3 +
 gtk3/ext/gtk3/rb-gtk3-tree-model.c                 |  77 ++
 .../{rb-gtk3-private.h => rb-gtk3-tree-view.c}     |  28 +-
 gtk3/ext/gtk3/rb-gtk3.c                            |  33 +
 gtk3/lib/gtk3/builder.rb                           |  65 +-
 gtk3/lib/gtk3/container.rb                         |  13 +
 gtk3/lib/gtk3/deprecated.rb                        |   8 +-
 gtk3/lib/gtk3/loader.rb                            |   2 +
 .../gtk3/show-uri.rb}                              |  27 +-
 .../gtk3/stock-item.rb}                            |  29 +-
 gtk3/lib/gtk3/tree-iter.rb                         |   4 +-
 gtk3/sample/gtk-demo/TODO                          |   2 +-
 gtk3/sample/gtk-demo/alias_cursor.png              | Bin 0 -> 1383 bytes
 gtk3/sample/gtk-demo/all_scroll_cursor.png         | Bin 0 -> 1776 bytes
 gtk3/sample/gtk-demo/application.ui                |  29 +-
 gtk3/sample/gtk-demo/brick.png                     | Bin 0 -> 5043 bytes
 gtk3/sample/gtk-demo/brick2.png                    | Bin 0 -> 10713 bytes
 gtk3/sample/gtk-demo/cell_cursor.png               | Bin 0 -> 1155 bytes
 gtk3/sample/gtk-demo/col_resize_cursor.png         | Bin 0 -> 1479 bytes
 gtk3/sample/gtk-demo/copy_cursor.png               | Bin 0 -> 1325 bytes
 gtk3/sample/gtk-demo/crosshair_cursor.png          | Bin 0 -> 985 bytes
 gtk3/sample/gtk-demo/css_accordion.css             |   3 +-
 gtk3/sample/gtk-demo/css_basics.css                |   2 +-
 gtk3/sample/gtk-demo/css_multiplebgs.css           | 136 +++
 gtk3/sample/gtk-demo/css_pixbufs.css               |  76 ++
 gtk3/sample/gtk-demo/css_shadows.css               |  44 +
 gtk3/sample/gtk-demo/cssview.css                   |  41 +
 gtk3/sample/gtk-demo/decor1.png                    | Bin 0 -> 17170 bytes
 gtk3/sample/gtk-demo/decor2.png                    | Bin 0 -> 17248 bytes
 gtk3/sample/gtk-demo/default_cursor.png            | Bin 0 -> 1252 bytes
 gtk3/sample/gtk-demo/demo.gresource.xml            | 216 +++++
 gtk3/sample/gtk-demo/demo.ui                       | 526 ++++++-----
 gtk3/sample/gtk-demo/e_resize_cursor.png           | Bin 0 -> 1289 bytes
 gtk3/sample/gtk-demo/ew_resize_cursor.png          | Bin 0 -> 1479 bytes
 gtk3/sample/gtk-demo/filtermodel.ui                | 195 +++++
 gtk3/sample/gtk-demo/font-features.ui              | 966 +++++++++++++++++++++
 gtk3/sample/gtk-demo/glarea-fragment.glsl          |   9 +
 gtk3/sample/gtk-demo/glarea-vertex.glsl            |   8 +
 gtk3/sample/gtk-demo/grab_cursor.png               | Bin 0 -> 1392 bytes
 gtk3/sample/gtk-demo/grabbing_cursor.png           | Bin 0 -> 1216 bytes
 gtk3/sample/gtk-demo/hand_cursor.png               | Bin 0 -> 1416 bytes
 gtk3/sample/gtk-demo/help_cursor.png               | Bin 0 -> 1549 bytes
 gtk3/sample/gtk-demo/listbox.ui                    | 332 +++++++
 gtk3/sample/gtk-demo/main.rb                       | 445 +++-------
 gtk3/sample/gtk-demo/main.ui                       | 190 ++++
 gtk3/sample/gtk-demo/markup.txt                    |  16 +
 gtk3/sample/gtk-demo/menus.ui                      |   2 +-
 gtk3/sample/gtk-demo/messages.txt                  | 388 +++++++++
 gtk3/sample/gtk-demo/modelbutton.ui                | 162 ++++
 gtk3/sample/gtk-demo/move_cursor.png               | Bin 0 -> 1601 bytes
 gtk3/sample/gtk-demo/n_resize_cursor.png           | Bin 0 -> 1287 bytes
 gtk3/sample/gtk-demo/ne_resize_cursor.png          | Bin 0 -> 1423 bytes
 gtk3/sample/gtk-demo/nesw_resize_cursor.png        | Bin 0 -> 1248 bytes
 gtk3/sample/gtk-demo/no_drop_cursor.png            | Bin 0 -> 1176 bytes
 gtk3/sample/gtk-demo/none_cursor.png               | Bin 0 -> 182 bytes
 gtk3/sample/gtk-demo/not_allowed_cursor.png        | Bin 0 -> 2280 bytes
 gtk3/sample/gtk-demo/ns_resize_cursor.png          | Bin 0 -> 1411 bytes
 gtk3/sample/gtk-demo/nw_resize_cursor.png          | Bin 0 -> 1545 bytes
 gtk3/sample/gtk-demo/nwse_resize_cursor.png        | Bin 0 -> 1223 bytes
 gtk3/sample/gtk-demo/org.gtk.Demo.gschema.xml      |  17 +
 gtk3/sample/gtk-demo/pointer_cursor.png            | Bin 0 -> 1416 bytes
 gtk3/sample/gtk-demo/popover.ui                    |  94 ++
 gtk3/sample/gtk-demo/progress_cursor.png           | Bin 0 -> 1879 bytes
 gtk3/sample/gtk-demo/reset.css                     |   1 -
 gtk3/sample/gtk-demo/revealer.ui                   | 177 ++++
 gtk3/sample/gtk-demo/row_resize_cursor.png         | Bin 0 -> 1411 bytes
 gtk3/sample/gtk-demo/s_resize_cursor.png           | Bin 0 -> 1208 bytes
 gtk3/sample/gtk-demo/scale.ui                      | 117 +++
 gtk3/sample/gtk-demo/se_resize_cursor.png          | Bin 0 -> 1338 bytes
 gtk3/sample/gtk-demo/spinbutton.ui                 | 194 +++++
 gtk3/sample/gtk-demo/stack.ui                      |  72 ++
 gtk3/sample/gtk-demo/sw_resize_cursor.png          | Bin 0 -> 1369 bytes
 gtk3/sample/gtk-demo/text_cursor.png               | Bin 0 -> 844 bytes
 gtk3/sample/gtk-demo/theming.ui                    | 249 +++---
 gtk3/sample/gtk-demo/vertical_text_cursor.png      | Bin 0 -> 823 bytes
 gtk3/sample/gtk-demo/w_resize_cursor.png           | Bin 0 -> 1355 bytes
 gtk3/sample/gtk-demo/wait_cursor.png               | Bin 0 -> 2013 bytes
 gtk3/sample/gtk-demo/zoom_in_cursor.png            | Bin 0 -> 2289 bytes
 gtk3/sample/gtk-demo/zoom_out_cursor.png           | Bin 0 -> 2170 bytes
 gtk3/sample/tutorial/README.md                     | 415 +++++++++
 gtk3/test/run-test.rb                              |   2 +-
 gtk3/test/test-gtk-builder.rb                      | 138 ++-
 gtk3/test/test-gtk-cell-layout.rb                  |   6 +
 gtksourceview2/test/run-test.rb                    |   2 +-
 gtksourceview3/test/run-test.rb                    |   2 +-
 pango/lib/pango.rb                                 |  13 +
 pango/test/run-test.rb                             |   2 +-
 pango/test/test-version.rb                         |  47 +
 poppler/lib/poppler.rb                             |  19 +-
 poppler/test/run-test.rb                           |   2 +-
 poppler/test/test-version.rb                       |  47 +
 rsvg2/lib/rsvg2.rb                                 |  18 +
 rsvg2/test/run-test.rb                             |   4 +-
 rsvg2/test/test-version.rb                         |  47 +
 vte3/lib/vte3/deprecated.rb                        |  25 +-
 vte3/test/run-test.rb                              |   2 +-
 vte3/test/test-pty.rb                              |  19 +-
 vte3/test/test-terminal-properties.rb              |  39 +-
 vte3/test/test-terminal-signals.rb                 |   9 -
 vte3/test/test-terminal.rb                         |  15 +-
 webkit-gtk/lib/webkit-gtk.rb                       |  26 +
 .../lib/webkit-gtk/version.rb                      |  20 +-
 webkit-gtk/test/run-test.rb                        |   4 +-
 webkit-gtk/test/test-version.rb                    |  47 +
 webkit-gtk2/test/run-test.rb                       |   4 +-
 webkit2-gtk/test/run-test.rb                       |   2 +-
 175 files changed, 5889 insertions(+), 1028 deletions(-)

diff --git a/.gitignore b/.gitignore
index d60936c..f8ed334 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,7 @@ Makefile.lib
 /gtksourceview2/ext/gtksourceview2/rbgtksourceview2version.h
 /gtksourceview3/ext/gtksourceview3/rbgtksourceview3version.h
 /goocanvas/ext/goocanvas/rbgoo_canvasversion.h
+/poppler/test/fixtures/form.pdf
 /poppler/test/tmp/
 /gobject-introspection/ext/gobject-introspection/gobject-introspection-enum-types.c
 /gobject-introspection/ext/gobject-introspection/gobject-introspection-enum-types.h
diff --git a/NEWS b/NEWS
index 374f690..819e232 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,111 @@
 
 = NEWS
 
+== Ruby-GNOME2 3.0.6: 2015-10-04
+
+It is a bug fix release of 3.0.5.
+
+=== Changes
+
+==== Ruby/GLib2
+
+  * Improvements
+    * Supported (({GLib.format_size})) on 32bit.
+      [GitHub#565][Reported by Mamoru TASAKA]
+    * Supported (({GLib.format_size_for_display})) on 32bit.
+      [GitHub#565][Reported by Mamoru TASAKA]
+    * Added (({GLib::Version.or_later?})).
+      [GitHub#570][Patch by cedlemo]
+
+==== Ruby/GObjectIntrospection
+
+  * Improvements
+    * Added (({GObjectIntrospection::Version.or_later?})).
+      [GitHub#572][Patch by cedlemo]
+    * Supported (({GSList})) for filename.
+      [ruby-gnome2-devel-en][Reported by Stefan Salewski]
+
+==== Ruby/GIO2
+
+  * Improvements
+    * Added (({Gio::Version.or_later?})).
+      [GitHub#571][Patch by cedlemo]
+    * Made (({Gio::APplicationCommandLine#attributes})) Rubyish.
+
+==== Ruby/Pango
+
+  * Improvements
+    * Added (({Pango::Version.or_later?})).
+      [GitHub#576][Patch by cedlemo]
+
+==== Ruby/GTK2
+
+  * Improvements
+    * Added (({Gtk::Version.or_later?})).
+      [GitHub#574][Patch by cedlemo]
+
+==== Ruby/GTK3
+
+  * Improvements
+    * Supported (({Gtk::CellLayout#set_cell_data_func})).
+      [ruby-gnome2-devel-en][Reported by Stefan Salewski]
+    * Supported (({Gtk::Container#add})) with child properties.
+      [ruby-gnome2-devel-en][Reported by Stefan Salewski]
+    * Added (({Gtk::StockItem#[]})) for backward compatibility.
+      [ruby-gnome2-devel-en][Reported by Stefan Salewski]
+    * Added (({Gtk::IconSize::IconSize})) for backward compatibility.
+      [ruby-gnome2-devel-en][Reported by Stefan Salewski]
+    * Supported marking cell renderers in (({Gtk::CellLayout})) for GC.
+      [ruby-gnome2-devel-en][Reported by Stefan Salewski]
+    * Supported (({nil})) for (({Gtk::TreeIter#set_value})).
+    * Supported marking columns in (({Gtk::TreeView})) for GC.
+      [ruby-gnome2-devel-en][Reported by Stefan Salewski]
+    * Updated tutorial samples.
+      [GitHub#567][GitHub#568][GitHub#587][Patch by cedlemo]
+    * Supported marking records in (({Gtk::TreeModel})) for GC.
+      [ruby-gnome2-devel-en][Reported by Stefan Salewski]
+    * Started updating gtk-demo with (({Gtk::Application})).
+      [GitHub#583][GitHub#586][GitHub#588][Patch by cedlemo]
+    * Supported option style API by (({Gtk::Builder#add})).
+    * Supported (({:object_ids})) by (({Gtk::Builder#add})).
+      [GitHub#585][Patch by cedlemo]
+    * Added backward compatible API to (({Gtk.show_uri})).
+
+==== Ruby/GStreamer
+
+  * Improvements
+    * Added (({Gst::Version.or_later?})).
+      [GitHub#573][Patch by cedlemo]
+
+==== Ruby/Poppler
+
+  * Improvements
+    * Added (({Poppler::Version.or_later?})).
+      [GitHub#577][Patch by cedlemo]
+
+==== Ruby/RSVG2
+
+  * Improvements
+    * Added (({RSVG::Version.or_later?})).
+      [GitHub#578][Patch by cedlemo]
+
+==== Ruby/VTE3
+
+  * Improvements
+    * Stopped to run tests for old VTE with new VTE.
+      [GitHub#566][Reported by Mamoru TASAKA]
+
+==== Ruby/WebKitGTK
+
+  * Improvements
+    * Added (({WebKitGtk::Version.or_later?})).
+
+=== Thanks
+
+  * Stefan Salewski
+  * Mamoru TASAKA
+  * cedlemo
+
 == Ruby-GNOME2 3.0.5: 2015-09-22
 
 It is a bug fix release for mikutter.
diff --git a/atk/test/run-test.rb b/atk/test/run-test.rb
index 538e64a..d313f19 100755
--- a/atk/test/run-test.rb
+++ b/atk/test/run-test.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -42,4 +42,4 @@ require "atk-test-utils"
 
 require "atk"
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(atk_base, "test"))
diff --git a/cairo-gobject/test/run-test.rb b/cairo-gobject/test/run-test.rb
index 58dbb62..e4be75f 100755
--- a/cairo-gobject/test/run-test.rb
+++ b/cairo-gobject/test/run-test.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -47,4 +47,4 @@ require "cairo-gobject-test-utils"
 
 require "cairo-gobject"
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(cairo_gobject_base, "test"))
diff --git a/clutter-gstreamer/test/run-test.rb b/clutter-gstreamer/test/run-test.rb
index dcf9c9a..1e32fa2 100755
--- a/clutter-gstreamer/test/run-test.rb
+++ b/clutter-gstreamer/test/run-test.rb
@@ -66,4 +66,4 @@ rescue GLib::Error
   exit(true)
 end
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(clutter_gstreamer_base, "test"))
diff --git a/clutter/test/run-test.rb b/clutter/test/run-test.rb
index c0f2694..84f6c82 100755
--- a/clutter/test/run-test.rb
+++ b/clutter/test/run-test.rb
@@ -62,4 +62,4 @@ end
 
 Clutter.init
 
-exit Test::Unit::AutoRunner.run(true, clutter_base)
+exit Test::Unit::AutoRunner.run(true, File.join(clutter_base, "test"))
diff --git a/gdk3/test/run-test.rb b/gdk3/test/run-test.rb
index bc88dde..6878bf7 100755
--- a/gdk3/test/run-test.rb
+++ b/gdk3/test/run-test.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 #
-# Copyright (C) 2013-2014  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -54,4 +54,4 @@ require "gdk3"
 Gdk.init
 Gdk.init_check([$0])
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(gdk3_base, "test"))
diff --git a/gdk_pixbuf2/test/run-test.rb b/gdk_pixbuf2/test/run-test.rb
index 0c5bacd..17082d2 100755
--- a/gdk_pixbuf2/test/run-test.rb
+++ b/gdk_pixbuf2/test/run-test.rb
@@ -42,4 +42,4 @@ require "gdk_pixbuf2-test-utils"
 
 require "gdk_pixbuf2"
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(gdk_pixbuf2_base, "test"))
diff --git a/gio2/lib/gio2.rb b/gio2/lib/gio2.rb
index 8881360..c15b978 100644
--- a/gio2/lib/gio2.rb
+++ b/gio2/lib/gio2.rb
@@ -30,6 +30,8 @@ module Gio
   LOG_DOMAIN = "Gio"
   GLib::Log.set_log_domain(LOG_DOMAIN)
 
+  Version = GLib::Version
+
   class Error < StandardError
   end
 
diff --git a/gio2/test/gio2-test-utils/omissions.rb b/gio2/lib/gio2/application-command-line.rb
similarity index 81%
copy from gio2/test/gio2-test-utils/omissions.rb
copy to gio2/lib/gio2/application-command-line.rb
index 225138c..97fbb30 100644
--- a/gio2/test/gio2-test-utils/omissions.rb
+++ b/gio2/lib/gio2/application-command-line.rb
@@ -1,4 +1,4 @@
-# Copyright (C) 2014  Ruby-GNOME2 Project Team
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -14,10 +14,11 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-module GioTestUtils
-  module Omissions
-    def omit_on_os_x
-      omit("Skip this test on OS X") if RUBY_PLATFORM =~ /darwin/
+module Gio
+  class ApplicationCommandLine
+    alias_method :arguments_raw, :arguments
+    def arguments
+      arguments_raw[0]
     end
   end
 end
diff --git a/gio2/lib/gio2/loader.rb b/gio2/lib/gio2/loader.rb
index ebd55a1..d324359 100644
--- a/gio2/lib/gio2/loader.rb
+++ b/gio2/lib/gio2/loader.rb
@@ -52,6 +52,7 @@ module Gio
     def require_libraries
       require "gio2/action"
       require "gio2/action-map"
+      require "gio2/application-command-line"
       require "gio2/inet-address"
       require "gio2/input-stream"
       require "gio2/pollable-input-stream"
diff --git a/gio2/test/gio2-test-utils/omissions.rb b/gio2/test/gio2-test-utils/omissions.rb
index 225138c..110792c 100644
--- a/gio2/test/gio2-test-utils/omissions.rb
+++ b/gio2/test/gio2-test-utils/omissions.rb
@@ -19,5 +19,9 @@ module GioTestUtils
     def omit_on_os_x
       omit("Skip this test on OS X") if RUBY_PLATFORM =~ /darwin/
     end
+
+    def omit_on_travis_ci
+      omit("Skip this test on Travis CI") if ENV["CI"]
+    end
   end
 end
diff --git a/gio2/test/gio2-test-utils/socket-client.rb b/gio2/test/gio2-test-utils/socket-client.rb
index a82a98d..e504688 100644
--- a/gio2/test/gio2-test-utils/socket-client.rb
+++ b/gio2/test/gio2-test-utils/socket-client.rb
@@ -25,9 +25,9 @@ module GioTestUtils
     end
 
     def teardown_socket_client
-    teardown_loop
-    teardown_client
-    teardown_server
+      teardown_loop
+      teardown_client
+      teardown_server
     end
 
     def setup_server
diff --git a/gio2/test/run-test.rb b/gio2/test/run-test.rb
index c3fe0a7..d2274ac 100755
--- a/gio2/test/run-test.rb
+++ b/gio2/test/run-test.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 #
-# Copyright (C) 2013-2014  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -50,4 +50,4 @@ require "gio2-test-utils"
 
 require "gio2"
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(gio2_base, "test"))
diff --git a/glib2/test/test_poll_fd.rb b/gio2/test/test-application-command-line.rb
similarity index 71%
copy from glib2/test/test_poll_fd.rb
copy to gio2/test/test-application-command-line.rb
index 92b26c5..441bb81 100644
--- a/glib2/test/test_poll_fd.rb
+++ b/gio2/test/test-application-command-line.rb
@@ -1,6 +1,4 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -16,11 +14,14 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-class TestGLibPollFD < Test::Unit::TestCase
-  include GLibTestUtils
+class TestApplicationCommandLine < Test::Unit::TestCase
+  include GioTestUtils::Omissions
+  def setup
+    @command_line = Gio::ApplicationCommandLine.new
+  end
 
-  def test_fd
-    poll_fd = GLib::PollFD.new(0, GLib::IOChannel::IN, 0)
-    assert_equal(0, poll_fd.fd)
+  test "#arguments" do
+    omit_on_travis_ci
+    assert_equal([], @command_line.arguments)
   end
 end
diff --git a/gio2/test/test-version.rb b/gio2/test/test-version.rb
new file mode 100644
index 0000000..52e1894
--- /dev/null
+++ b/gio2/test/test-version.rb
@@ -0,0 +1,47 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+class TestGioVersion < Test::Unit::TestCase
+  include GioTestUtils
+
+  test "STRING" do
+    major = Gio::Version::MAJOR
+    minor = Gio::Version::MINOR
+    micro = Gio::Version::MICRO
+    assert_equal([major, minor, micro].join("."),
+                 Gio::Version::STRING)
+  end
+
+  sub_test_case("#or_later?") do
+    test "same" do
+      assert_true(Gio::Version.or_later?(Gio::Version::MAJOR,
+                                         Gio::Version::MINOR,
+                                         Gio::Version::MICRO))
+    end
+
+    test "later" do
+      assert_true(Gio::Version.or_later?(Gio::Version::MAJOR,
+                                         Gio::Version::MINOR - 1,
+                                         Gio::Version::MICRO))
+    end
+
+    test "earlier" do
+      assert_false(Gio::Version.or_later?(Gio::Version::MAJOR,
+                                          Gio::Version::MINOR + 1,
+                                          Gio::Version::MICRO))
+    end
+  end
+end
diff --git a/glib2/ext/glib2/rbglib.h b/glib2/ext/glib2/rbglib.h
index 56e06d6..c502c23 100644
--- a/glib2/ext/glib2/rbglib.h
+++ b/glib2/ext/glib2/rbglib.h
@@ -36,7 +36,7 @@ extern "C" {
 
 #define RBGLIB_MAJOR_VERSION 3
 #define RBGLIB_MINOR_VERSION 0
-#define RBGLIB_MICRO_VERSION 5
+#define RBGLIB_MICRO_VERSION 6
 
 #ifndef RSTRING_PTR
 #  define RSTRING_PTR(s) (RSTRING(s)->ptr)
diff --git a/glib2/ext/glib2/rbglib_fileutils.c b/glib2/ext/glib2/rbglib_fileutils.c
index d96a21f..41e1a81 100644
--- a/glib2/ext/glib2/rbglib_fileutils.c
+++ b/glib2/ext/glib2/rbglib_fileutils.c
@@ -53,7 +53,7 @@ void        g_dir_close                     (GDir *dir);
 static VALUE
 rbglib_m_format_size_for_display(G_GNUC_UNUSED VALUE self, VALUE size)
 {
-    return CSTR2RVAL_FREE(g_format_size_for_display(NUM2ULONG(size)));
+    return CSTR2RVAL_FREE(g_format_size_for_display(NUM2OFFT(size)));
 }
 #endif
 
@@ -65,14 +65,14 @@ rbglib_m_format_size(int argc, VALUE *argv, G_GNUC_UNUSED VALUE self)
 
     rb_scan_args(argc, argv, "11", &rb_size, &rb_options);
     if (NIL_P(rb_options)) {
-      return CSTR2RVAL_FREE(g_format_size(NUM2ULONG(rb_size)));
+      return CSTR2RVAL_FREE(g_format_size(NUM2ULL(rb_size)));
     } else {
       VALUE rb_flags;
       rbg_scan_options(rb_options,
                        "flags", &rb_flags,
                        NULL);
 
-      return CSTR2RVAL_FREE(g_format_size_full(NUM2ULONG(rb_size),
+      return CSTR2RVAL_FREE(g_format_size_full(NUM2ULL(rb_size),
                                                RVAL2GFORMATSIZEFLAGS(rb_flags)));
     }
 }
diff --git a/glib2/ext/glib2/rbgobj_flags.c b/glib2/ext/glib2/rbgobj_flags.c
index a9519b8..557f1b6 100644
--- a/glib2/ext/glib2/rbgobj_flags.c
+++ b/glib2/ext/glib2/rbgobj_flags.c
@@ -165,7 +165,10 @@ rbgobj_init_flags_class(VALUE klass)
         g_free(nick);
     }
 
-    rb_funcall(klass, id_module_eval, 1, rb_str_new2(source->str));
+    rb_funcall(klass, id_module_eval, 3,
+               rb_str_new2(source->str),
+               rb_str_new2(__FILE__),
+               INT2NUM(__LINE__));
     g_string_free(source, TRUE);
 
     g_type_class_unref(gclass);
diff --git a/glib2/ext/glib2/rbgobj_object.c b/glib2/ext/glib2/rbgobj_object.c
index bcef0b1..c2d3794 100644
--- a/glib2/ext/glib2/rbgobj_object.c
+++ b/glib2/ext/glib2/rbgobj_object.c
@@ -176,7 +176,6 @@ gobj_mark(gpointer ptr)
     GObject* gobj = ptr;
     guint n_properties;
     GParamSpec** properties;
-    GValue gval = G_VALUE_INIT;
     guint i;
 
     properties = g_object_class_list_properties(G_OBJECT_GET_CLASS(gobj), &n_properties);
@@ -189,6 +188,7 @@ gobj_mark(gpointer ptr)
         /* FIXME: exclude types that doesn't have identity. */
 
         {
+            GValue gval = G_VALUE_INIT;
             g_value_init(&gval, value_type);
             g_object_get_property(gobj, pspec->name, &gval);
             rbgobj_gc_mark_gvalue(&gval);
diff --git a/glib2/ext/glib2/rbgobj_signal.c b/glib2/ext/glib2/rbgobj_signal.c
index 76ba109..3009fbe 100644
--- a/glib2/ext/glib2/rbgobj_signal.c
+++ b/glib2/ext/glib2/rbgobj_signal.c
@@ -174,12 +174,13 @@ gobj_s_signal_new(int argc, VALUE* argv, VALUE self)
 
         method_id = rb_to_id(rb_str_concat(rb_str_new2(default_handler_method_prefix), rbsignal_name));
 
-        factory = rb_eval_string(
+        factory = ruby_eval_string_from_file(
           "lambda{|klass, id|\n"
           "  lambda{|instance,*args|\n"
           "    klass.instance_method(id).bind(instance).call(*args)\n"
           "  }\n"
-          "}\n");
+          "}\n",
+          __FILE__);
         proc = rb_funcall(factory, rb_intern("call"), 2, self, ID2SYM(method_id));
 
         class_closure = g_rclosure_new(proc, Qnil, NULL);
@@ -629,12 +630,13 @@ gobj_s_method_added(VALUE klass, VALUE id)
     }
 
     {
-        VALUE f = rb_eval_string(
+        VALUE f = ruby_eval_string_from_file(
           "lambda{|klass, id|\n"
           "  lambda{|instance,*args|\n"
           "    klass.instance_method(id).bind(instance).call(*args)\n"
           "  }\n"
-          "}\n");
+          "}\n",
+          __FILE__);
         VALUE proc = rb_funcall(f, rb_intern("call"), 2, klass, id);
         GClosure* rclosure = g_rclosure_new(proc, Qnil,
                                             rbgobj_get_signal_func(signal_id));
@@ -887,7 +889,10 @@ rbgobj_define_action_methods(VALUE klass)
     }
 
     if (source->len > 0)
-        rb_funcall(klass, rb_intern("module_eval"), 1, rb_str_new2(source->str));
+        rb_funcall(klass, rb_intern("module_eval"), 3,
+                   rb_str_new2(source->str),
+                   rb_str_new2(__FILE__),
+                   INT2NUM(__LINE__));
     g_string_free(source, TRUE);
 }
 
diff --git a/glib2/ext/glib2/rbgobject.c b/glib2/ext/glib2/rbgobject.c
index e5a6c96..a822d42 100644
--- a/glib2/ext/glib2/rbgobject.c
+++ b/glib2/ext/glib2/rbgobject.c
@@ -335,7 +335,10 @@ rbgobj_define_property_accessors(VALUE klass)
     }
 
     if (source->len > 0)
-        rb_funcall(klass, id_module_eval, 1, rb_str_new2(source->str));
+        rb_funcall(klass, id_module_eval, 3,
+                   rb_str_new2(source->str),
+                   rb_str_new2(__FILE__),
+                   INT2NUM(__LINE__));
     g_string_free(source, TRUE);
 }
 
diff --git a/glib2/ext/glib2/rbgutil.c b/glib2/ext/glib2/rbgutil.c
index 856f6d5..e6c5374 100644
--- a/glib2/ext/glib2/rbgutil.c
+++ b/glib2/ext/glib2/rbgutil.c
@@ -39,9 +39,11 @@ rbg_define_method(VALUE klass, const char *name, VALUE (*func)(ANYARGS), int arg
         return;
 
     name += 4;
-    rb_funcall(klass, rbgutil_id_module_eval, 1,
+    rb_funcall(klass, rbgutil_id_module_eval, 3,
                CSTR2RVAL_FREE(g_strdup_printf("def %s=(val); set_%s(val); val; end\n",
-                                              name, name)));
+                                              name, name)),
+               rb_str_new2(__FILE__),
+               INT2NUM(__LINE__));
 }
 
 void
@@ -52,9 +54,11 @@ rbg_define_singleton_method(VALUE obj, const char *name, VALUE (*func)(ANYARGS),
         return;
 
     name += 4;
-    rb_funcall(obj, rbgutil_id_module_eval, 1,
+    rb_funcall(obj, rbgutil_id_module_eval, 3,
                CSTR2RVAL_FREE(g_strdup_printf("def self.%s=(val); set_%s(val); val; end\n",
-                                              name, name)));
+                                              name, name)),
+               rb_str_new2(__FILE__),
+               INT2NUM(__LINE__));
 }
 
 void
diff --git a/glib2/lib/glib-mkenums.rb b/glib2/lib/glib-mkenums.rb
index 9ff681f..d1345e0 100644
--- a/glib2/lib/glib-mkenums.rb
+++ b/glib2/lib/glib-mkenums.rb
@@ -3,7 +3,7 @@
 #
 # C language enum description generation library like as glib-mkenums tool.
 #
-# Copyright(C) 2006-2013 Ruby-GNOME2 Project.
+# Copyright(C) 2006-2015 Ruby-GNOME2 Project.
 #
 # This program is licenced under the same license of Ruby-GNOME2.
 #
diff --git a/glib2/lib/glib2.rb b/glib2/lib/glib2.rb
index 5c79657..b7b73be 100644
--- a/glib2/lib/glib2.rb
+++ b/glib2/lib/glib2.rb
@@ -1,8 +1,18 @@
+# Copyright (C) 2005-2015  Ruby-GNOME2 Project Team
 #
-# glib2.rb
-# Copyright(C) 2005-2010 Ruby-GNOME2 Project.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
 #
-# This program is licenced under the same license of Ruby-GNOME2.
+# 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 require 'pathname'
 require 'English'
@@ -221,6 +231,7 @@ GLib::Log.set_log_domain(GLib::Object::LOG_DOMAIN)
 GLib::Log.set_log_domain(GLib::Thread::LOG_DOMAIN)
 GLib::Log.set_log_domain(GLib::Module::LOG_DOMAIN)
 
+require 'glib2/version'
 =begin
 Don't we need this?
 ObjectSpace.define_finalizer(GLib) {
diff --git a/glib2/lib/glib2/deprecatable.rb b/glib2/lib/glib2/deprecatable.rb
index 0d25ec0..adf7eae 100644
--- a/glib2/lib/glib2/deprecatable.rb
+++ b/glib2/lib/glib2/deprecatable.rb
@@ -1,3 +1,19 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
 module GLib
   module Deprecatable
     unless respond_to?(:define_singleton_method)
diff --git a/gtk3/test/test-gtk-cell-layout.rb b/glib2/lib/glib2/version.rb
similarity index 67%
copy from gtk3/test/test-gtk-cell-layout.rb
copy to glib2/lib/glib2/version.rb
index 358dd81..6e03773 100644
--- a/gtk3/test/test-gtk-cell-layout.rb
+++ b/glib2/lib/glib2/version.rb
@@ -14,22 +14,24 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-class TestGtkCellLayout < Test::Unit::TestCase
-  include GtkTestUtils
+module GLib
+  module Version
+    MAJOR = GLib::MAJOR_VERSION
+    MINOR = GLib::MINOR_VERSION
+    MICRO = GLib::MICRO_VERSION
+    STRING = "#{MAJOR}.#{MINOR}.#{MICRO}"
 
-  def setup
-    @layout = Gtk::ComboBox.new
-    @renderer = Gtk::CellRendererText.new
-    @layout.pack_start(@renderer, false)
-  end
-
-  sub_test_case "#set_attributes" do
-    test "empty" do
-      @layout.set_attributes(@renderer, {})
+    class << self
+      def or_later?(major, minor, micro=nil)
+        micro ||= 0
+        version = [
+          MAJOR,
+          MINOR,
+          MICRO,
+        ]
+        (version <=> [major, minor, micro]) >= 0
+      end
     end
 
-    test "multiple" do
-      @layout.set_attributes(@renderer, {:text => 1})
-    end
   end
 end
diff --git a/glib2/lib/gnome2-raketask.rb b/glib2/lib/gnome2-raketask.rb
index 8f01e8c..37cca50 100644
--- a/glib2/lib/gnome2-raketask.rb
+++ b/glib2/lib/gnome2-raketask.rb
@@ -1,4 +1,4 @@
-# Copyright(C) 2013 Ruby-GNOME2 Project.
+# Copyright(C) 2013-2015 Ruby-GNOME2 Project.
 #
 # This program is licenced under the same license of Ruby-GNOME2.
 
diff --git a/glib2/lib/gnome2/rake/external-package.rb b/glib2/lib/gnome2/rake/external-package.rb
index fdbe065..257ca3e 100644
--- a/glib2/lib/gnome2/rake/external-package.rb
+++ b/glib2/lib/gnome2/rake/external-package.rb
@@ -1,6 +1,6 @@
 # -*- ruby -*-
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/glib2/lib/gnome2/rake/native-binary-build-task.rb b/glib2/lib/gnome2/rake/native-binary-build-task.rb
index 1b3c847..bcd11a0 100644
--- a/glib2/lib/gnome2/rake/native-binary-build-task.rb
+++ b/glib2/lib/gnome2/rake/native-binary-build-task.rb
@@ -1,6 +1,6 @@
 # -*- ruby -*-
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/glib2/lib/gnome2/rake/package-task.rb b/glib2/lib/gnome2/rake/package-task.rb
index bfc0cad..434077e 100644
--- a/glib2/lib/gnome2/rake/package-task.rb
+++ b/glib2/lib/gnome2/rake/package-task.rb
@@ -1,6 +1,6 @@
 # coding: utf-8
 
-# Copyright(C) 2011-2014 Ruby-GNOME2 Project.
+# Copyright(C) 2011-2015 Ruby-GNOME2 Project.
 #
 # This program is licenced under the same license of Ruby-GNOME2.
 
diff --git a/glib2/lib/gnome2/rake/package.rb b/glib2/lib/gnome2/rake/package.rb
index 071c0a9..366d88d 100644
--- a/glib2/lib/gnome2/rake/package.rb
+++ b/glib2/lib/gnome2/rake/package.rb
@@ -1,6 +1,6 @@
 # -*- ruby -*-
 #
-# Copyright (C) 2013-2014  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/glib2/lib/gnome2/rake/source-download-task.rb b/glib2/lib/gnome2/rake/source-download-task.rb
index a4753b0..d7b5e08 100644
--- a/glib2/lib/gnome2/rake/source-download-task.rb
+++ b/glib2/lib/gnome2/rake/source-download-task.rb
@@ -1,6 +1,6 @@
 # -*- ruby -*-
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/glib2/lib/gnome2/rake/windows-binary-build-task.rb b/glib2/lib/gnome2/rake/windows-binary-build-task.rb
index 66a7ff5..1a45f50 100644
--- a/glib2/lib/gnome2/rake/windows-binary-build-task.rb
+++ b/glib2/lib/gnome2/rake/windows-binary-build-task.rb
@@ -1,4 +1,4 @@
-# Copyright(C) 2012 Ruby-GNOME2 Project.
+# Copyright(C) 2012-2015 Ruby-GNOME2 Project.
 #
 # This program is licenced under the same license of Ruby-GNOME2.
 
diff --git a/glib2/lib/gnome2/rake/windows-binary-download-task.rb b/glib2/lib/gnome2/rake/windows-binary-download-task.rb
index fc2fbb1..4d1fbd1 100644
--- a/glib2/lib/gnome2/rake/windows-binary-download-task.rb
+++ b/glib2/lib/gnome2/rake/windows-binary-download-task.rb
@@ -1,4 +1,4 @@
-# Copyright(C) 2010-2012 Ruby-GNOME2 Project.
+# Copyright(C) 2010-2015 Ruby-GNOME2 Project.
 #
 # This program is licenced under the same license of Ruby-GNOME2.
 
diff --git a/glib2/lib/mkmf-gnome2.rb b/glib2/lib/mkmf-gnome2.rb
index 3139908..9454f9d 100644
--- a/glib2/lib/mkmf-gnome2.rb
+++ b/glib2/lib/mkmf-gnome2.rb
@@ -3,7 +3,7 @@
 #
 # Extended mkmf for Ruby-GNOME2 and Ruby/GLib based libraries.
 #
-# Copyright(C) 2003-2013 Ruby-GNOME2 Project.
+# Copyright(C) 2003-2015 Ruby-GNOME2 Project.
 #
 # This program is licenced under the same
 # license of Ruby-GNOME2.
diff --git a/glib2/test/glib-test-init.rb b/glib2/test/glib-test-init.rb
index 193bc8b..fd09786 100644
--- a/glib2/test/glib-test-init.rb
+++ b/glib2/test/glib-test-init.rb
@@ -1,3 +1,19 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
 $VERBOSE = true
 
 require "rubygems"
diff --git a/glib2/test/glib-test-utils.rb b/glib2/test/glib-test-utils.rb
index 06f03ee..c24d265 100644
--- a/glib2/test/glib-test-utils.rb
+++ b/glib2/test/glib-test-utils.rb
@@ -1,3 +1,19 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
 module GLibTestUtils
   private
   def only_glib_version(major, minor, micro)
diff --git a/glib2/test/run-test.rb b/glib2/test/run-test.rb
index d4f7fd2..08216db 100755
--- a/glib2/test/run-test.rb
+++ b/glib2/test/run-test.rb
@@ -1,4 +1,20 @@
 #!/usr/bin/env ruby
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
 
 base = File.expand_path(File.join(File.dirname(__FILE__)))
 top = File.expand_path(File.join(base, ".."))
diff --git a/glib2/test/test-version.rb b/glib2/test/test-version.rb
new file mode 100644
index 0000000..13b8e13
--- /dev/null
+++ b/glib2/test/test-version.rb
@@ -0,0 +1,47 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+class TestGLibVersion < Test::Unit::TestCase
+  include GLibTestUtils
+
+  test "STRING" do
+    major = GLib::Version::MAJOR
+    minor = GLib::Version::MINOR
+    micro = GLib::Version::MICRO
+    assert_equal([major, minor, micro].join("."),
+                 GLib::Version::STRING)
+  end
+
+  sub_test_case("#or_later?") do
+    test "same" do
+      assert_true(GLib::Version.or_later?(GLib::Version::MAJOR,
+                                          GLib::Version::MINOR,
+                                          GLib::Version::MICRO))
+    end
+
+    test "later" do
+      assert_true(GLib::Version.or_later?(GLib::Version::MAJOR,
+                                          GLib::Version::MINOR - 1,
+                                          GLib::Version::MICRO))
+    end
+
+    test "earlier" do
+      assert_false(GLib::Version.or_later?(GLib::Version::MAJOR,
+                                           GLib::Version::MINOR + 1,
+                                           GLib::Version::MICRO))
+    end
+  end
+end
diff --git a/glib2/test/test_enum.rb b/glib2/test/test_enum.rb
index 89dc416..1659066 100644
--- a/glib2/test/test_enum.rb
+++ b/glib2/test/test_enum.rb
@@ -1,4 +1,19 @@
-# -*- coding: utf-8 -*-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
 require 'test/unit'
 require 'glib2'
 
diff --git a/glib2/test/test_file_utils.rb b/glib2/test/test_file_utils.rb
index 32e4592..69c63eb 100644
--- a/glib2/test/test_file_utils.rb
+++ b/glib2/test/test_file_utils.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 class TestGLibFileUtils < Test::Unit::TestCase
   include GLibTestUtils
 
diff --git a/glib2/test/test_flags.rb b/glib2/test/test_flags.rb
index e4a5be2..b47aef1 100644
--- a/glib2/test/test_flags.rb
+++ b/glib2/test/test_flags.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 require 'test/unit'
 require 'glib2'
 
diff --git a/glib2/test/test_glib2.rb b/glib2/test/test_glib2.rb
index 42d23a4..8ea0c80 100755
--- a/glib2/test/test_glib2.rb
+++ b/glib2/test/test_glib2.rb
@@ -1,4 +1,20 @@
-# coding: binary
+# encoding: ascii-8bit
+#
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 require 'test/unit'
 require 'glib2'
diff --git a/glib2/test/test_iochannel.rb b/glib2/test/test_iochannel.rb
index 03064b9..d823d03 100755
--- a/glib2/test/test_iochannel.rb
+++ b/glib2/test/test_iochannel.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 require 'test/unit'
 require 'glib2'
 
diff --git a/glib2/test/test_key_file.rb b/glib2/test/test_key_file.rb
index 7e8990e..9e4dbb6 100644
--- a/glib2/test/test_key_file.rb
+++ b/glib2/test/test_key_file.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 require 'tempfile'
 
 class TestGLibKeyFile < Test::Unit::TestCase
diff --git a/glib2/test/test_mkenums.rb b/glib2/test/test_mkenums.rb
index c7847e5..61a6855 100644
--- a/glib2/test/test_mkenums.rb
+++ b/glib2/test/test_mkenums.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 require 'glib-mkenums'
 
 class TestGLibMkEnums < Test::Unit::TestCase
diff --git a/glib2/test/test_poll_fd.rb b/glib2/test/test_poll_fd.rb
index 92b26c5..9a15717 100644
--- a/glib2/test/test_poll_fd.rb
+++ b/glib2/test/test_poll_fd.rb
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/glib2/test/test_signal.rb b/glib2/test/test_signal.rb
index 01849fc..161fc15 100644
--- a/glib2/test/test_signal.rb
+++ b/glib2/test/test_signal.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 class TestSignal < Test::Unit::TestCase
   def test_signal_flags
     assert_const_defined(GLib, :SignalFlags)
diff --git a/glib2/test/test_source.rb b/glib2/test/test_source.rb
index 04f786b..3a92ed8 100644
--- a/glib2/test/test_source.rb
+++ b/glib2/test/test_source.rb
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/glib2/test/test_spawn.rb b/glib2/test/test_spawn.rb
index 17b5a37..5e42995 100644
--- a/glib2/test/test_spawn.rb
+++ b/glib2/test/test_spawn.rb
@@ -1,4 +1,19 @@
-# -*- coding: utf-8 -*-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
 require 'rbconfig'
 
 class TestGLibSpawn < Test::Unit::TestCase
diff --git a/glib2/test/test_timeout.rb b/glib2/test/test_timeout.rb
index f4f5f96..c87307e 100644
--- a/glib2/test/test_timeout.rb
+++ b/glib2/test/test_timeout.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 class TestGLibTimeout < Test::Unit::TestCase
   include GLibTestUtils
 
diff --git a/glib2/test/test_unicode.rb b/glib2/test/test_unicode.rb
index 52ac0f7..df959b7 100644
--- a/glib2/test/test_unicode.rb
+++ b/glib2/test/test_unicode.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 class TestGLibUnicode < Test::Unit::TestCase
   include GLibTestUtils
 
diff --git a/glib2/test/test_utils.rb b/glib2/test/test_utils.rb
index fe4eba8..4d03666 100644
--- a/glib2/test/test_utils.rb
+++ b/glib2/test/test_utils.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 class TestGLibUtils < Test::Unit::TestCase
   include GLibTestUtils
 
diff --git a/glib2/test/test_value.rb b/glib2/test/test_value.rb
index f843217..4b54203 100644
--- a/glib2/test/test_value.rb
+++ b/glib2/test/test_value.rb
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/glib2/test/test_win32.rb b/glib2/test/test_win32.rb
index 0cc0fab..6683976 100644
--- a/glib2/test/test_win32.rb
+++ b/glib2/test/test_win32.rb
@@ -1,5 +1,19 @@
-# -*- coding: utf-8 -*-
-
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ 
 class TestGLibWin32 < Test::Unit::TestCase
   include GLibTestUtils
 
diff --git a/gobject-introspection/ext/gobject-introspection/rb-gi-argument.c b/gobject-introspection/ext/gobject-introspection/rb-gi-argument.c
index a5e68a8..37cedbf 100644
--- a/gobject-introspection/ext/gobject-introspection/rb-gi-argument.c
+++ b/gobject-introspection/ext/gobject-introspection/rb-gi-argument.c
@@ -978,6 +978,8 @@ rb_gi_argument_to_ruby_gslist(GIArgument *argument, GITypeInfo *type_info)
         rb_argument = CSTRGSLIST2RVAL(argument->v_pointer);
         break;
     case GI_TYPE_TAG_FILENAME:
+        rb_argument = FILENAMEGSLIST2RVAL(argument->v_pointer);
+        break;
     case GI_TYPE_TAG_ARRAY:
         rb_raise(rb_eNotImpError,
                  "TODO: GIArgument(GSList)[%s] -> Ruby",
@@ -2042,10 +2044,10 @@ rb_gi_return_argument_free_everything_gslist(GIArgument *argument,
                  g_type_tag_to_string(element_type_tag));
         break;
     case GI_TYPE_TAG_UTF8:
+    case GI_TYPE_TAG_FILENAME:
         g_slist_foreach(argument->v_pointer, (GFunc)g_free, NULL);
         g_slist_free(argument->v_pointer);
         break;
-    case GI_TYPE_TAG_FILENAME:
     case GI_TYPE_TAG_ARRAY:
         rb_raise(rb_eNotImpError,
                  "TODO: free GIArgument(GSList)[%s] everything",
diff --git a/gobject-introspection/lib/gobject-introspection.rb b/gobject-introspection/lib/gobject-introspection.rb
index 348aa85..bc67332 100644
--- a/gobject-introspection/lib/gobject-introspection.rb
+++ b/gobject-introspection/lib/gobject-introspection.rb
@@ -58,4 +58,5 @@ require "gobject-introspection/interface-info"
 require "gobject-introspection/struct-info"
 require "gobject-introspection/boxed-info"
 require "gobject-introspection/union-info"
+require "gobject-introspection/version"
 require "gobject-introspection/loader"
diff --git a/gtk3/test/test-gtk-cell-layout.rb b/gobject-introspection/lib/gobject-introspection/version.rb
similarity index 67%
copy from gtk3/test/test-gtk-cell-layout.rb
copy to gobject-introspection/lib/gobject-introspection/version.rb
index 358dd81..8b06e1b 100644
--- a/gtk3/test/test-gtk-cell-layout.rb
+++ b/gobject-introspection/lib/gobject-introspection/version.rb
@@ -14,22 +14,21 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-class TestGtkCellLayout < Test::Unit::TestCase
-  include GtkTestUtils
+module GObjectIntrospection
+  module Version
+    MAJOR, MINOR, MICRO = BUILD_VERSION
+    STRING = BUILD_VERSION.join(".")
 
-  def setup
-    @layout = Gtk::ComboBox.new
-    @renderer = Gtk::CellRendererText.new
-    @layout.pack_start(@renderer, false)
-  end
-
-  sub_test_case "#set_attributes" do
-    test "empty" do
-      @layout.set_attributes(@renderer, {})
-    end
-
-    test "multiple" do
-      @layout.set_attributes(@renderer, {:text => 1})
+    class << self
+      def or_later?(major, minor, micro=nil)
+        micro ||= 0
+        version = [
+          MAJOR,
+          MINOR,
+          MICRO,
+        ]
+        (version <=> [major, minor, micro]) >= 0
+      end
     end
   end
 end
diff --git a/gobject-introspection/test/run-test.rb b/gobject-introspection/test/run-test.rb
index 6ae0462..bd26f85 100755
--- a/gobject-introspection/test/run-test.rb
+++ b/gobject-introspection/test/run-test.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 #
-# Copyright (C) 2012  Ruby-GNOME2 Project Team
+# Copyright (C) 2012-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -42,4 +42,5 @@ require "gobject-introspection-test-utils"
 
 require "gobject-introspection"
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true,
+                                File.join(gobject_introspection_base, "test"))
diff --git a/gobject-introspection/test/test-version.rb b/gobject-introspection/test/test-version.rb
new file mode 100644
index 0000000..86f8360
--- /dev/null
+++ b/gobject-introspection/test/test-version.rb
@@ -0,0 +1,47 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+class TestGObjectIntrospectionVersion < Test::Unit::TestCase
+  include GObjectIntrospectionTestUtils
+
+  test "STRING" do
+    major = GObjectIntrospection::Version::MAJOR
+    minor = GObjectIntrospection::Version::MINOR
+    micro = GObjectIntrospection::Version::MICRO
+    assert_equal([major, minor, micro].join("."),
+                 GObjectIntrospection::Version::STRING)
+  end
+
+  sub_test_case("#or_later?") do
+    test "same" do
+      assert_true(GObjectIntrospection::Version.or_later?(GObjectIntrospection::Version::MAJOR,
+                                                          GObjectIntrospection::Version::MINOR,
+                                                          GObjectIntrospection::Version::MICRO))
+    end
+
+    test "later" do
+      assert_true(GObjectIntrospection::Version.or_later?(GObjectIntrospection::Version::MAJOR,
+                                                          GObjectIntrospection::Version::MINOR - 1,
+                                                          GObjectIntrospection::Version::MICRO))
+    end
+
+    test "earlier" do
+      assert_false(GObjectIntrospection::Version.or_later?(GObjectIntrospection::Version::MAJOR,
+                                                           GObjectIntrospection::Version::MINOR + 1,
+                                                           GObjectIntrospection::Version::MICRO))
+    end
+  end
+end
diff --git a/gstreamer/lib/gst.rb b/gstreamer/lib/gst.rb
index cd0e752..50b29aa 100644
--- a/gstreamer/lib/gst.rb
+++ b/gstreamer/lib/gst.rb
@@ -71,6 +71,7 @@ module Gst
       require "gst/registry"
       require "gst/structure"
       require "gst/type-find-factory"
+      require "gst/version"
       init_base
       init_controller
     end
diff --git a/gtk3/test/test-gtk-cell-layout.rb b/gstreamer/lib/gst/version.rb
similarity index 66%
copy from gtk3/test/test-gtk-cell-layout.rb
copy to gstreamer/lib/gst/version.rb
index 358dd81..52cda69 100644
--- a/gtk3/test/test-gtk-cell-layout.rb
+++ b/gstreamer/lib/gst/version.rb
@@ -14,22 +14,23 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-class TestGtkCellLayout < Test::Unit::TestCase
-  include GtkTestUtils
 
-  def setup
-    @layout = Gtk::ComboBox.new
-    @renderer = Gtk::CellRendererText.new
-    @layout.pack_start(@renderer, false)
-  end
-
-  sub_test_case "#set_attributes" do
-    test "empty" do
-      @layout.set_attributes(@renderer, {})
-    end
-
-    test "multiple" do
-      @layout.set_attributes(@renderer, {:text => 1})
+module Gst
+  module Version
+    MAJOR, MINOR, MICRO, NANO = Gst.version
+    STRING = "#{MAJOR}.#{MINOR}.#{MICRO}.#{NANO}"
+    class << self
+      def or_later?(major, minor, micro=nil, nano=nil)
+        micro ||= 0
+        nano ||= 0
+        version = [
+          MAJOR,
+          MINOR,
+          MICRO,
+          NANO,
+        ]
+        (version <=> [major, minor, micro, nano]) >= 0
+      end
     end
   end
 end
diff --git a/gstreamer/test/run-test.rb b/gstreamer/test/run-test.rb
index 3d5fcd5..f01e70b 100755
--- a/gstreamer/test/run-test.rb
+++ b/gstreamer/test/run-test.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 #
-# Copyright (C) 2014  Ruby-GNOME2 Project Team
+# Copyright (C) 2014-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -56,4 +56,4 @@ end
 
 Gst.init
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(gstreamer_base, "test"))
diff --git a/gstreamer/test/test-version.rb b/gstreamer/test/test-version.rb
new file mode 100644
index 0000000..dd329fa
--- /dev/null
+++ b/gstreamer/test/test-version.rb
@@ -0,0 +1,50 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+class TestGstVersion < Test::Unit::TestCase
+
+  test "STRING" do
+    major = Gst::Version::MAJOR
+    minor = Gst::Version::MINOR
+    micro = Gst::Version::MICRO
+    nano = Gst::Version::NANO
+    assert_equal([major, minor, micro, nano].join("."),
+                 Gst::Version::STRING)
+  end
+
+  sub_test_case("#or_later?") do
+    test "same" do
+      assert_true(Gst::Version.or_later?(Gst::Version::MAJOR,
+                                         Gst::Version::MINOR,
+                                         Gst::Version::MICRO,
+                                         Gst::Version::NANO))
+    end
+
+    test "later" do
+      assert_true(Gst::Version.or_later?(Gst::Version::MAJOR,
+                                         Gst::Version::MINOR - 1,
+                                         Gst::Version::MICRO,
+                                         Gst::Version::NANO))
+    end
+
+    test "earlier" do
+      assert_false(Gst::Version.or_later?(Gst::Version::MAJOR,
+                                          Gst::Version::MINOR + 1,
+                                          Gst::Version::MICRO,
+                                          Gst::Version::NANO))
+    end
+  end
+end
diff --git a/gtk2/lib/gtk2/base.rb b/gtk2/lib/gtk2/base.rb
index 0b8d567..737e812 100755
--- a/gtk2/lib/gtk2/base.rb
+++ b/gtk2/lib/gtk2/base.rb
@@ -99,6 +99,21 @@ module Gtk
       end
     end
   end
+
+  module Version
+    MAJOR = MAJOR_VERSION
+    MINOR = MINOR_VERSION
+    MICRO = MICRO_VERSION
+    STRING = "#{MAJOR}.#{MINOR}.#{MICRO}"
+
+    class << self
+      def or_later?(major, minor, micro=nil)
+        micro ||= 0
+        error_message = Gtk.check_version(major, minor, micro)
+        error_message.nil?
+      end
+    end
+  end
 end
 
 GLib::Log.set_log_domain(Gdk::LOG_DOMAIN)
diff --git a/gtk2/test/run-test.rb b/gtk2/test/run-test.rb
index 05e5c59..b178c47 100755
--- a/gtk2/test/run-test.rb
+++ b/gtk2/test/run-test.rb
@@ -29,4 +29,4 @@ require 'gtk-test-utils'
 
 require 'gtk2'
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(gtk_base, "test"))
diff --git a/gtk2/test/test_gtk_version.rb b/gtk2/test/test_gtk_version.rb
new file mode 100644
index 0000000..8f3b937
--- /dev/null
+++ b/gtk2/test/test_gtk_version.rb
@@ -0,0 +1,47 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+class TestGtkVersion < Test::Unit::TestCase
+  include GtkTestUtils
+
+  test "STRING" do
+    major = Gtk::Version::MAJOR
+    minor = Gtk::Version::MINOR
+    micro = Gtk::Version::MICRO
+    assert_equal([major, minor, micro].join("."),
+                 Gtk::Version::STRING)
+  end
+
+  sub_test_case("#or_later?") do
+    test "same" do
+      assert_true(Gtk::Version.or_later?(Gtk::Version::MAJOR,
+                                         Gtk::Version::MINOR,
+                                         Gtk::Version::MICRO))
+    end
+
+    test "later" do
+      assert_true(Gtk::Version.or_later?(Gtk::Version::MAJOR,
+                                         Gtk::Version::MINOR,
+                                         Gtk::Version::MICRO - 1))
+    end
+
+    test "earlier" do
+      assert_false(Gtk::Version.or_later?(Gtk::Version::MAJOR,
+                                          Gtk::Version::MINOR,
+                                          Gtk::Version::MICRO + 1))
+    end
+  end
+end
diff --git a/gtk3/ext/gtk3/rb-gtk3-private.h b/gtk3/ext/gtk3/rb-gtk3-cell-layout.c
similarity index 62%
copy from gtk3/ext/gtk3/rb-gtk3-private.h
copy to gtk3/ext/gtk3/rb-gtk3-cell-layout.c
index c058874..fbedb15 100644
--- a/gtk3/ext/gtk3/rb-gtk3-private.h
+++ b/gtk3/ext/gtk3/rb-gtk3-cell-layout.c
@@ -18,15 +18,25 @@
  *  MA  02110-1301  USA
  */
 
-#ifndef RB_GTK3_PRIVATE_H
-#define RB_GTK3_PRIVATE_H
+#include "rb-gtk3-private.h"
 
-#include "rb-gtk3.h"
+static void
+rb_gtk3_cell_layout_mark(gpointer object)
+{
+    GtkCellLayout *cell_layout = object;
+    GList *node;
+    GList *renderers;
 
-G_GNUC_INTERNAL void rbgtk3_class_init_func(gpointer g_class, gpointer class_data);
-G_GNUC_INTERNAL void rbgtk3_initialize(VALUE self);
+    renderers = gtk_cell_layout_get_cells(cell_layout);
+    for (node = renderers; node; node = g_list_next(node)) {
+        GtkCellRenderer *renderer = node->data;
+        rbgobj_gc_mark_instance(renderer);
+    }
+    g_list_free(renderers);
+}
 
-G_GNUC_INTERNAL void rbgtk3_container_init(void);
-G_GNUC_INTERNAL void rbgtk3_widget_init(void);
-
-#endif
+void
+rbgtk3_cell_layout_init(void)
+{
+    rbgobj_register_mark_func(GTK_TYPE_CELL_LAYOUT, rb_gtk3_cell_layout_mark);
+}
diff --git a/gtk3/ext/gtk3/rb-gtk3-private.h b/gtk3/ext/gtk3/rb-gtk3-private.h
index c058874..fec4ffc 100644
--- a/gtk3/ext/gtk3/rb-gtk3-private.h
+++ b/gtk3/ext/gtk3/rb-gtk3-private.h
@@ -26,7 +26,10 @@
 G_GNUC_INTERNAL void rbgtk3_class_init_func(gpointer g_class, gpointer class_data);
 G_GNUC_INTERNAL void rbgtk3_initialize(VALUE self);
 
+G_GNUC_INTERNAL void rbgtk3_cell_layout_init(void);
 G_GNUC_INTERNAL void rbgtk3_container_init(void);
+G_GNUC_INTERNAL void rbgtk3_tree_model_init(void);
+G_GNUC_INTERNAL void rbgtk3_tree_view_init(void);
 G_GNUC_INTERNAL void rbgtk3_widget_init(void);
 
 #endif
diff --git a/gtk3/ext/gtk3/rb-gtk3-tree-model.c b/gtk3/ext/gtk3/rb-gtk3-tree-model.c
new file mode 100644
index 0000000..ad1ce8f
--- /dev/null
+++ b/gtk3/ext/gtk3/rb-gtk3-tree-model.c
@@ -0,0 +1,77 @@
+/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
+/*
+ *  Copyright (C) 2015  Ruby-GNOME2 Project Team
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License as published by the Free Software Foundation; either
+ *  version 2.1 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
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ *  MA  02110-1301  USA
+ */
+
+#include "rb-gtk3-private.h"
+
+static gboolean
+rb_gtk3_tree_model_mark_callback(GtkTreeModel *model,
+                                 G_GNUC_UNUSED GtkTreePath *path,
+                                 GtkTreeIter *iter,
+                                 gpointer data)
+{
+    GArray *target_columns = data;
+    guint i, n;
+
+    n = target_columns->len;
+    for (i = 0; i < n; i++) {
+        gint nth_column;
+        GValue value = G_VALUE_INIT;
+
+        nth_column = g_array_index(target_columns, gint, i);
+        gtk_tree_model_get_value(model, iter, nth_column, &value);
+        rbgobj_gc_mark_gvalue(&value);
+        g_value_unset(&value);
+    }
+
+    return FALSE;
+}
+
+static void
+rb_gtk3_tree_model_mark(gpointer object)
+{
+    GtkTreeModel *tree_model;
+    GArray *target_columns;
+    gint i, n;
+
+    tree_model = GTK_TREE_MODEL(object);
+
+    target_columns = g_array_new(FALSE, FALSE, sizeof(gint));
+    n = gtk_tree_model_get_n_columns(tree_model);
+    for (i = 0; i < n; i++) {
+        GType column_type = gtk_tree_model_get_column_type(tree_model, i);
+
+        if (G_TYPE_FUNDAMENTAL(column_type) != G_TYPE_OBJECT)
+            continue;
+
+        g_array_append_val(target_columns, i);
+    }
+
+    gtk_tree_model_foreach(tree_model,
+                           rb_gtk3_tree_model_mark_callback,
+                           target_columns);
+
+    g_array_unref(target_columns);
+}
+
+void
+rbgtk3_tree_model_init(void)
+{
+    rbgobj_register_mark_func(GTK_TYPE_TREE_MODEL, rb_gtk3_tree_model_mark);
+}
diff --git a/gtk3/ext/gtk3/rb-gtk3-private.h b/gtk3/ext/gtk3/rb-gtk3-tree-view.c
similarity index 63%
copy from gtk3/ext/gtk3/rb-gtk3-private.h
copy to gtk3/ext/gtk3/rb-gtk3-tree-view.c
index c058874..9dd56b4 100644
--- a/gtk3/ext/gtk3/rb-gtk3-private.h
+++ b/gtk3/ext/gtk3/rb-gtk3-tree-view.c
@@ -18,15 +18,25 @@
  *  MA  02110-1301  USA
  */
 
-#ifndef RB_GTK3_PRIVATE_H
-#define RB_GTK3_PRIVATE_H
+#include "rb-gtk3-private.h"
 
-#include "rb-gtk3.h"
+static void
+rb_gtk3_tree_view_mark(gpointer object)
+{
+    GtkTreeView *tree_view = object;
+    GList *node;
+    GList *columns;
 
-G_GNUC_INTERNAL void rbgtk3_class_init_func(gpointer g_class, gpointer class_data);
-G_GNUC_INTERNAL void rbgtk3_initialize(VALUE self);
+    columns = gtk_tree_view_get_columns(tree_view);
+    for (node = columns; node; node = g_list_next(node)) {
+        GtkTreeViewColumn *column = node->data;
+        rbgobj_gc_mark_instance(column);
+    }
+    g_list_free(columns);
+}
 
-G_GNUC_INTERNAL void rbgtk3_container_init(void);
-G_GNUC_INTERNAL void rbgtk3_widget_init(void);
-
-#endif
+void
+rbgtk3_tree_view_init(void)
+{
+    rbgobj_register_mark_func(GTK_TYPE_TREE_VIEW, rb_gtk3_tree_view_mark);
+}
diff --git a/gtk3/ext/gtk3/rb-gtk3.c b/gtk3/ext/gtk3/rb-gtk3.c
index f0e7177..f7d90d1 100644
--- a/gtk3/ext/gtk3/rb-gtk3.c
+++ b/gtk3/ext/gtk3/rb-gtk3.c
@@ -98,6 +98,34 @@ rb_gtk3_builder_connect_func_callback(GtkBuilder *builder,
                GCONNECTFLAGS2RVAL(flags));
 }
 
+static void
+rb_gtk3_cell_layout_data_func_callback(GtkCellLayout *cell_layout,
+                                       GtkCellRenderer *cell,
+                                       GtkTreeModel *model,
+                                       GtkTreeIter *iter,
+                                       gpointer user_data)
+{
+    RBGICallbackData *callback_data = user_data;
+    ID id_set_model;
+    ID id_call;
+    VALUE rb_model;
+    VALUE rb_iter;
+
+    CONST_ID(id_set_model, "model=");
+    rb_model = GOBJ2RVAL(model);
+    rb_iter = BOXED2RVAL(iter, GTK_TYPE_TREE_ITER);
+    rb_funcall(rb_iter, id_set_model, 1, rb_model);
+
+    CONST_ID(id_call, "call");
+    rb_funcall(callback_data->rb_callback,
+               id_call,
+               4,
+               GOBJ2RVAL(cell_layout),
+               GOBJ2RVAL(cell),
+               rb_model,
+               rb_iter);
+}
+
 static const gchar *
 rb_gtk3_translate_func_callback(const gchar *path,
                                 gpointer user_data)
@@ -282,6 +310,8 @@ rb_gtk3_callback_finder(GIArgInfo *info)
         return rb_gtk3_assistant_page_func_callback;
     } else if (name_equal(info, "BuilderConnectFunc")) {
         return rb_gtk3_builder_connect_func_callback;
+    } else if (name_equal(info, "CellLayoutDataFunc")) {
+        return rb_gtk3_cell_layout_data_func_callback;
     } else if (name_equal(info, "TranslateFunc")) {
         return rb_gtk3_translate_func_callback;
     } else if (name_equal(info, "TreeCellDataFunc")) {
@@ -400,7 +430,10 @@ Init_gtk3(void)
     rbgobj_register_mark_func(GTK_TYPE_UI_MANAGER, rb_gtk3_ui_manager_mark);
 #endif
 
+    rbgtk3_cell_layout_init();
     rbgtk3_container_init();
+    rbgtk3_tree_model_init();
+    rbgtk3_tree_view_init();
     rbgtk3_widget_init();
 
     rbgobj_boxed_not_copy_obj(GTK_TYPE_SELECTION_DATA);
diff --git a/gtk3/lib/gtk3/builder.rb b/gtk3/lib/gtk3/builder.rb
index f026540..62c42ee 100644
--- a/gtk3/lib/gtk3/builder.rb
+++ b/gtk3/lib/gtk3/builder.rb
@@ -18,12 +18,13 @@ module Gtk
   class Builder
     alias_method :initialize_raw, :initialize
     def initialize(options={})
-      file      = options[:file]
+      path      = options[:path] || options[:file]
       resource  = options[:resource]
       string    = options[:string]
 
-      if file
-        initialize_new_from_file(file)
+      if path
+        path = path.to_path if path.respond_to?(:to_path)
+        initialize_new_from_file(path)
       elsif resource
         initialize_new_from_resource(resource)
       elsif string
@@ -40,15 +41,57 @@ module Gtk
       add_from_string_raw(string, string.bytesize)
     end
 
-    def add(target)
-      if target.respond_to?(:to_path)
-        add_from_file(target.to_path)
-      elsif target.start_with?("<") or target.start_with?(" ")
-        add_from_string(target)
-      elsif File.exist?(target)
-        add_from_file(target)
+    alias_method :add_objects_from_string_raw, :add_objects_from_string
+    def add_objects_from_string(string, object_ids)
+      add_objects_from_string_raw(string, string.bytesize, object_ids)
+    end
+
+    def add(target_or_options={})
+      if target_or_options.is_a?(Hash)
+        options = target_or_options
+      else
+        target = target_or_options
+        options = {}
+        if target.respond_to?(:to_path)
+          options[:path] = target.to_path
+        elsif target.start_with?("<") or target.start_with?(" ")
+          options[:string] = target
+        elsif File.exist?(target)
+          options[:path] = target
+        else
+          options[:resource] = target
+        end
+      end
+
+      string   = options[:string]
+      path     = options[:path] || options[:file]
+      resource = options[:resource]
+
+      object_ids = options[:object_ids]
+
+      if path
+        path = path.to_path if path.respond_to?(:to_path)
+        if object_ids
+          add_objects_from_file(path, object_ids)
+        else
+          add_from_file(path)
+        end
+      elsif resource
+        if object_ids
+          add_objects_from_resource(resource, object_ids)
+        else
+          add_from_resource(resource)
+        end
+      elsif string
+        if object_ids
+          add_objects_from_string(string, object_ids)
+        else
+          add_from_string(string)
+        end
       else
-        add_from_resource(target)
+        message = ":path (:file), :resource or :string " +
+          "must be specified: #{options.inspect}"
+        raise InvalidArgument, message
       end
     end
 
diff --git a/gtk3/lib/gtk3/container.rb b/gtk3/lib/gtk3/container.rb
index ccbedae..9c203c0 100644
--- a/gtk3/lib/gtk3/container.rb
+++ b/gtk3/lib/gtk3/container.rb
@@ -25,6 +25,19 @@ module Gtk
 
     include Enumerable
 
+    alias_method :add_raw, :add
+    def add(child, properties={})
+      child.freeze_child_notify
+      begin
+        add_raw(child)
+        properties.each do |key, value|
+          child_set_property(child, key, value)
+        end
+      ensure
+        child.thaw_child_notify
+      end
+    end
+
     def <<(widget)
       add(widget)
       self
diff --git a/gtk3/lib/gtk3/deprecated.rb b/gtk3/lib/gtk3/deprecated.rb
index 0b69558..dfcb6ab 100644
--- a/gtk3/lib/gtk3/deprecated.rb
+++ b/gtk3/lib/gtk3/deprecated.rb
@@ -489,10 +489,10 @@ module Gtk
     define_deprecated_method :render_icon, :raise => "Use '#{self}#render_icon_pixbuf'."
   end
 
-  #module IconSize
-  #  extend GLib::Deprecatable
-  #  define_deprecated_enums :IconSize
-  #end
+  class IconSize
+   extend GLib::Deprecatable
+   define_deprecated_const :IconSize, "Gtk::IconSize"
+  end
 
   class IconTheme
     extend GLib::Deprecatable
diff --git a/gtk3/lib/gtk3/loader.rb b/gtk3/lib/gtk3/loader.rb
index b08e98d..9e9bfa8 100644
--- a/gtk3/lib/gtk3/loader.rb
+++ b/gtk3/lib/gtk3/loader.rb
@@ -129,8 +129,10 @@ module Gtk
       require "gtk3/search-bar"
       require "gtk3/selection-data"
       require "gtk3/spin-button"
+      require "gtk3/show-uri"
       require "gtk3/stack"
       require "gtk3/stock"
+      require "gtk3/stock-item"
       require "gtk3/style-context"
       require "gtk3/style-properties"
       require "gtk3/table"
diff --git a/gtk3/test/test-gtk-cell-layout.rb b/gtk3/lib/gtk3/show-uri.rb
similarity index 66%
copy from gtk3/test/test-gtk-cell-layout.rb
copy to gtk3/lib/gtk3/show-uri.rb
index 358dd81..7248315 100644
--- a/gtk3/test/test-gtk-cell-layout.rb
+++ b/gtk3/lib/gtk3/show-uri.rb
@@ -14,22 +14,21 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-class TestGtkCellLayout < Test::Unit::TestCase
-  include GtkTestUtils
+module Gtk
+  class << self
+    alias_method :show_uri_raw, :show_uri
+    def show_uri(uri_or_options)
+      if uri_or_options.is_a?(String)
+        options = {:uri => uri_or_options}
+      else
+        options = uri_or_options
+      end
 
-  def setup
-    @layout = Gtk::ComboBox.new
-    @renderer = Gtk::CellRendererText.new
-    @layout.pack_start(@renderer, false)
-  end
-
-  sub_test_case "#set_attributes" do
-    test "empty" do
-      @layout.set_attributes(@renderer, {})
-    end
+      screen    = options[:screen]
+      uri       = options[:uri]
+      timestamp = options[:timestamp] || Gdk::CURRENT_TIME
 
-    test "multiple" do
-      @layout.set_attributes(@renderer, {:text => 1})
+      show_uri_raw(screen, uri, timestamp)
     end
   end
 end
diff --git a/gtk3/test/test-gtk-cell-layout.rb b/gtk3/lib/gtk3/stock-item.rb
similarity index 67%
copy from gtk3/test/test-gtk-cell-layout.rb
copy to gtk3/lib/gtk3/stock-item.rb
index 358dd81..637933a 100644
--- a/gtk3/test/test-gtk-cell-layout.rb
+++ b/gtk3/lib/gtk3/stock-item.rb
@@ -14,22 +14,23 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-class TestGtkCellLayout < Test::Unit::TestCase
-  include GtkTestUtils
-
-  def setup
-    @layout = Gtk::ComboBox.new
-    @renderer = Gtk::CellRendererText.new
-    @layout.pack_start(@renderer, false)
-  end
-
-  sub_test_case "#set_attributes" do
-    test "empty" do
-      @layout.set_attributes(@renderer, {})
+module Gtk
+  class StockItem
+    def [](*args)
+      warn("#{self.class}\##{__method__} is deprecated. " +
+           "Use \#stock_id, \#label, \#modifier, \#keyval and " +
+           "\#translation_domain instead.")
+      to_a[*args]
     end
 
-    test "multiple" do
-      @layout.set_attributes(@renderer, {:text => 1})
+    def to_a
+      [
+        stock_id,
+        label,
+        modifier,
+        keyval,
+        translation_domain,
+      ]
     end
   end
 end
diff --git a/gtk3/lib/gtk3/tree-iter.rb b/gtk3/lib/gtk3/tree-iter.rb
index bf052df..e729b91 100644
--- a/gtk3/lib/gtk3/tree-iter.rb
+++ b/gtk3/lib/gtk3/tree-iter.rb
@@ -30,7 +30,9 @@ module Gtk
     alias_method :[], :get_value
 
     def set_value(column, value)
-      @model.set_value(self, column, value)
+      gtype = @model.get_column_type(column)
+      gvalue = GLib::Value.new(gtype, value)
+      @model.set_value(self, column, gvalue)
     end
     alias_method :[]=, :set_value
 
diff --git a/gtk3/sample/gtk-demo/TODO b/gtk3/sample/gtk-demo/TODO
index 86f59fa..27af42c 100644
--- a/gtk3/sample/gtk-demo/TODO
+++ b/gtk3/sample/gtk-demo/TODO
@@ -1,4 +1,4 @@
-# C version (3.17.6) versus Ruby version
+# C version (3.18.0) versus Ruby version
 
 C version             Ruby version    Updated
 application.c           no              no
diff --git a/gtk3/sample/gtk-demo/alias_cursor.png b/gtk3/sample/gtk-demo/alias_cursor.png
new file mode 100644
index 0000000..70a7956
Binary files /dev/null and b/gtk3/sample/gtk-demo/alias_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/all_scroll_cursor.png b/gtk3/sample/gtk-demo/all_scroll_cursor.png
new file mode 100644
index 0000000..b42ae85
Binary files /dev/null and b/gtk3/sample/gtk-demo/all_scroll_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/application.ui b/gtk3/sample/gtk-demo/application.ui
index 68757a9..b3d8753 100644
--- a/gtk3/sample/gtk-demo/application.ui
+++ b/gtk3/sample/gtk-demo/application.ui
@@ -3,9 +3,7 @@
   <object class="GtkGrid" id="grid">
     <child>
       <object class="GtkToolbar" id="toolbar">
-        <property name="orientation">horizontal</property>
-        <property name="halign">fill</property>
-        <property name="hexpand">True</property>
+        <property name="hexpand">1</property>
         <style>
           <class name="primary-toolbar"/>
         </style>
@@ -37,16 +35,14 @@
     </child>
     <child>
       <object class="GtkInfoBar" id="infobar">
-        <property name="no-show-all">True</property>
-        <property name="halign">fill</property>
-        <property name="hexpand">True</property>
+        <property name="no-show-all">1</property>
+        <property name="hexpand">1</property>
         <child internal-child="content_area">
           <object class="GtkBox" id="content_area">
             <child>
               <object class="GtkLabel" id="message">
-                <property name="visible">True</property>
-                <property name="hexpand">True</property>
-                <property name="halign">fill</property>
+                <property name="visible">1</property>
+                <property name="hexpand">1</property>
               </object>
             </child>
           </object>
@@ -55,10 +51,10 @@
           <object class="GtkBox" id="action_area">
             <child>
               <object class="GtkButton" id="button">
-                <property name="visible">True</property>
+                <property name="visible">1</property>
                 <property name="valign">center</property>
                 <property name="label" translatable="yes">_OK</property>
-                <property name="use_underline">True</property>
+                <property name="use_underline">1</property>
               </object>
             </child>
           </object>
@@ -74,10 +70,8 @@
         <property name="shadow-type">in</property>
         <child>
           <object class="GtkTextView" id="contents">
-            <property name="halign">fill</property>
-            <property name="valign">fill</property>
-            <property name="hexpand">True</property>
-            <property name="vexpand">True</property>
+            <property name="hexpand">1</property>
+            <property name="vexpand">1</property>
           </object>
         </child>
       </object>
@@ -88,9 +82,8 @@
     </child>
     <child>
       <object class="GtkStatusbar" id="status">
-        <property name="halign">fill</property>
-        <property name="hexpand">True</property>
-        <property name="visible">True</property>
+        <property name="hexpand">1</property>
+        <property name="visible">1</property>
       </object>
       <packing>
         <property name="left-attach">0</property>
diff --git a/gtk3/sample/gtk-demo/brick.png b/gtk3/sample/gtk-demo/brick.png
new file mode 100644
index 0000000..d413cd2
Binary files /dev/null and b/gtk3/sample/gtk-demo/brick.png differ
diff --git a/gtk3/sample/gtk-demo/brick2.png b/gtk3/sample/gtk-demo/brick2.png
new file mode 100644
index 0000000..cfcd079
Binary files /dev/null and b/gtk3/sample/gtk-demo/brick2.png differ
diff --git a/gtk3/sample/gtk-demo/cell_cursor.png b/gtk3/sample/gtk-demo/cell_cursor.png
new file mode 100644
index 0000000..0bb0935
Binary files /dev/null and b/gtk3/sample/gtk-demo/cell_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/col_resize_cursor.png b/gtk3/sample/gtk-demo/col_resize_cursor.png
new file mode 100644
index 0000000..8dbd462
Binary files /dev/null and b/gtk3/sample/gtk-demo/col_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/copy_cursor.png b/gtk3/sample/gtk-demo/copy_cursor.png
new file mode 100644
index 0000000..c2350b8
Binary files /dev/null and b/gtk3/sample/gtk-demo/copy_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/crosshair_cursor.png b/gtk3/sample/gtk-demo/crosshair_cursor.png
new file mode 100644
index 0000000..7247e06
Binary files /dev/null and b/gtk3/sample/gtk-demo/crosshair_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/css_accordion.css b/gtk3/sample/gtk-demo/css_accordion.css
index 90db9fc..957999a 100644
--- a/gtk3/sample/gtk-demo/css_accordion.css
+++ b/gtk3/sample/gtk-demo/css_accordion.css
@@ -1,4 +1,4 @@
- at import url("reset.css");
+ at import url("resource://css_accordion/reset.css");
 
 * {
     transition-property: color, background-color, border-color, background-image, padding, border-width;
@@ -50,4 +50,3 @@ GtkWindow {
 .button:active {
     background-color: #993401;
 }
-
diff --git a/gtk3/sample/gtk-demo/css_basics.css b/gtk3/sample/gtk-demo/css_basics.css
index bd6a694..62dba7a 100644
--- a/gtk3/sample/gtk-demo/css_basics.css
+++ b/gtk3/sample/gtk-demo/css_basics.css
@@ -6,7 +6,7 @@
 
 /* This CSS resets all properties to their defaults values
  *    and overrides all user settings and the theme in use */
- at import url("reset.css");
+ at import url("resource://css_basics/reset.css");
 
 /* Set a very futuristic style by default */
 * {
diff --git a/gtk3/sample/gtk-demo/css_multiplebgs.css b/gtk3/sample/gtk-demo/css_multiplebgs.css
new file mode 100644
index 0000000..af10b7c
--- /dev/null
+++ b/gtk3/sample/gtk-demo/css_multiplebgs.css
@@ -0,0 +1,136 @@
+/* You can edit the text in this window to change the
+ * appearance of this Window.
+ * Be careful, if you screw it up, nothing might be visible
+ * anymore. :)
+ */
+
+/* This CSS resets all properties to their defaults values
+ *    and overrides all user settings and the theme in use */
+ at import url("resource://css_multiplebgs/reset.css");
+ at import url("resource://css_multiplebgs/cssview.css");
+
+#canvas {
+    transition-property: background-color, background-image;
+    transition-duration: 0.5s;
+
+    background-color: #4870bc;
+}
+
+/* The gradients below are adapted versions of Lea Verou's CSS3 patterns,
+ * licensed under the MIT license:
+ * Copyright (c) 2011 Lea Verou, http://lea.verou.me/
+ *
+ * See https://github.com/LeaVerou/CSS3-Patterns-Gallery
+ */
+
+/**********
+ * Bricks *
+ **********/
+/*
+ at define-color brick_hi #d42;
+ at define-color brick_lo #b42;
+ at define-color brick_hi_backdrop #888;
+ at define-color brick_lo_backdrop #999;
+
+#canvas {
+    background-color: #999;
+    background-image: linear-gradient(205deg, @brick_lo, @brick_lo 23px, transparent 23px),
+                      linear-gradient(25deg, @brick_hi, @brick_hi 23px, transparent 23px),
+                      linear-gradient(205deg, @brick_lo, @brick_lo 23px, transparent 23px),
+                      linear-gradient(25deg, @brick_hi, @brick_hi 23px, transparent 23px);
+    background-size: 58px 58px;
+    background-position: 0px 6px, 4px 31px, 29px 35px, 34px 2px;
+}
+
+#canvas:backdrop {
+    background-color: #444;
+    background-image: linear-gradient(205deg, @brick_lo_backdrop, @brick_lo_backdrop 23px, transparent 23px),
+                      linear-gradient(25deg, @brick_hi_backdrop, @brick_hi_backdrop 23px, transparent 23px),
+	              linear-gradient(205deg, @brick_lo_backdrop, @brick_lo_backdrop 23px, transparent 23px),
+	              linear-gradient(25deg, @brick_hi_backdrop, @brick_hi_backdrop 23px, transparent 23px);
+    background-size: 58px 58px;
+    background-position: 0px 6px, 4px 31px, 29px 35px, 34px 2px;
+}
+*/
+
+/*
+#bricks-button {
+    background-color: #eef;
+    background-image: -gtk-scaled(url('resource:///css_multiplebgs/brick.png'),url('resource:///css_multiplebgs/brick2.png'));
+    background-repeat: no-repeat;
+    background-position: center;
+}
+
+*/
+/**********
+ * Tartan *
+ **********/
+/*
+ at define-color tartan_bg #662e2c;
+ at define-color tartan_bg_backdrop #333;
+
+#canvas {
+    background-color: @tartan_bg;
+    background-image: repeating-linear-gradient(transparent, transparent 50px, rgba(0,0,0,.4) 50px,
+                                                rgba(0,0,0,.4) 53px, transparent 53px, transparent 63px,
+                                                rgba(0,0,0,.4) 63px, rgba(0,0,0,.4) 66px, transparent 66px,
+                                                transparent 116px, rgba(0,0,0,.5) 116px, rgba(0,0,0,.5) 166px,
+                                                rgba(255,255,255,.2) 166px, rgba(255,255,255,.2) 169px, rgba(0,0,0,.5) 169px,
+                                                rgba(0,0,0,.5) 179px, rgba(255,255,255,.2) 179px, rgba(255,255,255,.2) 182px,
+                                                rgba(0,0,0,.5) 182px, rgba(0,0,0,.5) 232px, transparent 232px),
+                      repeating-linear-gradient(90deg, transparent, transparent 50px, rgba(0,0,0,.4) 50px, rgba(0,0,0,.4) 53px,
+                                                transparent 53px, transparent 63px, rgba(0,0,0,.4) 63px, rgba(0,0,0,.4) 66px,
+                                                transparent 66px, transparent 116px, rgba(0,0,0,.5) 116px, rgba(0,0,0,.5) 166px,
+                                                rgba(255,255,255,.2) 166px, rgba(255,255,255,.2) 169px, rgba(0,0,0,.5) 169px,
+                                                rgba(0,0,0,.5) 179px, rgba(255,255,255,.2) 179px, rgba(255,255,255,.2) 182px,
+                                                rgba(0,0,0,.5) 182px, rgba(0,0,0,.5) 232px, transparent 232px),
+                      repeating-linear-gradient(-55deg, transparent, transparent 1px, rgba(0,0,0,.2) 1px, rgba(0,0,0,.2) 4px,
+                                                transparent 4px, transparent 19px, rgba(0,0,0,.2) 19px,
+                                                rgba(0,0,0,.2) 24px, transparent 24px, transparent 51px, rgba(0,0,0,.2) 51px,
+                                                rgba(0,0,0,.2) 54px, transparent 54px, transparent 74px);
+}
+
+#canvas:backdrop {
+    background-color: @tartan_bg_backdrop;
+}
+*/
+
+/***********
+ * Stripes *
+ ***********/
+
+/*
+ at define-color base_bg #4870bc;
+ at define-color backdrop_bg #555;
+
+#canvas {
+  background-color: @base_bg;
+  background-image: linear-gradient(to left, transparent, rgba(255,255,255,.07) 50%, transparent 50%),
+                    linear-gradient(to left, transparent, rgba(255,255,255,.13) 50%, transparent 50%),
+                    linear-gradient(to left, transparent, transparent 50%, rgba(255,255,255,.17) 50%),
+                    linear-gradient(to left, transparent, transparent 50%, rgba(255,255,255,.19) 50%);
+  background-size: 29px, 59px, 73px, 109px;
+}
+
+#canvas:backdrop {
+  background-color: @backdrop_bg;
+}
+*/
+
+/***************
+ * Lined Paper *
+ ***************/
+/*
+#canvas {
+    background-color: #fff;
+    background-image: linear-gradient(90deg, transparent 79px, alpha(#f98195, 0.40) 79px, #f98195 80px, alpha(#f98195, 0.40) 81px, transparent 81px),
+                      linear-gradient(alpha(#77c5cf, 0.60), alpha(#77c5cf, 0.60) 1px, transparent 1px);
+    background-size: 100% 36px;
+}
+
+#canvas:backdrop {
+    background-color: #f1f2f4;
+    background-image: linear-gradient(90deg, transparent 79px, alpha(#999, 0.40) 79px, #999 80px, alpha(#999, 0.40) 81px, transparent 81px),
+                      linear-gradient(alpha(#bbb, 0.60), alpha(#bbb, 0.60) 1px, transparent 1px);
+}
+*/
diff --git a/gtk3/sample/gtk-demo/css_pixbufs.css b/gtk3/sample/gtk-demo/css_pixbufs.css
new file mode 100644
index 0000000..226525c
--- /dev/null
+++ b/gtk3/sample/gtk-demo/css_pixbufs.css
@@ -0,0 +1,76 @@
+/* You can edit the text in this window to change the
+ * appearance of this Window.
+ * Be careful, if you screw it up, nothing might be visible
+ * anymore. :)
+ */
+
+/* This CSS resets all properties to their defaults values
+ *    and overrides all user settings and the theme in use */
+ at import url("resource://css_pixbufs/reset.css");
+ at import url("resource://css_pixbufs/cssview.css");
+
+ at keyframes move-the-image {
+0% { background-position: 50.00% 75.00%, 67.68% 67.68%, 75.00% 50.00%, 67.68% 32.32%, 50.00% 25.00%, 32.32% 32.32%, 25.00% 50.00%, 32.32% 67.68%, 0% 0%; }
+3.125% { background-position: 55.19% 76.11%, 72.14% 64.79%, 76.11% 44.81%, 64.79% 27.86%, 44.81% 23.89%, 27.86% 35.21%, 23.89% 55.19%, 35.21% 72.14%, 0% 0%; }
+6.25% { background-position: 60.79% 76.04%, 76.04% 60.79%, 76.04% 39.21%, 60.79% 23.96%, 39.21% 23.96%, 23.96% 39.21%, 23.96% 60.79%, 39.21% 76.04%, 0% 0%; }
+9.375% { background-position: 66.46% 74.64%, 79.06% 55.78%, 74.64% 33.54%, 55.78% 20.94%, 33.54% 25.36%, 20.94% 44.22%, 25.36% 66.46%, 44.22% 79.06%, 0% 0%; }
+12.5% { background-position: 71.84% 71.84%, 80.89% 50.00%, 71.84% 28.16%, 50.00% 19.11%, 28.16% 28.16%, 19.11% 50.00%, 28.16% 71.84%, 50.00% 80.89%, 0% 0%; }
+15.625% { background-position: 76.55% 67.74%, 81.32% 43.77%, 67.74% 23.45%, 43.77% 18.68%, 23.45% 32.26%, 18.68% 56.23%, 32.26% 76.55%, 56.23% 81.32%, 0% 0%; }
+18.75% { background-position: 80.21% 62.51%, 80.21% 37.49%, 62.51% 19.79%, 37.49% 19.79%, 19.79% 37.49%, 19.79% 62.51%, 37.49% 80.21%, 62.51% 80.21%, 0% 0%; }
+21.875% { background-position: 82.54% 56.47%, 77.58% 31.57%, 56.47% 17.46%, 31.57% 22.42%, 17.46% 43.53%, 22.42% 68.43%, 43.53% 82.54%, 68.43% 77.58%, 0% 0%; }
+25% { background-position: 83.33% 50.00%, 73.57% 26.43%, 50.00% 16.67%, 26.43% 26.43%, 16.67% 50.00%, 26.43% 73.57%, 50.00% 83.33%, 73.57% 73.57%, 0% 0%; }
+28.125% { background-position: 82.54% 43.53%, 68.43% 22.42%, 43.53% 17.46%, 22.42% 31.57%, 17.46% 56.47%, 31.57% 77.58%, 56.47% 82.54%, 77.58% 68.43%, 0% 0%; }
+31.25% { background-position: 80.21% 37.49%, 62.51% 19.79%, 37.49% 19.79%, 19.79% 37.49%, 19.79% 62.51%, 37.49% 80.21%, 62.51% 80.21%, 80.21% 62.51%, 0% 0%; }
+34.375% { background-position: 76.55% 32.26%, 56.23% 18.68%, 32.26% 23.45%, 18.68% 43.77%, 23.45% 67.74%, 43.77% 81.32%, 67.74% 76.55%, 81.32% 56.23%, 0% 0%; }
+37.5% { background-position: 71.84% 28.16%, 50.00% 19.11%, 28.16% 28.16%, 19.11% 50.00%, 28.16% 71.84%, 50.00% 80.89%, 71.84% 71.84%, 80.89% 50.00%, 0% 0%; }
+40.625% { background-position: 66.46% 25.36%, 44.22% 20.94%, 25.36% 33.54%, 20.94% 55.78%, 33.54% 74.64%, 55.78% 79.06%, 74.64% 66.46%, 79.06% 44.22%, 0% 0%; }
+43.75% { background-position: 60.79% 23.96%, 39.21% 23.96%, 23.96% 39.21%, 23.96% 60.79%, 39.21% 76.04%, 60.79% 76.04%, 76.04% 60.79%, 76.04% 39.21%, 0% 0%; }
+46.875% { background-position: 55.19% 23.89%, 35.21% 27.86%, 23.89% 44.81%, 27.86% 64.79%, 44.81% 76.11%, 64.79% 72.14%, 76.11% 55.19%, 72.14% 35.21%, 0% 0%; }
+50% { background-position: 50.00% 25.00%, 32.32% 32.32%, 25.00% 50.00%, 32.32% 67.68%, 50.00% 75.00%, 67.68% 67.68%, 75.00% 50.00%, 67.68% 32.32%, 0% 0%; }
+53.125% { background-position: 45.44% 27.07%, 30.57% 37.01%, 27.07% 54.56%, 37.01% 69.43%, 54.56% 72.93%, 69.43% 62.99%, 72.93% 45.44%, 62.99% 30.57%, 0% 0%; }
+56.25% { background-position: 41.65% 29.85%, 29.85% 41.65%, 29.85% 58.35%, 41.65% 70.15%, 58.35% 70.15%, 70.15% 58.35%, 70.15% 41.65%, 58.35% 29.85%, 0% 0%; }
+59.375% { background-position: 38.68% 33.06%, 30.02% 46.03%, 33.06% 61.32%, 46.03% 69.98%, 61.32% 66.94%, 69.98% 53.97%, 66.94% 38.68%, 53.97% 30.02%, 0% 0%; }
+62.5% { background-position: 36.49% 36.49%, 30.89% 50.00%, 36.49% 63.51%, 50.00% 69.11%, 63.51% 63.51%, 69.11% 50.00%, 63.51% 36.49%, 50.00% 30.89%, 0% 0%; }
+65.625% { background-position: 34.97% 39.96%, 32.28% 53.53%, 39.96% 65.03%, 53.53% 67.72%, 65.03% 60.04%, 67.72% 46.47%, 60.04% 34.97%, 46.47% 32.28%, 0% 0%; }
+68.75% { background-position: 34.02% 43.38%, 34.02% 56.62%, 43.38% 65.98%, 56.62% 65.98%, 65.98% 56.62%, 65.98% 43.38%, 56.62% 34.02%, 43.38% 34.02%, 0% 0%; }
+71.875% { background-position: 33.50% 46.72%, 36.01% 59.35%, 46.72% 66.50%, 59.35% 63.99%, 66.50% 53.28%, 63.99% 40.65%, 53.28% 33.50%, 40.65% 36.01%, 0% 0%; }
+75% { background-position: 33.33% 50.00%, 38.21% 61.79%, 50.00% 66.67%, 61.79% 61.79%, 66.67% 50.00%, 61.79% 38.21%, 50.00% 33.33%, 38.21% 38.21%, 0% 0%; }
+78.125% { background-position: 33.50% 53.28%, 40.65% 63.99%, 53.28% 66.50%, 63.99% 59.35%, 66.50% 46.72%, 59.35% 36.01%, 46.72% 33.50%, 36.01% 40.65%, 0% 0%; }
+81.25% { background-position: 34.02% 56.62%, 43.38% 65.98%, 56.62% 65.98%, 65.98% 56.62%, 65.98% 43.38%, 56.62% 34.02%, 43.38% 34.02%, 34.02% 43.38%, 0% 0%; }
+84.375% { background-position: 34.97% 60.04%, 46.47% 67.72%, 60.04% 65.03%, 67.72% 53.53%, 65.03% 39.96%, 53.53% 32.28%, 39.96% 34.97%, 32.28% 46.47%, 0% 0%; }
+87.5% { background-position: 36.49% 63.51%, 50.00% 69.11%, 63.51% 63.51%, 69.11% 50.00%, 63.51% 36.49%, 50.00% 30.89%, 36.49% 36.49%, 30.89% 50.00%, 0% 0%; }
+90.625% { background-position: 38.68% 66.94%, 53.97% 69.98%, 66.94% 61.32%, 69.98% 46.03%, 61.32% 33.06%, 46.03% 30.02%, 33.06% 38.68%, 30.02% 53.97%, 0% 0%; }
+93.75% { background-position: 41.65% 70.15%, 58.35% 70.15%, 70.15% 58.35%, 70.15% 41.65%, 58.35% 29.85%, 41.65% 29.85%, 29.85% 41.65%, 29.85% 58.35%, 0% 0%; }
+96.875% { background-position: 45.44% 72.93%, 62.99% 69.43%, 72.93% 54.56%, 69.43% 37.01%, 54.56% 27.07%, 37.01% 30.57%, 27.07% 45.44%, 30.57% 62.99%, 0% 0%; }
+100% { background-position: 50.00% 75.00%, 67.68% 67.68%, 75.00% 50.00%, 67.68% 32.32%, 50.00% 25.00%, 32.32% 32.32%, 25.00% 50.00%, 32.32% 67.68%, 0% 0%; }
+}
+
+ at keyframes size-the-image {
+    0% { background-size: 96px, 12px, 96px, 12px, 96px, 12px, 96px, 12px, auto }
+    100% { background-size: 12px, 96px, 12px, 96px, 12px, 96px, 12px, 96px, auto }
+}
+
+GtkWindow {
+    background-image: url("resource://css_pixbufs/apple-red.png"),
+                      url("resource://css_pixbufs/gnome-applets.png"),
+                      url("resource://css_pixbufs/gnome-calendar.png"),
+                      url("resource://css_pixbufs/gnome-foot.png"),
+                      url("resource://css_pixbufs/gnome-gmush.png"),
+                      url("resource://css_pixbufs/gnome-gimp.png"),
+                      url("resource://css_pixbufs/gnome-gsame.png"),
+                      url("resource://css_pixbufs/gnu-keys.png"),
+                      url("resource://css_pixbufs/background.jpg");
+    background-position: 50.00% 75.00%, 67.68% 67.68%, 75.00% 50.00%, 67.68% 32.32%, 50.00% 25.00%, 32.32% 32.32%, 25.00% 50.00%, 32.32% 67.68%, 0% 0%;
+    background-repeat: no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, no-repeat, repeat;
+    animation: move-the-image infinite linear 3s, size-the-image infinite alternate ease-in-out 0.75s;
+}
+
+/* Make the text editor has a nice style */
+.view, .scrollbar, .pane-separator {
+  color: black;
+  background-color: rgba(255,255,255,0.5);
+}
+
+.view:selected {
+  background-color: rgba(127,127,255,0.5);
+}
diff --git a/gtk3/sample/gtk-demo/css_shadows.css b/gtk3/sample/gtk-demo/css_shadows.css
new file mode 100644
index 0000000..6e6b21a
--- /dev/null
+++ b/gtk3/sample/gtk-demo/css_shadows.css
@@ -0,0 +1,44 @@
+/* You can edit the text in this window to change the
+ * appearance of this Window.
+ * Be careful, if you screw it up, nothing might be visible
+ * anymore. :)
+ */
+
+/* This CSS resets all properties to their defaults values
+ *    and overrides all user settings and the theme in use */
+ at import url("resource://css_shadows/reset.css");
+ at import url("resource://css_shadows/cssview.css");
+
+/* Get a nice background for the window */
+.background {
+  background-color: #4870bc;
+  background-image: linear-gradient(to left, transparent, rgba(255,255,255,.07) 50%, transparent 50%),
+                    linear-gradient(to left, transparent, rgba(255,255,255,.13) 50%, transparent 50%),
+                    linear-gradient(to left, transparent, transparent 50%, rgba(255,255,255,.17) 50%),
+                    linear-gradient(to left, transparent, transparent 50%, rgba(255,255,255,.19) 50%);
+  background-size: 29px, 59px, 73px, 109px;
+}
+
+.button {
+  color: black;
+  padding: 10px;
+  border-radius: 5px;
+  transition: all 250ms ease-in;
+  border: 1px transparent solid;
+}
+
+.button:hover {
+  text-shadow: 3px 3px 5px alpha(black, 0.75);
+  icon-shadow: 3px 3px 5px alpha(black, 0.75);
+  box-shadow: 3px 3px 5px alpha(black, 0.5) inset;
+  border: solid 1px alpha(black, 0.75);
+}
+
+.button:active {
+  padding: 11px 9px 9px 11px;
+  text-shadow: 1px 1px 2.5px alpha(black, 0.6);
+  icon-shadow: 1px 1px 2.5px alpha(black, 0.6);
+}
+
+
+
diff --git a/gtk3/sample/gtk-demo/cssview.css b/gtk3/sample/gtk-demo/cssview.css
new file mode 100644
index 0000000..5060c39
--- /dev/null
+++ b/gtk3/sample/gtk-demo/cssview.css
@@ -0,0 +1,41 @@
+/* Make the text editor has a nice style */
+.view {
+  color: #2e3436;
+  font: Monospace;
+  background-color: alpha(white, 0.30);
+}
+
+.view:selected {
+  color: white;
+  background-color: #4a90d9;
+}
+
+.scrollbar.trough,
+.scrollbars-junction {
+  background-color: alpha(white, 0.80);
+}
+
+.scrollbar.slider {
+  border-width: 3px;
+  border-style: solid;
+  border-radius: 10px;
+  border-color: transparent;
+  background-clip: padding-box;
+  background-color: #999;
+}
+
+.scrollbar.slider:prelight {
+  background-color: #555;
+}
+
+.pane-separator {
+  background-color: alpha(white, 0.80);
+  background-image: linear-gradient(transparent, transparent 1px, #999 1px, #999 4px, transparent 4px);
+  background-size: 40px auto;
+  background-repeat: no-repeat;
+  background-position: center;
+}
+
+.pane-separator:prelight {
+  background-image: linear-gradient(transparent, transparent 1px, #555 1px, #555 4px, transparent 4px);
+}
diff --git a/gtk3/sample/gtk-demo/decor1.png b/gtk3/sample/gtk-demo/decor1.png
new file mode 100644
index 0000000..61d2edc
Binary files /dev/null and b/gtk3/sample/gtk-demo/decor1.png differ
diff --git a/gtk3/sample/gtk-demo/decor2.png b/gtk3/sample/gtk-demo/decor2.png
new file mode 100644
index 0000000..6d5a6bf
Binary files /dev/null and b/gtk3/sample/gtk-demo/decor2.png differ
diff --git a/gtk3/sample/gtk-demo/default_cursor.png b/gtk3/sample/gtk-demo/default_cursor.png
new file mode 100644
index 0000000..aa39aa4
Binary files /dev/null and b/gtk3/sample/gtk-demo/default_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/demo.gresource.xml b/gtk3/sample/gtk-demo/demo.gresource.xml
new file mode 100644
index 0000000..ca927ef
--- /dev/null
+++ b/gtk3/sample/gtk-demo/demo.gresource.xml
@@ -0,0 +1,216 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gresources>
+  <gresource prefix="/ui">
+    <file preprocess="xml-stripblanks">main.ui</file>
+  </gresource>
+  <gresource prefix="/application">
+    <file>application.ui</file>
+    <file>menus.ui</file>
+  </gresource>
+  <gresource prefix="/builder">
+    <file>demo.ui</file>
+  </gresource>
+  <gresource prefix="/css_accordion">
+    <file>css_accordion.css</file>
+    <file>reset.css</file>
+  </gresource>
+  <gresource prefix="/css_basics">
+    <file>css_basics.css</file>
+    <file>reset.css</file>
+  </gresource>
+  <gresource prefix="/css_multiplebgs">
+    <file>css_multiplebgs.css</file>
+    <file>brick.png</file>
+    <file>brick2.png</file>
+    <file>cssview.css</file>
+    <file>reset.css</file>
+  </gresource>
+  <gresource prefix="/theming_style_classes">
+    <file>theming.ui</file>
+  </gresource>
+  <gresource prefix="/css_pixbufs">
+    <file alias="gtk.css">css_pixbufs.css</file>
+    <file>cssview.css</file>
+    <file>reset.css</file>
+    <file>background.jpg</file>
+    <file>apple-red.png</file>
+    <file>gnome-applets.png</file>
+    <file>gnome-calendar.png</file>
+    <file>gnome-foot.png</file>
+    <file>gnome-gmush.png</file>
+    <file>gnome-gimp.png</file>
+    <file>gnome-gsame.png</file>
+    <file>gnu-keys.png</file>
+  </gresource>
+  <gresource prefix="/css_shadows">
+    <file alias="gtk.css">css_shadows.css</file>
+    <file>cssview.css</file>
+    <file>reset.css</file>
+  </gresource>
+  <gresource prefix="/cursors">
+    <file>alias_cursor.png</file>
+    <file>all_scroll_cursor.png</file>
+    <file>cell_cursor.png</file>
+    <file>col_resize_cursor.png</file>
+    <file>copy_cursor.png</file>
+    <file>crosshair_cursor.png</file>
+    <file>default_cursor.png</file>
+    <file>e_resize_cursor.png</file>
+    <file>ew_resize_cursor.png</file>
+    <file>grabbing_cursor.png</file>
+    <file>grab_cursor.png</file>
+    <file>hand_cursor.png</file>
+    <file>help_cursor.png</file>
+    <file>move_cursor.png</file>
+    <file>ne_resize_cursor.png</file>
+    <file>nesw_resize_cursor.png</file>
+    <file>no_drop_cursor.png</file>
+    <file>none_cursor.png</file>
+    <file>not_allowed_cursor.png</file>
+    <file>n_resize_cursor.png</file>
+    <file>ns_resize_cursor.png</file>
+    <file>nw_resize_cursor.png</file>
+    <file>nwse_resize_cursor.png</file>
+    <file>pointer_cursor.png</file>
+    <file>progress_cursor.png</file>
+    <file>row_resize_cursor.png</file>
+    <file>se_resize_cursor.png</file>
+    <file>s_resize_cursor.png</file>
+    <file>sw_resize_cursor.png</file>
+    <file>text_cursor.png</file>
+    <file>vertical_text_cursor.png</file>
+    <file>wait_cursor.png</file>
+    <file>w_resize_cursor.png</file>
+    <file>zoom_in_cursor.png</file>
+    <file>zoom_out_cursor.png</file>
+  </gresource>
+  <gresource prefix="/iconview">
+    <file preprocess="to-pixdata">gnome-fs-directory.png</file>
+    <file preprocess="to-pixdata">gnome-fs-regular.png</file>
+  </gresource>
+  <gresource prefix="/stack">
+    <file>stack.ui</file>
+  </gresource>
+  <gresource prefix="/revealer">
+    <file>revealer.ui</file>
+  </gresource>
+  <gresource prefix="/images">
+    <file>alphatest.png</file>
+    <file>floppybuddy.gif</file>
+  </gresource>
+  <gresource prefix="/pixbufs">
+    <file>apple-red.png</file>
+    <file>background.jpg</file>
+    <file>gnome-applets.png</file>
+    <file>gnome-calendar.png</file>
+    <file>gnome-foot.png</file>
+    <file>gnome-gmush.png</file>
+    <file>gnome-gimp.png</file>
+    <file>gnome-gsame.png</file>
+    <file>gnu-keys.png</file>
+  </gresource>
+  <gresource prefix="/sources">
+<!--    <file>application.rb</file>
+    <file>assistant.rb</file> 
+    <file>builder.rb</file>
+    <file>button_box.rb</file>
+    <file>changedisplay.rb</file>
+    <file>clipboard.rb</file>
+    <file>colorsel.rb</file>
+    <file>combobox.rb</file>
+    <file>css_accordion.rb</file>
+    <file>css_basics.rb</file>
+    <file>css_multiplebgs.rb</file>
+    <file>css_pixbufs.rb</file>
+    <file>css_shadows.rb</file>
+    <file>cursors.rb</file>
+    <file>dialog.rb</file>
+    <file>drawingarea.rb</file>
+    <file>editable_cells.rb</file>
+    <file>entry_buffer.rb</file>
+    <file>entry_completion.rb</file>
+    <file>event_axes.rb</file>
+    <file>expander.rb</file>
+    <file>filtermodel.rb</file>
+    <file>flowbox.rb</file>
+    <file>font_features.rb</file>
+    <file>gestures.rb</file>
+    <file>glarea.rb</file>
+    <file>headerbar.rb</file>
+    <file>hypertext.rb</file>
+    <file>iconview.rb</file>
+    <file>iconview_edit.rb</file>
+    <file>images.rb</file>
+    <file>infobar.rb</file>
+    <file>links.rb</file>
+    <file>listbox.rb</file>
+    <file>list_store.rb</file>
+    <file>markup.rb</file>
+    <file>menus.rb</file>
+    <file>modelbutton.rb</file>
+    <file>offscreen_window.rb</file>
+    <file>offscreen_window2.rb</file>
+    <file>overlay.rb</file>
+    <file>overlay2.rb</file>
+    <file>pagesetup.rb</file>
+    <file>panes.rb</file>
+    <file>pickers.rb</file>
+    <file>pixbufs.rb</file>
+    <file>popover.rb</file>
+    <file>printing.rb</file>
+    <file>revealer.rb</file>
+    <file>rotated_text.rb</file>
+    <file>scale.rb</file>
+    <file>search_entry.rb</file>
+    <file>search_entry2.rb</file>
+    <file>sizegroup.rb</file>
+    <file>sidebar.rb</file>
+    <file>stack.rb</file>
+    <file>spinbutton.rb</file>
+    <file>spinner.rb</file>
+    <file>textview.rb</file>
+    <file>textscroll.rb</file>
+    <file>theming_style_classes.rb</file>
+    <file>toolpalette.rb</file>
+    <file>transparent.rb</file>
+    <file>tree_store.rb</file>
+    <file>textmask.rb</file> -->
+  </gresource>
+  <gresource prefix="/textview">
+    <file>floppybuddy.gif</file>
+  </gresource>
+  <gresource prefix="/listbox">
+    <file>listbox.ui</file>
+    <file>messages.txt</file>
+    <file>apple-red.png</file>
+  </gresource>
+  <gresource prefix="/popover">
+    <file>popover.ui</file>
+  </gresource>
+  <gresource prefix="/glarea">
+    <file>glarea-fragment.glsl</file>
+    <file>glarea-vertex.glsl</file>
+  </gresource>
+  <gresource prefix="/font-features">
+    <file>font-features.ui</file>
+  </gresource>
+  <gresource prefix="/spinbutton">
+    <file>spinbutton.ui</file>
+  </gresource>
+  <gresource prefix="/filtermodel">
+    <file>filtermodel.ui</file>
+  </gresource>
+  <gresource prefix="/overlay2">
+    <file>decor1.png</file>
+    <file>decor2.png</file>
+  </gresource>
+  <gresource prefix="/markup">
+    <file>markup.txt</file>
+  </gresource>
+  <gresource prefix="/scale">
+    <file>scale.ui</file>
+  </gresource>
+  <gresource prefix="/modelbutton">
+    <file>modelbutton.ui</file>
+  </gresource>
+</gresources>
diff --git a/gtk3/sample/gtk-demo/demo.ui b/gtk3/sample/gtk-demo/demo.ui
index 9d27c85..f14eb2e 100644
--- a/gtk3/sample/gtk-demo/demo.ui
+++ b/gtk3/sample/gtk-demo/demo.ui
@@ -1,258 +1,302 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<?xml version="1.0" standalone="no"?>
+<!--*- mode: xml -*-->
 <interface>
-    <object class="GtkListStore" id="liststore1">
-      <columns>
-        <column type="gchararray"/>
-        <column type="gchararray"/>
-        <column type="gint"/>
-        <column type="gchararray"/>
-      </columns>
-      <data>
-        <row>
-          <col id="0">John</col>
-          <col id="1">Doe</col>
-          <col id="2">25</col>
-          <col id="3">This is the John Doe row</col>
-        </row>
-        <row>
-          <col id="0">Mary</col>
-          <col id="1">Dole</col>
-          <col id="2">50</col>
-          <col id="3">This is the Mary Dole row</col>
-        </row>
-      </data>
-    </object>
-    <object class="GtkUIManager" id="uimanager">
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <column type="gchararray"/>
+      <column type="gchararray"/>
+      <column type="gint"/>
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">John</col>
+        <col id="1" translatable="yes">Doe</col>
+        <col id="2">25</col>
+        <col id="3" translatable="yes">This is the John Doe row</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Mary</col>
+        <col id="1" translatable="yes">Unknown</col>
+        <col id="2">50</col>
+        <col id="3" translatable="yes">This is the Mary Unknown row</col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkAboutDialog" id="aboutdialog1">
+    <property name="program-name" translatable="yes">Builder demo</property>
+    <property name="logo-icon-name" translatable="yes">gtk3-demo</property>
+    <accessibility>
+      <relation target="window1" type="subwindow-of"/>
+    </accessibility>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="default_height">250</property>
+    <property name="default_width">440</property>
+    <property name="title" translatable="yes">Builder</property>
+    <child>
+      <object class="GtkVBox" id="vbox1">
+        <property name="visible">1</property>
         <child>
-            <object class="GtkActionGroup" id="DefaultActions">
-                <child>
-                    <object class="GtkAction" id="Copy">
-                        <property name="name">Copy</property>
-                        <property name="tooltip" translatable="yes">Copy selected object into the clipboard</property>
-                        <property name="stock_id">gtk-copy</property>
-                    </object>
-                </child>
-                <child>
-                    <object class="GtkAction" id="Cut">
-                        <property name="name">Cut</property>
-                        <property name="tooltip" translatable="yes">Cut selected object into the clipboard</property>
-                        <property name="stock_id">gtk-cut</property>
-                    </object>
-                </child>
-                <child>
-                    <object class="GtkAction" id="EditMenu">
-                        <property name="name">EditMenu</property>
-                        <property name="label" translatable="yes">_Edit</property>
-                    </object>
-                </child>
-                <child>
-                    <object class="GtkAction" id="FileMenu">
-                        <property name="name">FileMenu</property>
-                        <property name="label" translatable="yes">_File</property>
-                    </object>
-                </child>
-                <child>
-                    <object class="GtkAction" id="New">
-                        <property name="name">New</property>
-                        <property name="tooltip" translatable="yes">Create a new file</property>
-                        <property name="stock_id">gtk-new</property>
-                    </object>
-                </child>
-                <child>
-                    <object class="GtkAction" id="Open">
-                        <property name="name">Open</property>
-                        <property name="tooltip" translatable="yes">Open a file</property>
-                        <property name="stock_id">gtk-open</property>
-                    </object>
-                </child>
-                <child>
-                    <object class="GtkAction" id="Paste">
-                        <property name="name">Paste</property>
-                        <property name="tooltip" translatable="yes">Paste object from the Clipboard</property>
-                        <property name="stock_id">gtk-paste</property>
-                    </object>
-                </child>
-                <child>
-                    <object class="GtkAction" id="Quit">
-                        <property name="name">Quit</property>
-                        <property name="tooltip" translatable="yes">Quit the program</property>
-                        <property name="stock_id">gtk-quit</property>
-                        <signal handler="quit_activate" name="activate"/>
-                    </object>
+          <object class="GtkMenuBar" id="menubar1">
+            <property name="visible">1</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="a11y-menubar">
+                <property name="AtkObject::accessible-name">The menubar</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">_File</property>
+                <property name="use-underline">1</property>
+                <child type="submenu">
+                  <object class="GtkMenu">
+                    <child>
+                      <object class="GtkMenuItem" id="new_item">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">_New</property>
+                        <property name="use-underline">1</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="open_item">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">_Open</property>
+                        <property name="use-underline">1</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="save_item">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">_Save</property>
+                        <property name="use-underline">1</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="save_as_item">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">Save _As</property>
+                        <property name="use-underline">1</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparatorMenuItem">
+                        <property name="visible">1</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="quit_item">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">_Quit</property>
+                        <property name="use-underline">1</property>
+                        <property name="action-name">win.quit</property>
+                      </object>
+                    </child>
+                  </object>
                 </child>
-                <child>
-                    <object class="GtkAction" id="Save">
-                        <property name="name">Save</property>
-                        <property name="is_important">True</property>
-                        <property name="tooltip" translatable="yes">Save a file</property>
-                        <property name="stock_id">gtk-save</property>
-                    </object>
-                </child>
-                <child>
-                    <object class="GtkAction" id="SaveAs">
-                        <property name="name">SaveAs</property>
-                        <property name="tooltip" translatable="yes">Save with a different name</property>
-                        <property name="stock_id">gtk-save-as</property>
-                    </object>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">_Edit</property>
+                <property name="use-underline">1</property>
+                <child type="submenu">
+                  <object class="GtkMenu">
+                    <child>
+                      <object class="GtkMenuItem" id="copy_item">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">_Copy</property>
+                        <property name="use-underline">1</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="cut_item">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">_Cut</property>
+                        <property name="use-underline">1</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="paste_item">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">_Paste</property>
+                        <property name="use-underline">1</property>
+                      </object>
+                    </child>
+                  </object>
                 </child>
-                <child>
-                    <object class="GtkAction" id="HelpMenu">
-                        <property name="name">HelpMenu</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">_Help</property>
+                <property name="use-underline">1</property>
+                <child type="submenu">
+                  <object class="GtkMenu">
+                    <child>
+                      <object class="GtkMenuItem" id="help_item">
+                        <property name="visible">1</property>
                         <property name="label" translatable="yes">_Help</property>
-                    </object>
+                        <property name="use-underline">1</property>
+                        <property name="action-name">win.help</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="about_item">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">_About</property>
+                        <property name="use-underline">1</property>
+                        <property name="action-name">win.about</property>
+                      </object>
+                    </child>
+                  </object>
                 </child>
-                <child>
-                    <object class="GtkAction" id="About">
-                        <property name="name">About</property>
-                        <property name="stock_id">gtk-about</property>
-                        <signal handler="about_activate" name="activate"/>
-                    </object>
-                    <accelerator key="F1"/>
-                </child>
-            </object>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">0</property>
+          </packing>
         </child>
-        <ui>
-          <menubar name="menubar1">
-            <menu action="FileMenu" name="FileMenu">
-              <menuitem action="New" name="New"/>
-              <menuitem action="Open" name="Open"/>
-              <menuitem action="Save" name="Save"/>
-              <menuitem action="SaveAs" name="SaveAs"/>
-              <separator/>
-              <menuitem action="Quit" name="Quit"/>
-            </menu>
-            <menu action="EditMenu">
-              <menuitem action="Copy" name="Copy"/>
-              <menuitem action="Cut" name="Cut"/>
-              <menuitem action="Paste" name="Paste"/>
-            </menu>
-            <menu action="HelpMenu" name="HelpMenu">
-              <menuitem action="About" name="About"/>
-            </menu>
-          </menubar>
-          <toolbar name="toolbar1">
-            <toolitem action="New" name="New"/>
-            <toolitem action="Open" name="Open"/>
-            <toolitem action="Save" name="Save"/>
-            <separator/>
-            <toolitem action="Copy" name="Copy"/>
-            <toolitem action="Cut" name="Cut"/>
-            <toolitem action="Paste" name="Paste"/>
-          </toolbar>
-        </ui>
-    </object>
-    <object class="GtkAboutDialog" id="aboutdialog1">
-        <property name="program-name" translatable="yes">GtkBuilder demo</property>
-         <accessibility>
-	     <relation target="window1" type="subwindow-of"/>
-	 </accessibility>
-    </object>
-    <object class="GtkWindow" id="window1">
-        <property name="default_height">250</property>
-        <property name="default_width">440</property>
-        <property name="title">GtkBuilder demo</property>
         <child>
-            <object class="GtkVBox" id="vbox1">
-                <property name="visible">True</property>
-                <child>
-                    <object constructor="uimanager" class="GtkMenuBar" id="menubar1">
-                        <property name="visible">True</property>
-	            	<child internal-child="accessible">
-	            	    <object class="AtkObject" id="a11y-menubar">
-	            	        <property name="AtkObject::accessible-name">The menubar</property>
-	            	    </object>
-	            	</child>
-	            </object>
-                    <packing>
-                        <property name="expand">False</property>
-                    </packing>
+          <object class="GtkToolbar" id="toolbar1">
+            <property name="visible">1</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="a11y-toolbar">
+                <property name="AtkObject::accessible-name">The toolbar</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkToolButton">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">New</property>
+                <property name="tooltip-text" translatable="yes">Create a new file</property>
+                <property name="icon-name">document-new</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkToolButton">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">Open</property>
+                <property name="tooltip-text" translatable="yes">Open a file</property>
+                <property name="icon-name">document-open</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkToolButton">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">Save</property>
+                <property name="tooltip-text" translatable="yes">Save a file</property>
+                <property name="icon-name">document-save</property>
+                <property name="is-important">1</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkSeparatorToolItem">
+                <property name="visible">1</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkToolButton">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">Copy</property>
+                <property name="tooltip-text" translatable="yes">Copy selected object into the clipboard</property>
+                <property name="icon-name">edit-copy</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkToolButton">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">Cut</property>
+                <property name="tooltip-text" translatable="yes">Cut selected object into the clipboard</property>
+                <property name="icon-name">edit-cut</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkToolButton">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">Paste</property>
+                <property name="tooltip-text" translatable="yes">Paste object from the clipboard</property>
+                <property name="icon-name">edit-paste</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">0</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScrolledWindow" id="scrolledwindow1">
+            <property name="shadow_type">in</property>
+            <property name="visible">1</property>
+            <child>
+              <object class="GtkTreeView" id="treeview1">
+                <property name="visible">1</property>
+                <property name="model">liststore1</property>
+                <property name="tooltip-column">3</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" id="a11y-treeview">
+                    <property name="AtkObject::accessible-name">Name list</property>
+                    <property name="AtkObject::accessible-description">
+                                    A list of person with name, surname and age columns
+                                  </property>
+                  </object>
                 </child>
                 <child>
-                    <object constructor="uimanager" class="GtkToolbar" id="toolbar1">
-                        <property name="visible">True</property>
-	            	<child internal-child="accessible">
-	            	    <object class="AtkObject" id="a11y-toolbar">
-	            	        <property name="AtkObject::accessible-name">The toolbar</property>
-	            	    </object>
-	            	</child>
-                    </object>
-                    <packing>
-                        <property name="expand">False</property>
-                        <property name="position">1</property>
-                    </packing>
+                  <object class="GtkTreeViewColumn" id="column1">
+                    <property name="title">Name</property>
+                    <child>
+                      <object class="GtkCellRendererText" id="renderer1"/>
+                      <attributes>
+                        <attribute name="text">0</attribute>
+                      </attributes>
+                    </child>
+                  </object>
                 </child>
                 <child>
-                    <object class="GtkScrolledWindow" id="scrolledwindow1">
-                      <property name="hscrollbar_policy">automatic</property>
-                      <property name="shadow_type">in</property>
-                      <property name="visible">True</property>
-                      <property name="vscrollbar_policy">automatic</property>
-                      <child>
-                        <object class="GtkTreeView" id="treeview1">
-                          <property name="visible">True</property>
-                          <property name="model">liststore1</property>
-                          <property name="tooltip-column">3</property>
-	            	  <child internal-child="accessible">
-	            	      <object class="AtkObject" id="a11y-treeview">
-	            	          <property name="AtkObject::accessible-name">Name list</property>
-                                  <property name="AtkObject::accessible-description">
-                                    A list of person with name, surname and age columns
-                                  </property>
-	            	      </object>
-	            	  </child>
-                          <child>
-                            <object class="GtkTreeViewColumn" id="column1">
-                              <property name="title">Name</property>
-                              <child>
-                                <object class="GtkCellRendererText" id="renderer1"/>
-                                <attributes>
-                                  <attribute name="text">0</attribute>
-                                </attributes>
-                              </child>
-                            </object>
-                          </child>
-                          <child>
-                            <object class="GtkTreeViewColumn" id="column2">
-                              <property name="title">Surname</property>
-                              <child>
-                                <object class="GtkCellRendererText" id="renderer2"/>
-                                <attributes>
-                                  <attribute name="text">1</attribute>
-                                </attributes>
-                              </child>
-                            </object>
-                          </child>
-                          <child>
-                            <object class="GtkTreeViewColumn" id="column3">
-                              <property name="title">Age</property>
-                              <child>
-                                <object class="GtkCellRendererText" id="renderer3"/>
-                                <attributes>
-                                  <attribute name="text">2</attribute>
-                                </attributes>
-                              </child>
-                            </object>
-                          </child>
-                        </object>
-                      </child>
-		    <accessibility>
-		      	<action action_name="move-cursor" description="Move the cursor to select another person."/>
-		    </accessibility>
-                    </object>
-                    <packing>
-                        <property name="position">2</property>
-                    </packing>
+                  <object class="GtkTreeViewColumn" id="column2">
+                    <property name="title">Surname</property>
+                    <child>
+                      <object class="GtkCellRendererText" id="renderer2"/>
+                      <attributes>
+                        <attribute name="text">1</attribute>
+                      </attributes>
+                    </child>
+                  </object>
                 </child>
                 <child>
-                    <object class="GtkStatusbar" id="statusbar1">
-                        <property name="visible">True</property>
-                    </object>
-                    <packing>
-                        <property name="expand">False</property>
-                        <property name="position">3</property>
-                    </packing>
+                  <object class="GtkTreeViewColumn" id="column3">
+                    <property name="title">Age</property>
+                    <child>
+                      <object class="GtkCellRendererText" id="renderer3"/>
+                      <attributes>
+                        <attribute name="text">2</attribute>
+                      </attributes>
+                    </child>
+                  </object>
                 </child>
-            </object>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="position">2</property>
+            <property name="expand">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkStatusbar" id="statusbar1">
+            <property name="visible">1</property>
+          </object>
+          <packing>
+            <property name="position">3</property>
+            <property name="expand">0</property>
+          </packing>
         </child>
-    </object>
+      </object>
+    </child>
+  </object>
 </interface>
diff --git a/gtk3/sample/gtk-demo/e_resize_cursor.png b/gtk3/sample/gtk-demo/e_resize_cursor.png
new file mode 100644
index 0000000..f06bf46
Binary files /dev/null and b/gtk3/sample/gtk-demo/e_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/ew_resize_cursor.png b/gtk3/sample/gtk-demo/ew_resize_cursor.png
new file mode 100644
index 0000000..8dbd462
Binary files /dev/null and b/gtk3/sample/gtk-demo/ew_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/filtermodel.ui b/gtk3/sample/gtk-demo/filtermodel.ui
new file mode 100644
index 0000000..2b6c571
--- /dev/null
+++ b/gtk3/sample/gtk-demo/filtermodel.ui
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.1 -->
+<interface>
+  <requires lib="gtk+" version="3.16"/>
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <!-- column-name width -->
+      <column type="gint"/>
+      <!-- column-name height -->
+      <column type="gint"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0">10</col>
+        <col id="1">20</col>
+      </row>
+      <row>
+        <col id="0">5</col>
+        <col id="1">25</col>
+      </row>
+      <row>
+        <col id="0">15</col>
+        <col id="1">15</col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="title" translatable="yes">Filter Model</property>
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">1</property>
+        <property name="margin_left">10</property>
+        <property name="margin_right">10</property>
+        <property name="margin_top">10</property>
+        <property name="margin_bottom">10</property>
+        <property name="row_spacing">10</property>
+        <property name="column_spacing">10</property>
+        <property name="column_homogeneous">1</property>
+        <child>
+          <object class="GtkLabel" id="label1">
+            <property name="visible">1</property>
+            <property name="label" translatable="yes">Original</property>
+            <property name="xalign">0</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkTreeView" id="treeview1">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="model">liststore1</property>
+            <property name="headers_clickable">0</property>
+            <child internal-child="selection">
+              <object class="GtkTreeSelection" id="treeview-selection1"/>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+                <property name="title" translatable="yes">Width</property>
+                <child>
+                  <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn" id="treeviewcolumn2">
+                <property name="title" translatable="yes">Height</property>
+                <child>
+                  <object class="GtkCellRendererText" id="cellrenderertext2"/>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkTreeView" id="treeview2">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="headers_clickable">0</property>
+            <property name="search_column">0</property>
+            <child internal-child="selection">
+              <object class="GtkTreeSelection" id="treeview-selection3"/>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn" id="treeviewcolumn3">
+                <property name="title" translatable="yes">Width</property>
+                <child>
+                  <object class="GtkCellRendererText" id="cellrenderertext3"/>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn" id="treeviewcolumn4">
+                <property name="title" translatable="yes">Height</property>
+                <child>
+                  <object class="GtkCellRendererText" id="cellrenderertext4"/>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn" id="treeviewcolumn5">
+                <property name="title" translatable="yes">Area</property>
+                <child>
+                  <object class="GtkCellRendererText" id="cellrenderertext5"/>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn" id="treeviewcolumn6">
+                <property name="title" translatable="yes">Square</property>
+                <child>
+                  <object class="GtkCellRendererPixbuf" id="cellrendererpixbuf1">
+                    <property name="icon-name">object-select-symbolic</property>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label2">
+            <property name="visible">1</property>
+            <property name="label" translatable="yes">Computed Columns</property>
+            <property name="xalign">0</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="label3">
+            <property name="visible">1</property>
+            <property name="label" translatable="yes">Filtered</property>
+            <property name="xalign">0</property>
+            <attributes>
+              <attribute name="weight" value="bold"/>
+            </attributes>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkTreeView" id="treeview3">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="headers_clickable">0</property>
+            <property name="search_column">0</property>
+            <child internal-child="selection">
+              <object class="GtkTreeSelection" id="treeview-selection5"/>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn" id="treeviewcolumn7">
+                <property name="title" translatable="yes">Width</property>
+                <child>
+                  <object class="GtkCellRendererText" id="cellrenderertext6"/>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkTreeViewColumn" id="treeviewcolumn8">
+                <property name="title" translatable="yes">Height</property>
+                <child>
+                  <object class="GtkCellRendererText" id="cellrenderertext7"/>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gtk3/sample/gtk-demo/font-features.ui b/gtk3/sample/gtk-demo/font-features.ui
new file mode 100644
index 0000000..5742b57
--- /dev/null
+++ b/gtk3/sample/gtk-demo/font-features.ui
@@ -0,0 +1,966 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.1 -->
+<interface>
+  <requires lib="gtk+" version="3.12"/>
+  <object class="GtkWindow" id="window">
+    <property name="default-width">600</property>
+    <property name="default-height">500</property>
+    <child type="titlebar">
+      <object class="GtkHeaderBar">
+        <property name="visible">1</property>
+        <property name="show_close_button">1</property>
+        <property name="title">Font Features</property>
+        <child>
+          <object class="GtkButton" id="reset">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="receives_default">1</property>
+            <property name="tooltip-text">Reset</property>
+            <signal name="clicked" handler="reset" swapped="no"/>
+            <child>
+              <object class="GtkImage" id="image1">
+                <property name="visible">1</property>
+                <property name="icon_name">view-refresh-symbolic</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkBox" id="box1">
+        <property name="visible">1</property>
+        <child>
+          <object class="GtkScrolledWindow" id="scrolledwindow1">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="hscrollbar_policy">never</property>
+            <child>
+              <object class="GtkViewport" id="viewport1">
+                <property name="visible">1</property>
+                <child>
+                  <object class="GtkBox" id="box2">
+                    <property name="visible">1</property>
+                    <property name="margin">10</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkFontButton" id="font">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <property name="receives_default">1</property>
+                        <property name="font">Sans 12</property>
+                        <signal name="font-set" handler="update" swapped="no"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkExpander" id="expander1">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <child>
+                          <object class="GtkBox" id="box13">
+                            <property name="visible">1</property>
+                            <property name="margin_start">20</property>
+                            <property name="margin_end">20</property>
+                            <property name="margin_top">10</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkBox" id="box14">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="kern_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="kern">
+                                    <property name="label" translatable="yes">Enabled</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="kern_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label2">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="yes">Kerning</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkExpander" id="expander2">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <child>
+                          <object class="GtkBox" id="box3">
+                            <property name="visible">1</property>
+                            <property name="margin_start">20</property>
+                            <property name="margin_end">20</property>
+                            <property name="margin_top">10</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkBox" id="box15">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="liga_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="liga">
+                                    <property name="label" translatable="yes">Common</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="liga_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box16">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="dlig_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="dlig">
+                                    <property name="label" translatable="yes">Discretionary</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="dlig_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box17">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="hlig_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="hlig">
+                                    <property name="label" translatable="yes">Historical</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="hlig_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box18">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="clig_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="clig">
+                                    <property name="label" translatable="yes">Contextual</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="clig_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">3</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label3">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="yes">Ligatures</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkExpander" id="expander3">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <child>
+                          <object class="GtkBox" id="box4">
+                            <property name="visible">1</property>
+                            <property name="margin_start">20</property>
+                            <property name="margin_end">20</property>
+                            <property name="margin_top">10</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkBox" id="box19">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="smcp_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="smcp">
+                                    <property name="label" translatable="yes">Small Caps</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="smcp_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box20">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="c2sc_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="c2sc">
+                                    <property name="label" translatable="yes">Small Caps from Caps</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="c2sc_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label4">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="yes">Letter Case</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">3</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkExpander" id="expander7">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <child>
+                          <object class="GtkBox" id="box5">
+                            <property name="visible">1</property>
+                            <property name="margin_start">20</property>
+                            <property name="margin_end">20</property>
+                            <property name="margin_top">10</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkRadioButton" id="numcasedefault">
+                                <property name="label" translatable="yes">Default</property>
+                                <property name="visible">1</property>
+                                <property name="can_focus">1</property>
+                                <property name="active">1</property>
+                                <property name="draw_indicator">1</property>
+                                <signal name="notify::active" handler="update" swapped="no"/>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="lnum">
+                                <property name="label" translatable="yes">Lining</property>
+                                <property name="visible">1</property>
+                                <property name="can_focus">1</property>
+                                <property name="active">1</property>
+                                <property name="draw_indicator">1</property>
+                                <property name="group">numcasedefault</property>
+                                <signal name="notify::active" handler="update" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="onum">
+                                <property name="label" translatable="yes">Old-Style</property>
+                                <property name="visible">1</property>
+                                <property name="can_focus">1</property>
+                                <property name="active">1</property>
+                                <property name="draw_indicator">1</property>
+                                <property name="group">numcasedefault</property>
+                                <signal name="notify::active" handler="update" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label8">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="yes">Number Case</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">4</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkExpander" id="expander8">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <child>
+                          <object class="GtkBox" id="box6">
+                            <property name="visible">1</property>
+                            <property name="margin_start">20</property>
+                            <property name="margin_end">20</property>
+                            <property name="margin_top">10</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkRadioButton" id="numspacedefault">
+                                <property name="label" translatable="yes">Default</property>
+                                <property name="visible">1</property>
+                                <property name="can_focus">1</property>
+                                <property name="active">1</property>
+                                <property name="draw_indicator">1</property>
+                                <signal name="notify::active" handler="update" swapped="no"/>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="pnum">
+                                <property name="label" translatable="yes">Proportional</property>
+                                <property name="visible">1</property>
+                                <property name="can_focus">1</property>
+                                <property name="active">1</property>
+                                <property name="draw_indicator">1</property>
+                                <property name="group">numspacedefault</property>
+                                <signal name="notify::active" handler="update" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="tnum">
+                                <property name="label" translatable="yes">Tabular</property>
+                                <property name="visible">1</property>
+                                <property name="can_focus">1</property>
+                                <property name="active">1</property>
+                                <property name="draw_indicator">1</property>
+                                <property name="group">numspacedefault</property>
+                                <signal name="notify::active" handler="update" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label9">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="yes">Number Spacing</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">5</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkExpander" id="expander9">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <child>
+                          <object class="GtkBox" id="box7">
+                            <property name="visible">1</property>
+                            <property name="margin_start">20</property>
+                            <property name="margin_end">20</property>
+                            <property name="margin_top">10</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkRadioButton" id="fractiondefault">
+                                <property name="label" translatable="yes">Off</property>
+                                <property name="visible">1</property>
+                                <property name="can_focus">1</property>
+                                <property name="active">1</property>
+                                <property name="draw_indicator">1</property>
+                                <signal name="notify::active" handler="update" swapped="no"/>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="frac">
+                                <property name="label" translatable="yes">Normal</property>
+                                <property name="visible">1</property>
+                                <property name="can_focus">1</property>
+                                <property name="active">1</property>
+                                <property name="draw_indicator">1</property>
+                                <property name="group">fractiondefault</property>
+                                <signal name="notify::active" handler="update" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="afrc">
+                                <property name="label" translatable="yes">Alternate</property>
+                                <property name="visible">1</property>
+                                <property name="can_focus">1</property>
+                                <property name="active">1</property>
+                                <property name="draw_indicator">1</property>
+                                <property name="group">fractiondefault</property>
+                                <signal name="notify::active" handler="update" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label10">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="yes">Fractions</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">6</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkExpander" id="expander10">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <child>
+                          <object class="GtkBox" id="box8">
+                            <property name="visible">1</property>
+                            <property name="margin_start">20</property>
+                            <property name="margin_end">20</property>
+                            <property name="margin_top">10</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkBox" id="box21">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="zero_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="zero">
+                                    <property name="label" translatable="yes">Slashed Zero</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="zero_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box22">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="nalt_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="nalt">
+                                    <property name="label" translatable="yes">Alt. Annotation</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="nalt_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label11">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="yes">Numeric Extras</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">7</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkExpander" id="expander11">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <child>
+                          <object class="GtkBox" id="box9">
+                            <property name="visible">1</property>
+                            <property name="margin_start">20</property>
+                            <property name="margin_end">20</property>
+                            <property name="margin_top">10</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkBox" id="box28">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="swsh_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="swsh">
+                                    <property name="label" translatable="yes">Swash</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="swsh_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box29">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="calt_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="calt">
+                                    <property name="label" translatable="yes">Contextual</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="calt_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box30">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="hist_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="hist">
+                                    <property name="label" translatable="yes">Historical</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="hist_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box31">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="salt_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="salt">
+                                    <property name="label" translatable="yes">Stylistic</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="salt_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">3</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label12">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="yes">Character Alternatives</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">8</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkExpander" id="expander12">
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <child>
+                          <object class="GtkBox" id="box10">
+                            <property name="visible">1</property>
+                            <property name="margin_start">20</property>
+                            <property name="margin_end">20</property>
+                            <property name="margin_top">10</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkBox" id="box23">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss01_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss01">
+                                    <property name="label" translatable="yes">Set 1</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="ss01_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box24">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss02_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss02">
+                                    <property name="label" translatable="yes">Set 2</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="ss02_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box25">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss03_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss03">
+                                    <property name="label" translatable="yes">Set 3</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="ss03_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box26">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss04_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss04">
+                                    <property name="label" translatable="yes">Set 4</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="ss04_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkBox" id="box27">
+                                <property name="visible">1</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss05_dflt">
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="ss05">
+                                    <property name="label" translatable="yes">Set 5</property>
+                                    <property name="visible">1</property>
+                                    <property name="can_focus">1</property>
+                                    <property name="draw_indicator">1</property>
+                                    <signal name="notify::active" handler="update" swapped="no"/>
+                                    <property name="sensitive" bind-source="ss05_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
+                                  </object>
+                                  <packing>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">4</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                        <child type="label">
+                          <object class="GtkLabel" id="label13">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="yes">Alternative Stylistic Sets</property>
+                          </object>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">9</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+                <style>
+                  <class name="view"/>
+                </style>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkBox" id="box12">
+            <property name="visible">1</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <object class="GtkStack" id="stack">
+                <property name="visible">1</property>
+                <property name="margin_start">20</property>
+                <property name="margin_end">20</property>
+                <property name="margin_top">20</property>
+                <property name="margin_bottom">20</property>
+                <child>
+                  <object class="GtkEventBox">
+                    <property name="visible">1</property>
+                    <signal name="button-press-event" handler="switch_to_entry"/>
+                    <child>
+                      <object class="GtkLabel" id="label">
+                        <property name="visible">1</property>
+                        <property name="wrap">1</property>
+                        <property name="xalign">0</property>
+                        <property name="yalign">0</property>
+                        <property name="valign">start</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="name">label</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="entry">
+                    <property name="visible">1</property>
+                    <property name="text">Lucky affluent actor asks to feast on giant 10.34" cheese-filled quiche in fjord.</property>
+                    <signal name="key-press-event" handler="entry_key_press"/>
+                    <signal name="activate" handler="switch_to_label"/>
+                    <property name="valign">start</property>
+                  </object>
+                  <packing>
+                    <property name="name">entry</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="settings">
+                <property name="visible">1</property>
+                <property name="margin_start">20</property>
+                <property name="margin_end">20</property>
+                <property name="margin_bottom">20</property>
+                <property name="xalign">0</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">1</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gtk3/sample/gtk-demo/glarea-fragment.glsl b/gtk3/sample/gtk-demo/glarea-fragment.glsl
new file mode 100644
index 0000000..aaa7305
--- /dev/null
+++ b/gtk3/sample/gtk-demo/glarea-fragment.glsl
@@ -0,0 +1,9 @@
+#version 330
+
+out vec4 outputColor;
+
+void main() {
+  float lerpVal = gl_FragCoord.y / 500.0f;
+
+  outputColor = mix(vec4(1.0f, 0.85f, 0.35f, 1.0f), vec4(0.2f, 0.2f, 0.2f, 1.0f), lerpVal);
+}
diff --git a/gtk3/sample/gtk-demo/glarea-vertex.glsl b/gtk3/sample/gtk-demo/glarea-vertex.glsl
new file mode 100644
index 0000000..163f6ef
--- /dev/null
+++ b/gtk3/sample/gtk-demo/glarea-vertex.glsl
@@ -0,0 +1,8 @@
+#version 330
+
+layout(location = 0) in vec4 position;
+uniform mat4 mvp;
+
+void main() {
+  gl_Position = mvp * position;
+}
diff --git a/gtk3/sample/gtk-demo/grab_cursor.png b/gtk3/sample/gtk-demo/grab_cursor.png
new file mode 100644
index 0000000..a920eef
Binary files /dev/null and b/gtk3/sample/gtk-demo/grab_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/grabbing_cursor.png b/gtk3/sample/gtk-demo/grabbing_cursor.png
new file mode 100644
index 0000000..33418ac
Binary files /dev/null and b/gtk3/sample/gtk-demo/grabbing_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/hand_cursor.png b/gtk3/sample/gtk-demo/hand_cursor.png
new file mode 100644
index 0000000..b510203
Binary files /dev/null and b/gtk3/sample/gtk-demo/hand_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/help_cursor.png b/gtk3/sample/gtk-demo/help_cursor.png
new file mode 100644
index 0000000..5440fd9
Binary files /dev/null and b/gtk3/sample/gtk-demo/help_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/listbox.ui b/gtk3/sample/gtk-demo/listbox.ui
new file mode 100644
index 0000000..8e61227
--- /dev/null
+++ b/gtk3/sample/gtk-demo/listbox.ui
@@ -0,0 +1,332 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="gtk30">
+  <!-- interface-requires gtk+ 3.10 -->
+  <!-- interface-requires gtkdemo 3.10 -->
+  <object class="GtkMenu" id="menu1">
+    <property name="visible">1</property>
+    <child>
+      <object class="GtkMenuItem" id="menuitem1">
+        <property name="visible">1</property>
+        <property name="label" translatable="yes">Email message</property>
+        <property name="use_underline">1</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkMenuItem" id="menuitem2">
+        <property name="visible">1</property>
+        <property name="label" translatable="yes">Embed message</property>
+        <property name="use_underline">1</property>
+      </object>
+    </child>
+  </object>
+  <template class="GtkMessageRow" parent="GtkListBoxRow">
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">1</property>
+        <property name="hexpand">1</property>
+        <child>
+          <object class="GtkImage" id="avatar_image">
+            <property name="width_request">32</property>
+            <property name="height_request">32</property>
+            <property name="visible">1</property>
+            <property name="halign">center</property>
+            <property name="valign">start</property>
+            <property name="margin_top">8</property>
+            <property name="margin_bottom">8</property>
+            <property name="margin_start">8</property>
+            <property name="margin_end">8</property>
+            <property name="icon-name">image-missing</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+            <property name="height">5</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="box1">
+            <property name="visible">1</property>
+            <property name="hexpand">1</property>
+            <property name="baseline_position">top</property>
+            <child>
+              <object class="GtkButton" id="button2">
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
+                <property name="receives_default">1</property>
+                <property name="valign">baseline</property>
+                <property name="relief">none</property>
+                <child>
+                  <object class="GtkLabel" id="source_name">
+                    <property name="visible">1</property>
+                    <property name="valign">baseline</property>
+                    <property name="label" translatable="0">Username</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="source_nick">
+                <property name="visible">1</property>
+                <property name="valign">baseline</property>
+                <property name="label" translatable="0">@nick</property>
+                <style>
+                  <class name="dim-label"/>
+                </style>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="short_time_label">
+                <property name="visible">1</property>
+                <property name="valign">baseline</property>
+                <property name="label" translatable="yes">38m</property>
+                <style>
+                  <class name="dim-label"/>
+                </style>
+              </object>
+              <packing>
+                <property name="fill">0</property>
+                <property name="pack_type">end</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="content_label">
+            <property name="visible">1</property>
+            <property name="halign">start</property>
+            <property name="valign">start</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="0">Message</property>
+            <property name="wrap">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="resent_box">
+            <child>
+              <object class="GtkImage" id="image2">
+                <property name="visible">1</property>
+                <property name="icon_name">media-playlist-repeat</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkLabel" id="label4">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">Resent by</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLinkButton" id="resent_by_button">
+                <property name="label" translatable="0">reshareer</property>
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
+                <property name="receives_default">1</property>
+                <property name="relief">none</property>
+                <property name="uri">http://www.gtk.org</property>
+              </object>
+              <packing>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="box3">
+            <property name="visible">1</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkButton" id="expand_button">
+                <property name="label" translatable="yes">Expand</property>
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
+                <property name="receives_default">1</property>
+                <property name="relief">none</property>
+                <signal name="clicked" handler="expand_clicked" swapped="yes"/>
+              </object>
+            </child>
+            <child>
+              <object class="GtkBox" id="extra_buttons_box">
+                <property name="spacing">6</property>
+                <child>
+                  <object class="GtkButton" id="reply-button">
+                    <property name="label" translatable="yes">Reply</property>
+                    <property name="visible">1</property>
+                    <property name="can_focus">1</property>
+                    <property name="receives_default">1</property>
+                    <property name="relief">none</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkButton" id="reshare-button">
+                    <property name="label" translatable="yes">Reshare</property>
+                    <property name="visible">1</property>
+                    <property name="can_focus">1</property>
+                    <property name="receives_default">1</property>
+                    <property name="relief">none</property>
+                    <signal name="clicked" handler="reshare_clicked" swapped="yes"/>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkButton" id="favorite-buttton">
+                    <property name="label" translatable="yes">Favorite</property>
+                    <property name="visible">1</property>
+                    <property name="can_focus">1</property>
+                    <property name="receives_default">1</property>
+                    <property name="relief">none</property>
+                    <signal name="clicked" handler="favorite_clicked" swapped="yes"/>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkMenuButton" id="more-button">
+                    <property name="visible">1</property>
+                    <property name="can_focus">1</property>
+                    <property name="receives_default">1</property>
+                    <property name="relief">none</property>
+                    <property name="popup">menu1</property>
+                    <child>
+                      <object class="GtkLabel" id="label7">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="yes">More...</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="details_revealer">
+            <property name="visible">1</property>
+            <child>
+              <object class="GtkBox" id="box5">
+                <property name="visible">1</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkBox" id="box7">
+                    <property name="visible">1</property>
+                    <property name="margin_top">2</property>
+                    <property name="margin_bottom">2</property>
+                    <property name="spacing">8</property>
+                    <child>
+                      <object class="GtkFrame" id="frame1">
+                        <property name="visible">1</property>
+                        <property name="shadow_type">none</property>
+                        <child>
+                          <object class="GtkLabel" id="n_reshares_label">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="0"><b>2</b>
+Reshares</property>
+                            <property name="use_markup">1</property>
+                          </object>
+                        </child>
+                        <child type="label_item">
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkFrame" id="frame2">
+                        <property name="visible">1</property>
+                        <property name="shadow_type">none</property>
+                        <child>
+                          <object class="GtkLabel" id="n_favorites_label">
+                            <property name="visible">1</property>
+                            <property name="label" translatable="0"><b>2</b>
+FAVORITES</property>
+                            <property name="use_markup">1</property>
+                          </object>
+                        </child>
+                        <child type="label_item">
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="box6">
+                    <property name="visible">1</property>
+                    <child>
+                      <object class="GtkLabel" id="detailed_time_label">
+                        <property name="visible">1</property>
+                        <property name="label" translatable="0">4:25 AM - 14 Jun 13 </property>
+                        <style>
+                          <class name="dim-label"/>
+                        </style>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkButton" id="button5">
+                        <property name="label" translatable="yes">Details</property>
+                        <property name="visible">1</property>
+                        <property name="can_focus">1</property>
+                        <property name="receives_default">1</property>
+                        <property name="relief">none</property>
+                        <style>
+                          <class name="dim-label"/>
+                        </style>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">4</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
diff --git a/gtk3/sample/gtk-demo/main.rb b/gtk3/sample/gtk-demo/main.rb
index abc3f6e..8a795a6 100755
--- a/gtk3/sample/gtk-demo/main.rb
+++ b/gtk3/sample/gtk-demo/main.rb
@@ -1,358 +1,177 @@
-#! /usr/bin/env ruby
-=begin
-  main.rb - Main class of gtk-demo.
-
-  Copyright (c) 2003-2015 Ruby-GNOME2 Project Team
-  This program is licenced under the same licence as Ruby-GNOME2.
-=end
+#!/usr/bin/env ruby
+#
+# Copyright (C) 2006-2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 require "gtk3"
+require "optparse"
+require "fileutils"
 
-$LOAD_PATH.unshift(File.dirname(__FILE__))
-
-module Demo
-  class Main < Gtk::Window
-    TITLE_COLUMN, FILENAME_COLUMN, CLASS_COLUMN, ITALIC_COLUMN = 0, 1, 2, 3
-
-    def initialize
-      super()
-
-      @current_file = nil
+current_path = File.expand_path(File.dirname(__FILE__))
+gresource_bin = "#{current_path}/demo.gresource"
+gresource_xml = "#{current_path}/demo.gresource.xml"
 
-      @info_buffer = Gtk::TextBuffer.new
-      @source_buffer = Gtk::TextBuffer.new
-
-      set_title("Ruby/GTK+ Code Demos")
-      signal_connect("destroy") { Gtk.main_quit }
-
-      signal_connect("key_press_event") do |_widget, event|
-        if event.state.control_mask? && event.keyval == Gdk::Keyval::KEY_q
-          destroy
-          true
-        else
-          false
-        end
-      end
+system("glib-compile-resources",
+       "--target", gresource_bin,
+       "--sourcedir", current_path,
+       gresource_xml)
 
-      hbox = Gtk::Box.new(:horizontal)
-      add(hbox)
-
-      tree = create_tree
-      scrolled_window = Gtk::ScrolledWindow.new
-      scrolled_window.set_policy :never, :automatic
-      scrolled_window.add(tree)
-      hbox.pack_start(scrolled_window, :expand => false, :fill => false, :padding => 0)
-
-      notebook = Gtk::Notebook.new
-      hbox.pack_start(notebook, :expand => true, :fill => true, :padding => 0)
-
-      notebook.append_page(create_text(@info_buffer, false),
-                           Gtk::Label.new("_Info", :use_underline => true))
-
-      notebook.append_page(create_text(@source_buffer, true),
-                           Gtk::Label.new("_Source", :use_underline => true))
-
-      @info_buffer.create_tag("title",
-                              "font" => "Sans 18")
-
-      @source_buffer.create_tag("comment",
-                                "foreground" => "red")
-      @source_buffer.create_tag("const",
-                                "foreground" => "ForestGreen")
-      @source_buffer.create_tag("string",
-                                "foreground" => "RosyBrown",
-                                "weight" => Pango::FontDescription::WEIGHT_BOLD
-                                )
-      @source_buffer.create_tag("reserved",
-                                "foreground" => "purple")
-    end
-
-    def script_info(path)
-      title = nil
-      klass = nil
-      depend = nil
-
-      file = File.open(path)
-      file.each do |ln|
-        if !title && ln =~ /^=\s+(.*)$/
-          title = Regexp.last_match(1)
-          if title =~ /^(.*)\((.+?)\)$/
-            title = Regexp.last_match(1)
-            depend = Regexp.last_match(2)
-          end
-        elsif !klass && ln =~ /\s*class\s+([A-Z][A-Za-z0-9_]*)/
-          klass = Regexp.last_match(1)
-        end
-
-        break if title && klass
-      end
-
-      raise "File not found: #{path}." unless klass
-
-      return title, klass.intern, depend
-    end
+gschema_bin = "#{current_path}/gschemas.compiled"
 
-    def generate_index
-      # Target scripts
-      scripts = Dir.glob(File.join(File.dirname(__FILE__), "*.rb"))
+system("glib-compile-schemas", current_path)
 
-      # Generate index tree
-      children = {}
-      index = []
+at_exit do
+  FileUtils.rm_f([gresource_bin, gschema_bin])
+end
 
-      scripts.each do |script|
-        next if ["common.rb", "main.rb"].include?(File.basename(script))
-        title, klass, depend = script_info(script)
+resource = Gio::Resource.load(gresource_bin)
+Gio::Resources.register(resource)
 
-        next if depend && !Gtk.const_defined?(depend)
+ENV["GSETTINGS_SCHEMA_DIR"] = current_path
 
-        if title =~ %r{^(.+?)/(.+)$}
-          parent = Regexp.last_match(1)
-          child = Regexp.last_match(2)
 
-          unless children[parent]
-            children[parent] = []
-            index += [[parent, nil, nil, []]]
-          end
 
-          children[parent] += [[child, script, klass]]
-        else
-          index += [[title, script, klass]]
-        end
-      end
+class Demo < Gtk::Application
+  def initialize
+    super("org.gtk.Demo", [:non_unique, :handles_command_line])
 
-      # Sort children
-      children.each_key do |parent|
-        children[parent].sort! do |a, b|
-          a[0] <=> b[0]
-        end
-      end
+    @options = {}
+    @exit_status = 0
 
-      # Expand children
-      index.collect! do |row|
-        row[3] = children[row[0]] if row[3]
-        row
-      end
+    signal_connect "startup" do |application|
+      puts "startup"
+      @builder = Gtk::Builder.new(:resource => "/ui/main.ui")
+      appmenu = @builder["appmenu"]
+      application.set_app_menu(appmenu)
+    end
 
-      index.sort! do |a, b|
-        a[0] <=> b[0]
+    signal_connect "activate" do |application|
+      puts "activate"
+      begin
+        run_application
+      rescue => error
+        report_error(error)
+        @exit_status = 1
       end
-
-      index
     end
 
-    def create_tree
-      model = Gtk::TreeStore.new(String, String, String, TrueClass)
-
-      tree_view = Gtk::TreeView.new
-      tree_view.set_model(model)
-      selection = tree_view.selection
-
-      selection.set_mode(:browse)
-      tree_view.set_size_request(200, -1)
-
-      append_children(model, generate_index)
-
-      cell = Gtk::CellRendererText.new
-      cell.style = Pango::FontDescription::STYLE_ITALIC
-      column = Gtk::TreeViewColumn.new("Widget (double click for demo)", cell,
-                                       "text" => TITLE_COLUMN,
-                                       "style_set" => ITALIC_COLUMN
-                                       )
-
-      tree_view.append_column(column)
-
-      selection.signal_connect("changed") do |changed_selection|
-        iter = changed_selection.selected
-        load_file(iter.get_value(FILENAME_COLUMN)) if iter
-      end
-      tree_view.signal_connect("row_activated") do |_tree_view, path, _column|
-        row_activated_cb(_tree_view.model, path)
+    signal_connect "command-line" do |application, command_line|
+      puts "cmd"
+      begin
+        parse_command_line(command_line.arguments)
+      rescue SystemExit => error
+        error.status
+      rescue OptionParser::InvalidOption => error
+        puts error.message
+        1
+      rescue => error
+        report_error(error)
+        1
+      else
+        activate
+        @exit_status
       end
+    end
+ end
 
-      tree_view.expand_all
-      tree_view
+  private
+  def parse_command_line(arguments)
+    parser = OptionParser.new
+    parser.on("-r", "--run EXAMPLE", "Run an example") do |example|
+      @options[:name] = example
+    end
+    parser.on("-a", "--autoquit", "Quit after a delay") do
+      @options[:autoquit] = true
+    end
+    parser.on("-l", "--list", "List examples") do
+      @options[:list] = true
     end
+    parser.parse(arguments)
+  end
 
-    def append_children(model, source, parent = nil)
-      source.each do |title, filename, klass, children|
-        iter = model.append(parent)
+  def report_error(error)
+    puts "#{error.class}: #{error.message}"
+    puts error.backtrace
+  end
 
-        [title, filename, klass].each_with_index do |value, i|
-          iter.set_value(i, value) if value
-        end
-        iter.set_value(ITALIC_COLUMN, false)
+  def run_application
+    if @options[:list]
+      puts "list"
+      # list_demos
+      quit
+    end
 
-        append_children(model, children, iter) if children
-      end
+    if @options[:name]
+      puts "name"
+      # lookup_for_corresponding_demo
+      # load_demo
     end
 
-    def row_activated_cb(model, path)
-      iter = model.get_iter(path)
-      iter.set_value(ITALIC_COLUMN, true)
-
-      lib = iter.get_value(FILENAME_COLUMN)
-      if lib
-        require_relative(File.basename(lib))
-
-        klass = Demo.const_get(iter.get_value(CLASS_COLUMN))
-        window = klass.new
-        window.signal_connect("destroy") do
-          iter.set_value(ITALIC_COLUMN, false)
-        end
-        window.show_all
-        @window = window
+    if @options[:autoquit]
+      puts "autoquit"
+      GLib::Timeout.add(1) do
+        #implement auto_quit
       end
     end
 
-    def create_text(buffer, is_source)
-      scrolled_window = Gtk::ScrolledWindow.new
-      scrolled_window.set_policy(:automatic,
-                                 :automatic)
-      scrolled_window.set_shadow_type(:in)
-
-      text_view = Gtk::TextView.new
+    window = @builder["window"]
+    add_window(window)
 
-      text_view.set_buffer(buffer)
-      text_view.set_editable(false)
-      text_view.set_cursor_visible(false)
+    action = Gio::SimpleAction.new("run")
+    action.signal_connect "activate" do |_action, _parameter|
+      # activate_run
+    end
+    add_action(action)
 
-      scrolled_window.add(text_view)
+    notebook = @builder["notebook"]
+    info_textwiew = @builder["info-textview"]
+    source_textview = @builder["source-textview"]
+    headerbar = @builder["headerbar"]
+    treeview = @builder["treeview"]
+    model = treeview.model
 
-      if is_source
-        font_desc = Pango::FontDescription.new("Monospace 12")
-        text_view.override_font(font_desc)
+    sw = @builder["source-scrolledwindow"]
+    scrollbar = sw.vscrollbar
 
-        text_view.set_wrap_mode(:none)
-      else
-        text_view.set_wrap_mode(:word)
-        text_view.set_pixels_above_lines(2)
-        text_view.set_pixels_below_lines(2)
-      end
+    menu = Gtk::Menu.new
 
-      scrolled_window
+    item = Gtk::MenuItem.new("Start")
+    menu.append(item)
+    item.signal_connect "activate" do
+      adj = scrollbar.adjustement
+      adj.value = adj.get_lower
     end
 
-    def fontify(start_iter = @source_buffer.start_iter,
-                end_iter = @source_buffer.end_iter)
-      str = @source_buffer.get_text(start_iter, end_iter, true)
-
-      tokenizer = RubyTokonizer.new
-      tokenizer.tokenize(str, start_iter.offset) do |tag, start, last|
-        @source_buffer.apply_tag(tag.to_s,
-                                 @source_buffer.get_iter_at(:offset => start),
-                                 @source_buffer.get_iter_at(:offset => last))
-      end
+    item = Gtk::MenuItem.new("End")
+    menu.append(item)
+    item.signal_connect "activate" do
+      adj = scrollbar.adjustement
+      adj.value = adj.get_upper - adj.get_page_size
     end
 
-    def load_file(filename)
-      return if filename == @current_file
-
-      @info_buffer.delete(*@info_buffer.bounds)
-
-      @source_buffer.delete(*@source_buffer.bounds)
-
-      file = begin
-               File.open(filename)
-             rescue
-               $stderr.puts "Cannot open: #{$ERROR_INFO}" if $DEBUG
-               return
-             end
-      start = @info_buffer.get_iter_at(:offset => 0)
-      state = :before_header
-
-      file.each do |line|
-        case state
-        when :before_header
-          state = :in_header if line =~ /^=begin$/
-        when :in_header
-          if line =~ /^=end$/
-            state = :body
-            start = @source_buffer.get_iter_at(:offset => 0)
-          elsif line =~ /^=\s+(.*)$/
-            title = Regexp.last_match(1)
-            title.gsub!(/\s*\(.*\)$/, "") # Delete depend field
-
-            last = start
-
-            @info_buffer.insert(last, title)
-            start = last.clone
-
-            start.backward_chars(title.length)
-            @info_buffer.apply_tag("title", start, last)
-
-            start = last
-          else
-            @info_buffer.insert(start, line)
-          end
-        when :body  # Reading program body
-          @source_buffer.insert(start, line)
-        end
-      end
-
-      fontify
+    menu.show_all
 
-      @current_file = filename
+    scrollbar.signal_connect "popup-menu" do
+      menu.popup(nil, nil, Gtk.current_event_time)
     end
-  end
 
-  class RubyTokonizer
-    RESERVED_WORDS = %w(begin end module class def if then else while unless do case when require yield)
-    RESERVED_WORDS_PATTERN = Regexp.compile(/(^|\s+)(#{RESERVED_WORDS.collect { |pat| Regexp.quote(pat) }.join("|")})(\s+|$)/)
-
-    def tokenize(str, index = 0)
-      until str.empty?
-        tag = nil
-
-        case str
-        when /".+?"/, /".+?"/
-          tag = :string
-        when /#.*$/
-          tag = :comment
-        when RESERVED_WORDS_PATTERN
-          tag = :reserved
-        when /[A-Z][A-Za-z0-9_]+/
-          tag = :const
-        end
-
-        if tag
-          tokenize($LAST_MATCH_INFO.pre_match, index) do |*args|
-            yield(*args)
-          end
-          yield(tag, index + $LAST_MATCH_INFO.begin(0), index + $LAST_MATCH_INFO.end(0))
-          index += (str.length - $LAST_MATCH_INFO.post_match.length)
-          str = $LAST_MATCH_INFO.post_match
-        else
-          index += str.length
-          str = ""
-        end
-      end
-    end
+    window.show_all
   end
 end
 
-target = ARGV.shift
-if target
-  Demo::INDEX.each do |_title, filename, klass_symbol, _children|
-    if target == filename || target == klass_symbol.id2name
-      require filename
-
-      window = Demo.const_get(klass_symbol).new
-      window.show_all
-
-      class << window
-        def quit
-          Gtk.main_quit
-        end
-      end
-
-      break
-    end
-  end
-else
-  main = Demo::Main.new
-  main.set_default_size(600, 400)
-  main.show_all
-end
+demo = Demo.new
 
-Gtk.main
+exit(demo.run([$PROGRAM_NAME] + ARGV))
diff --git a/gtk3/sample/gtk-demo/main.ui b/gtk3/sample/gtk-demo/main.ui
new file mode 100644
index 0000000..ff73c7d
--- /dev/null
+++ b/gtk3/sample/gtk-demo/main.ui
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.10 -->
+  <menu id="appmenu">
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">About</attribute>
+        <attribute name="action">app.about</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Quit</attribute>
+        <attribute name="action">app.quit</attribute>
+        <attribute name="accel"><Primary>q</attribute>
+      </item>
+    </section>
+  </menu>
+  <object class="GtkTreeStore" id="treestore">
+    <columns>
+      <!-- column-name NAME -->
+      <column type="gchararray"/>
+      <!-- column-name TITLE -->
+      <column type="gchararray"/>
+      <!-- column-name FILENAME -->
+      <column type="gchararray"/>
+      <!-- column-name FUNC -->
+      <column type="gpointer"/>
+      <!-- column-name STYLE -->
+      <column type="gint"/>
+    </columns>
+  </object>
+  <object class="GtkApplicationWindow" id="window">
+    <property name="default-width">800</property>
+    <property name="default-height">600</property>
+    <property name="title">GTK+ Demo</property>
+    <signal name="delete-event" handler="gtk_false" swapped="no"/>
+    <signal name="destroy" handler="gtk_main_quit" swapped="no"/>
+    <child type="titlebar">
+      <object class="GtkHeaderBar" id="headerbar">
+        <property name="visible">1</property>
+        <property name="show-close-button">1</property>
+        <child>
+          <object class="GtkButton" id="run_button">
+            <property name="visible">1</property>
+            <property name="valign">center</property>
+            <property name="can_focus">1</property>
+            <property name="action_name">win.run</property>
+            <style>
+              <class name="text-button"/>
+            </style>
+            <child>
+              <object class="GtkLabel" id="run_label">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">Run</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child>
+      <object class="GtkBox" id="box1">
+        <property name="visible">1</property>
+        <child>
+          <object class="GtkFrame">
+            <property name="visible">1</property>
+            <child>
+              <object class="GtkScrolledWindow" id="scrolledwindow">
+                <property name="width_request">120</property>
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
+                <property name="hscrollbar_policy">never</property>
+                <property name="min_content_width">150</property>
+                <style>
+                  <class name="sidebar"/>
+                </style>
+                <child>
+                  <object class="GtkTreeView" id="treeview">
+                    <property name="visible">1</property>
+                    <property name="can_focus">1</property>
+                    <property name="model">treestore</property>
+                    <property name="headers_visible">0</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection">
+                        <property name="mode">browse</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+                        <property name="title" translatable="yes">column</property>
+                        <child>
+                          <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                          <attributes>
+                            <attribute name="style">4</attribute>
+                            <attribute name="text">1</attribute>
+                          </attributes>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkNotebook" id="notebook">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="scrollable">1</property>
+            <property name="enable_popup">1</property>
+            <property name="show_border">0</property>
+            <child>
+              <object class="GtkScrolledWindow" id="scrolledwindow1">
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
+                <child>
+                  <object class="GtkTextView" id="info-textview">
+                    <property name="visible">1</property>
+                    <property name="can_focus">1</property>
+                    <property name="left-margin">20</property>
+                    <property name="right-margin">20</property>
+                    <!-- TODO                   <property name="top-margin">20</property>
+                    <property name="bottom-margin">20</property>-->
+                    <property name="pixels_above_lines">2</property>
+                    <property name="pixels_below_lines">2</property>
+                    <property name="editable">0</property>
+                    <property name="wrap_mode">word</property>
+                    <property name="cursor_visible">0</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="tab_expand">1</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label1">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">_Info</property>
+                <property name="use_underline">1</property>
+              </object>
+              <packing>
+                <property name="tab_expand">1</property>
+                <property name="tab_fill">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="source-scrolledwindow">
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
+                <child>
+                  <object class="GtkTextView" id="source-textview">
+                    <property name="visible">1</property>
+                    <property name="can_focus">1</property>
+                    <property name="left-margin">20</property>
+                    <property name="right-margin">20</property>
+                    <!--  TODO                  <property name="top-margin">20</property>
+                    <property name="bottom-margin">20</property> -->
+                    <property name="editable">0</property>
+                    <property name="cursor_visible">0</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+                <property name="tab_expand">1</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label2">
+                <property name="visible">1</property>
+                <property name="label" translatable="yes">Source</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+                <property name="tab_fill">0</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">1</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gtk3/sample/gtk-demo/markup.txt b/gtk3/sample/gtk-demo/markup.txt
new file mode 100644
index 0000000..feece2c
--- /dev/null
+++ b/gtk3/sample/gtk-demo/markup.txt
@@ -0,0 +1,16 @@
+
+Text sizes: <span size="xx-small">tiny</span> <span size="x-small">very small</span> <span size="small">small</span> <span size="medium">normal</span> <span size="large">large</span> <span size="x-large">very large</span> <span size="xx-large">huge</span>
+
+Text <span color="gray">c<span color="green">o</span>l<span color="tomato">o</span>rs</span>
+
+Colorful <span underline="low" underline-color="blue"><span underline="double" underline-color="red">under</span>lines</span>
+
+Colorful <span strikethrough="true" strikethrough-color="magenta">strikethroughs</span>
+
+Superscripts and subscripts: 𝜀<span rise="-6000" size="x-small" font_desc="italic">0</span> = 𝜔<span rise="8000" size="smaller">𝜔<span rise="14000" size="smaller">𝜔<span rise="20000">.<span rise="23000">.<span rise="26000">.</span></span></span></span></span>
+
+<span letter_spacing="3000">Letterspacing</span>
+
+OpenType font features: <span font_desc="sans regular" font_features="dlig=0">feast</span> versus <span font_desc="sans regular" font_features="dlig=1">feast</span>
+
+Shortcuts: <tt>Monospace</tt> – <b>Bold</b> – <i>Italic</i> – <big>Big</big> – <small>Small</small> – <u>Underlined</u> – <s>Strikethrough</s> – Super<sup>script</sup> – Sub<sub>script</sub>
diff --git a/gtk3/sample/gtk-demo/menus.ui b/gtk3/sample/gtk-demo/menus.ui
index 0bbe11a..a0aecfa 100644
--- a/gtk3/sample/gtk-demo/menus.ui
+++ b/gtk3/sample/gtk-demo/menus.ui
@@ -91,7 +91,7 @@
         <item>
           <attribute name="label" translatable="yes">_Bold</attribute>
           <attribute name="action">win.bold</attribute>
-          <attribute name="accel"><Primary>b</attribute>
+          <attribute name="accel"><Primary><Shift>b</attribute>
         </item>
       </section>
     </submenu>
diff --git a/gtk3/sample/gtk-demo/messages.txt b/gtk3/sample/gtk-demo/messages.txt
new file mode 100644
index 0000000..156f628
--- /dev/null
+++ b/gtk3/sample/gtk-demo/messages.txt
@@ -0,0 +1,388 @@
+1|GTK+ and friends|GTKtoolkit|@breizhodrome yeah, that's for the OpenGL support that has been added recently|1416751697|0||2|1
+2|Emmanuele Bassi|ebassi|RT @ebassi: embloggeration happened: http://t.co/9ukkNuSzuc — help out supporting GL on windows and macos in GTK+ 3.16.|1416086824|0|GTKtoolkit|0|9
+3|Matthew Waters|ystreet00|RT @ystreet00: . at GTKtoolkit + @gstreamer integration using the new #gtk #opengl support https://t.co/IeBpFjbjes http://t.co/WptPHCfFIb|1416086780|0|GTKtoolkit|0|13
+4|Emmanuele Bassi|ebassi|RT @ebassi: embloggeration happened — OpenGL integration lands in GTK+ — http://t.co/sUGwcvZhRg|1413214719|0|GTKtoolkit|0|8
+5|Allan Day|allanday|RT @allanday: New Human Interface Guidelines coming for @gnome and @GTKtoolkit . http://t.co/SMNndyo6rl|1408615736|0|GTKtoolkit|0|12
+6|Christian Hergert|hergertme|RT @hergertme: being able to set opacity on an individual widget in gtk ... you've come a long way since 2.x days.|1408601183|0|GTKtoolkit|0|2
+7|Richard Brown|sysrich|RT @sysrich: hmm, good thing Iike eating with chopsticks #GUADEC http://t.co/7aG9CYpdZg|1406543731|0|GTKtoolkit|0|82
+8|Javier Jardón|jjardon|RT @jjardon: #GNOME 3.13.4 has just been released from Strasbourg, this year #GUADEC city. Enjoy! https://t.co/hgHDVOWvRC|1406303072|0|GTKtoolkit|0|6
+9|GNOME|gnome|RT @gnome: This year's @guadec schedule has been published. Lots of great talks on there, as usual. https://t.co/rpGPxIRCuB|1405929795|0|GTKtoolkit|0|20
+10|GTK+ and friends|GTKtoolkit|New features of GtkInspector : http://t.co/EOgcv1lh8D #gtk #gtk3|1402076874|0||2|3
+11|The Valeyard|breizhodrome|RT @breizhodrome: @GTKtoolkit and his multipoint gesture, good thing for mobile applications :) #Gtk|1402076810|0|GTKtoolkit|0|1
+12|GTK+ and friends|GTKtoolkit|@Gin_Cheng sorry about that, should be fixed now|1402076785|0||0|0
+13|GTK+ and friends|GTKtoolkit|@teadriven sorry about that, should be fixed now|1402076751|0||0|0
+14|Javier Jardón|jjardon|RT @jjardon: #GNOME 3.13.2 (developer version) released! Try it, brake it, file bugs! https://t.co/cyCLBCtqKo|1401318926|0|GTKtoolkit|0|2
+15|GTK+ and friends|GTKtoolkit|Gtkparasite has been integrated in #GTK+: Introducing gtkinspector: http://t.co/dP3DzgPNM3 #gtk3|1400231807|0||8|11
+16|GTK+ and friends|GTKtoolkit|GTK+ 3.12 released! Improvements in Wayland, Broadway, OSX ... New widgets: GtkFlowBox,GtkActionBar and GtkPopover: https://t.co/5hBIlfrxc3|1395842503|0||5|8
+17|Javier Jardón|jjardon|RT @jjardon: Second beta of #GNOME 3.12 just released! https://t.co/8oTfZaatVr|1394147916|0|GTKtoolkit|0|3
+18|Javier Jardón|jjardon|RT @jjardon: First beta of GNOME 3.12 (3.11.90) has just been released. Enjoy! https://t.co/d5wzYWXUnv #gnome|1393006697|0|GTKtoolkit|0|4
+19|GTK+ and friends|GTKtoolkit|Some thoughts on portability by @desrt : http://t.co/zyFT6i4we3 #glib|1392903834|0||1|0
+20|GTK+ and friends|GTKtoolkit|Popovers support merged in master: http://t.co/5JE0RLhEDo Thanks @garnacho for getting this done! #gtk3|1390500627|0||5|7
+21|GTK+ and friends|GTKtoolkit|The continuous build environment now generates 64-bit #GTK+ Windows bundles! Read the announcement from @tarnyko : https://t.co/wXVOAzCYTt|1386169565|0||6|10
+22|GTK+ and friends|GTKtoolkit|GTK+ 3 packages for Windows available! Thanks for the hard work of @tarnyko to make this possible!\nhttp://t.co/U9JgsGoBLm|1382633636|0||7|23
+23|GTK+ and friends|GTKtoolkit|Status of support of high resolution displays in #GTK+ (and #GNOME ) http://t.co/SPQN2E6Qxo Thanks to Brion Vibber for the donation!|1372531560|0||2|3
+24|Javier Jardón|jjardon|RT @jjardon: Firefox GTK+3 port ready for testing https://t.co/onpxJaTKO5 #gtk #gtk3|1371557291|0|GTKtoolkit|0|22
+25|GTK+ and friends|GTKtoolkit|GTK+ 3.8.0 (STABLE) released: wayland, Multi-application Broadway, improved CSS support and more ... http://t.co/RlLmrNPyYs #gtk #gtk3|1364435230|0||0|5
+26|Daniel Svensson|dsvensson|RT @dsvensson: Bringing an application up to the new features in GTK 3.x = tons of negative diffs, awesome work by @GTKtoolkit devs <3|1352906611|0|GTKtoolkit|0|3
+27|GTK+ and friends|GTKtoolkit|GLib status update and a warning: http://t.co/quQP8dLf #glib|1352905826|0||1|1
+28|GTK+ and friends|GTKtoolkit|GProperty status: http://t.co/Nk28V2Rh #glib|1352905797|0||1|1
+29|GTK+ and friends|GTKtoolkit|GTK+ 3.6.2 (STABLE) available: http://t.co/ah87o7cC #gtk #gtk3|1352905768|0||1|2
+30|GTK+ and friends|GTKtoolkit|GLib 2.34.2 (STABLE) available: http://t.co/yavkTJwr #glib|1352905722|0||2|1
+31|GTK+ and friends|GTKtoolkit|GTK+ 3.6.0 (STABLE) released: http://t.co/3NDAT5K9 #gtk #gtk3|1350075620|0||0|4
+32|GTK+ and friends|GTKtoolkit|GLib 2.34.0 (STABLE) released: http://t.co/eWRD7hNy #glib|1350075583|0||0|6
+33|GTK+ and friends|GTKtoolkit|GLib 2.33.10 (UNSTABLE) released: http://t.co/3BCdOPDy #glib|1347299317|0||2|2
+34|Javier Jardón|jjardon|RT @jjardon: GnomeGoals status update: https://t.co/q5j7mJ1c #gnome|1342143404|0|GTKtoolkit|0|1
+35|Emmanuele Bassi|ebassi|RT @ebassi: Saturday, 28/07, 11:45 - I'll be talking about Rainbows and Unicorns @ GUADEC https://t.co/WOiF6QU6|1341984820|0|GTKtoolkit|0|2
+36|Harvey|cd0|RT @cd0: According to the sourcecode zipball the browser in the samsung smart tvs (UNxxES8xxx) is webkit-gtk 20120109. Not bad. @GTKtoolkit|1341712733|0|GTKtoolkit|0|3
+37|Claudio Saavedra|csaavedra|RT @csaavedra: Accelerated compositing in WebKitGTK+: http://t.co/yxl0BooF #webkit #gnome|1341712291|0|GTKtoolkit|0|2
+38|GTK+ and friends|GTKtoolkit|GTK+ 3.5.6 (UNSTABLE) released, now featuring GtkSearchEntry and GtkMenuButton http://t.co/adHtm2OA #gtk #gtk3|1341689740|0||0|3
+39|GTK+ and friends|GTKtoolkit|GTK+ 3.4.0 (STABLE) released: http://t.co/KPSfJQSg #gtk #gtk3|1332870781|0||0|17
+40|Javier Jardón|jjardon|RT @jjardon: GTK+ 2.24.9 (STABLE) released: https://t.co/OgcL5jnR #gtk|1327437929|0|GTKtoolkit|0|2
+41|GTK+ and friends|GTKtoolkit|Multitouch is near… by @garnacho http://t.co/68iK8m9S #gtk #gtk3|1327090575|0||1|7
+42|GTK+ and friends|GTKtoolkit|@dylanmccall Follow this bug: https://t.co/9vCpBVSm|1326802580|0||0|0
+43|GTK+ and friends|GTKtoolkit|@cd0 Nice. Please, report any issue next time ;)|1326802460|0||0|0
+44|GTK+ and friends|GTKtoolkit|RFC: new features http://t.co/uiqYWx4O #gtk #gtk3|1326802266|0||1|2
+45|GTK+ and friends|GTKtoolkit|@cd0 Did you file a bug?|1326776652|0||0|0
+46|GTK+ and friends|GTKtoolkit|@dylanmccall You mean this? http://t.co/BXbocqE9|1326776459|0||0|0
+47|GTK+ and friends|GTKtoolkit|@trufae https://t.co/xlq75hDL|1326776153|0||0|0
+48|GTK+ and friends|GTKtoolkit|RFC: UI design: http://t.co/Lu8Gnnfg #gtk #gtk3|1326305191|0||2|2
+49|GTK+ and friends|GTKtoolkit|#win32 users: GTK+ 2.24.8 bundles available here: http://t.co/WhuY2XoN It not needed to use 2.16 anymore #gtk|1323190462|0||1|4
+50|GTK+ and friends|GTKtoolkit|RFC: Model-View-Controller http://t.co/Lmw4lW9V #gtk #gtk3|1321546108|0||1|1
+51|GTK+ and friends|GTKtoolkit|RFC:boxes http://t.co/eZABFgTp #gtk #gtk3|1321546061|0||2|1
+52|GTK+ and friends|GTKtoolkit|GTK+ 2.24.8 (stable) released: update of the win32 backend, it now works at least as well as the old 2.16.x http://t.co/6wrhs7hm #gtk|1321297367|0||0|2
+53|GTK+ and friends|GTKtoolkit|GTK + #Clutter next step(s): http://t.co/UDIezbyW #gtk #gtk4|1318265984|0||3|4
+54|GTK+ and friends|GTKtoolkit|Tutorial for #Python, #GStreamer and #GTK 3: http://t.co/hvfRx18E #gtk3|1317781925|0||5|0
+55|GTK+ and friends|GTKtoolkit|@jonobacon nice, but pyGTK is deprecated, use pygobject instead|1317353873|0||1|0
+56|GTK+ and friends|GTKtoolkit|GTK+ 3.2 (STABLE) released: http://t.co/EqHjTmol #gtk #gtk3|1317043650|0||0|11
+57|GTK+ and friends|GTKtoolkit|New D-Bus features in GLib 2.30: http://t.co/rzHui2Q2 #gtk #glib|1316732697|0||3|4
+58|Lanedo GmbH|LanedoTweets|RT @TimJanik: New #GTK+ building instructions for #Mac OS X now up in the #GNOME wiki: http://t.co/lLt2fb1B|1316646621|0|GTKtoolkit|0|3
+59|GTK+ and friends|GTKtoolkit|GTK+ 3.1.90 (UNSTABLE) released: http://t.co/KRz34jp #gtk #gtk3|1315961535|0||0|3
+60|Lanedo GmbH|LanedoTweets|RT @TimJanik: There's a Win32 security advisory for Gtk+, it's recommended to upgrade to latest Gtk+ (2.24.6) if you haven't yet: http:/ ...|1315914861|0|GTKtoolkit|0|5
+61|GTK+ and friends|GTKtoolkit|GTK+ 4.0 and #Clutter 2.0: rainbows and unicorns: http://t.co/SKbl0vQ #gtk #gtk4|1314883483|0||2|14
+62|GTK+ and friends|GTKtoolkit|Some #Glib plans for the next cycle: http://t.co/a6YybK0 #gtk|1314883427|0||0|3
+63|Nat Friedman|natfriedman|RT @natfriedman: Any Gtk+ experts who want to make some consulting money fixing bugs in Gtk/Mac, email me: nat at xamarin.com.|1314355269|0|GTKtoolkit|0|28
+64|Kristian Rietveld|krietvel|RT @krietvel: Blog post: 'Merged “treemodel-fix” branch into GTK+: call for testing, blog post series' http://t.co/yAUnneo #gtk|1314096198|0|GTKtoolkit|0|2
+65|GTK+ and friends|GTKtoolkit|@ArcherSeven Help improving the patch here: http://t.co/r74hP79|1313493595|0||0|0
+66|GTK+ and friends|GTKtoolkit|GTK+ 3.1.12 (UNSTABLE) released: http://t.co/3iPAlNq Try the new Font Dialog! #gtk #gtk3|1313493256|0||0|4
+67|GTK+ and friends|GTKtoolkit|@cimi @DanielFore Patches always welcomed!|1313493010|0||0|0
+68|GTK+ and friends|GTKtoolkit|a11y branch was merged into master: http://mail.gnome.org/archives/gtk-devel-list/2011-July/msg00004.html #gtk #gtk3|1309962425|0||0|2
+69|GTK+ and friends|GTKtoolkit|Another update in the effort to improve #a11y in #gtk: http://mail.gnome.org/archives/gtk-devel-list/2011-June/msg00057.html #gtk3|1309606597|0||0|0
+70|GTK+ and friends|GTKtoolkit|@cd0 What is wrong in that page? freetype already appears as a required dependency. Anyway patches always welcomed ;)|1307359139|0||0|0
+71|GTK+ and friends|GTKtoolkit|Of course, everyone is welcomed to improve the #gtk website. git repo: http://ur1.ca/4bwbw bugzilla: http://ur1.ca/4bwc1|1307038767|0||0|1
+72|GTK+ and friends|GTKtoolkit|Check out the new #gtk website!!: www.gtk.org|1307036644|0||0|4
+73|GTK+ and friends|GTKtoolkit|@jikri Take a look to http://live.gnome.org/action/login/GTK+/Roadmap and http://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html|1306673774|0||0|0
+74|GTK+ and friends|GTKtoolkit|Introducing Cossa, a GTK+ theme previewer for gedit, by @garnacho http://ur1.ca/4ate8 #gtk #gtk3|1306672611|0||1|5
+75|GTK+ and friends|GTKtoolkit|#GProperty, new API for Property and Accessor declaration, by @ebassi : http://ur1.ca/47lgk #gtk #glib|1305717028|0||0|2
+76|GTK+ and friends|GTKtoolkit|GLib 2.29.4 (UNSTABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-May/msg00012.html #gtk #glib|1304593138|0||0|2
+77|GTK+ and friends|GTKtoolkit|RT @acruiz: Gtk+ FontSelection progress http://bit.ly/iikP2f #gtk #gtk3|1303089979|0||0|1
+78|GTK+ and friends|GTKtoolkit|RT @krietvel: New blog post: CoreText backend now in Pango master http://bit.ly/dTE0a1 #gtk #pango #osx|1303089938|0||0|0
+79|GTK+ and friends|GTKtoolkit|GTK+ 3.0.9 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00087.html #gtk #gtk3|1302883958|0||0|0
+80|GTK+ and friends|GTKtoolkit|GLib 2.28.6 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00074.html #gtk #glib|1302780112|0||0|3
+81|GTK+ and friends|GTKtoolkit|GTK+ 3.1.2 (UNSTABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00072.html #gtk #gtk3|1302737279|0||0|2
+82|GTK+ and friends|GTKtoolkit|GLib 2.29.2 (UNSTABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00071.html #gtk #glib|1302702936|0||0|3
+83|Kristian Høgsberg|hoegsberg|RT @hoegsberg: yay, merged the Wayland GTK+ backend to the master branch - no, it's still not compete.|1302621000|0|GTKtoolkit|0|9
+84|GTK+ and friends|GTKtoolkit|Someone willing to help with the client side decorations branch? http://git.gnome.org/browse/gtk+/log/?h=client-side-decorations #gtk #gtk3|1302620918|0||1|1
+85|GTK+ and friends|GTKtoolkit|#Wayland GTK+ backend merged in master: http://git.gnome.org/browse/gtk+/commit/?id=c7514e8f0d19a833257497caff413bb4dfae6eb4 #gtk #gtk3|1302620838|0||1|9
+86|GTK+ and friends|GTKtoolkit|gtkmm 3.0.0 (STABLE) released: http://mail.gnome.org/archives/gtkmm-list/2011-April/msg00025.html #gtk #cpp|1302355894|0||0|3
+87|GTK+ and friends|GTKtoolkit|RT @alex_igalia: WebKit2 MiniBrowser for the GTK+ port running! http://ur1.ca/3t3ov #gtk #webkit|1302261488|0||1|0
+88|GTK+ and friends|GTKtoolkit|#GNOME3 is out, using all the power of #gtk3 , congrats everyone! #gtk #gnome|1302219444|0||0|2
+89|GTK+ and friends|GTKtoolkit|HTML5 backend update, now with real toplevel windows!! http://blogs.gnome.org/alexl/2011/04/07/broadway-update-2/ #gtk #gtk3|1302218981|0||2|10
+90|GTK+ and friends|GTKtoolkit|Glade 3.10 (STABLE) released: With support for GTK+3, pygobject and all the new stuff: http://ur1.ca/3s8wk #rad #gtk|1302032523|0||0|6
+91|GTK+ and friends|GTKtoolkit|GTK+ 3.0.8 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00009.html #gtk #gtk3|1301878240|0||0|4
+92|GTK+ and friends|GTKtoolkit|GTK+ latest performance improvements (with video): http://blogs.gnome.org/otte/2011/03/30/the-book-was-better/ #gtk #gtk3|1301594293|0||1|6
+93|GTK+ and friends|GTKtoolkit|Benjamin Otte is improving GTK+ performance with some impressive results, check latest commits #gtk #gtk3|1301409776|0||1|2
+94|Javier Jardón|jjardon|RT @jjardon: Also nice to see that a firefox GTK+3 port was started: https://bugzilla.mozilla.org/show_bug.cgi?id=627699 #gtk #gtk3 #fi ...|1301166992|0|GTKtoolkit|0|8
+95|GTK+ and friends|GTKtoolkit|RT @krietvel: Oh yea, I still have to upstream the CoreText backend I wrote for Pango. Completely forgot about that. #gtk|1301149034|0||0|0
+96|GTK+ and friends|GTKtoolkit|GTK+ 3.0.5 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00099.html #gtk #gtk3|1300925808|0||0|1
+97|GTK+ and friends|GTKtoolkit|Nice article of @cgwalters about analyzing memory use in #glib with #SystemTap: http://ur1.ca/3m0ak #gtk|1300672197|0||2|1
+98|GTK+ and friends|GTKtoolkit|GLib 2.28.3 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00065.html #gtk #glib|1300374677|0||0|2
+99|GTK+ and friends|GTKtoolkit|GTK+ HTML backend merged: http://blogs.gnome.org/alexl/2011/03/15/gtk-html-backend-update/ #gtk #gtk3|1300334447|0||3|4
+100|GTK+ and friends|GTKtoolkit|GTK+ 3.0.3 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00059.html #gtk #gtk3|1300151113|0||0|5
+101|GTK+ and friends|GTKtoolkit|PyGObject (new gobject introspection-based bindings) 2.28.0 (STABLE) released: http://ur1.ca/3fcsp #python #gtk|1299620983|0||0|1
+102|GTK+ and friends|GTKtoolkit|GTK+ team meeting now in #gtk-devel on irc.gimp.net #gtk|1299615099|0||0|1
+103|GTK+ and friends|GTKtoolkit|REMINDER: GTK+ Team IRC Meeting - 2011-03-08 at 20:00 UTC: http://ur1.ca/3ezpn Agenda: http://ur1.ca/3ezpp #gtk|1299517986|0||0|0
+104|GTK+ and friends|GTKtoolkit|GTK+ 3.0.2 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00010.html #gtk|1299517909|0||1|3
+105|GTK+ and friends|GTKtoolkit|PyGObject, the new Python introspection based bindings almost ready for the 2.28 stable release: http://ur1.ca/3dfaj #python #gtk|1299081554|0||0|5
+106|GTK+ and friends|GTKtoolkit|GTK+ 3.0.1 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00088.html #gtk|1298379744|0||0|4
+107|GTK+ and friends|GTKtoolkit|More features/ideas for gtk+ 3.2: pictures: https://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00038.html #gtk|1297815657|0||1|2
+108|GTK+ and friends|GTKtoolkit|New features/ideas for gtk+ 3.2: Translucent TextViews : http://blogs.gnome.org/tvb/2011/02/14/translucent-textviews/ #gtk|1297707521|0||1|2
+109|GTK+ and friends|GTKtoolkit|Blog post of our tireless maintainer, Matthias Clasen: http://blogs.fedoraproject.org/wp/mclasen/2011/02/10/gtk-3-is-here/ #gtk #gtk3|1297378021|0||0|5
+110|GTK+ and friends|GTKtoolkit|Highlights: Cairo-based, XI2, new theming API, Flexible geometry management, Multiple backend support for GDK, easy application support ...|1297373117|0||0|3
+111|GTK+ and friends|GTKtoolkit|GTK+ 3.0 released!! : http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00020.html gtk!|1297372977|0||1|20
+112|GTK+ and friends|GTKtoolkit|GLib 2.28.0 (stable) released: https://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00014.html #gtk #glib|1297196093|0||0|2
+113|GTK+ and friends|GTKtoolkit|GTK+ 2.99.3 released: latest beta before GTK+3 http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00004.html #gtk|1296609072|0||1|1
+114|GTK+ and friends|GTKtoolkit|Glade 3.9.2 released: off screen, workspace new look, GtkComboBoxText, GtkFileFilter, GtkApplication and more! http://ur1.ca/335is #gtk #rad|1296608221|0||1|0
+115|GTK+ and friends|GTKtoolkit|GTK+ 2.24 ( STABLE ) released: This will be the latest 2.x release. http://ur1.ca/32cft #gtk|1296438857|0||2|0
+116|GTK+ and friends|GTKtoolkit|More progress on #Glade, the GTK+ #interface #designer: http://ur1.ca/2uzpa Note that Glade 3.8 -> #gtk2 and Glade 3.10-> #gtk3 #gtk|1295186227|0||0|2
+117|GTK+ and friends|GTKtoolkit|RT @prcutler RT @fcrozat: First shot at GNOME3 evaluation usb stick : http://bit.ly/i1wM8X #gnome #gnome3 #gnome-shell #opensuse #gnome|1295186033|0||1|0
+118|GTK+ and friends|GTKtoolkit|If you want to try the #wayland backend, checkout this branch: http://git.gnome.org/browse/gtk+/log/?h=gdk-backend-wayland #gtk|1294739562|0||1|5
+119|GTK+ and friends|GTKtoolkit|GTK+ 2.99.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00005.html #gtk|1294738413|0||0|0
+120|GTK+ and friends|GTKtoolkit|GTK+ 2.99: It is now possible to include multiple GDK backends in a single library. Use --enable-{x11,win32,quartz}-backend #gtk|1294344201|0||0|0
+121|GTK+ and friends|GTKtoolkit|GTK+ 2.99: The removal of GSEALEd struct members has been completed in this release #gtk|1294344070|0||0|1
+122|GTK+ and friends|GTKtoolkit|GTK+ 2.99.0 (unstable) released http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00001.html #gtk|1294344044|0||0|2
+123|GTK+ and friends|GTKtoolkit|GLib 2.27.90 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00000.html #glib|1294343933|0||0|0
+124|GTK+ and friends|GTKtoolkit|Glade 3.9.0 (unstalbe) released: snapshot leading up to Glade 3.10 that will depend on GTK+3 http://ur1.ca/2rir0 #gtk #rad|1294343894|0||0|1
+125|GTK+ and friends|GTKtoolkit|Glade 3.7.3 (unstable) released: snapshot leading up to Glade 3.8 that\nwill depend on GTK+ 2.24 http://ur1.ca/2riqg #gtk|1294343835|0||0|0
+126|GTK+ and friends|GTKtoolkit|RT @hoegsberg: Multi-backend support in GTK+: http://bit.ly/gDwugJ - switch between #Wayland and X11 by setting GDK_BACKEND #gtk|1294201849|0||0|0
+127|GTK+ and friends|GTKtoolkit|RT @krietvel Blog post \"GDK 3.0 on Mac OS X\" http://bit.ly/ihr9kH or how GDK became awesome in GTK+ 3.0. #gtk #osx|1293728637|0||0|1
+128|GTK+ and friends|GTKtoolkit|RT @krietvel Blog post \"Refactoring GtkTreeView using GtkCellArea\" http://bit.ly/g9aArE #gtk|1293728607|0||0|0
+129|GTK+ and friends|GTKtoolkit|Also, the treeview-refactor branch has been merged too|1293036166|0||1|0
+130|GTK+ and friends|GTKtoolkit|New in GTK+ 2.91.7: gdk-backend branch have been merged: the goal is allowing to build a single gdk library that contains multiple backends|1293036118|0||0|0
+131|GTK+ and friends|GTKtoolkit|GTK+ 2.91.7 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-December/msg00155.html #gtk|1293035980|0||1|2
+132|GTK+ and friends|GTKtoolkit|GTK+ 2.23.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-December/msg00156.html #gtk|1293035865|0||0|2
+133|GTK+ and friends|GTKtoolkit|GLib 2.27.5 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-December/msg00152.html #gtk #glib|1293035786|0||0|0
+134|GTK+ and friends|GTKtoolkit|Glade 3.7.2 (unstable) released: http://lists.ximian.com/pipermail/glade-devel/2010-December/001853.html #gtk #RAD|1292589571|0||0|0
+135|Andrea Cimitan|cimi|RT @cimi: reading migration docs, later Murrine will start to be ported over GtkStyleContext (so CSS fun :))|1291813590|0|GTKtoolkit|0|1
+136|GTK+ and friends|GTKtoolkit|Work to building multiple backends on the same system started: http://ur1.ca/2ieid #gtk|1291614285|0||0|2
+137|GTK+ and friends|GTKtoolkit|RT @garnacho : gtk-style-context landed in GTK+ master, if gnome3 looks temporarily uglier that was me :) #gtk #gnome|1291613819|0||0|0
+138|Stormy|storming|RT @storming: Anyone know of any call centers that use GNOME? Potential funding for a11y work if we do ...|1291387291|0|GTKtoolkit|0|4
+139|GTK+ and friends|GTKtoolkit|Final part of the Benjamin Otte GTK3 rendering\ncleanup has landed: http://ur1.ca/2hrc9 #gtk|1291375493|0||0|0
+140|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.5 (unstable) released: http://mail.gnome.org/archives/gtkmm-list/2010-December/msg00000.html #gtk #bindings #cplusplus|1291212942|0||0|0
+141|GTK+ and friends|GTKtoolkit|ANNOUNCE: glibmm 2.27.4 (unstable) released: http://ur1.ca/2h77z #glib #bindings #cplusplus|1291212883|0||0|0
+142|GTK+ and friends|GTKtoolkit|GtkAppChooser landed in master: https://bugzilla.gnome.org/show_bug.cgi?id=582557#c10 #gtk|1291212784|0||0|0
+143|GTK+ and friends|GTKtoolkit|larger changes in GTK+ soon: GtkStyleContext, rendering-cleanup, app-chooser branch, GtkRadioGroup branch, http://ur1.ca/2gs5u #gtk|1291211812|0||2|0
+144|GTK+ and friends|GTKtoolkit|New widget: GtkSwitch http://blogs.fedoraproject.org/wp/mclasen/2010/11/29/onoff/ thanks to @ebassi and Matthias Clasen for the review #gtk|1291211711|0||2|1
+145|GTK+ and friends|GTKtoolkit|GTK+ html backend (broadway branch) landed: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00103.html #gtk|1291211452|0||0|1
+146|GTK+ and friends|GTKtoolkit|GTK+ 2.91.5 (unstalbe) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00109.html #gtk|1291211337|0||0|1
+147|GTK+ and friends|GTKtoolkit|GLib 2.27.4 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00108.html #gtk #glib|1291211331|0||0|0
+148|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.4 released: http://mail.gnome.org/archives/gtkmm-list/2010-November/msg00095.html #gtk #cplusplus #bindings|1290451737|0||0|0
+149|GTK+ and friends|GTKtoolkit|Introducing GtkCellArea: height-for-width geometry management for GtkTreeViews http://ur1.ca/2e5pe #gtk|1290310899|0||1|2
+150|Javier Jardón|jjardon|RT @jjardon: gtk+3 packages landed in #Debian experimental: http://packages.debian.org/experimental/libgtk3.0-0 #gtk|1290036413|0|GTKtoolkit|0|2
+151|GTK+ and friends|GTKtoolkit|WIP Porting guide to migrate from GTK+2 to GTK+3: http://ur1.ca/1xbzs #gtk #xfce #lxde #gnome|1290036396|0||4|6
+152|GTK+ and friends|GTKtoolkit|#GSettings is fast (really): http://blogs.gnome.org/desrt/2010/11/15/gsettings-is-fast/ #gtk #glib|1289853926|0||1|2
+153|GTK+ and friends|GTKtoolkit|Help making Glade ready for GTK+ 3: http://blogs.gnome.org/johannes/2010/11/15/help-making-glade-ready-for-3-0/ #gtk|1289853600|0||1|0
+154|GTK+ and friends|GTKtoolkit|Anyone up to fix it? RT @vwduder: I wish #gtk wouldn't actually show the window until all of the contents have been rendered to the drawable|1289434823|0||0|0
+155|GTK+ and friends|GTKtoolkit|PyGObject 2.27.0 (unstable) released: http://mail.gnome.org/archives/python-hackers-list/2010-November/msg00013.html #python #bindings #gtk|1289431671|0||0|0
+156|GTK+ and friends|GTKtoolkit|glibmm 2.27.3 (unstable) released: http://mail.gnome.org/archives/gtkmm-list/2010-November/msg00058.html #glib #cplusplus #bindings|1289387769|0||0|0
+157|GTK+ and friends|GTKtoolkit|GLib 2.27.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00043.html #gtk #glib|1289322725|0||0|1
+158|GTK+ and friends|GTKtoolkit|GTK+ 2.91.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00010.html #gtk|1288758787|0||0|1
+159|GTK+ and friends|GTKtoolkit|GLib 2.27.2 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00002.html #gtk #glib|1288758720|0||0|0
+160|GTK+ and friends|GTKtoolkit|Gtk 3.0 motto: \"We are fixing it!\"|1288630204|0||1|4
+161|GTK+ and friends|GTKtoolkit|Recent Openismus contributions to @GtkToolkit http://bit.ly/amuAdX Thank you guys!|1288343314|0||0|0
+162|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.2 (unstable) released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00058.html #gtk #cplusplus|1288098381|0||0|0
+163|GTK+ and friends|GTKtoolkit|ANNOUNCE: glibmm (unstable) 2.27.1 released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00059.html #gtk #cplusplus|1288098335|0||0|0
+164|GTK+ and friends|GTKtoolkit|GTK+ 2.91.2 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00230.html #gtk|1288058960|0||0|0
+165|GTK+ and friends|GTKtoolkit|GLib 2.27.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00222.html #gtk #glib|1288049934|0||0|1
+166|GTK+ and friends|GTKtoolkit|@garnacho shows off 3.0 CSS awesomness as a result of his work at #gtkhackfest http://bit.ly/aV99F|1288015424|0||0|0
+167|GTK+ and friends|GTKtoolkit|GtkGrid landed:new container similar to GtkTable without unnecessary restrictions.It does height-for-width geometry management. #gtkhackfest|1287759681|0||0|1
+168|GTK+ and friends|GTKtoolkit|RT @bertogg: The GTK+ artillery: http://flic.kr/p/8M16nu http://flic.kr/p/8M16d7 #gtkhackfest #gtk|1287744902|0||0|0
+169|GTK+ and friends|GTKtoolkit|GtkScrollable interface landed in master: http://git.gnome.org/browse/gtk+/commit/?id=55196a705f00564a44647bfc97981db0a783369a #gtk|1287744793|0||0|0
+170|Kristian Rietveld|krietvel|RT @krietvel: Blogged on \"Optimizing legacy code\". Or \"Color space conversion is more expensive than you might think\". http://bit.ly/duA ...|1287711819|0|GTKtoolkit|0|1
+171|GTK+ and friends|GTKtoolkit|Rounded corners in GtkEntry (thanks Boram Park!) http://ur1.ca/257f0 #gtk #gtkhackfest|1287711709|0||0|6
+172|Berto Garcia|bertogg|RT @bertogg: Ryan and Benjamin discussing GtkStyle at the Hercules Tower #gtkhackfest http://twitgoo.com/1pw774|1287708209|0|GTKtoolkit|0|1
+173|GTK+ and friends|GTKtoolkit|RT @bertogg Working late at night #gtkhackfest http://twitgoo.com/1pvw46 #gtk|1287602614|0||0|0
+174|GTK+ and friends|GTKtoolkit|WIP docs of the new theme API : http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00134.html #gtkhackfest #gtk|1287564745|0||0|0
+175|GTK+ and friends|GTKtoolkit|GtkApplication landed in master: http://ur1.ca/24fhe Feedback welcome #gtk #gtkhackfest|1287564609|0||0|0
+176|Emmanuele Bassi|ebassi|RT @ebassi: lots of discussions at the #gtkhackfest - it's great to see the roadmap for 4.0 take shape|1287564383|0|GTKtoolkit|0|2
+177|Berto Garcia|bertogg|RT @bertogg: Update from the GTK+ Hackfest 2010: http://blogs.igalia.com/berto/2010/10/19/gtk-hackfest-2010/ #gtkhackfest|1287564380|0|GTKtoolkit|0|3
+178|Berto Garcia|bertogg|RT @bertogg: Photos from the #gtkhackfest in Coruña: http://www.flickr.com/photos/tags/gtkhackfest2010/ #igalia #gnome|1287564365|0|GTKtoolkit|0|2
+179|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.1 released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00033.html #gtk #cplusplus|1287478956|0||1|0
+180|GTK+ and friends|GTKtoolkit|The #gtkhackfest started today. Thanks a lot to the event sponsors: #igalia, #lanedo, #codethink and the #GNOME foundation.|1287447826|0||0|2
+181|GTK+ and friends|GTKtoolkit|#gtkhackfest started today at the #igalia offices in A Coruña http://live.gnome.org/Hackfests/GTK2010 #gnome #gtk|1287422775|0||0|0
+182|GTK+ and friends|GTKtoolkit|libnotify, gtk API changes in 2.91.1: http://mail.gnome.org/archives/desktop-devel-list/2010-October/msg00193.html #gtk #gnome #xfce #lxde|1287324866|0||0|0
+183|GTK+ and friends|GTKtoolkit|GTK+ 2.91.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00127.html #gtk|1287324761|0||0|1
+184|GTK+ and friends|GTKtoolkit|GTK+ 2.23.0 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00128.html #gtk|1287324697|0||0|1
+185|GTK+ and friends|GTKtoolkit|RT @bratschegnome: Backported gtk window resize grips to 2.x and posted to ppa:bratsche/gtk for any #ubuntu people who want to use/test it.|1287156390|0||0|1
+186|GTK+ and friends|GTKtoolkit|Resize grip in all the GtkWindows now: http://blogs.fedoraproject.org/wp/mclasen/2010/10/09/getting-a-grip/ thanks to @bratschegnome #gtk|1286600672|0||0|1
+187|GTK+ and friends|GTKtoolkit|@judsontwit You have some tips for porting here: http://live.gnome.org/PyGObject/IntrospectionPorting No many changes needed #python|1286298188|0||0|0
+188|GTK+ and friends|GTKtoolkit|@UstunOzgur take a look here: http://live.gnome.org/PyGTK and here: http://live.gnome.org/PyGObject|1286297979|0||0|0
+189|Kristian Rietveld|krietvel|RT @krietvel: Just pushed the last patch that finishes the transition of the OS X backend to the new rendering goodness. #gtk|1286297494|0|GTKtoolkit|0|1
+190|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.0 (#C++ bindings) released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00000.html #gtk|1286128646|0||0|1
+191|GTK+ and friends|GTKtoolkit|GTK+ 2.91.0 (unstable) released: http://ur1.ca/1xbzr The rendering cleanup work has landed. Porting guide here: http://ur1.ca/1xbzs #gtk|1286073059|0||0|0
+192|GTK+ and friends|GTKtoolkit|Anyone up to the challenge of writing a WebP gdkpixbuf loader?|1285950573|0||0|3
+193|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: Clutter 1.4.0 - new stable release! grab it while it's hot, on www.clutter-project.org|1285731448|0|GTKtoolkit|0|10
+194|GTK+ and friends|GTKtoolkit|We strongly recommend not using PyGTK for new projects and to port existing applications from #PyGTK to #PyGObject #python #gtk|1285721997|0||5|39
+195|GTK+ and friends|GTKtoolkit|ANNOUNCE: PyGObject 2.26.0 released:http://mail.gnome.org/archives/python-hackers-list/2010-September/msg00019.html #gtk #python #bindings|1285721968|0||0|0
+196|GTK+ and friends|GTKtoolkit|ANNOUNCE: GLib 2.26.0 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00284.html #glib #gtk|1285721379|0||0|0
+197|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.22.0 (STABLE) released: http://mail.gnome.org/archives/gtkmm-list/2010-September/msg00095.html #gtk #c++ #bindings|1285721312|0||0|0
+198|GTK+ and friends|GTKtoolkit|PyGTK 2.22.0 released: http://ur1.ca/1sc2n Note that new and existing PyGtk applications are recommended to use PyGObject|1285596826|0||0|0
+199|GTK+ and friends|GTKtoolkit|GTK+ 2.22.0 ( STABLE ) released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00263.html #gtk|1285286958|0||2|5
+200|GTK+ and friends|GTKtoolkit|Last call for the people interested in attending the #GTK+ hackfest in A Coruña: Please sign up at latest tomorrow! http://ur1.ca/1r2gt|1285255897|0||0|2
+201|GTK+ and friends|GTKtoolkit|#GLib status update: GLib 2.25.17 and 2.27.0 released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00232.html #gtk|1285245997|0||0|0
+202|GTK+ and friends|GTKtoolkit|Thoughts about #GtkTreeView refactoring: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00260.html #gtk|1285245546|0||0|1
+203|GTK+ and friends|GTKtoolkit|GTK+ 2.21.8 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00204.html #gtk|1284485086|0||0|0
+204|GTK+ and friends|GTKtoolkit|New GObject API added: g_object_class_install_properties(), an efficient way to install properties: http://ur1.ca/1mh3s #gobject #glib #gtk|1284484816|0||0|0
+205|GTK+ and friends|GTKtoolkit|legacy-free grid container proposed by @havocp: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00089.html #gtk|1283965732|0||0|1
+206|GTK+ and friends|GTKtoolkit|Minutes of the #GTK team meeting - 2010-09-07: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00115.html|1283965715|0||0|0
+207|GTK+ and friends|GTKtoolkit|New work to get #DirectFB backend in a good state, thanks Lionel Landwerlin! #gtk http://ur1.ca/1k0hx|1283965546|0||0|0
+208|GTK+ and friends|GTKtoolkit|GTK+ 2.21.7 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00291.html #gtk|1283198533|0||0|0
+209|GTK+ and friends|GTKtoolkit|GObject Introspection status: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00254.html #gtk #glib|1282939837|0||1|2
+210|GTK+ and friends|GTKtoolkit|GDateTime, the new time & date API just landed in Glib: https://bugzilla.gnome.org/show_bug.cgi?id=50076#c85 #gtk #glib|1282699797|0||0|1
+211|GTK+ and friends|GTKtoolkit|CSS-like styling for #GTK+ thanks to Carlos Garnacho: http://blogs.gnome.org/carlosg/2010/08/23/css-like-styling-for-gtk/ #gtk|1282602303|0||0|3
+212|GTK+ and friends|GTKtoolkit|RT @migueldeicaza: Gtk+ getting cascading stylesheets: http://blogs.gnome.org/carlosg/2010/08/23/css-like-styling-for-gtk/|1282594548|0||0|1
+213|andreasn1|andreasn1|RT @andreasn1: ♺ @hbons: thanks to gtk+ maintainer mclasen we can now ditch icon-naming-utils :)|1282356193|0|GTKtoolkit|0|2
+214|GTK+ and friends|GTKtoolkit|GTK+ schedule: glib 2.26 and #gtk+ 2.22 for #GNOME 2.32 (Sep'10). glib 2.28, gtk+ 2.24 and gtk+ 3.0 for Dec'10 http://ur1.ca/16o49|1282256544|0||0|0
+215|GTK+ and friends|GTKtoolkit|@thomasvs I saw someone with an N900 in my lift yesterday, had the same thought|1282217985|0||0|0
+216|Simón P.|spenap|RT @spenap: GObject Introspection has landed in Grilo! http://bit.ly/9f4DAa #mswl #igalia #pygobject #gobject-introspection|1282166595|0|GTKtoolkit|0|4
+217|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ Team Meeting - 2010-08-17: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00155.html #gtk|1282094165|0||0|0
+218|GTK+ and friends|GTKtoolkit|GTK+ 2.90.6 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00146.html #gtk|1282061092|0||0|0
+219|Emmanuele Bassi|ebassi|RT @ebassi: http://bit.ly/9gabxR - @cluttertoolkit + gobject-introspection + pygobject. say goodbye to pyclutter!|1282043493|0|GTKtoolkit|0|3
+220|GTK+ and friends|GTKtoolkit|GTK+ 2.21.6 (unstable) Relased: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00127.html #gtk|1282006494|0||0|0
+221|Stormy|storming|RT @storming: Novell is looking for a GNOME developer to work on SUSE Linux. http://linkd.in/bEAUUj|1282001084|0|GTKtoolkit|0|19
+222|Tommi Komulainen|tko|RT @tko: I want my libglib-gslist.so and libglib-glist.so .. and some popcorn. maybe just popcorn|1282000936|0|GTKtoolkit|0|1
+223|GTK+ and friends|GTKtoolkit|GLib 2.25.14 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00123.html #gtk|1282000398|0||0|0
+224|Emmanuele Bassi|ebassi|RT @ebassi: I'm pretty pleased with the API that landed in json-glib for 0.12|1281810990|0|GTKtoolkit|0|1
+225|GTK+ and friends|GTKtoolkit|The @ebassi implementation to support common licenses in about dialog has been added to #GTK: http://ur1.ca/11u5a|1281436699|0||0|0
+226|GTK+ and friends|GTKtoolkit|Web inspector support lands in #WebKitGtk+ check the screencast demo http://blog.kov.eti.br/?p=118|1281376660|0||1|0
+227|GTK+ and friends|GTKtoolkit|#GTK+ #Python developers are recommended to use the\nGObject-Introspection features available in PyGObject. http://live.gnome.org/PyGObject|1281362391|0||0|0
+228|GTK+ and friends|GTKtoolkit|PyGTK 2.21.0 (unstable) released: http://ur1.ca/11gse . 2.22 will be the last release in the PyGTK series.|1281362089|0||0|0
+229|GTK+ and friends|GTKtoolkit|#GTK+ Hackfest, October 18-22, A Coruña, Spain. http://ur1.ca/11f6u . Add yourself if you are interested in attending http://ur1.ca/11f6v|1281350218|0||0|4
+230|GTK+ and friends|GTKtoolkit|Benjamin Otte's proposal for GTK+ drawing API: gtk_widget_draw(): http://ur1.ca/11f5m #gtk|1281350013|0||2|0
+231|GTK+ and friends|GTKtoolkit|Some drawing APIs have been deprecated in GTK+ 2.22. Start porting your drawing to Cairo! http://ur1.ca/11f4t|1281349855|0||0|0
+232|GTK+ and friends|GTKtoolkit|GLib 2.24.2 (stable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00057.html #gtk|1281349547|0||0|0
+233|GTK+ and friends|GTKtoolkit|glib (unstable) 2.25.13 released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00052.html #gtk|1281201884|0||0|0
+234|GTK+ and friends|GTKtoolkit|glib 2.25.12 is here! http://mail.gnome.org/archives/gtk-devel-list/2010-July/msg00052.html There have been many API changes in GDBus.|1280601329|0||0|0
+235|Chema Casanova|txenoo|RT @txenoo: Dispoñible a foto de grupo de #guadeces2010 http://www.flickr.com/photos/davizin/4822344878/ gracias a David Cabrero|1280002637|0|GTKtoolkit|0|2
+236|Andrea Cimitan|cimi|RT @cimi: Gtk+ 3.0 theming engines... let's start the discussion :)|1279678340|0|GTKtoolkit|0|1
+237|Alberto Ruiz|acruiz|RT @acruiz: Marker support in GtkScrollbar http://bit.ly/cKUTeW|1279580539|0|GTKtoolkit|0|2
+238|GTK+ and friends|GTKtoolkit|RT @ebassi: today I moved #clutter-gtk to depend on #gtk3; tomorrow w I'll fix the double-events bug; on wednesday I'll rework the API|1279561116|0||0|0
+239|Sandy Armstrong|sandyarmstrong|RT @sandyarmstrong: @awafaa gconf is obsolete, fool|1279301600|0|GTKtoolkit|0|1
+240|Jonh Wendell|jwendell|RT @jwendell: #vinagre ported to GtkApplication :) !gtk|1279228583|0|GTKtoolkit|0|1
+241|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: #clutter 1.3.8 is the first snapshot with cally, the accessibility library for clutter apps and toolkits|1278972910|0|GTKtoolkit|0|4
+242|GTK+ and friends|GTKtoolkit|GTK+ 2.90.5 released: http://mail.gnome.org/archives/gtk-devel-list/2010-July/msg00021.html #gtk|1278952963|0||0|0
+243|GTK+ and friends|GTKtoolkit|Glib 2.25.11 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-July/msg00019.html #gtk|1278952925|0||0|0
+244|Johan Dahlin|johandahlin|RT @johandahlin: New blog post: Using LLVM to speed up function invocation in a dynamic language binding http://bit.ly/dA6IjH|1278620689|0|GTKtoolkit|0|4
+245|GTK+ and friends|GTKtoolkit|GTK+ bindings for #Falcon announced: http://mail.gnome.org/archives/gtk-list/2010-June/msg00183.html #gtk|1278000421|0||0|0
+246|GTK+ and friends|GTKtoolkit|#GSettings / #dconf is ready: http://mail.gnome.org/archives/desktop-devel-list/2010-June/msg00226.html . Please port your modules! #gtk|1277909398|0||0|1
+247|GTK+ and friends|GTKtoolkit|More work in height-for-width layout system for GTK+ : http://blogs.gnome.org/tvb/2010/06/30/gtk-learns-height-for-width-episode-ii/ #gtk|1277909313|0||0|0
+248|GTK+ and friends|GTKtoolkit|GLib 2.25.10 (unstable) released: http://ur1.ca/0ee7o WARNING: There have been API changes in GDBus. #gtk|1277685452|0||0|1
+249|GTK+ and friends|GTKtoolkit|gdk-pixbuf is now a standalone package: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00172.html #gtk|1277685365|0||0|1
+250|GTK+ and friends|GTKtoolkit|GTK+ 2.90.4 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00182.html #gtk|1277685274|0||0|0
+251|GTK+ and friends|GTKtoolkit|GTK+ 2.21.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00183.html #gtk|1277685237|0||0|0
+252|GTK+ and friends|GTKtoolkit|We are open to fix API that make the life of #bindings harder but only by addition+rename, or addition+deprecation. File bugs, please #gtk|1277312749|0||0|0
+253|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-06-22: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00155.html #gtk|1277312445|0||0|0
+254|GTK+ and friends|GTKtoolkit|GTK+ team IRC meeting 2010-06-22. In #gtk-devel on irc.gnome.org at 20:00 UTC. Agenda: http://ur1.ca/q6jh #gtk|1277226823|0||0|0
+255|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: the new #clutter website is now live: http://www.clutter-project.org|1276948072|0|GTKtoolkit|0|5
+256|GTK+ and friends|GTKtoolkit|Proposed #GNOME goal: Port your #PyGTK to the new #PyGI bindings http://bit.ly/cvfzO8|1276941335|0||1|2
+257|Christian Hergert|hergertme|RT @vwduder: im sad because @ebassi doesn't like my in/out param comments :-)|1276904611|0|GTKtoolkit|0|1
+258|Guillaume Mazoyer|gmazoyer|RT @gmazoyer: ♺ @GTKtoolkit: #java bindings version 4.0.16 released: http://article.gmane.org/gmane.comp.gnome.bindings.java/1796 #gtk|1276889421|0|GTKtoolkit|0|1
+259|GTK+ and friends|GTKtoolkit|#java bindings version 4.0.16 released: http://article.gmane.org/gmane.comp.gnome.bindings.java/1796 #gtk|1276885917|0||0|0
+260|GTK+ and friends|GTKtoolkit|RT @cwiiis: MxIconTheme and MxIcon respect system's icon theme (and changes) now in #mx master :) Made possible by @thosw's XSettings work|1276883019|0||0|0
+261|GTK+ and friends|GTKtoolkit|#javascript mailing list just created. Discuss its usage in GObject libraries: GTK+, Glib ... http://ur1.ca/08lwz by @jwendell #gtk|1276842639|0||0|0
+262|GTK+ and friends|GTKtoolkit|Note fot Win32 users: XP theming is back in 2.90.3 . Please test. #gtk|1276829697|0||0|0
+263|GTK+ and friends|GTKtoolkit|GTK+ 2.90.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00137.html #gtk|1276829633|0||0|0
+264|GTK+ and friends|GTKtoolkit|GLib 2.25.9 (unstable) released: http://ur1.ca/08hrl WARNING: API changes in GDBus, GSettings and GApplication #gtk|1276829581|0||0|0
+265|scaroo|scaroo|RT @scaroo: #SeedKit does RGBA window with css shadows and stuff : http://dl.dropbox.com/u/5746554/seedkit-does-rgba.png|1276734086|0|GTKtoolkit|0|1
+266|scaroo|scaroo|RT @scaroo: Great #SeedKit showcase from @cldx3000 : http://bit.ly/cRDosJ :D|1276734071|0|GTKtoolkit|0|1
+267|Lluis Sanchez Gual|slluis|RT @slluis: MonoDevelop 2.4 released! http://monodevelop.com/Download/MonoDevelop_2.4_Released|1276699438|0|GTKtoolkit|0|35
+268|GTK+ and friends|GTKtoolkit|RT @bertogg: GNOME Developer Training at GUADEC, with Claudio Saavedra, Fernando Herrera, Dave Neary and me: http://is.gd/cPkpJ|1276687240|0||0|0
+269|SparkleShare|SparkleShare|RT @sparkleshare: Let's start sparkling!|1276619215|0|GTKtoolkit|0|7
+270|Haakon Sporsheim|haaspors|RT @haakonsporsheim: I built my first app for #android today using jni and #glib :P Sweet :)|1276472258|0|GTKtoolkit|0|4
+271|GTK+ and friends|GTKtoolkit|Converting libraries and plugins to use GTK+3: http://mail.gnome.org/archives/desktop-devel-list/2010-June/msg00142.html #gtk|1276390360|0||1|0
+272|GTK+ and friends|GTKtoolkit|Call to GNOME maintainers: #GNOME 2.31.4 to ship GTK+ 2.90: http://bit.ly/bnuk3e #gtk|1276390311|0||0|0
+273|GTK+ and friends|GTKtoolkit|API changes in GLib master: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00079.html #gtk|1276390197|0||1|0
+274|GTK+ and friends|GTKtoolkit|GLib 2.25.8 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00036.html #gtk|1276390151|0||0|0
+275|Johan Dahlin|johandahlin|RT @johandahlin: is adding introspection support for GstMiniObject and other weird instantitiable GTypes. Still left: gjs/pygi support.|1276384704|0|GTKtoolkit|0|3
+276|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: So, yes: we dropped the copyright waiver on Clutter and Cogl. Contributions welcome!|1276281694|0|GTKtoolkit|0|12
+277|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm (C++ GTK+ bindings) 2.90 (unstable) released: http://ur1.ca/06nhn #gtk|1276182909|0||0|0
+278|Juanje Ojeda |juanjeojeda|RT @juanjeojeda: Progress on Gtk+ multitouch support: http://bit.ly/amIUiL #gtk #multitouch /via @garnacho|1276158728|0|GTKtoolkit|0|2
+279|GTK+ and friends|GTKtoolkit|GTK+ 2.90.2 (unstable) released: http://ur1.ca/06k6o Feedback about GtkApplication apreciated #gtk|1276141907|0||0|0
+280|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-06-08: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00044.html #gtk|1276040191|0||0|0
+281|GTK+ and friends|GTKtoolkit|RT @bratschegnome: @federicomena http://mzl.la/9PoFhD is nice I used to have CSD whr you can drag gtk+ from anywr in a window|1276038852|0||0|0
+282|GTK+ and friends|GTKtoolkit|GTK+ team IRC meeting 2010-06-08.In #gtk-devel on irc.gnome.org at 20:00 UTC.Agenda: http://ur1.ca/q6jh Everyone is invited to attend|1276010278|0||0|0
+283|GTK+ and friends|GTKtoolkit|ANNOUNCE: glibmm (C++ Glib bindings) 2.25.1 (unstable) released: http://ur1.ca/067ff #gtk|1276007921|0||0|0
+284|GTK+ and friends|GTKtoolkit|GLib 2.25.8 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00036.html #gtk|1276003038|0||0|1
+285|GTK+ and friends|GTKtoolkit|New version of #pygi (the new #python bindings based in #GObjectIntrospection) released: http://ur1.ca/0623c|1275945620|0||0|3
+286|GTK+ and friends|GTKtoolkit|RT @ebassi: aaaand GBinding (a libexo-like binding between object properties) is mostly done: http://ur1.ca/05fz1 #gtk #glib|1275653238|0||1|0
+287|GTK+ and friends|GTKtoolkit|RT @ebassi: plus, I have a GIO branch with GController and friends|1275653044|0||0|0
+288|GTK+ and friends|GTKtoolkit|RT @ebassi submitted my patch for creating a GObjectController and get bulk notification #gtk|1275653008|0||0|0
+289|GTK+ and friends|GTKtoolkit|GTK+ 2.21.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00157.html #gtk|1275271768|0||0|0
+290|GTK+ and friends|GTKtoolkit|#dtrace and #systemtap support added to #Glib. Enjoy! https://bugzilla.gnome.org/show_bug.cgi?id=606044 #gtk|1275056183|0||0|2
+291|GTK+ and friends|GTKtoolkit|GTK+ 2.90.1 (unstable) released: http://ur1.ca/03hbv . Multiple input device support, flippable widgets and more ...|1274845319|0||1|0
+292|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-05-25: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00147.html #gtk #meeting|1274826674|0||0|0
+293|GTK+ and friends|GTKtoolkit|[REMINDER] GTK+ team IRC meeting 2010-05-25 at 20:00 UTC. Join us in #gtk-devel on irc.gnome.org. Agenda: http://ur1.ca/q6jh #gtk #meeting|1274801128|0||0|1
+294|GTK+ and friends|GTKtoolkit|Gtk2Hs 0.11.0 (Haskell bindings) released: http://haskell.org/gtk2hs/archives/2010/05/25/gtk2hs-0110-released/ #gtk #haskell|1274800929|0||0|0
+295|GTK+ and friends|GTKtoolkit|dconf 0.3.1 released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00145.html #gtk|1274800819|0||0|0
+296|GTK+ and friends|GTKtoolkit|GLib 2.25.7 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00144.html #gtk|1274800611|0||0|0
+297|GTK+ and friends|GTKtoolkit|XI2 @garnacho 's branch ready for review (xi2-for-master): http://mail.gnome.org/archives/gtk-devel-list/2010-May/thread.html #gtk|1274472793|0||0|0
+298|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtk-doc 1.15 released: http://mail.gnome.org/archives/gtk-doc-list/2010-May/msg00000.html #gtk|1274446357|0||0|0
+299|GTK+ and friends|GTKtoolkit|Ryan Lortie (@desrt) just released #dconf 0.3: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00128.html #gtk|1274311034|0||0|0
+300|GTK+ and friends|GTKtoolkit|GLib 2.25.6 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00127.html #gtk|1274310863|0||0|0
+301|GTK+ and friends|GTKtoolkit|GLib 2.25.6 (unstable) released:|1274310818|0||0|0
+302|GTK+ and friends|GTKtoolkit|GLib 2.25.5 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00078.html #gtk|1273891783|0||0|0
+303|GTK+ and friends|GTKtoolkit|Glade 3.7.1 released with lot of improvements: http://ur1.ca/011bc Thanks to #Openismus who helped sponsor this release #gtk|1273885948|0||0|0
+304|GTK+ and friends|GTKtoolkit|GDBus merged in Glib master http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00066.html #gtk|1273837079|0||0|1
+305|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-05-11 : http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00047.html #gtk|1273636581|0||0|0
+306|GTK+ and friends|GTKtoolkit|[REMINDER] GTK+ team IRC meeting - 2010-05-11 at 20:00 UTC. Join us in #gtk-devel on irc.gnome.org. Agenda: http://ur1.ca/q6jh #gtk #meeting|1273606386|0||0|0
+307|GTK+ and friends|GTKtoolkit|GTK+ 2.90.0 (unstable) released. This is the first development release leading toward 3.0. http://ur1.ca/006p2 #gtk #gtk3|1273553873|0||0|5
+308|GTK+ and friends|GTKtoolkit|Changes in GTK+ master that affect third parties: http://mail.gnome.org/archives/devel-announce-list/2010-May/msg00001.html #gtk #gtk3|1273531549|0||0|0
+309|GTK+ and friends|GTKtoolkit|Have dark themes is more easy now thanks to Bastian Nocera work: http://bit.ly/dBJzgn #gtk|1273531264|0||0|2
+310|GTK+ and friends|GTKtoolkit|GTK+ 2.21.0 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00026.html #gtk|1273285878|0||0|0
+311|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ IRC team meeting - 2010-05-04: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00010.html #gtk|1273024620|0||0|0
+312|GTK+ and friends|GTKtoolkit|GTK+ 2.20.1 (stable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00004.html #gtk|1272983158|0||0|0
+313|GTK+ and friends|GTKtoolkit|GLib 2.24.1 (stable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00005.html #gtk|1272983138|0||0|0
+314|GTK+ and friends|GTKtoolkit|Next GTK+ team meeting: 2010-05-04 at 20:00 UTC. More info and agenda: http://ur1.ca/q6jh . As always, everyone is invited to attend. #gtk|1272848781|0||1|0
+315|GTK+ and friends|GTKtoolkit|#Perl bindings: Gtk2 1.230 (unstable) available: http://mail.gnome.org/archives/gtk-perl-list/2010-April/msg00120.html #gtk|1272341271|0||0|0
+316|Emmanuele Bassi|ebassi|RT @ebassi: for the first time in ages I was able to work a bit on #gtkperl and add missing 2.16 and 2.18 wrappers|1272139155|0|GTKtoolkit|0|1
+317|GTK+ and friends|GTKtoolkit|GLib 2.25.3 (unstable) released with more #GSettings fixes: http://mail.gnome.org/archives/gtk-devel-list/2010-April/msg00090.html #gtk|1272118354|0||0|1
+318|GTK+ and friends|GTKtoolkit|GLib 2.25.2 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-April/msg00079.html|1272028911|0||0|0
+319|GTK+ and friends|GTKtoolkit|GTK+ Learns height-for-width geometry. Thanks Tristan Van Berkom and #Openismus for sponsoring him! http://ur1.ca/wiz3 #gtk|1271969484|0||1|2
+320|GTK+ and friends|GTKtoolkit|#GSettings porting guide available: http://ur1.ca/w2xl . Feedback welcomed!: http://ur1.ca/w2xn #gtk|1271777672|0||4|4
+321|GTK+ and friends|GTKtoolkit|Major change in Glib 2.25.0: #GSettings framework has been merged. This provides the API to replace #GConf.|1271715090|0||0|0
+322|GTK+ and friends|GTKtoolkit|GLib 2.25.0 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-April/msg00066.html #gtk|1271714608|0||0|1
+323|GTK+ and friends|GTKtoolkit|GSettings status update by Matthias Clasen: http://blogs.fedoraproject.org/wp/mclasen/2010/04/17/gsettings/ #gtk #gsettingshackfest|1271519572|0||0|0
+324|GTK+ and friends|GTKtoolkit|GNOME Python Hackfest: Day 1 (by John (J5) Palmieri): http://www.j5live.com/2010/04/14/gnome-python-hackfest-day-1/ #python #pythonhackfest|1271291950|0||0|1
+325|GTK+ and friends|GTKtoolkit|Colin Walters: PyGTK, PyGI and PyGTK-on-PyGI #python #pythonhackfest http://ur1.ca/v5kw|1271291792|0||0|0
+326|GTK+ and friends|GTKtoolkit|Python Hackfest started.Ttwo concrete goals: porting PyGObject to #Python 3.x and giving a push to PyGI. http://ur1.ca/v5jc|1271291075|0||0|0
+327|GTK+ and friends|GTKtoolkit|GSettings Hackfest: Day 1 (by Vincent UNTZ) http://www.vuntz.net/journal/post/2010/04/13/GSettings-Hackfest:-Day-1 #gtk|1271290824|0||0|0
+328|GTK+ and friends|GTKtoolkit|GSettings Hackfest started. Thanks to #Novell for sponsoring.Also to #RedHat, #Codethink and #Lanedo for sending people! http://ur1.ca/v5i4|1271290481|0||1|0
+329|GTK+ and friends|GTKtoolkit|Xan Lopez from #Igalia attends the WebKit Contribution Meeting at the Apple HQ in Cupertino http://bit.ly/bHCqcC|1271247431|0||0|2
+330|GTK+ and friends|GTKtoolkit|Kristian Rietveld advances the #GTK+ Quartz/Mac OS X backend http://bit.ly/cJzV2o|1271247006|0||2|0
+331|GTK+ and friends|GTKtoolkit|#Openismus sponsors Tristan Van Berkom to complete the work on #GTK+ Natural Layout http://bit.ly/9FD3JC|1271246851|0||0|1
+332|GTK+ and friends|GTKtoolkit|RT @bilboed Having trouble reading GObject or GStreamer code ? Here's a small step-by-step rundown : http://is.gd/bk7mD|1270738689|0||0|1
+333|GTK+ and friends|GTKtoolkit|Colin Walters shares his thoughts about the new #GTK+ application class and its relationship with #GNOME 3 http://bit.ly/cvcHIG|1270482931|0||0|0
+334|Lucas Rocha|lucasratmundo|RT @lucasratmundo: GNOME Shell has been officially proposed as a GNOME module: http://bit.ly/d1yKE2|1269993362|0|GTKtoolkit|0|3
+335|Johan Dahlin|johandahlin|RT @johandahlin: New blog post http://blogs.gnome.org/johan/2010/03/30/bridging-the-development-gap-between-desktop-and-web/|1269993352|0|GTKtoolkit|0|1
+336|GTK+ and friends|GTKtoolkit|New Glib STABLE release: 2.24 http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00149.html #gtk|1269892314|0||0|0
+337|GTK+ and friends|GTKtoolkit|Help the GNOME Foundation to hire a sysadmin for GNOME! http://www.gnome.org/friends|1269658993|0||0|1
+338|GTK+ and friends|GTKtoolkit|Our friends from #Openismus sponsor #Glade 3 improvements http://bit.ly/9GqLDl|1269656334|0||0|0
+339|GTK+ and friends|GTKtoolkit|♺ @johandahlin: just commited the last remaining piece for cairo support in #gjs. World domination here we come|1269646821|0||0|0
+340|FedericoMenaQuintero|federicomena|RT @federicomena: Yay, the patch for glade is done - https://bugzilla.gnome.org/show_bug.cgi?id=594231|1269616128|0|GTKtoolkit|0|1
+341|Jorge Castro|castrojo|RT @castrojo: Become a Friend of GNOME: http://wp.me/poAPi-da|1269616083|0|GTKtoolkit|0|2
+342|Johan Dahlin|johandahlin|RT @johandahlin: just commited the last remaining piece for cairo support in #gjs. World domination here we come|1269616001|0|GTKtoolkit|0|2
+343|Jono Bacon|jonobacon|RT @jonobacon: New Acire and Python Snippets website! http://is.gd/aZGnF - still a work in progress, working on it as we speak! #pythons ...|1269615964|0|GTKtoolkit|0|5
+344|GTK+ and friends|GTKtoolkit|Python Snippets: project to gather an archive of simple Python (with GTK+) examples http://ur1.ca/rru1 !gtk @jonobacon|1269555086|0||0|2
+345|GTK+ and friends|GTKtoolkit|#yorbafoundation is hiring #Vala/#Gtk+ developers and summer interns in California to create multimedia apps http://yorba.org/jobs|1269479714|0||0|1
+346|GTK+ and friends|GTKtoolkit|♺ @ploum: now that I have to use Qt and Qt documentation, I've only one word : #gtk rocks ! ( yeah for #gnome people)|1269441827|0||0|2
+347|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ Team Meeting: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00134.html #gtk|1269391167|0||0|0
+348|GTK+ and friends|GTKtoolkit|New GTK+ STABLE release: 2.20 http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00132.html #gtk|1269374138|0||1|1
+349|GTK+ and friends|GTKtoolkit|Reminder: GTK+ meeting today at 20:00 UTC. Where: #gtk-devel on irc.gnome.orgAgenda: http://live.gnome.org/GTK+/Meetings|1269358583|0||0|0
+350|GTK+ and friends|GTKtoolkit|GLib 2.23.6 (development branch) released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00131.html #gtk|1269264623|0||0|0
+351|GNOME|gnome|RT @gnome: RT @rubenv GNOME was accepted for Google Summer of Code 2010! Looking for an IT student job that earns a lot? http://bit.ly/c ...|1269106193|0|GTKtoolkit|0|5
+352|FedericoMenaQuintero|federicomena|RT @federicomena: Untested code is broken code, even if it compiles. #yay #me|1269106077|0|GTKtoolkit|0|1
+353|Summer of Code|gsoc|RT @gsoc: Mentor organizations for #GSoC have been announced! http://bit.ly/bVMPWe|1268956782|0|GTKtoolkit|0|31
+354|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: just released clutter-gtk 0.10.4 - depending on clutter 1.2 and gtk+ 2.19|1268956726|0|GTKtoolkit|0|1
+355|GTK+ and friends|GTKtoolkit|Support for Class private data will be available in Glib 2.24: https://bugzilla.gnome.org/show_bug.cgi?id=521707|1268848373|0||0|2
+356|GTK+ and friends|GTKtoolkit|GTK+ team IRC meeting: March 23, at 20:00. http://ur1.ca/q6jg . Agenda: http://ur1.ca/q6jh #gtk|1268845861|0||0|1
+357|GTK+ and friends|GTKtoolkit|GTK+ 2.18.9 (stable branch) released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00115.html #gtk|1268844918|0||0|0
+358|GTK+ and friends|GTKtoolkit|GLib 2.22.5 released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/thread.html #gtk|1268748183|0||0|0
+359|GTK+ and friends|GTKtoolkit|GTK+ 2.18.8 released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00078.html #gtk|1268700945|0||0|0
+360|GTK+ and friends|GTKtoolkit|@chrisblizzard There's a .zip bundle indeed http://bit.ly/9ZkQCM|1268698714|0||0|0
+361|Alberto Ruiz|acruiz|RT @acruiz: libmodel and GTK+ from Codethink Labs! http://aruiz.synaptia.net/siliconisland/2010/03/libmodel-and-gtk-from-codethink-labs.html|1268698629|0|GTKtoolkit|0|3
+362|GTK+ and friends|GTKtoolkit|New version of the User Interface Designer #Glade released: 3.7.0 http://ur1.ca/phww #gtk|1268458482|0||0|0
+363|GTK+ and friends|GTKtoolkit|GTK+ 2.19.7 released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00044.html #gtk|1268174602|0||0|0
+364|GTK+ and friends|GTKtoolkit|#GTK + future idea: automatic composite widgets using #GtkBuilder under the hood http://ur1.ca/oxly|1268157762|0||0|0
+365|GTK+ and friends|GTKtoolkit|GLib 2.23.5 is released, congrats to @desrt for his first release http://bit.ly/a3th6S|1268070995|0||0|1
+366|GTK+ and friends|GTKtoolkit|The first #PyGTK hackfest ever has been announced, 3.0 and Introspection are the major themes http://bit.ly/9Bd31g|1267875279|0||1|1
+367|GTK+ and friends|GTKtoolkit|Kristian Rietveld gives an update of the GTK+/Quartz MacOSX native port http://bit.ly/cZ84VN|1267832356|0||2|0
+368|Jono Bacon|jonobacon|RT @jonobacon: Merged in more python-snippets: desktop widget, drag and open in PyGTK, GStreamer video playback, and a bunch of fixes! h ...|1267831925|0|GTKtoolkit|0|3
+369|GTK+ and friends|GTKtoolkit|#Openismus is looking for C/C++ GTK+/Qt trainees http://bit.ly/c16WEp|1267831840|0||0|0
+370|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: clutter 1.2.0 - first stable release, with lots of new API - http://bit.ly/ckdS6R|1267561885|0|GTKtoolkit|0|9
+371|GTK+ and friends|GTKtoolkit|#Lanedo is hiring GTK+/GNOME hackers! http://bit.ly/d6fTWQ|1267560392|0||0|1
+372|GTK+ and friends|GTKtoolkit|You can help to make a difference too, help the #GTK+ maintainers to improve the documetnation infrastructure! http://bit.ly/dmJifE|1267538283|0||0|1
+373|GTK+ and friends|GTKtoolkit|Designers bring back excitement around the #GNOME project http://bit.ly/9Zcx8c|1267202696|0||0|1
+374|GTK+ and friends|GTKtoolkit|#webkit #gtk gets ARGB support, allowing it to set a transparent background! http://bit.ly/cBeouj|1267146282|0||0|2
+375|GTK+ and friends|GTKtoolkit|Follow GNOME TV on Vimeo http://is.gd/96PlT|1267050829|0||0|1
+376|GTK+ and friends|GTKtoolkit|Extensive article on the state of #WebKitGtk http://is.gd/95En2|1267031517|0||0|0
+377|GTK+ and friends|GTKtoolkit|@ploum Are you hitting !PyGTK or !GTK+ bugs? Are they already reported upstream?|1267029810|0||0|0
+378|GTK+ and friends|GTKtoolkit|#GNUStep gets #GTK+ theming http://is.gd/95vHl more at http://is.gd/95wt8|1267029498|0||0|1
+379|GTK+ and friends|GTKtoolkit|GTK+ 2.19.6 released: http://mail.gnome.org/archives/gtk-devel-list/2010-February/msg00050.html #gtk|1266966985|0||0|0
+380|GTK+ and friends|GTKtoolkit|Did you know that #GTK+ is the official toolkit for the #LiMo software stack? http://bit.ly/cuEdHx|1266925406|0||0|0
+381|GTK+ and friends|GTKtoolkit|@lmedinas publishes a #javascript #example on how to put an status icon with #Gtk+ http://bit.ly/9py1uC Thanks a lot Luis!|1266886644|0||1|1
+382|GTK+ and friends|GTKtoolkit|♺ @ebassi: I should really finish up the GDom API as well|1266880653|0||0|0
+383|GTK+ and friends|GTKtoolkit|♺ @ebassi: I hope to work on this for the next GIO release, and the GTK+ side for 3.0|1266880641|0||0|0
+384|GTK+ and friends|GTKtoolkit|♺ @ebassi: just updated the ApplicationClass design wiki page with the stuff @Cwiiis did for Mx - http://bit.ly/cfAOJk|1266880559|0||0|0
+385|GTK+ and friends|GTKtoolkit|#GTK+ Kick Start tutorial for #Vala http://www.vimeo.com/9617309 OGG: http://bit.ly/czegmp|1266874471|0||0|1
+386|GTK+ and friends|GTKtoolkit|@migheldeicaza shows off #monodevelop on #macosx deploying and debugging #gtk sharp apps on a #MeeGo device http://bit.ly/9XR0Pg|1266874171|0||1|1
+387|GTK+ and friends|GTKtoolkit|#GTK+ is the first toolkit to expose the #Xorg multitouch stack through #XI2 http://bit.ly/9tniKu - Nice work @garnacho!|1266863259|0||0|1
+388|GTK+ and friends|GTKtoolkit|This is the official GTK+ first micropost!|1266856657|0||0|1
diff --git a/gtk3/sample/gtk-demo/modelbutton.ui b/gtk3/sample/gtk-demo/modelbutton.ui
new file mode 100644
index 0000000..a5a7255
--- /dev/null
+++ b/gtk3/sample/gtk-demo/modelbutton.ui
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.6 -->
+  <object class="GtkWindow" id="window1">
+    <child type="titlebar">
+      <object class="GtkHeaderBar">
+        <property name="visible">1</property>
+        <property name="show-close-button">1</property>
+        <property name="title" translatable="yes">Model Button</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">1</property>
+        <property name="orientation">vertical</property>
+        <property name="margin">80</property>
+        <child>
+          <object class="GtkMenuButton">
+            <property name="visible">1</property>
+            <property name="popover">thing_a</property>
+            <child>
+              <object class="GtkLabel">
+                <property name="visible">1</property>
+                <property name="label">Color</property>
+                <property name="hexpand">1</property>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkMenuButton">
+            <property name="visible">1</property>
+            <property name="popover">thing_b</property>
+            <child>
+              <object class="GtkLabel">
+                <property name="visible">1</property>
+                <property name="label">Flavors</property>
+                <property name="hexpand">1</property>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkMenuButton">
+            <property name="visible">1</property>
+            <property name="popover">thing_c</property>
+            <child>
+              <object class="GtkLabel">
+                <property name="visible">1</property>
+                <property name="label">Tools</property>
+                <property name="hexpand">1</property>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkPopover" id="thing_a">
+    <child>
+      <object class="GtkBox">
+        <property name="visible">1</property>
+        <property name="margin">10</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkModelButton">
+            <property name="visible">1</property>
+            <property name="action-name">win.color</property>
+            <property name="text">Red</property>
+            <property name="inverted">1</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkModelButton">
+            <property name="visible">1</property>
+            <property name="action-name">win.color</property>
+            <property name="text">Green</property>
+            <property name="inverted">1</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkModelButton">
+            <property name="visible">1</property>
+            <property name="action-name">win.color</property>
+            <property name="text">Blue</property>
+            <property name="inverted">1</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkPopover" id="thing_b">
+    <child>
+      <object class="GtkBox">
+        <property name="visible">1</property>
+        <property name="margin">10</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">10</property>
+        <child>
+          <object class="GtkModelButton">
+            <property name="visible">1</property>
+            <property name="action-name">win.chocolate</property>
+            <property name="text">Chocolate</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkModelButton">
+            <property name="visible">1</property>
+            <property name="action-name">win.vanilla</property>
+            <property name="text">Vanilla</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkSeparator">
+            <property name="visible">1</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkModelButton">
+            <property name="visible">1</property>
+            <property name="action-name">win.sprinkles</property>
+            <property name="text">Add Sprinkles</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+  <object class="GtkPopover" id="thing_c">
+    <child>
+      <object class="GtkBox">
+        <property name="visible">1</property>
+        <property name="margin">10</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">10</property>
+        <child>
+          <object class="GtkModelButton">
+            <property name="visible">1</property>
+            <property name="text">Hammer</property>
+            <property name="role">check</property>
+            <signal name="clicked" handler="tool_clicked"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkModelButton">
+            <property name="visible">1</property>
+            <property name="text">Screwdriver</property>
+            <property name="role">check</property>
+            <signal name="clicked" handler="tool_clicked"/>
+          </object>
+        </child>
+        <child>
+          <object class="GtkModelButton">
+            <property name="visible">1</property>
+            <property name="text">Drill</property>
+            <property name="role">check</property>
+            <signal name="clicked" handler="tool_clicked"/>
+          </object>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gtk3/sample/gtk-demo/move_cursor.png b/gtk3/sample/gtk-demo/move_cursor.png
new file mode 100644
index 0000000..6028099
Binary files /dev/null and b/gtk3/sample/gtk-demo/move_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/n_resize_cursor.png b/gtk3/sample/gtk-demo/n_resize_cursor.png
new file mode 100644
index 0000000..fbd8420
Binary files /dev/null and b/gtk3/sample/gtk-demo/n_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/ne_resize_cursor.png b/gtk3/sample/gtk-demo/ne_resize_cursor.png
new file mode 100644
index 0000000..0ca3f6e
Binary files /dev/null and b/gtk3/sample/gtk-demo/ne_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/nesw_resize_cursor.png b/gtk3/sample/gtk-demo/nesw_resize_cursor.png
new file mode 100644
index 0000000..aa3bf68
Binary files /dev/null and b/gtk3/sample/gtk-demo/nesw_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/no_drop_cursor.png b/gtk3/sample/gtk-demo/no_drop_cursor.png
new file mode 100644
index 0000000..4f9968f
Binary files /dev/null and b/gtk3/sample/gtk-demo/no_drop_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/none_cursor.png b/gtk3/sample/gtk-demo/none_cursor.png
new file mode 100644
index 0000000..ad0dae1
Binary files /dev/null and b/gtk3/sample/gtk-demo/none_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/not_allowed_cursor.png b/gtk3/sample/gtk-demo/not_allowed_cursor.png
new file mode 100644
index 0000000..1305af8
Binary files /dev/null and b/gtk3/sample/gtk-demo/not_allowed_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/ns_resize_cursor.png b/gtk3/sample/gtk-demo/ns_resize_cursor.png
new file mode 100644
index 0000000..acb1283
Binary files /dev/null and b/gtk3/sample/gtk-demo/ns_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/nw_resize_cursor.png b/gtk3/sample/gtk-demo/nw_resize_cursor.png
new file mode 100644
index 0000000..6691557
Binary files /dev/null and b/gtk3/sample/gtk-demo/nw_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/nwse_resize_cursor.png b/gtk3/sample/gtk-demo/nwse_resize_cursor.png
new file mode 100644
index 0000000..183001d
Binary files /dev/null and b/gtk3/sample/gtk-demo/nwse_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/org.gtk.Demo.gschema.xml b/gtk3/sample/gtk-demo/org.gtk.Demo.gschema.xml
new file mode 100644
index 0000000..33e12aa
--- /dev/null
+++ b/gtk3/sample/gtk-demo/org.gtk.Demo.gschema.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<schemalist>
+
+  <enum id='org.gtk.Demo.Color'>
+    <value nick='red'   value='0'/>
+    <value nick='green' value='1'/>
+    <value nick='blue'  value='2'/>
+  </enum>
+
+  <schema id='org.gtk.Demo' path='/org/gtk/Demo/'>
+    <key name='color' enum='org.gtk.Demo.Color'>
+      <default>'red'</default>
+    </key>
+  </schema>
+
+</schemalist>
diff --git a/gtk3/sample/gtk-demo/pointer_cursor.png b/gtk3/sample/gtk-demo/pointer_cursor.png
new file mode 100644
index 0000000..b510203
Binary files /dev/null and b/gtk3/sample/gtk-demo/pointer_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/popover.ui b/gtk3/sample/gtk-demo/popover.ui
new file mode 100644
index 0000000..9042790
--- /dev/null
+++ b/gtk3/sample/gtk-demo/popover.ui
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.0 on Wed Nov 13 16:45:55 2013 -->
+<interface>
+  <!-- interface-requires gtk+ 3.10 -->
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <!-- column-name Name -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">Item 1</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Item 2</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Item 3</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Item 4</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Item 5</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Item 6</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Item 7</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Item 8</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Item 9</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Item 10</col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkWindow" id="window">
+    <child>
+      <object class="GtkBox" id="box">
+        <property name="visible">1</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">6</property>
+        <child>
+          <object class="GtkEntry" id="entry1">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="primary_icon_name">edit-find</property>
+            <property name="secondary_icon_name">edit-clear</property>
+          </object>
+        </child>
+        <child>
+          <object class="GtkScrolledWindow" id="scrolledwindow1">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <object class="GtkTreeView" id="treeview1">
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
+                <property name="vexpand">1</property>
+                <property name="model">liststore1</property>
+                <property name="headers_visible">0</property>
+                <property name="enable_search">0</property>
+                <property name="search_column">2</property>
+                <child internal-child="selection">
+                  <object class="GtkTreeSelection" id="treeview-selection1"/>
+                </child>
+                <child>
+                  <object class="GtkTreeViewColumn" id="column1">
+                    <child>
+                      <object class="GtkCellRendererText" id="cellrenderer1"/>
+                      <attributes>
+                        <attribute name="text">0</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gtk3/sample/gtk-demo/progress_cursor.png b/gtk3/sample/gtk-demo/progress_cursor.png
new file mode 100644
index 0000000..7afe983
Binary files /dev/null and b/gtk3/sample/gtk-demo/progress_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/reset.css b/gtk3/sample/gtk-demo/reset.css
index 117563a..1c27a8e 100644
--- a/gtk3/sample/gtk-demo/reset.css
+++ b/gtk3/sample/gtk-demo/reset.css
@@ -66,4 +66,3 @@
   -GtkWidget-focus-padding: 0;
   -GtkNotebook-initial-gap: 0;
 }
-
diff --git a/gtk3/sample/gtk-demo/revealer.ui b/gtk3/sample/gtk-demo/revealer.ui
new file mode 100644
index 0000000..0265ab3
--- /dev/null
+++ b/gtk3/sample/gtk-demo/revealer.ui
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.6 -->
+  <object class="GtkWindow" id="window">
+    <property name="border_width">5</property>
+    <property name="default_width">300</property>
+    <property name="default_height">300</property>
+    <property name="title">Revealer</property>
+    <child>
+      <object class="GtkGrid">
+        <property name="visible">1</property>
+        <property name="halign">center</property>
+        <property name="valign">center</property>
+        <child>
+          <object class="GtkRevealer" id="revealer0">
+            <property name="visible">1</property>
+            <property name="transition-duration">2000</property>
+            <property name="transition-type">crossfade</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">1</property>
+                <property name="icon-name">face-cool-symbolic</property>
+                <property name="icon-size">6</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left-attach">2</property>
+            <property name="top-attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="revealer1">
+            <property name="visible">1</property>
+            <property name="transition-duration">2000</property>
+            <property name="transition-type">slide-up</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">1</property>
+                <property name="icon-name">face-cool-symbolic</property>
+                <property name="icon-size">6</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left-attach">2</property>
+            <property name="top-attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="revealer2">
+            <property name="visible">1</property>
+            <property name="transition-duration">2000</property>
+            <property name="transition-type">slide-right</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">1</property>
+                <property name="icon-name">face-cool-symbolic</property>
+                <property name="icon-size">6</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left-attach">3</property>
+            <property name="top-attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="revealer3">
+            <property name="visible">1</property>
+            <property name="transition-duration">2000</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">1</property>
+                <property name="icon-name">face-cool-symbolic</property>
+                <property name="icon-size">6</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left-attach">2</property>
+            <property name="top-attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="revealer4">
+            <property name="visible">1</property>
+            <property name="transition-duration">2000</property>
+            <property name="transition-type">slide-left</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">1</property>
+                <property name="icon-name">face-cool-symbolic</property>
+                <property name="icon-size">6</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left-attach">1</property>
+            <property name="top-attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="revealer5">
+            <property name="visible">1</property>
+            <property name="transition-duration">2000</property>
+            <property name="transition-type">slide-up</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">1</property>
+                <property name="icon-name">face-cool-symbolic</property>
+                <property name="icon-size">6</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left-attach">2</property>
+            <property name="top-attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="revealer6">
+            <property name="visible">1</property>
+            <property name="transition-duration">2000</property>
+            <property name="transition-type">slide-right</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">1</property>
+                <property name="icon-name">face-cool-symbolic</property>
+                <property name="icon-size">6</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left-attach">4</property>
+            <property name="top-attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="revealer7">
+            <property name="visible">1</property>
+            <property name="transition-duration">2000</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">1</property>
+                <property name="icon-name">face-cool-symbolic</property>
+                <property name="icon-size">6</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left-attach">2</property>
+            <property name="top-attach">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRevealer" id="revealer8">
+            <property name="visible">1</property>
+            <property name="transition-duration">2000</property>
+            <property name="transition-type">slide-left</property>
+            <child>
+              <object class="GtkImage">
+                <property name="visible">1</property>
+                <property name="icon-name">face-cool-symbolic</property>
+                <property name="icon-size">6</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="left-attach">0</property>
+            <property name="top-attach">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gtk3/sample/gtk-demo/row_resize_cursor.png b/gtk3/sample/gtk-demo/row_resize_cursor.png
new file mode 100644
index 0000000..acb1283
Binary files /dev/null and b/gtk3/sample/gtk-demo/row_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/s_resize_cursor.png b/gtk3/sample/gtk-demo/s_resize_cursor.png
new file mode 100644
index 0000000..5e6bf50
Binary files /dev/null and b/gtk3/sample/gtk-demo/s_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/scale.ui b/gtk3/sample/gtk-demo/scale.ui
new file mode 100644
index 0000000..a23d3b6
--- /dev/null
+++ b/gtk3/sample/gtk-demo/scale.ui
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.6 -->
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="upper">4</property>
+    <property name="value">2</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="upper">4</property>
+    <property name="value">2</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustment3">
+    <property name="upper">4</property>
+    <property name="value">2</property>
+  </object>
+  <object class="GtkWindow" id="window1">
+    <property name="title" translatable="yes">Scales</property>
+    <property name="border-width" translatable="yes">20</property>
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">1</property>
+        <property name="row-spacing">10</property>
+        <property name="column-spacing">10</property>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">1</property>
+            <property name="label">Plain</property>
+            <property name="xalign">0</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScale">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="width-request">200</property>
+            <property name="draw_value">0</property>
+            <property name="adjustment">adjustment1</property>
+            <property name="hexpand">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">1</property>
+            <property name="label">Marks</property>
+            <property name="xalign">0</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScale">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="width-request">200</property>
+            <property name="draw_value">0</property>
+            <property name="adjustment">adjustment2</property>
+            <property name="hexpand">1</property>
+            <marks>
+              <mark value="0" position="bottom"></mark>
+              <mark value="1" position="bottom"></mark>
+              <mark value="2" position="bottom"></mark>
+              <mark value="3" position="bottom"></mark>
+              <mark value="4" position="bottom"></mark>
+            </marks>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">1</property>
+            <property name="label">Discrete</property>
+            <property name="xalign">0</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScale">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="width-request">200</property>
+            <property name="round-digits">0</property>
+            <property name="draw_value">0</property>
+            <property name="adjustment">adjustment3</property>
+            <property name="hexpand">1</property>
+            <marks>
+              <mark value="0" position="bottom"></mark>
+              <mark value="1" position="bottom"></mark>
+              <mark value="2" position="bottom"></mark>
+              <mark value="3" position="bottom"></mark>
+              <mark value="4" position="bottom"></mark>
+            </marks>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gtk3/sample/gtk-demo/se_resize_cursor.png b/gtk3/sample/gtk-demo/se_resize_cursor.png
new file mode 100644
index 0000000..f6e4002
Binary files /dev/null and b/gtk3/sample/gtk-demo/se_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/spinbutton.ui b/gtk3/sample/gtk-demo/spinbutton.ui
new file mode 100644
index 0000000..808c2d5
--- /dev/null
+++ b/gtk3/sample/gtk-demo/spinbutton.ui
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <object class="GtkAdjustment" id="basic_adjustment">
+    <property name="lower">-10000</property>
+    <property name="upper">10000</property>
+    <property name="step_increment">0.5</property>
+    <property name="page_increment">100</property>
+  </object>
+  <object class="GtkAdjustment" id="hex_adjustment">
+    <property name="upper">255</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">16</property>
+  </object>
+  <object class="GtkAdjustment" id="time_adjustment">
+    <property name="upper">1410</property>
+    <property name="step_increment">30</property>
+    <property name="page_increment">60</property>
+  </object>
+  <object class="GtkAdjustment" id="month_adjustment">
+    <property name="lower">1</property>
+    <property name="upper">12</property>
+    <property name="value">1</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">5</property>
+  </object>
+  <object class="GtkWindow" id="window">
+    <property name="title" translatable="yes">Spin Button</property>
+    <child>
+      <object class="GtkGrid">
+        <property name="visible">1</property>
+        <property name="margin">20</property>
+        <property name="row-spacing">10</property>
+        <property name="column-spacing">10</property>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">1</property>
+            <property name="label">_Numeric</property>
+            <property name="use_underline">1</property>
+            <property name="mnemonic_widget">basic_spin</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkSpinButton" id="basic_spin">
+            <property name="visible">1</property>
+            <property name="halign">start</property>
+            <property name="width_chars">5</property>
+            <property name="adjustment">basic_adjustment</property>
+            <property name="climb_rate">1</property>
+            <property name="digits">2</property>
+            <property name="numeric">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="basic_label">
+            <property name="visible">1</property>
+            <property name="width_chars">10</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">1</property>
+            <property name="label">_Hexadecimal</property>
+            <property name="use_underline">1</property>
+            <property name="mnemonic_widget">hex_spin</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkSpinButton" id="hex_spin">
+            <property name="visible">1</property>
+            <property name="halign">start</property>
+            <property name="width_chars">4</property>
+            <property name="adjustment">hex_adjustment</property>
+            <signal name="input" handler="hex_spin_input"/>
+            <signal name="output" handler="hex_spin_output"/>
+            <property name="wrap">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="hex_label">
+            <property name="visible">1</property>
+            <property name="width_chars">10</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">1</property>
+            <property name="label">_Time</property>
+            <property name="use_underline">1</property>
+            <property name="mnemonic_widget">time_spin</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkSpinButton" id="time_spin">
+            <property name="visible">1</property>
+            <property name="halign">start</property>
+            <property name="width_chars">5</property>
+            <property name="adjustment">time_adjustment</property>
+            <signal name="input" handler="time_spin_input"/>
+            <signal name="output" handler="time_spin_output"/>
+            <property name="wrap">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="time_label">
+            <property name="visible">1</property>
+            <property name="width_chars">10</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel">
+            <property name="visible">1</property>
+            <property name="label">_Month</property>
+            <property name="use_underline">1</property>
+            <property name="mnemonic_widget">month_spin</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkSpinButton" id="month_spin">
+            <property name="visible">1</property>
+            <property name="halign">start</property>
+            <property name="width_chars">9</property>
+            <signal name="input" handler="month_spin_input"/>
+            <signal name="output" handler="month_spin_output"/>
+            <property name="adjustment">month_adjustment</property>
+            <property name="wrap">1</property>
+            <property name="update_policy">if-valid</property>
+          </object>
+          <packing>
+            <property name="left_attach">1</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="month_label">
+            <property name="visible">1</property>
+            <property name="width_chars">10</property>
+            <property name="xalign">1</property>
+          </object>
+          <packing>
+            <property name="left_attach">2</property>
+            <property name="top_attach">3</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gtk3/sample/gtk-demo/stack.ui b/gtk3/sample/gtk-demo/stack.ui
new file mode 100644
index 0000000..ed67261
--- /dev/null
+++ b/gtk3/sample/gtk-demo/stack.ui
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.6 -->
+  <object class="GtkWindow" id="window1">
+    <property name="title" translatable="yes">Stack</property>
+    <child>
+      <object class="GtkGrid" id="grid1">
+        <property name="visible">1</property>
+        <child>
+          <object class="GtkStackSwitcher" id="switcher">
+            <property name="visible">1</property>
+            <property name="stack">stack</property>
+            <property name="halign">center</property>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkStack" id="stack">
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="transition-type">crossfade</property>
+            <child>
+              <object class="GtkImage" id="image1">
+                <property name="visible">1</property>
+                <property name="margin-top">20</property>
+                <property name="margin-bottom">20</property>
+                <property name="icon-name">gtk3-demo</property>
+              </object>
+              <packing>
+                <property name="name">page1</property>
+                <property name="title" translatable="yes">Page 1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="checkbutton1">
+                <property name="label" translatable="yes">Page 2</property>
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
+                <property name="draw_indicator">1</property>
+                <property name="halign">center</property>
+                <property name="valign">center</property>
+              </object>
+              <packing>
+                <property name="name">page2</property>
+                <property name="title" translatable="yes">Page 2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSpinner" id="spinner1">
+                <property name="visible">1</property>
+                <property name="halign">center</property>
+                <property name="valign">center</property>
+                <property name="active">1</property>
+              </object>
+              <packing>
+                <property name="name">page3</property>
+                <property name="icon-name">face-laugh-symbolic</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="left_attach">0</property>
+            <property name="top_attach">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
diff --git a/gtk3/sample/gtk-demo/sw_resize_cursor.png b/gtk3/sample/gtk-demo/sw_resize_cursor.png
new file mode 100644
index 0000000..1963383
Binary files /dev/null and b/gtk3/sample/gtk-demo/sw_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/text_cursor.png b/gtk3/sample/gtk-demo/text_cursor.png
new file mode 100644
index 0000000..53cec46
Binary files /dev/null and b/gtk3/sample/gtk-demo/text_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/theming.ui b/gtk3/sample/gtk-demo/theming.ui
index 728b1d1..d3a6e21 100644
--- a/gtk3/sample/gtk-demo/theming.ui
+++ b/gtk3/sample/gtk-demo/theming.ui
@@ -5,158 +5,135 @@
     <property name="orientation">vertical</property>
     <child>
       <object class="GtkToolbar" id="toolbar1">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="hexpand">True</property>
-        <property name="show-arrow">False</property>
+        <property name="visible">1</property>
+        <property name="hexpand">1</property>
+        <property name="show-arrow">0</property>
         <style>
           <class name="primary-toolbar"/>
         </style>
         <child>
           <object class="GtkToggleToolButton" id="toolbutton1">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="use_action_appearance">0</property>
             <property name="label" translatable="yes">Normal</property>
-            <property name="use_underline">True</property>
-            <property name="is_important">True</property>
+            <property name="use_underline">1</property>
+            <property name="is_important">1</property>
             <property name="icon_name">edit-find</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="toolbutton2">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="use_action_appearance">0</property>
             <property name="label" translatable="yes">Active</property>
-            <property name="use_underline">True</property>
-            <property name="is_important">True</property>
+            <property name="use_underline">1</property>
+            <property name="is_important">1</property>
             <property name="icon_name">edit-find</property>
-            <property name="active">True</property>
+            <property name="active">1</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="toolbutton3">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="sensitive">False</property>
-            <property name="can_focus">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="sensitive">0</property>
             <property name="label" translatable="yes">Insensitive</property>
-            <property name="use_underline">True</property>
-            <property name="is_important">True</property>
+            <property name="use_underline">1</property>
+            <property name="is_important">1</property>
             <property name="icon_name">edit-find</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="toolbutton5">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
             <property name="label" translatable="yes">Raised</property>
-            <property name="use_underline">True</property>
-            <property name="is_important">True</property>
+            <property name="use_underline">1</property>
+            <property name="is_important">1</property>
             <property name="icon_name">edit-find-symbolic</property>
             <style>
               <class name="raised"/>
             </style>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="toolbutton6">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
             <property name="label" translatable="yes">Raised Active</property>
-            <property name="use_underline">True</property>
-            <property name="is_important">True</property>
+            <property name="use_underline">1</property>
+            <property name="is_important">1</property>
             <property name="icon_name">edit-find-symbolic</property>
-            <property name="active">True</property>
+            <property name="active">1</property>
             <style>
               <class name="raised"/>
             </style>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="toolbutton4">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="sensitive">False</property>
-            <property name="can_focus">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="sensitive">0</property>
             <property name="label" translatable="yes">Insensitive Active</property>
-            <property name="use_underline">True</property>
+            <property name="use_underline">1</property>
             <property name="icon_name">edit-find</property>
-            <property name="is_important">True</property>
-            <property name="active">True</property>
+            <property name="is_important">1</property>
+            <property name="active">1</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToolItem" id="toolitementry">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
             <child>
               <object class="GtkEntry" id="entry1">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
                 <property name="invisible_char">•</property>
                 <property name="placeholder-text" translatable="yes">Search...</property>
                 <property name="secondary-icon-name">edit-find-symbolic</property>
               </object>
             </child>
           </object>
-          <packing>
-            <property name="expand">False</property>
-          </packing>
         </child>
         <child>
           <object class="GtkToolItem" id="toolitemswitch">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
             <child>
               <object class="GtkSwitch" id="switch1">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
+                <property name="visible">1</property>
+                <property name="can_focus">1</property>
               </object>
             </child>
           </object>
-          <packing>
-            <property name="expand">False</property>
-          </packing>
         </child>
       </object>
     </child>
     <child>
       <object class="GtkBox" id="box1">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="orientation">horizontal</property>
+        <property name="visible">1</property>
         <property name="valign">center</property>
         <property name="halign">center</property>
         <style>
@@ -165,45 +142,36 @@
         <child>
           <object class="GtkButton" id="button1">
             <property name="label" translatable="yes">Hi, I am a button</property>
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="receives_default">1</property>
+            <property name="use_action_appearance">0</property>
           </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
         </child>
         <child>
           <object class="GtkButton" id="button2">
-            <property name="label" translatable="yes">And I'm another button</property>
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_action_appearance">False</property>
+            <property name="label" translatable="yes">And I'm another button</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="receives_default">1</property>
+            <property name="use_action_appearance">0</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkButton" id="button3">
             <property name="label" translatable="yes">This is a button party!</property>
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="can_focus">1</property>
+            <property name="receives_default">1</property>
+            <property name="use_action_appearance">0</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
         </child>
@@ -211,106 +179,93 @@
     </child>
     <child>
       <object class="GtkToolbar" id="itoolbar1">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="hexpand">True</property>
+        <property name="visible">1</property>
+        <property name="hexpand">1</property>
         <property name="icon_size">1</property>
         <style>
           <class name="inline-toolbar"/>
         </style>
         <child>
           <object class="GtkToggleToolButton" id="itoolbutton1">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="use_action_appearance">0</property>
             <property name="label" translatable="yes">Normal</property>
-            <property name="use_underline">True</property>
+            <property name="use_underline">1</property>
             <property name="icon_name">list-add-symbolic</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="itoolbutton2">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="use_action_appearance">0</property>
             <property name="label" translatable="yes">Normal</property>
-            <property name="use_underline">True</property>
+            <property name="use_underline">1</property>
             <property name="icon_name">list-add-symbolic</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="itoolbutton3">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="use_action_appearance">0</property>
             <property name="label" translatable="yes">Active</property>
-            <property name="use_underline">True</property>
+            <property name="use_underline">1</property>
             <property name="icon_name">list-remove-symbolic</property>
-            <property name="active">True</property>
+            <property name="active">1</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="itoolbutton4">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="use_action_appearance">0</property>
             <property name="label" translatable="yes">Active</property>
-            <property name="use_underline">True</property>
+            <property name="use_underline">1</property>
             <property name="icon_name">list-remove-symbolic</property>
-            <property name="active">True</property>
+            <property name="active">1</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="itoolbutton5">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="sensitive">False</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="sensitive">0</property>
+            <property name="use_action_appearance">0</property>
             <property name="label" translatable="yes">Insensitive</property>
-            <property name="use_underline">True</property>
+            <property name="use_underline">1</property>
             <property name="icon_name">edit-find-symbolic</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkToggleToolButton" id="itoolbutton6">
-            <property name="use_action_appearance">False</property>
-            <property name="visible">True</property>
-            <property name="sensitive">False</property>
-            <property name="can_focus">False</property>
-            <property name="use_action_appearance">False</property>
+            <property name="use_action_appearance">0</property>
+            <property name="visible">1</property>
+            <property name="sensitive">0</property>
+            <property name="use_action_appearance">0</property>
             <property name="label" translatable="yes">Insensitive Active</property>
-            <property name="use_underline">True</property>
+            <property name="use_underline">1</property>
             <property name="icon_name">go-up-symbolic</property>
-            <property name="active">True</property>
+            <property name="active">1</property>
           </object>
           <packing>
-            <property name="expand">False</property>
-            <property name="homogeneous">True</property>
+            <property name="homogeneous">1</property>
           </packing>
         </child>
       </object>
diff --git a/gtk3/sample/gtk-demo/vertical_text_cursor.png b/gtk3/sample/gtk-demo/vertical_text_cursor.png
new file mode 100644
index 0000000..17241bc
Binary files /dev/null and b/gtk3/sample/gtk-demo/vertical_text_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/w_resize_cursor.png b/gtk3/sample/gtk-demo/w_resize_cursor.png
new file mode 100644
index 0000000..65383b1
Binary files /dev/null and b/gtk3/sample/gtk-demo/w_resize_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/wait_cursor.png b/gtk3/sample/gtk-demo/wait_cursor.png
new file mode 100644
index 0000000..21ccd2f
Binary files /dev/null and b/gtk3/sample/gtk-demo/wait_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/zoom_in_cursor.png b/gtk3/sample/gtk-demo/zoom_in_cursor.png
new file mode 100644
index 0000000..ae3114d
Binary files /dev/null and b/gtk3/sample/gtk-demo/zoom_in_cursor.png differ
diff --git a/gtk3/sample/gtk-demo/zoom_out_cursor.png b/gtk3/sample/gtk-demo/zoom_out_cursor.png
new file mode 100644
index 0000000..846a3dd
Binary files /dev/null and b/gtk3/sample/gtk-demo/zoom_out_cursor.png differ
diff --git a/gtk3/sample/tutorial/README.md b/gtk3/sample/tutorial/README.md
index 14e3b7f..ee7bbd6 100644
--- a/gtk3/sample/tutorial/README.md
+++ b/gtk3/sample/tutorial/README.md
@@ -521,3 +521,418 @@ In this line, given that `self` is `ExampleAppWindow` the usage of `stack` is a
 https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.8
 
 *    exampleapp4/exampleapp.rb
+
+An application menu is shown by GNOME shell at the top of the screen. It is meant to collect infrequently used actions that affect the whole application.
+Just like the window template, we specify our application menu in a ui file, and add it as a resource to our binary.
+
+#### Adding the menu interface
+
+*    app-menu.ui
+```xml
+<?xml version="1.0"?>
+<interface>
+  <!-- interface-requires gtk+ 3.0 -->
+  <menu id="appmenu">
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Preferences</attribute>
+        <attribute name="action">app.preferences</attribute>
+      </item>
+    </section>
+    <section>
+      <item>
+        <attribute name="label" translatable="yes">_Quit</attribute>
+        <attribute name="action">app.quit</attribute>
+      </item>
+    </section>
+  </menu>
+</interface>
+```
+
+This menu interface is loaded and added to our application with :
+
+```ruby
+builder = Gtk::Builder.new(:resource => "/org/gtk/exampleapp/app-menu.ui")
+app_menu = builder.get_object("appmenu")
+application.set_app_menu(app_menu)
+```
+
+With this, our application has a menu with two items that we can show when clicking on the application icon in the Gnome shell.
+
+#### Linking menu items to actions.
+
+All the actions initialization should be done during the "startup" step, which is guaranteed to be called once for each primary application instance.
+
+The "quit" item in the menu is implemented with this:
+
+```xml
+<section>
+  <item>
+    <attribute name="label" translatable="yes">_Quit</attribute>
+    <attribute name="action">app.quit</attribute>
+  </item>
+</section>
+```
+
+Then we just have to create an `Gio::SimpleAction` named "quit" and configure it in order to quit the application when this action is triggered.
+
+```ruby
+action = Gio::SimpleAction.new("quit")
+action.signal_connect("activate") do |_action, parameter|
+  application.quit
+end
+application.add_action(action)
+
+```
+
+#### Add accelerators for action.
+
+An accelerator is just a keys combination that acts as a shortcut for an action. 
+
+```ruby
+quit_accels = ["<Ctrl>Q"]
+action = Gio::SimpleAction.new("quit")
+action.signal_connect("activate") do |_action, parameter|
+  application.quit
+end
+application.add_action(action)
+application.set_accels_for_action("app.quit", quit_accels)
+```
+
+### A preferences dialog
+https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.9
+
+### Define and store settings for an application with gschemas
+*    exampleapp5/exampleapp.rb
+
+A typical application will have a some preferences that should be remembered from one run to the next. Even for our simple example application, we may want to change the font that is used for the content.
+We are going to use `Gio::Settings` to store our preferences. `Gio::Settings` requires a schema that describes our settings:
+
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist>
+  <schema path="/org/gtk/exampleapp/" id="org.gtk.exampleapp">
+    <key name="font" type="s">
+      <default>'Monospace 12'</default>
+      <summary>Font</summary>
+      <description>The font to be used for content.</description>
+    </key>
+    <key name="transition" type="s">
+      <choices>
+        <choice value='none'/>
+        <choice value='crossfade'/>
+        <choice value='slide-left-right'/>
+      </choices>
+      <default>'none'</default>
+      <summary>Transition</summary>
+      <description>The transition to use when switching tabs.</description>
+    </key>
+  </schema>
+</schemalist>
+```
+
+Before we can make use of this schema in our application, we need to compile it into the binary form that `Gio::Settings` expects. 
+
+```ruby
+system("glib-compile-schemas", data_path)
+```
+In this command, the tool *glib-compile-schemas* searches all files with a name that ends with *.gschema.xml* and compiles it into a binary file called *gschemas.compiled*.
+
+This binary file can be loaded and our custom schema installed  at the begining of our script with:
+
+```ruby
+Gio::SettingsSchemaSource.new(data_path,
+                              Gio::SettingsSchemaSource.default,
+                              false)
+
+```
+This is the corresponding method to the function [g_settings_schema_source_new_from_directory](https://developer.gnome.org/gio/stable/gio-GSettingsSchema-GSettingsSchemaSource.html#g-settings-schema-source-new-from-directory). 
+
+As an alternative, our schema  can just be loaded by using the `GSETTINGS_SCHEMA_DIR` environment variable.
+
+```ruby
+ENV["GSETTINGS_SCHEMA_DIR"] = data_path 
+```
+More informations on the use of gschemas can be found [here](https://developer.gnome.org/gio/stable/gio-GSettingsSchema-GSettingsSchemaSource.html)
+
+Next, we need to connect our settings to the widgets that they are supposed to control. One convenient way to do this is to use `Gio::Settings` bind functionality to bind settings keys to object properties, as we do here for the transition setting. The `Gio::Settings#bind` is the ruby method for the [g_settings_bind](https://developer.gnome.org/gio/stable/GSettings.html#g-settings-bind) fonction of `gio`
+
+```ruby
+class ExampleAppWindow < Gtk::ApplicationWindow
+  type_register
+  class << self
+    def init
+      set_template(:resource => "/org/gtk/exampleapp/window.ui")
+      bind_template_child("stack")
+    end
+  end
+
+  def initialize(application)
+    super(:application => application)
+    settings = Gio::Settings.new("org.gtk.exampleapp")
+    settings.bind("transition",
+                  stack,
+                  "transition-type",
+                  Gio::SettingsBindFlags::DEFAULT)
+  end
+...
+```
+
+#### Configure the settings with a dialog window
+
+*    exampleapp6/exampleapp.rb
+
+The code to connect the font setting is a little more involved, since there is no simple object property that it corresponds to, so we are not going to go into that here.
+At this point, the application will already react if you change one of the settings, e.g. using the gsettings commandline tool. Of course, we expect the application to provide a preference dialog for these. So lets do that now. Our preference dialog will be a subclass of `Gtk::Dialog`, and we'll use the same techniques that we've already seen: templates, bind child widget name to method, settings bindings.
+
+Lets start with the template.
+
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.8 -->
+  <template class="ExampleAppPrefs" parent="GtkDialog">
+    <property name="title" translatable="yes">Preferences</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="vbox">
+        <child>
+          <object class="GtkGrid" id="grid">
+            <property name="visible">True</property>
+            <property name="margin">6</property>
+            <property name="row-spacing">12</property>
+            <property name="column-spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="fontlabel">
+                <property name="visible">True</property>
+                <property name="label">_Font:</property>
+                <property name="use-underline">True</property>
+                <property name="mnemonic-widget">font</property>
+                <property name="xalign">1</property>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFontButton" id="font">
+                <property name="visible">True</property>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="transitionlabel">
+                <property name="visible">True</property>
+                <property name="label">_Transition:</property>
+                <property name="use-underline">True</property>
+                <property name="mnemonic-widget">transition</property>
+                <property name="xalign">1</property>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkComboBoxText" id="transition">
+                <property name="visible">True</property>
+                <items>
+                  <item translatable="yes" id="none">None</item>
+                  <item translatable="yes" id="crossfade">Fade</item>
+                  <item translatable="yes" id="slide-left-right">Slide</item>
+                </items>
+              </object>
+              <packing>
+                <property name="left-attach">1</property>
+                <property name="top-attach">1</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
+```
+Next comes the dialog subclass.
+
+```ruby
+class ExampleAppPrefs < Gtk::Dialog
+  type_register
+  class << self
+    def init
+      set_template(:resource => "/org/gtk/exampleapp/prefs.ui")
+      bind_template_child("font")
+      bind_template_child("transition")
+    end
+  end
+  def initialize(args)
+    parent = args[:transient_for]
+    bar = args[:use_header_bar]
+    super(:transient_for => parent, :use_header_bar => 1)
+    settings = Gio::Settings.new("org.gtk.exampleapp")
+    settings.bind("font",
+                  font,
+                  "font",
+                  Gio::SettingsBindFlags::DEFAULT)
+    settings.bind("transition",
+                  transition,
+                  "active-id",
+                  Gio::SettingsBindFlags::DEFAULT)
+  end
+end
+```
+
+Nothing new here, it works like previously. The main difference in our application now is that we define what must be done when the *preferences* menu item is clicked.
+
+```ruby
+action = Gio::SimpleAction.new("preferences")
+action.signal_connect("activate") do |_action, _parameter|
+  win = application.windows.first
+
+  prefs = ExampleAppPrefs.new(:transient_for => win,
+                              :use_header_bar => true)
+  prefs.present
+end
+```
+Here we just says that when the user activate the *preferences* item, we create an `ExampleAppPrefs` instance and display it. The user can then specify the *font* and *transition* settings for the application. Those settings are used in the `ExampleAppWindow#open` method for example:
+
+```ruby
+def open(file)
+  basename = file.basename
+  scrolled = Gtk::ScrolledWindow.new
+  scrolled.show
+  scrolled.set_hexpand(true)
+  scrolled.set_vexpand(true)
+  view = Gtk::TextView.new
+  view.set_editable(false)
+  view.set_cursor_visible(false)
+  view.show
+  scrolled.add(view)
+  stack.add_titled(scrolled, basename, basename)
+  stream = file.read
+  buffer = view.buffer
+  buffer.text = stream.read
+  tag = buffer.create_tag() 
+  @settings.bind("font", tag, "font", Gio::SettingsBindFlags::DEFAULT)
+  buffer.apply_tag(tag, buffer.start_iter, buffer.end_iter)
+end
+``` 
+
+## Adding a search bar
+https://developer.gnome.org/gtk3/stable/ch01s04.html#id-1.2.3.12.10
+
+*    exampleapp7/exampleapp.rb
+
+We continue to flesh out the functionality of our application. For now, we add search. GTK+ supports this with `Gtk::SearchEntry` and `Gtk::SearchBar`. The search bar is a widget that can slide in from the top to present a search entry.
+We add a toggle button to the header bar, which can be used to slide out the search bar below the header bar.
+
+The new window.ui file:
+
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <!-- interface-requires gtk+ 3.8 -->
+  <template class="ExampleAppWindow" parent="GtkApplicationWindow">
+    <property name="title" translatable="yes">Example Application</property>
+    <property name="default-width">600</property>
+    <property name="default-height">400</property>
+    <child>
+      <object class="GtkBox" id="content_box">
+        <property name="visible">True</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkHeaderBar" id="header">
+            <property name="visible">True</property>
+            <child type="title">
+              <object class="GtkStackSwitcher" id="tabs">
+                <property name="visible">True</property>
+                <property name="margin">6</property>
+                <property name="stack">stack</property>
+              </object>
+            </child>
+            <child>
+              <object class="GtkToggleButton" id="search">
+                <property name="visible">True</property>
+                <property name="sensitive">False</property>
+                <style>
+                  <class name="image-button"/>
+                </style>
+                <child>
+                  <object class="GtkImage" id="search-icon">
+                    <property name="visible">True</property>
+                    <property name="icon-name">edit-find-symbolic</property>
+                    <property name="icon-size">1</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="pack-type">end</property>
+              </packing>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkSearchBar" id="searchbar">
+            <property name="visible">True</property>
+            <child>
+              <object class="GtkSearchEntry" id="searchentry">
+                <signal name="search-changed" handler="search_text_changed"/>
+                <property name="visible">True</property>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkStack" id="stack">
+            <signal name="notify::visible-child" handler="visible_child_changed"/>
+            <property name="visible">True</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
+```
+Implementing the search needs quite a few code changes that we are not going to completely go over here. The central piece of the search implementation is a signal handler that listens for text changes in the search entry.
+
+```ruby
+
+def init
+  set_template(:resource => "/org/gtk/exampleapp/window.ui")
+  bind_template_child("stack")
+  bind_template_child("search")
+  bind_template_child("searchbar")
+  set_connect_func do |name|
+    method(name)
+  end
+end
+
+private
+
+def search_text_changed(search_entry)
+  text = search_entry.text
+  return if text.empty?
+
+  win = search_entry.toplevel
+  tab = win.stack.visible_child
+  view = tab.child
+  buffer = view.buffer
+  range = buffer.start_iter.forward_search(text, Gtk::TextSearchFlags::CASE_INSENSITIVE)
+  return unless range
+  buffer.select_range(range[0], range[1])
+  view.scroll_to_iter(range[0], 0.0, false, 0.0, 0.0)
+end
+```
+
+In this part of code, the use of the method `set_connect_func` will allow us to define private methods as callback that have been set in the handler attributs of the XML ui file. In the code above, we can see that we have defined a private method name `search_text_changed`. In the XML file, there is this line :
+
+    <signal name="search-changed" handler="search_text_changed"/>
+
+Those pieces together mean that for the signal *search-changed* of the `Gtk::SearchEntry`, trigger the private method of `ExampleAppWindow` that is called `search_text_changed`.
+
diff --git a/gtk3/test/run-test.rb b/gtk3/test/run-test.rb
index cffdf63..655d873 100755
--- a/gtk3/test/run-test.rb
+++ b/gtk3/test/run-test.rb
@@ -63,4 +63,4 @@ require 'gtk3'
 
 Gtk.init
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(gtk3_base, "test"))
diff --git a/gtk3/test/test-gtk-builder.rb b/gtk3/test/test-gtk-builder.rb
index 7c749dd..45a6f25 100644
--- a/gtk3/test/test-gtk-builder.rb
+++ b/gtk3/test/test-gtk-builder.rb
@@ -19,16 +19,18 @@ class TestGtkBuilder < Test::Unit::TestCase
       assert_kind_of(Gtk::Dialog, builder["dialog1"])
     end
 
+    test "path" do
+      only_gtk_version(3, 10, 0)
+      builder = Gtk::Builder.new(:path => ui_definition_file.path)
+      assert_kind_of(Gtk::Dialog, builder["dialog1"])
+    end
+
     test "resource" do
       only_gtk_version(3, 10, 0)
-      resource = Gio::Resource.load(fixture_path("simple_window.gresource"))
-      Gio::Resources.register(resource)
-      begin
+      register_resource(fixture_path("simple_window.gresource")) do
         resource_path = "/simple_window/simple_window.ui"
         builder = Gtk::Builder.new(:resource => resource_path)
         assert_kind_of(Gtk::Window, builder["window"])
-      ensure
-        Gio::Resources.unregister(resource)
       end
     end
 
@@ -39,43 +41,109 @@ class TestGtkBuilder < Test::Unit::TestCase
     end
   end
 
-  def test_add_from_file
-    builder = Gtk::Builder.new
-    assert_nothing_raised do
-      builder.add_from_file(ui_definition_file.path)
+  sub_test_case "#add" do
+    sub_test_case ":file" do
+      test "all" do
+        builder = Gtk::Builder.new
+        builder.add(:file => ui_definition_file.path)
+        assert_kind_of(Gtk::Dialog, builder["dialog1"])
+      end
+
+      test ":object_ids" do
+        builder = Gtk::Builder.new
+        builder.add(:file => ui_definition_file.path,
+                    :object_ids => ["ok_button"])
+        assert_equal(["ok_button"],
+                     builder.objects.collect(&:builder_name).sort)
+      end
+    end
+
+    sub_test_case ":path" do
+      test "all" do
+        builder = Gtk::Builder.new
+        builder.add(:path => ui_definition_file.path)
+        assert_kind_of(Gtk::Dialog, builder["dialog1"])
+      end
+
+      test ":object_ids" do
+        builder = Gtk::Builder.new
+        builder.add(:path => ui_definition_file.path,
+                    :object_ids => ["ok_button"])
+        assert_equal(["ok_button"],
+                     builder.objects.collect(&:builder_name).sort)
+      end
     end
-    assert_kind_of(Gtk::Dialog, builder["dialog1"])
-  end
 
-  sub_test_case "#add_from_string" do
-    def test_ascii_only
+    test "path" do
       builder = Gtk::Builder.new
-      builder.add_from_string(ui_definition_simple)
-      assert_kind_of(Gtk::Window, builder["main-window"])
+      builder.add(ui_definition_file.path)
+      assert_kind_of(Gtk::ButtonBox, builder["hbuttonbox1"])
     end
 
-    def test_multibyte_characters
+    sub_test_case ":resource" do
+      setup do
+        only_gtk_version(3, 12, 0)
+      end
+
+      test "all" do
+        builder = Gtk::Builder.new
+        register_resource(fixture_path("simple_window.gresource")) do
+          resource_path = "/simple_window/simple_window.ui"
+          builder.add(:resource => resource_path)
+          assert_kind_of(Gtk::Window, builder["window"])
+        end
+      end
+
+      test ":object_ids" do
+        builder = Gtk::Builder.new
+        register_resource(fixture_path("simple_window.gresource")) do
+          resource_path = "/simple_window/simple_window.ui"
+          builder.add(:resource => resource_path,
+                      :object_ids => ["label"])
+          assert_equal(["label"],
+                       builder.objects.collect(&:builder_name).sort)
+        end
+      end
+    end
+
+    test "resource" do
+      only_gtk_version(3, 12, 0)
       builder = Gtk::Builder.new
-      comment = "<!-- 日本語 -->\n" * 100
-      builder.add_from_string("#{comment}#{ui_definition_simple}")
-      assert_kind_of(Gtk::Window, builder["main-window"])
+      register_resource(fixture_path("simple_window.gresource")) do
+        resource_path = "/simple_window/simple_window.ui"
+        builder.add(resource_path)
+        assert_kind_of(Gtk::Window, builder["window"])
+      end
     end
-  end
 
-  def test_add_with_file
-    builder = Gtk::Builder.new
-    assert_nothing_raised do
-      builder.add(ui_definition_file.path)
+    sub_test_case ":string" do
+      test "ascii only" do
+        builder = Gtk::Builder.new
+        builder.add(:string => ui_definition_simple)
+        assert_kind_of(Gtk::Window, builder["main-window"])
+      end
+
+      test "multibyte characters" do
+        builder = Gtk::Builder.new
+        comment = "<!-- 日本語 -->\n" * 100
+        builder.add(:string => "#{comment}#{ui_definition_simple}")
+        assert_kind_of(Gtk::Window, builder["main-window"])
+      end
+
+      test ":object_ids" do
+        builder = Gtk::Builder.new
+        builder.add(:string => ui_definition,
+                    :object_ids => ["ok_button"])
+        assert_equal(["ok_button"],
+                     builder.objects.collect(&:builder_name).sort)
+      end
     end
-    assert_kind_of(Gtk::ButtonBox, builder["hbuttonbox1"])
-  end
 
-  def test_add_with_string
-    builder = Gtk::Builder.new
-    assert_nothing_raised do
+    test "string" do
+      builder = Gtk::Builder.new
       builder.add(ui_definition)
+      assert_kind_of(Gtk::Button, builder["ok_button"])
     end
-    assert_kind_of(Gtk::Button, builder["ok_button"])
   end
 
   def test_add_chain
@@ -197,4 +265,14 @@ EOX
     xml.close
     xml
   end
+
+  def register_resource(path)
+    resource = Gio::Resource.load(path)
+    Gio::Resources.register(resource)
+    begin
+      yield
+    ensure
+      Gio::Resources.unregister(resource)
+    end
+  end
 end
diff --git a/gtk3/test/test-gtk-cell-layout.rb b/gtk3/test/test-gtk-cell-layout.rb
index 358dd81..6c04cf2 100644
--- a/gtk3/test/test-gtk-cell-layout.rb
+++ b/gtk3/test/test-gtk-cell-layout.rb
@@ -32,4 +32,10 @@ class TestGtkCellLayout < Test::Unit::TestCase
       @layout.set_attributes(@renderer, {:text => 1})
     end
   end
+
+  test "#set_cell_data_func" do
+    @layout.set_cell_data_func(@renderer) do
+      # TODO: assert block arguments
+    end
+  end
 end
diff --git a/gtksourceview2/test/run-test.rb b/gtksourceview2/test/run-test.rb
index cfd95cb..a56ebb5 100755
--- a/gtksourceview2/test/run-test.rb
+++ b/gtksourceview2/test/run-test.rb
@@ -30,4 +30,4 @@ require 'gtk-test-utils'
 
 require 'gtksourceview2'
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(gtk_source_view2_base, "test"))
diff --git a/gtksourceview3/test/run-test.rb b/gtksourceview3/test/run-test.rb
index e2ac703..1346826 100755
--- a/gtksourceview3/test/run-test.rb
+++ b/gtksourceview3/test/run-test.rb
@@ -43,4 +43,4 @@ require 'gtk-test-utils'
 
 require 'gtksourceview3'
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(gtk_source_view3_base, "test"))
diff --git a/pango/lib/pango.rb b/pango/lib/pango.rb
index a540e87..c7b2f9d 100644
--- a/pango/lib/pango.rb
+++ b/pango/lib/pango.rb
@@ -74,6 +74,19 @@ module Pango
       end
     end
   end
+  
+  module Version
+    MAJOR, MINOR, MICRO = BUILD_VERSION
+    STRING = Pango.version_string
+
+    class << self
+      def or_later?(major, minor, micro = nil)
+        micro || 0
+        error_message = Pango.check_version(major, minor, micro)
+        error_message.nil?
+      end
+    end
+  end
 end
 
 GLib::Log.set_log_domain(Pango::LOG_DOMAIN)
diff --git a/pango/test/run-test.rb b/pango/test/run-test.rb
index fab521d..b516a2b 100755
--- a/pango/test/run-test.rb
+++ b/pango/test/run-test.rb
@@ -25,4 +25,4 @@ require 'pango-test-utils'
 
 require 'pango'
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(pango_base, "test"))
diff --git a/pango/test/test-version.rb b/pango/test/test-version.rb
new file mode 100644
index 0000000..d2c5e02
--- /dev/null
+++ b/pango/test/test-version.rb
@@ -0,0 +1,47 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+class TestPangoVersion < Test::Unit::TestCase
+  include PangoTestUtils
+
+  test "STRING" do
+    major = Pango::Version::MAJOR
+    minor = Pango::Version::MINOR
+    micro = Pango::Version::MICRO
+    assert_equal([major, minor, micro].join("."),
+                 Pango::Version::STRING)
+  end
+
+  sub_test_case("#or_later?") do
+    test "same" do
+      assert_true(Pango::Version.or_later?(Pango::Version::MAJOR,
+                                           Pango::Version::MINOR,
+                                           Pango::Version::MICRO))
+    end
+
+    test "later" do
+      assert_true(Pango::Version.or_later?(Pango::Version::MAJOR,
+                                           Pango::Version::MINOR,
+                                           Pango::Version::MICRO - 1))
+    end
+
+    test "earlier" do
+      assert_false(Pango::Version.or_later?(Pango::Version::MAJOR,
+                                            Pango::Version::MINOR,
+                                            Pango::Version::MICRO + 1))
+    end
+  end
+end
diff --git a/poppler/lib/poppler.rb b/poppler/lib/poppler.rb
index ab9f1e1..25fcac2 100644
--- a/poppler/lib/poppler.rb
+++ b/poppler/lib/poppler.rb
@@ -1,4 +1,4 @@
-# Copyright(C) 2006-2009 Ruby-GNOME2 Project.
+# Copyright(C) 2006-2015 Ruby-GNOME2 Project.
 #
 # This library is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Lesser General Public License as published by
@@ -34,6 +34,23 @@ module Poppler
 
   VERSION = version.split(".").collect {|x| x.to_i}
 
+  module Version
+      MAJOR, MINOR, MICRO = BUILD_VERSION
+      STRING = "#{MAJOR}.#{MINOR}.#{MICRO}"
+
+    class << self
+      def or_later?(major, minor, micro=nil)
+        micro || 0
+        version = [
+          MAJOR,
+          MINOR,
+          MICRO,
+        ]
+        (version <=> [major, minor, micro]) >= 0
+      end
+    end
+  end
+
   class Document
     private
     def pdf_data?(data)
diff --git a/poppler/test/run-test.rb b/poppler/test/run-test.rb
index 42881d6..a6413ec 100755
--- a/poppler/test/run-test.rb
+++ b/poppler/test/run-test.rb
@@ -29,4 +29,4 @@ class Test::Unit::TestCase
   include PopplerTestUtils
 end
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(base_dir, "test"))
diff --git a/poppler/test/test-version.rb b/poppler/test/test-version.rb
new file mode 100644
index 0000000..e72e371
--- /dev/null
+++ b/poppler/test/test-version.rb
@@ -0,0 +1,47 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+class TestPopplerVersion < Test::Unit::TestCase
+  include PopplerTestUtils
+
+  test "STRING" do
+    major = Poppler::Version::MAJOR
+    minor = Poppler::Version::MINOR
+    micro = Poppler::Version::MICRO
+    assert_equal([major, minor, micro].join("."),
+                 Poppler::Version::STRING)
+  end
+
+  sub_test_case("#or_later?") do
+    test "same" do
+      assert_true(Poppler::Version.or_later?(Poppler::Version::MAJOR,
+                                             Poppler::Version::MINOR,
+                                             Poppler::Version::MICRO))
+    end
+
+    test "later" do
+      assert_true(Poppler::Version.or_later?(Poppler::Version::MAJOR,
+                                             Poppler::Version::MINOR - 1,
+                                             Poppler::Version::MICRO))
+    end
+
+    test "earlier" do
+      assert_false(Poppler::Version.or_later?(Poppler::Version::MAJOR,
+                                              Poppler::Version::MINOR + 1,
+                                              Poppler::Version::MICRO))
+    end
+  end
+end
diff --git a/rsvg2/lib/rsvg2.rb b/rsvg2/lib/rsvg2.rb
index e566fff..49cd8e2 100644
--- a/rsvg2/lib/rsvg2.rb
+++ b/rsvg2/lib/rsvg2.rb
@@ -78,6 +78,24 @@ module RSVG
       end
     end
   end
+
+  module Version
+    MAJOR, MINOR, MICRO = BUILD_VERSION
+    STRING = "#{MAJOR}.#{MINOR}.#{MICRO}"
+
+    class << self
+      def or_later?(major, minor, micro=nil)
+        micro || 0
+        version = [
+          MAJOR,
+          MINOR,
+          MICRO,
+        ]
+        (version <=> [major, minor, micro]) >= 0
+      end
+    end
+  end
+
 end
 
 module Cairo
diff --git a/rsvg2/test/run-test.rb b/rsvg2/test/run-test.rb
index 5993bf4..8ec644a 100755
--- a/rsvg2/test/run-test.rb
+++ b/rsvg2/test/run-test.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 #
-# Copyright (C) 2014  Ruby-GNOME2 Project Team
+# Copyright (C) 2014-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -46,4 +46,4 @@ require "rsvg2-test-utils"
 
 require "rsvg2"
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(rsvg2_base, "test"))
diff --git a/rsvg2/test/test-version.rb b/rsvg2/test/test-version.rb
new file mode 100644
index 0000000..52efaca
--- /dev/null
+++ b/rsvg2/test/test-version.rb
@@ -0,0 +1,47 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+class TestRSVGVersion < Test::Unit::TestCase
+  include RSVG2TestUtils
+
+  test "STRING" do
+    major = RSVG::Version::MAJOR
+    minor = RSVG::Version::MINOR
+    micro = RSVG::Version::MICRO
+    assert_equal([major, minor, micro].join("."),
+                 RSVG::Version::STRING)
+  end
+
+  sub_test_case("#or_later?") do
+    test "same" do
+      assert_true(RSVG::Version.or_later?(RSVG::Version::MAJOR,
+                                          RSVG::Version::MINOR,
+                                          RSVG::Version::MICRO))
+    end
+
+    test "later" do
+      assert_true(RSVG::Version.or_later?(RSVG::Version::MAJOR,
+                                          RSVG::Version::MINOR - 1,
+                                          RSVG::Version::MICRO))
+    end
+
+    test "earlier" do
+      assert_false(RSVG::Version.or_later?(RSVG::Version::MAJOR,
+                                           RSVG::Version::MINOR + 1,
+                                           RSVG::Version::MICRO))
+    end
+  end
+end
diff --git a/vte3/lib/vte3/deprecated.rb b/vte3/lib/vte3/deprecated.rb
index 0293892..630039b 100644
--- a/vte3/lib/vte3/deprecated.rb
+++ b/vte3/lib/vte3/deprecated.rb
@@ -17,12 +17,29 @@
 module Vte
   extend GLib::Deprecatable
 
+  if const_defined?(:TerminalEraseBinding)
+    define_deprecated_const :EraseBinding, "Vte::TerminalEraseBinding"
+  else
+    define_deprecated_const :TerminalEraseBinding, "Vte::EraseBinding"
+  end
+
+  if const_defined?(:TerminalCursorBlinkMode)
+    define_deprecated_const :CursorBlinkMode, "Vte::TerminalCursorBlinkMode"
+  else
+    define_deprecated_const :TerminalCursorBlinkMode, "Vte::CursorBlinkMode"
+  end
+
+  if const_defined?(:TerminalCursorShape)
+    define_deprecated_const :CursorShape, "Vte::TerminalCursorShape"
+  else
+    define_deprecated_const :TerminalCursorShape, "Vte::CursorShape"
+  end
+
+
   class Terminal
     extend GLib::Deprecatable
-    define_deprecated_const :EraseBinding, 'Vte::TerminalEraseBinding'
-    define_deprecated_const :CursorBlinkMode, 'Vte::TerminalCursorBlinkMode'
-    define_deprecated_const :CursorShape, 'Vte::TerminalCursorShape'
-    define_deprecated_const :WriteFlags, 'Vte::TerminalWriteFlags'
+
+    define_deprecated_const :WriteFlags, "Vte::TerminalWriteFlags"
 
     define_deprecated_method :fork_pty, :raise => "Use 'Vte::Pty#fork'."
     define_deprecated_method :using_xft?, :warn => "Don't use this method." do |_self|
diff --git a/vte3/test/run-test.rb b/vte3/test/run-test.rb
index 0aed4a0..58106ed 100755
--- a/vte3/test/run-test.rb
+++ b/vte3/test/run-test.rb
@@ -60,4 +60,4 @@ require "vte3-test-utils"
 
 require "vte3"
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(vte3_base, "test"))
diff --git a/vte3/test/test-pty.rb b/vte3/test/test-pty.rb
index 93741b6..ae96101 100644
--- a/vte3/test/test-pty.rb
+++ b/vte3/test/test-pty.rb
@@ -27,16 +27,15 @@ class TestPty < Test::Unit::TestCase
   end
 
   def test_size
-    row = 80
-    col = 24
-    @pty.set_size(row, col)
-    assert_equal([row, col], @pty.size)
-  end
-
-  def test_term
-    term_type = "vt100"
-    @pty.term = term_type
-    assert_equal(term_type, @pty.term)
+    original = @pty.size
+    begin
+      row = 80
+      col = 24
+      @pty.set_size(row, col)
+      assert_equal([row, col], @pty.size)
+    ensure
+      @pty.set_size(*original)
+    end
   end
 
   def test_utf8
diff --git a/vte3/test/test-terminal-properties.rb b/vte3/test/test-terminal-properties.rb
index ef4487e..5d91bca 100644
--- a/vte3/test/test-terminal-properties.rb
+++ b/vte3/test/test-terminal-properties.rb
@@ -1,4 +1,4 @@
-# Copyright (C) 2014  Ruby-GNOME2 Project Team
+# Copyright (C) 2014-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -31,40 +31,29 @@ class TestTerminalProperties < Test::Unit::TestCase
     assert_false(@terminal.audible_bell?)
   end
 
-  def test_background_image_file
-    image_name = "image_file"
-    @terminal.background_image_file = image_name
-    assert_equal(image_name, @terminal.background_image_file)
-  end
-
   def test_backspace_binding
-    bind = Vte::TerminalEraseBinding::DELETE_SEQUENCE
+    bind = Vte::EraseBinding::DELETE_SEQUENCE
     @terminal.backspace_binding = bind
     assert_equal(bind, @terminal.backspace_binding)
   end
 
   def test_cursor_blink_mode
-    cursor_mode = Vte::TerminalCursorBlinkMode::ON
+    cursor_mode = Vte::CursorBlinkMode::ON
     @terminal.cursor_blink_mode = cursor_mode
     assert_equal(cursor_mode, @terminal.cursor_blink_mode)
   end
 
   def test_cursor_shape
-    shape = Vte::TerminalCursorShape::IBEAM
+    shape = Vte::CursorShape::IBEAM
     @terminal.cursor_shape = shape
     assert_equal(shape, @terminal.cursor_shape)
   end
 
   def test_delete_binding
-    bind = Vte::TerminalEraseBinding::ASCII_DELETE
+    bind = Vte::EraseBinding::ASCII_DELETE
     @terminal.delete_binding = bind
     assert_equal(bind, @terminal.delete_binding)
   end
-  def test_emulation
-    terminal_type = "vt100"
-    @terminal.emulation = terminal_type
-    assert_equal(terminal_type, @terminal.emulation)
-  end
 
   def test_encoding
     encoding = "UTF-16"
@@ -84,18 +73,6 @@ class TestTerminalProperties < Test::Unit::TestCase
     assert_true(@terminal.pointer_autohide?)
   end
 
-  def test_rewrap_on_resize
-    omit_if_not_respond(@terminal, :rewrap_on_resize?)
-    @terminal.rewrap_on_resize = false
-    assert_false(@terminal.rewrap_on_resize?)
-  end
-
-  def test_scroll_background
-    scroll = true
-    @terminal.scroll_background = scroll
-    assert_true(@terminal.scroll_background?)
-  end
-
   def test_scroll_on_keystroke
     scroll = true
     @terminal.scroll_on_keystroke = scroll
@@ -113,10 +90,4 @@ class TestTerminalProperties < Test::Unit::TestCase
     @terminal.scrollback_lines = lines
     assert_equal(lines, @terminal.scrollback_lines)
   end
-
-  def test_visible_bell
-    visible = true
-    @terminal.visible_bell = visible
-    assert_true(@terminal.visible_bell?)
-  end
 end
diff --git a/vte3/test/test-terminal-signals.rb b/vte3/test/test-terminal-signals.rb
index 1ca15c3..4278572 100644
--- a/vte3/test/test-terminal-signals.rb
+++ b/vte3/test/test-terminal-signals.rb
@@ -19,15 +19,6 @@ class TestTerminalSignals < Test::Unit::TestCase
     @terminal = Vte::Terminal.new
   end
 
-  def test_beep_signal
-    called = false
-    @terminal.signal_connect("beep") do
-      called = true
-    end
-    @terminal.signal_emit("beep")
-    assert_true(called)
-  end
-
   def test_copy_clipboard_signal
     called = false
     @terminal.signal_connect("copy-clipboard") do
diff --git a/vte3/test/test-terminal.rb b/vte3/test/test-terminal.rb
index 5a933ec..efd5dd1 100644
--- a/vte3/test/test-terminal.rb
+++ b/vte3/test/test-terminal.rb
@@ -27,9 +27,18 @@ class TestTerminal < Test::Unit::TestCase
     assert_equal(font, @terminal.font)
   end
 
-  sub_test_case "#fork_command" do
+  sub_test_case "#spawn" do
+    teardown do
+      loop = GLib::MainLoop.new
+      GLib::Idle.add do
+        loop.quit
+        GLib::Source::REMOVE
+      end
+      loop.run
+    end
+
     test "success" do
-      pid = @terminal.fork_command(:argv => ["echo"])
+      pid = @terminal.spawn(:argv => ["echo"])
       assert do
         pid > 0
       end
@@ -37,7 +46,7 @@ class TestTerminal < Test::Unit::TestCase
 
     test "failure" do
       assert_raise(GLib::SpawnError) do
-        @terminal.fork_command(:argv => ["nonexistent"])
+        @terminal.spawn(:argv => ["nonexistent"])
       end
     end
   end
diff --git a/webkit-gtk/lib/webkit-gtk.rb b/webkit-gtk/lib/webkit-gtk.rb
index 8e4be76..355a97f 100644
--- a/webkit-gtk/lib/webkit-gtk.rb
+++ b/webkit-gtk/lib/webkit-gtk.rb
@@ -46,10 +46,36 @@ module WebKitGtk
 
   class Loader < GObjectIntrospection::Loader
     private
+    def pre_load(repository, namespace)
+      define_version_module
+    end
+
+    def post_load(repository, namespace)
+      require_libraries
+    end
+
+    def define_version_module
+      @version_module = Module.new
+      @base_module.const_set("Version", @version_module)
+    end
+
+    def require_libraries
+      require "webkit-gtk/version"
+    end
+
     def initialize_post(object)
       super
       return unless object.is_a?(GLib::Object)
       self.class.reference_gobject(object, :sink => true)
     end
+
+    def load_constant_info(info)
+      case info.name
+      when /_VERSION\z/
+        @version_module.const_set($PREMATCH, info.value)
+      else
+        super
+      end
+    end
   end
 end
diff --git a/gio2/test/gio2-test-utils/omissions.rb b/webkit-gtk/lib/webkit-gtk/version.rb
similarity index 68%
copy from gio2/test/gio2-test-utils/omissions.rb
copy to webkit-gtk/lib/webkit-gtk/version.rb
index 225138c..3aa9f92 100644
--- a/gio2/test/gio2-test-utils/omissions.rb
+++ b/webkit-gtk/lib/webkit-gtk/version.rb
@@ -1,4 +1,4 @@
-# Copyright (C) 2014  Ruby-GNOME2 Project Team
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -14,10 +14,20 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
-module GioTestUtils
-  module Omissions
-    def omit_on_os_x
-      omit("Skip this test on OS X") if RUBY_PLATFORM =~ /darwin/
+module WebKitGtk
+  module Version
+    STRING = [MAJOR, MINOR, MICRO].join(".")
+
+    class << self
+      def or_later?(major, minor, micro=nil)
+        micro ||= 0
+        version = [
+          MAJOR,
+          MINOR,
+          MICRO,
+        ]
+        (version <=> [major, minor, micro]) >= 0
+      end
     end
   end
 end
diff --git a/webkit-gtk/test/run-test.rb b/webkit-gtk/test/run-test.rb
index 4ee40c1..e2aaf5b 100755
--- a/webkit-gtk/test/run-test.rb
+++ b/webkit-gtk/test/run-test.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -61,4 +61,4 @@ require "webkit-gtk-test-utils"
 
 require "webkit-gtk"
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(webkit_gtk_base, "test"))
diff --git a/webkit-gtk/test/test-version.rb b/webkit-gtk/test/test-version.rb
new file mode 100644
index 0000000..a8d5559
--- /dev/null
+++ b/webkit-gtk/test/test-version.rb
@@ -0,0 +1,47 @@
+# Copyright (C) 2015  Ruby-GNOME2 Project Team
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+class TestWebKitGtkVersion < Test::Unit::TestCase
+  include WebKitGtkTestUtils
+
+  test "STRING" do
+    major = WebKitGtk::Version::MAJOR
+    minor = WebKitGtk::Version::MINOR
+    micro = WebKitGtk::Version::MICRO
+    assert_equal([major, minor, micro].join("."),
+                 WebKitGtk::Version::STRING)
+  end
+
+  sub_test_case("#or_later?") do
+    test "same" do
+      assert_true(WebKitGtk::Version.or_later?(WebKitGtk::Version::MAJOR,
+                                               WebKitGtk::Version::MINOR,
+                                               WebKitGtk::Version::MICRO))
+    end
+
+    test "later" do
+      assert_true(WebKitGtk::Version.or_later?(WebKitGtk::Version::MAJOR,
+                                               WebKitGtk::Version::MINOR - 1,
+                                               WebKitGtk::Version::MICRO))
+    end
+
+    test "earlier" do
+      assert_false(WebKitGtk::Version.or_later?(WebKitGtk::Version::MAJOR,
+                                                WebKitGtk::Version::MINOR + 1,
+                                                WebKitGtk::Version::MICRO))
+    end
+  end
+end
diff --git a/webkit-gtk2/test/run-test.rb b/webkit-gtk2/test/run-test.rb
index f4933a6..93d6f24 100755
--- a/webkit-gtk2/test/run-test.rb
+++ b/webkit-gtk2/test/run-test.rb
@@ -1,6 +1,6 @@
 #!/usr/bin/env ruby
 #
-# Copyright (C) 2013  Ruby-GNOME2 Project Team
+# Copyright (C) 2013-2015  Ruby-GNOME2 Project Team
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -66,4 +66,4 @@ rescue GLib::Error
   exit(true)
 end
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(webkit_gtk2_base, "test"))
diff --git a/webkit2-gtk/test/run-test.rb b/webkit2-gtk/test/run-test.rb
index 47ac11b..910f40e 100755
--- a/webkit2-gtk/test/run-test.rb
+++ b/webkit2-gtk/test/run-test.rb
@@ -69,4 +69,4 @@ rescue GLib::Error
   exit(true)
 end
 
-exit Test::Unit::AutoRunner.run(true)
+exit Test::Unit::AutoRunner.run(true, File.join(webkit2_gtk_base, "test"))

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/ruby-gnome2.git



More information about the Pkg-ruby-extras-commits mailing list