summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Pirotte <david@altosw.be>2023-08-31 02:22:09 -0300
committerDavid Pirotte <david@altosw.be>2023-08-31 02:22:09 -0300
commit9fe24520b46cdf007c226fc42140f67608a76e4d (patch)
treef7f77688c3d32ea3778a44d6809b68ff5de0f05c
parent5d7c6a5da116302cc0d8c4f1ab19a2bb2085ea10 (diff)
parenta9d452cf328156caf01f6076ac43a20d1742bc71 (diff)
Prepare 0.8.0-a.5v0.8.0-a.5
* Merge branch 'devel'.
-rw-r--r--INSTALL21
-rw-r--r--Makefile.am6
-rw-r--r--NEWS87
-rw-r--r--README4
-rw-r--r--configure.ac12
-rw-r--r--doc/Makefile.am5
-rw-r--r--doc/cr-gi-object-info.texi66
-rw-r--r--doc/cr-gi-version.texi4
-rw-r--r--doc/cr-gi.texi2
-rw-r--r--doc/cr-glib-byte-arrays.texi45
-rw-r--r--doc/cr-glib-misc-util-funcs.texi17
-rw-r--r--doc/cr-glib-version-information.texi47
-rw-r--r--doc/cr-glib.texi7
-rw-r--r--doc/cr-gobject-gobject.texi25
-rw-r--r--doc/cr-gobject-params-vals.texi131
-rw-r--r--doc/cr-gobject-signals.texi99
-rw-r--r--doc/cr-gobject-type-info.texi11
-rw-r--r--doc/cr-support-goops.texi46
-rw-r--r--doc/cr-support-struct.texi3
-rw-r--r--doc/introduction.texi20
-rw-r--r--doc/ug-bys-sxml-supprt-emacs-users.texi28
-rw-r--r--doc/ug-bys.texi4
-rw-r--r--doc/ug-ggv-utils.texi13
-rw-r--r--doc/ug-ggv.texi3
-rw-r--r--doc/variables.texi13
-rw-r--r--examples/Makefile.am5
-rw-r--r--examples/adw-1/Makefile.am36
-rwxr-xr-xexamples/adw-1/adw1-demo.scm66
-rw-r--r--examples/adw-1/adw1-demo/debug-info.scm211
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/avatar-delete-symbolic.svg4
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/avatar-save-symbolic.svg7
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-alarm-symbolic.svg1
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-stopwatch-symbolic.svg80
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-timer-symbolic.svg88
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-world-symbolic.svg86
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchpad-swipe-back-symbolic-rtl.svg179
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchpad-swipe-back-symbolic.svg179
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchscreen-swipe-back-symbolic-rtl.svg187
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchscreen-swipe-back-symbolic.svg187
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/preferences-window-layout-symbolic.svg155
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/preferences-window-search-symbolic.svg7
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-copy-symbolic.svg7
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-forbidden-symbolic.svg1
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-preferences-symbolic.svg1
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-shutdown-symbolic.svg1
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/style-classes-symbolic.svg152
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/tab-new-symbolic.svg8
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-end-symbolic-rtl.svg8
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-end-symbolic.svg8
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-start-symbolic-rtl.svg8
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-start-symbolic.svg8
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-about-symbolic.svg4
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-banner-symbolic.svg9
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-carousel-symbolic.svg11
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-clamp-symbolic.svg1
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-dialog-symbolic.svg2
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-flap-symbolic.svg7
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-leaflet-symbolic.svg46
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-list-symbolic.svg78
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-tab-view-symbolic.svg6
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-toast-symbolic.svg2
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-view-switcher-symbolic.svg6
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/apps/org.example.Typeset.svg1
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/apps/org.gnome.Boxes.svg1
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/status/dark-mode-symbolic.svg68
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/status/light-mode-symbolic.svg6
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/status/tab-audio-muted-symbolic.svg1
-rw-r--r--examples/adw-1/adw1-demo/icons/hicolor/scalable/status/tab-audio-playing-symbolic.svg1
-rw-r--r--examples/adw-1/adw1-demo/icons/org.example.Typeset.Source.svg3635
-rw-r--r--examples/adw-1/adw1-demo/leaflet.scm132
-rw-r--r--examples/adw-1/adw1-demo/preferences.scm130
-rw-r--r--examples/adw-1/adw1-demo/style-dark.css39
-rw-r--r--examples/adw-1/adw1-demo/style.css82
-rw-r--r--examples/adw-1/adw1-demo/ui/Makefile42
-rw-r--r--examples/adw-1/adw1-demo/ui/leaflet.scm87
-rw-r--r--examples/adw-1/adw1-demo/ui/leaflet.ui2
-rw-r--r--examples/adw-1/adw1-demo/ui/preferences.scm215
-rw-r--r--examples/adw-1/adw1-demo/ui/preferences.ui2
-rw-r--r--examples/adw-1/adw1-demo/ui/sxml-ui.el101
-rw-r--r--examples/adw-1/adw1-demo/ui/welcome.scm51
-rw-r--r--examples/adw-1/adw1-demo/ui/welcome.ui2
-rw-r--r--examples/adw-1/adw1-demo/ui/window.scm213
-rw-r--r--examples/adw-1/adw1-demo/ui/window.ui2
-rw-r--r--examples/adw-1/adw1-demo/welcome.scm51
-rw-r--r--examples/adw-1/adw1-demo/window.scm256
-rw-r--r--examples/adw-1/hello-world.pngbin0 -> 6541 bytes
-rwxr-xr-xexamples/adw-1/hello-world.scm89
-rwxr-xr-xexamples/gtk-4/animated-paintable.scm2
-rwxr-xr-xexamples/gtk-4/clipboard.scm2
-rwxr-xr-xexamples/gtk-4/css-basics.scm2
-rwxr-xr-xexamples/gtk-4/drawing-widget.scm2
-rwxr-xr-xexamples/gtk-4/hello-world.scm2
-rw-r--r--[-rwxr-xr-x]examples/gtk-4/nuclear-icon.scm0
-rwxr-xr-xexamples/gtk-4/peg-solitaire.scm29
-rwxr-xr-xexamples/gtk-4/revealer.scm8
-rwxr-xr-xexamples/gtk-4/search-bar.scm2
-rwxr-xr-xexamples/gtk-4/simple-paintable.scm2
-rw-r--r--g-golf.scm8
-rw-r--r--g-golf/gi/cache-others.scm96
-rw-r--r--g-golf/gi/object-info.scm54
-rw-r--r--g-golf/gi/utils.scm3
-rw-r--r--g-golf/glib.scm6
-rw-r--r--g-golf/glib/byte-arrays.scm57
-rw-r--r--g-golf/glib/misc-util-funcs.scm13
-rw-r--r--g-golf/glib/version-information.scm75
-rw-r--r--g-golf/gobject/gobject.scm21
-rw-r--r--g-golf/gobject/params-vals.scm140
-rw-r--r--g-golf/gobject/signals.scm130
-rw-r--r--g-golf/gobject/type-info.scm11
-rw-r--r--g-golf/hl-api.scm4
-rw-r--r--g-golf/hl-api/callable.scm9
-rw-r--r--g-golf/hl-api/callback.scm14
-rw-r--r--g-golf/hl-api/function.scm3
-rw-r--r--g-golf/hl-api/glib.scm48
-rw-r--r--g-golf/hl-api/gobject.scm635
-rw-r--r--g-golf/hl-api/gparam.scm96
-rw-r--r--g-golf/hl-api/gtype.scm205
-rw-r--r--g-golf/hl-api/n-decl.scm2
-rw-r--r--g-golf/hl-api/object.scm20
-rw-r--r--g-golf/hl-api/signal.scm123
-rw-r--r--g-golf/hl-api/utils.scm15
-rw-r--r--g-golf/hl-api/vfunc.scm72
-rw-r--r--g-golf/override/gdk.scm10
-rw-r--r--g-golf/override/gtk.scm34
-rw-r--r--g-golf/support.scm6
-rw-r--r--g-golf/support/goops.scm38
-rw-r--r--g-golf/support/libg-golf.scm162
-rw-r--r--g-golf/support/sxml.scm61
-rw-r--r--g-golf/support/utils.scm10
-rw-r--r--libg-golf/gg-gobject.c164
-rw-r--r--libg-golf/gg-gobject.h90
-rw-r--r--test-suite/tests/glib.scm6
-rw-r--r--test-suite/tests/gobject.scm31
-rw-r--r--test-suite/tests/hl-api.scm34
134 files changed, 9877 insertions, 460 deletions
diff --git a/INSTALL b/INSTALL
index 9093ac2..b2491a8 100644
--- a/INSTALL
+++ b/INSTALL
@@ -33,8 +33,8 @@ G-Golf needs the following software to run:
[[http://www.gnu.org/software/guile][Guile]] >= 2.0.14
[allows 2.2, 3.0 (>= 3.0.7)]
[[http://www.nongnu.org/guile-lib/][Guile-Lib]] >= 0.2.5
- Glib-2.0 >= 2.48.0
- Gobject-2.0 >= 2.48.0
+ Glib-2.0 >= 2.73.0
+ Gobject-2.0 >= 2.73.0
GObject-Introspection-1.0 >= 1.72.0
*** Test-Suite Dependencies
@@ -47,8 +47,8 @@ software to run its test-suite:
*** Examples Dependencies
-G-Golf currently needs the following additional software to run its
-examples:
+Gtk-4.0 examples: G-Golf currently needs the following additional
+software to run its Gtk-4.0 examples:
Gtk-4.0 >= 4.10.0
Guile-Cairo > 1.11.2
@@ -57,12 +57,17 @@ examples:
contains the following new interface (which is not in guile-cairo
1.11.2): cairo-pointer->context
+Adwaita examples: G-Golf currently needs the following additional
+software to run its Adw-1 examples:
+
+ Adw-1 >= 1.2.2
+
** Install from the tarball
G-Golf release are [[http://ftp.gnu.org/gnu/g-golf/][here]]. The latest tarballs are:
- g-golf-0.8.0-a.4.tar.gz
- g-golf-0.8.0-a.4.tar.gz.sig
+ g-golf-0.8.0-a.5.tar.gz
+ g-golf-0.8.0-a.5.tar.gz.sig
[ GPG Key: A3057AD7
[ gpg --keyserver keys.gnupg.net --recv-keys A3057AD7
@@ -71,8 +76,8 @@ Assuming you have satisfied the dependencies, open a terminal and
proceed with the following steps:
cd <download-path>
- tar zxf g-golf-0.8.0-a.4.tar.gz
- cd g-golf-0.8.0-a.4
+ tar zxf g-golf-0.8.0-a.5.tar.gz
+ cd g-golf-0.8.0-a.5
./configure [--prefix=/your/prefix] [--with-guile-site=yes]
make
make install
diff --git a/Makefile.am b/Makefile.am
index b0c0d26..835c2e9 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
####
-#### Copyright (C) 2016 - 2022
+#### Copyright (C) 2016 - 2023
#### Free Software Foundation, Inc.
#### This file is part of GNU G-Golf
@@ -42,8 +42,10 @@ SOURCES = \
g-golf/support/union.scm \
g-golf/support/bytevector.scm \
g-golf/support/ffi.scm \
+ g-golf/support/sxml.scm \
g-golf/support.scm \
g-golf/init.scm \
+ g-golf/glib/version-information.scm \
g-golf/glib/mem-alloc.scm \
g-golf/glib/main-event-loop.scm \
g-golf/glib/io-channels.scm \
@@ -51,6 +53,7 @@ SOURCES = \
g-golf/glib/unix-utils.scm \
g-golf/glib/glist.scm \
g-golf/glib/gslist.scm \
+ g-golf/glib/byte-arrays.scm \
g-golf/glib/quarks.scm \
g-golf/glib.scm \
g-golf/gobject/type-info.scm \
@@ -92,6 +95,7 @@ SOURCES = \
g-golf/gdk.scm \
g-golf/hl-api/n-decl.scm \
g-golf/hl-api/gtype.scm \
+ g-golf/hl-api/gparam.scm \
g-golf/hl-api/iface.scm \
g-golf/hl-api/gobject.scm \
g-golf/hl-api/events.scm \
diff --git a/NEWS b/NEWS
index b6cf06f..3178b9d 100644
--- a/NEWS
+++ b/NEWS
@@ -26,6 +26,90 @@ warranty.
* Latest News
+** August 2023
+
+[[http://www.gnu.org/software/g-golf][GNU G-Golf]] version 0.8.0-a.5 is released.
+
+This is the fifth release of the upcoming 0.8.0 release, now available
+for testing.
+
+*** Changes since 0.8.0-a.4
+
+Here is a summary of the noteworthy changes since version 0.8.0-a.4. See
+G-Golf [[http://git.savannah.gnu.org/cgit/g-golf.git][git summary]] and [[http://git.savannah.gnu.org/cgit/g-golf.git/log/][git log]] for a complete list and description.
+
+**** Dependencies
+
+ Glib-2.0 >= 2.73.0
+ Gobject-2.0 >= 2.73.0
+
+G-Golf requires GObject-Introspection >= 1.72.0. This actually imposes
+Glib-2.0 >= 2.73.0, which itself imposes Gobject-2.0 >= 2.73.0
+
+**** New features
+
+Derived class
+GObject properties and signals
+
+ Derived classes now support a mechanism that allow users to expose
+ slots as gobject properties and define new signals.
+
+Templates
+
+ This release adds support for templates, a mechanism and facilities
+ exposed by GtkWidget to automate the procedure of creating composite
+ widgets with GtkBuilder XML.
+
+Template and GtkBuilder ui files
+SXML support
+
+ [ currently in the examples/adw-1/adw1-demo/ui directory ]
+
+ sxml-ui.el
+
+ Emacs users should import this file in their .emacs file.
+
+ This is an attempt to provide both indentation and font-lock support,
+ so ui files editing becomes a more pleasant exprerience. It is a first
+ draft, better then nothing (much better imo), but suggestions to
+ improve would be welcome.
+
+ Makefile
+
+ Offered as an example of the simplest possible way to convert all
+ *.scm files of a directory to their corresponding *.ui files.
+
+**** Examples
+
+Adwaita Demo
+
+A G-Golf port of the Adwaita 1 demo. This is a work in progress,
+currently implementing the Adwaita 1 demo window, header bars,
+primary-menu (the inspector, preferences and about actions and windows)
+as well as the Welcome and Leaflet pages:
+
+Note: Adwaita 1.4 (unavailable in distros at the time of this release)
+deprecates the AdwLeaflet* classes, in favor of the AdwNavigationView
+and AdwNavigationPage classes. We'll move the demo to use those when
+Adwaita 1.4 becomes available in dostros.
+
+**** Bug fixing
+
+A few G-Golf core bugs have been fixed, but none that we could expose
+here as 'user visible'. If you're nonetheless interested to find out
+what progress we made on that front, search the git logs for 'Fixing'
+or 'Bug fixing'.
+
+The peg-solitaire example
+
+An ABI change was made, by the Gtk team, in Gtk 4.10.0, to the
+gtk-css-provider-load-from-data function second argument, wHich is no
+longer defined as an array, but a utf8, and hence g-golf would fail,
+when using Gtk 4.10.0, to detect, compute and supply the third argument,
+which is the css string length - fixed.
+
+* Older News
+
** April 2023
[[http://www.gnu.org/software/g-golf][GNU G-Golf]] version 0.8.0-a.4 is released.
@@ -66,9 +150,6 @@ Missing <gobject> g-struct-fields
completed: retreive the class-struct and fill the <gobject>
g-struct-fields slot - used by the vfunc mechanism.
-
-* Older News
-
** February 2023
[[http://www.gnu.org/software/g-golf][GNU G-Golf]] version 0.8.0-a.3 is released.
diff --git a/README b/README
index 01b6253..ab8482c 100644
--- a/README
+++ b/README
@@ -81,9 +81,9 @@ points to its source code, in the G-Golf sources [[http://git.savannah.gnu.org/c
** Latest News
-April 2023
+August 2023
-GNU G-Golf version 0.8.0-a.4 is released.
+GNU G-Golf version 0.8.0-a.5 is released.
Visit the NEWS file or see the [[http://git.savannah.gnu.org/cgit/g-golf.git/tree/NEWS][News]] page for the list of visible changes
since the last release, as well as older news.
diff --git a/configure.ac b/configure.ac
index 6a40cf0..7f59f8d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -31,7 +31,7 @@ AC_PREREQ(2.69)
AC_INIT(
[g-golf],
- [0.8.0-a.4],
+ [0.8.0-a.5],
[bug-g-golf@gnu.org])
AC_CONFIG_AUX_DIR([build-aux])
@@ -39,7 +39,7 @@ AC_CONFIG_MACRO_DIR([m4])
dnl Use `serial-tests' so the output `check-guile' is not hidden
dnl (`parallel-tests' is the default in Automake 1.13.)
dnl `serial-tests' was introduced in Automake 1.12.
-AM_INIT_AUTOMAKE([1.14 gnu -Wall -Werror -Wno-portability -Wno-syntax \
+AM_INIT_AUTOMAKE([1.14 gnu tar-ustar -Wall -Werror -Wno-portability -Wno-syntax \
color-tests serial-tests foreign])
AM_MAINTAINER_MODE([enable])
AM_SILENT_RULES([yes])
@@ -91,11 +91,13 @@ PKG_CHECK_MODULES(GOBJECT_INTROSPECTION, gobject-introspection-1.0 >= 1.72.0)
AC_SUBST(GOBJECT_INTROSPECTION_CFLAGS)
AC_SUBST(GOBJECT_INTROSPECTION_LIBS)
-PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.48.0)
+# imposed by the gobject-introspection dependency
+PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.73.0)
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)
-PKG_CHECK_MODULES(GOBJECT, gobject-2.0 >= 2.48.0)
+# imposed by the glib dependency
+PKG_CHECK_MODULES(GOBJECT, gobject-2.0 >= 2.73.0)
AC_SUBST(GOBJECT_CFLAGS)
AC_SUBST(GOBJECT_LIBS)
@@ -104,6 +106,7 @@ AC_SUBST(GOBJECT_LIBS)
# AC_SUBST(GTK_LIBS)
PKG_CHECK_MODULES(GUILE_LIB, guile-lib-1.0 >= 0.2.5)
+PKG_CHECK_MODULES(FFI, libffi >= 3.3.0)
AC_CONFIG_FILES(
@@ -118,6 +121,7 @@ AC_CONFIG_FILES([
test-suite/Makefile
examples/Makefile
examples/gtk-4/Makefile
+ examples/adw-1/Makefile
])
AC_OUTPUT
diff --git a/doc/Makefile.am b/doc/Makefile.am
index a8f1a3e..e7194c9 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -1,6 +1,6 @@
####
-#### Copyright (C) 2016 - 2022
+#### Copyright (C) 2016 - 2023
#### Free Software Foundation, Inc.
#### This file is part of GNU G-Golf
@@ -43,6 +43,7 @@ g_golf_TEXINFOS = \
ug-bys-goops-notes-and-conventions.texi \
ug-bys-configuring-guile-for-g-golf.texi \
ug-bys-customizing-g-golf.texi \
+ ug-bys-sxml-supprt-emacs-users.texi \
ug-gswg.texi \
ug-gswg-hello-world.texi \
ug-gswg-selective-import.texi \
@@ -60,6 +61,7 @@ g_golf_TEXINFOS = \
cr-overview.texi \
cr-ov-structure-and-naming-conventions.texi \
cr-glib.texi \
+ cr-glib-version-information.texi \
cr-glib-mem-alloc.texi \
cr-glib-main-event-loop.texi \
cr-glib-io-channels.texi \
@@ -67,6 +69,7 @@ g_golf_TEXINFOS = \
cr-glib-unix-utils.texi \
cr-glib-glist.texi \
cr-glib-gslist.texi \
+ cr-glib-byte-arrays.texi \
cr-glib-quarks.texi \
cr-gobject.texi \
cr-gobject-type-info.texi \
diff --git a/doc/cr-gi-object-info.texi b/doc/cr-gi-object-info.texi
index 98acc69..bc4d2f6 100644
--- a/doc/cr-gi-object-info.texi
+++ b/doc/cr-gi-object-info.texi
@@ -1,7 +1,7 @@
@c -*-texinfo-*-
@c This is part of the GNU G-Golf Reference Manual.
-@c Copyright (C) 2016 - 2021 Free Software Foundation, Inc.
+@c Copyright (C) 2016 - 2023 Free Software Foundation, Inc.
@c See the file g-golf.texi for copying conditions.
@@ -45,6 +45,10 @@ GIObjectInfo — Structs representing a GObject.
@item @ref{g-object-info-get-n-vfuncs}
@item @ref{g-object-info-get-vfunc}
@item @ref{g-object-info-get-class-struct}
+@item @ref{g-object-info-get-set-value-function}
+@item @ref{g-object-info-get-set-value-function-pointer}
+@item @ref{g-object-info-get-get-value-function}
+@item @ref{g-object-info-get-get-value-function-pointer}
@end table
@end indentedblock
@@ -69,12 +73,15 @@ GIBaseInfo @*
@subheading Description
-@code{GIObjectInfo} represents a @uref{@value{UGOBJECT-GObject-struct},
-GObject}. This doesn't represent a specific instance of a GObject,
-instead this represent the object type (eg class).
+@code{GIObjectInfo} represents a classed type.
-A GObject has methods, fields, properties, signals, interfaces,
-constants and virtual functions.
+Classed types in GType inherit from
+@uref{@value{UGOBJECT-Class-Hierarchy}, GTypeInstance}. The most common
+type is GObject. This doesn't represent a specific instance of a
+GObject, instead this represent the object type (eg class).
+
+A @code{GIObjectInfo} has methods, fields, properties, signals,
+interfaces, constants and virtual functions.
@subheading Procedures
@@ -382,4 +389,51 @@ the data.
@end deffn
+@anchor{g-object-info-get-set-value-function}
+@deffn Procedure g-object-info-get-set-value-function info
+
+Returns a string.
+
+Obtain the symbol name (within the GI context, a symbol name is a
+string) of the function that should be called to set a GValue giving an
+object instance pointer of this object type.
+@end deffn
+
+
+@anchor{g-object-info-get-set-value-function-pointer}
+@deffn Procedure g-object-info-get-set-value-function-pointer info
+
+Returns a pointer.
+
+Obtain a pointer to a function which can be used to set a GValue giving
+an object instance pointer of this object type. This takes derivation
+into account and will reversely traverse the base classes of this type,
+starting at the top type.
+@end deffn
+
+
+@anchor{g-object-info-get-get-value-function}
+@deffn Procedure g-object-info-get-get-value-function info
+
+Returns a string.
+
+Obtain the symbol name (within the GI context, a symbol name is a
+string) of the function that should be called to get a GValue instance
+pointer of this object type giving an object instance pointer of this
+object type.
+@end deffn
+
+
+@anchor{g-object-info-get-get-value-function-pointer}
+@deffn Procedure g-object-info-get-get-value-function-pointer info
+
+Returns a pointer.
+
+Obtain a pointer to a function which can be used to get a GValue
+instance pointer giving an object instance pointer of this object
+type. This takes derivation into account and will reversely traverse the
+base classes of this type, starting at the top type.
+@end deffn
+
+
@c @subheading Types and Values
diff --git a/doc/cr-gi-version.texi b/doc/cr-gi-version.texi
index 3e75da0..1b8b78a 100644
--- a/doc/cr-gi-version.texi
+++ b/doc/cr-gi-version.texi
@@ -7,8 +7,8 @@
@c @defindex tl
-@node Version Information
-@subsection Version Information
+@node Version Information (2)
+@subsection Version Information (2)
G-Golf GIRepository Version Informatrion low level API.@*
Version Information - Procedures to check the GIRepository version.
diff --git a/doc/cr-gi.texi b/doc/cr-gi.texi
index bd18f02..53be3f4 100644
--- a/doc/cr-gi.texi
+++ b/doc/cr-gi.texi
@@ -25,7 +25,7 @@ Intropection (manual) section, but there are some exceptions, such as
@menu
* Repository:: GObject Introspection repository manager.
* Typelib:: Layout and accessors for typelib.
-* Version Information:: Procedures to check the GIRepository version.
+* Version Information (2):: Procedures to check the GIRepository version.
* Common Types:: GObject Introspection common types.
* Base Info:: Base struct for all GITypelib structs.
* Callable Info:: Struct representing a callable.
diff --git a/doc/cr-glib-byte-arrays.texi b/doc/cr-glib-byte-arrays.texi
new file mode 100644
index 0000000..cfb7a4c
--- /dev/null
+++ b/doc/cr-glib-byte-arrays.texi
@@ -0,0 +1,45 @@
+@c -*-texinfo-*-
+@c This is part of the GNU G-Golf Reference Manual.
+@c Copyright (C) 2023 Free Software Foundation, Inc.
+@c See the file g-golf.texi for copying conditions.
+
+
+@c @defindex tl
+
+
+@node Byte Arrays
+@subsection Byte Arrays
+
+G-Golf Glib Byte Arrays low level API.@*
+Byte Arrays — Arrays of bytes.
+
+
+@subheading Procedures
+
+@indentedblock
+@table @code
+@item @ref{g-bytes-new}
+@end table
+@end indentedblock
+
+
+@subheading Description
+
+FIXME
+
+
+@subheading Procedures
+
+
+@anchor{g-bytes-new}
+@deffn Procedure g-bytes-new data size
+
+Returns a pointer.
+
+Create a new @code{GBytes}@footnote{A simple refcounted data type
+representing an immutable sequence of zero or more bytes from an
+unspecified origin.} from @code{data}.
+
+@code{data} is copied. If @code{size} is 0, @code{data} may be NULL.
+
+@end deffn
diff --git a/doc/cr-glib-misc-util-funcs.texi b/doc/cr-glib-misc-util-funcs.texi
index 3279c3c..98e33ac 100644
--- a/doc/cr-glib-misc-util-funcs.texi
+++ b/doc/cr-glib-misc-util-funcs.texi
@@ -22,6 +22,7 @@ Miscellaneous Utility Functions - a selection of portable utility functions
@item @ref{g-set-prgname}
@item @ref{g-get-system-data-dirs}
@item @ref{g-get-system-config-dirs}
+@item @ref{g-get-os-info}
@end table
@end indentedblock
@@ -148,4 +149,20 @@ available to anyone using the computer.
@end deffn
+@anchor{g-get-os-info}
+@deffn Procedure g-get-os-info key-name
+
+Returns a string or #f.
+
+Obtains and returns information about the operating system.
+
+On Linux this comes from the @file{/etc/os-release} file. On other
+systems, it may come from a variety of sources. You can pass any UTF-8
+string key name.
+
+The associated value for the requested @var{key-name} is returned or
+@code{#f} if this information is not provided.
+@end deffn
+
+
@c @subheading Types and Values
diff --git a/doc/cr-glib-version-information.texi b/doc/cr-glib-version-information.texi
new file mode 100644
index 0000000..66226c7
--- /dev/null
+++ b/doc/cr-glib-version-information.texi
@@ -0,0 +1,47 @@
+@c -*-texinfo-*-
+@c This is part of the GNU G-Golf Reference Manual.
+@c Copyright (C) 2023 Free Software Foundation, Inc.
+@c See the file g-golf.texi for copying conditions.
+
+
+@c @defindex tl
+
+
+@node Version Information (1)
+@subsection Version Information (1)
+
+G-Golf Glib Version Information low level API.@*
+Version Information — variables and functions to check the GLib version.
+
+
+@subheading Procedures
+
+@indentedblock
+@table @code
+@item @ref{glib-get-major-version}
+@item @ref{glib-get-minor-version}
+@item @ref{glib-get-micro-version}
+@end table
+@end indentedblock
+
+
+@subheading Description
+
+GLib version information variables and functions.
+
+
+@subheading Procedures
+
+
+@anchor{glib-get-major-version}
+@anchor{glib-get-minor-version}
+@anchor{glib-get-micro-version}
+@deffn Procedure glib-get-major-version
+@deffnx Procedure glib-get-minor-version
+@deffnx Procedure glib-get-micro-version
+
+Returns an integer.
+
+Obtains and returns the GLib runtime library @var{major}, @var{minor}
+and @var{micro} version number.
+@end deffn
diff --git a/doc/cr-glib.texi b/doc/cr-glib.texi
index a4bd76c..5709e20 100644
--- a/doc/cr-glib.texi
+++ b/doc/cr-glib.texi
@@ -1,6 +1,6 @@
@c -*-texinfo-*-
@c This is part of the GNU G-Golf Reference Manual.
-@c Copyright (C) 2016 - 2020 Free Software Foundation, Inc.
+@c Copyright (C) 2016 - 2023 Free Software Foundation, Inc.
@c See the file g-golf.texi for copying conditions.
@@ -22,6 +22,7 @@ though they might be some exception in the future.
@menu
+* Version Information (1):: Version Information.
* Memory Allocation:: General memory handling.
* The Main Event Loop:: Manages all available sources of events.
* IO Channels:: Portable support for using files, pipes and sockets.
@@ -29,10 +30,11 @@ though they might be some exception in the future.
* UNIX-specific utilities and integration:: Pipes, signal handling.
* Doubly-Linked Lists:: Linked lists that can be iterated in both directions
* Singly-Linked Lists:: Linked lists that can be iterated in one direction
+* Byte Arrays:: Arrays of bytes.
* Quarks:: a2-way association between a string and a unique integer identifier
@end menu
-
+@include cr-glib-version-information.texi
@include cr-glib-mem-alloc.texi
@include cr-glib-main-event-loop.texi
@include cr-glib-io-channels.texi
@@ -40,4 +42,5 @@ though they might be some exception in the future.
@include cr-glib-unix-utils.texi
@include cr-glib-glist.texi
@include cr-glib-gslist.texi
+@include cr-glib-byte-arrays.texi
@include cr-glib-quarks.texi
diff --git a/doc/cr-gobject-gobject.texi b/doc/cr-gobject-gobject.texi
index f88848d..35755ae 100644
--- a/doc/cr-gobject-gobject.texi
+++ b/doc/cr-gobject-gobject.texi
@@ -1,6 +1,6 @@
@c -*-texinfo-*-
@c This is part of the GNU G-Golf Reference Manual.
-@c Copyright (C) 2016 - 2022 Free Software Foundation, Inc.
+@c Copyright (C) 2016 - 2023 Free Software Foundation, Inc.
@c See the file g-golf.texi for copying conditions.
@@ -15,6 +15,7 @@ GObject — The base object type
@indentedblock
@table @code
+@item @ref{g-object-class-install-property}
@item @ref{g-object-class-find-property}
@item @ref{g-object-new}
@item @ref{g-object-new-with-properties}
@@ -70,6 +71,28 @@ Note: in this section, unless otherwise specified, the @var{object}
argument is [must be] a pointer to a @code{GObject} (instance).
+@anchor{g-object-class-install-property}
+@deffn Procedure g-object-class-install-property g-class p-id p-spec
+
+Returns nothing.
+
+Installs a new property.
+
+The arguments are @var{g-class} a (pointer to a) @code{GObjectClass}),
+ @var{p-id} the id for the new property, and @var{p-spec} the (a pointer
+ to the) @code{GParamSpec} for the new property.
+
+All properties should be installed during the class initializer. It is
+possible to install properties after that, but doing so is not
+recommend, and specifically, is not guaranteed to be thread-safe vs. use
+of properties on the same type on other threads.
+
+Note that it is possible to redefine a property in a derived class, by
+installing a property with the same name. This can be useful at times,
+e.g. to change the range of allowed values or the default value.
+@end deffn
+
+
@anchor{g-object-class-find-property}
@deffn Procedure g-object-class-find-property g-class name
diff --git a/doc/cr-gobject-params-vals.texi b/doc/cr-gobject-params-vals.texi
index 9339ced..ba1abae 100644
--- a/doc/cr-gobject-params-vals.texi
+++ b/doc/cr-gobject-params-vals.texi
@@ -1,6 +1,6 @@
@c -*-texinfo-*-
@c This is part of the GNU G-Golf Reference Manual.
-@c Copyright (C) 2016 - 2022 Free Software Foundation, Inc.
+@c Copyright (C) 2016 - 2023 Free Software Foundation, Inc.
@c See the file g-golf.texi for copying conditions.
@@ -11,7 +11,7 @@ G-Golf GObject Parameters and Values low level API.@*
Parameters and Values — Standard Parameter and Value Types
-@subheading Procedures
+@subheading Procedures and Methods
@indentedblock
@table @code
@@ -22,6 +22,7 @@ Parameters and Values — Standard Parameter and Value Types
@item @ref{g-value-set!}
@item @ref{g-value-get-boolean}
@item @ref{g-value-set-boolean}
+@item @ref{g-param-spec-int}
@item @ref{g-value-get-int}
@item @ref{g-value-set-int}
@item @ref{g-value-get-uint}
@@ -30,6 +31,7 @@ Parameters and Values — Standard Parameter and Value Types
@item @ref{g-value-set-float}
@item @ref{g-value-get-double}
@item @ref{g-value-set-double}
+@item @ref{g-param-spec-enum}
@item @ref{g-value-get-enum}
@item @ref{g-value-set-enum}
@item @ref{g-value-get-flags}
@@ -49,13 +51,34 @@ Parameters and Values — Standard Parameter and Value Types
@end indentedblock
-@c @subheading Types and Values
+@subheading Types and Values
-@c @indentedblock
-@c @table @code
-@c @item @ref{%g-type-fundamental-flags}
-@c @end table
-@c @end indentedblock
+@indentedblock
+@table @code
+@item @ref{g-type-param-boolean}
+@item @ref{g-type-param-char}
+@item @ref{g-type-param-uchar}
+@item @ref{g-type-param-int}
+@item @ref{g-type-param-uint}
+@item @ref{g-type-param-long}
+@item @ref{g-type-param-ulong}
+@item @ref{g-type-param-int64}
+@item @ref{g-type-param-uint64}
+@item @ref{g-type-param-float}
+@item @ref{g-type-param-double}
+@item @ref{g-type-param-enum}
+@item @ref{g-type-param-flags}
+@item @ref{g-type-param-string}
+@item @ref{g-type-param-param}
+@item @ref{g-type-param-boxed}
+@item @ref{g-type-param-pointer}
+@item @ref{g-type-param-object}
+@item @ref{g-type-param-unichar}
+@item @ref{g-type-param-override}
+@item @ref{g-type-param-gtype}
+@item @ref{g-type-param-variant}
+@end table
+@end indentedblock
@subheading Description
@@ -143,6 +166,22 @@ Sets the content of @var{g-value} to @code{0} if @var{val} is
@end deffn
+@anchor{g-param-spec-int}
+@deffn Procedure g-param-spec-int name nick blurb @
+ minimum maximum default flags
+
+Returns a pointer.
+
+Creates and returns a pointer to a new @code{GParamSpecEnum} instance
+specifying a @code{G_TYPE_INT} property.
+
+The @var{name} is the canonical name of the property specified,
+@var{nick} its nick name, @var{blurb} its description, @var{minimum} the
+minimum value, @var{maximum} the maximum value, @var{default} the
+default value and @var{flags} the flags - for the property specified.
+@end deffn
+
+
@anchor{g-value-get-int}
@deffn Procedure g-value-get-int g-value
@@ -215,6 +254,22 @@ Sets the content of @var{g-value} to @var{double}.
@end deffn
+@anchor{g-param-spec-enum}
+@deffn Procedure g-param-spec-enum name nick blurb type @
+ default flags
+
+Returns a pointer.
+
+Creates and returns a pointer to a new @code{GParamSpecEnum} instance
+specifying a @code{G_TYPE_ENUM} property.
+
+The @var{name} is the canonical name of the property specified,
+@var{nick} its nick name, @var{blurb} its description, @var{type} a
+@code{<gi-enum>} instance, @var{default} the default value and
+@var{flags} the flags - for the property specified.
+@end deffn
+
+
@anchor{g-value-get-enum}
@deffn Procedure g-value-get-enum g-value
@@ -373,5 +428,63 @@ NULL).
@end deffn
-@c @subheading Types and Values
+@subheading Types and Values
+
+Note: in GObject, G_TYPE_PARAM_BOOLEAN, G_TYPE_PARAM_CHAR, etc., are
+defined as macros. In G-Golf, we define a procedure for each of those
+types, which binds a libg-golf function which merely invoques the macro,
+the expansion of which returns the corresponding (dynamic - runtime)
+GType value.
+
+
+@anchor{g-type-param-boolean}
+@anchor{g-type-param-char}
+@anchor{g-type-param-uchar}
+@anchor{g-type-param-int}
+@anchor{g-type-param-uint}
+@anchor{g-type-param-long}
+@anchor{g-type-param-ulong}
+@anchor{g-type-param-int64}
+@anchor{g-type-param-uint64}
+@anchor{g-type-param-float}
+@anchor{g-type-param-double}
+@anchor{g-type-param-enum}
+@anchor{g-type-param-flags}
+@anchor{g-type-param-string}
+@anchor{g-type-param-param}
+@anchor{g-type-param-boxed}
+@anchor{g-type-param-pointer}
+@anchor{g-type-param-object}
+@anchor{g-type-param-unichar}
+@anchor{g-type-param-override}
+@anchor{g-type-param-gtype}
+@anchor{g-type-param-variant}
+@deffn Procedure g-type-param-boolean
+@deffnx Procedure g-type-param-char
+@deffnx Procedure g-type-param-uchar
+@deffnx Procedure g-type-param-int
+@deffnx Procedure g-type-param-uint
+@deffnx Procedure g-type-param-long
+@deffnx Procedure g-type-param-ulong
+@deffnx Procedure g-type-param-int64
+@deffnx Procedure g-type-param-uint64
+@deffnx Procedure g-type-param-float
+@deffnx Procedure g-type-param-double
+@deffnx Procedure g-type-param-enum
+@deffnx Procedure g-type-param-flags
+@deffnx Procedure g-type-param-string
+@deffnx Procedure g-type-param-param
+@deffnx Procedure g-type-param-boxed
+@deffnx Procedure g-type-param-pointer
+@deffnx Procedure g-type-param-object
+@deffnx Procedure g-type-param-unichar
+@deffnx Procedure g-type-param-override
+@deffnx Procedure g-type-param-gtype
+@deffnx Procedure g-type-param-variant
+
+Returns a GType.
+
+Obtains and returns the GType of @code{GParamSpecBoolean},
+@code{GParamSpecChar}, etc.
+@end deffn
diff --git a/doc/cr-gobject-signals.texi b/doc/cr-gobject-signals.texi
index 3d78785..013d8fd 100644
--- a/doc/cr-gobject-signals.texi
+++ b/doc/cr-gobject-signals.texi
@@ -1,7 +1,7 @@
@c -*-texinfo-*-
@c This is part of the GNU G-Golf Reference Manual.
-@c Copyright (C) 2019 - 2021 Free Software Foundation, Inc.
+@c Copyright (C) 2019 - 2023 Free Software Foundation, Inc.
@c See the file g-golf.texi for copying conditions.
@@ -17,9 +17,12 @@ purpose notification mechanism
@indentedblock
@table @code
+@item @ref{g-signal-newv}
@item @ref{g-signal-query}
@item @ref{g-signal-lookup}
@item @ref{g-signal-list-ids}
+@item @ref{g-signal-emitv}
+@item @ref{g-signal-connect-closure-by-id}
@item @ref{g-signal-parse-name}
@end table
@end indentedblock
@@ -49,6 +52,60 @@ the GObject reference manual for a complete description.
@subheading Procedures
+@anchor{g-signal-newv}
+@deffn Procedure g-signal-newv name iface-type flags class-closure @
+ accumulator accu-data c-marshaller return-type @
+ n-param param-types
+
+Returns the signal id.
+
+Creates a new signal. The arguments are:
+
+@indentedblock
+@table @var
+
+@item name
+The name for the signal.
+
+@item iface-type
+The type this signal pertains to. It will also pertain to types which
+are derived from this type.
+
+@item flags
+A list of @ref{%g-signal-flags}, specifying detail of when the default
+handler is to be invoked. It should at least specify @code{run-first}
+or @code{run-last}.
+
+@item class-closure
+The closure to invoke on signal emission, may be #f.
+
+@item accumulator
+The accumulator for this signal; may be #f.
+
+@item accu-data
+User data for the accumulator.
+
+@item c-marshaller
+The function to translate arrays of parameter values to signal emissions
+into C language callback invocations or #f.
+
+@item return-type
+The GType of the signal returned value. The caller may obtain the GType,
+given a scheme object (or @code{'none} for a signal without a return
+value), by calling @ref{scm->g-type}.
+
+@item n-param
+The length of @var{param-types}.
+
+@item param-types
+An list of types, one for each parameter (may be @code{'()} if
+@var{n-param} is zero).
+@end table
+@end indentedblock
+
+@end deffn
+
+
@anchor{g-signal-query}
@deffn Procedure g-signal-query id
@@ -111,6 +168,46 @@ integers for a given @var{g-type}).
@end deffn
+@anchor{g-signal-emitv}
+@deffn Procedure g-signal-emitv params id detail return-value
+
+Returns nothing.
+
+Emits a signal. Signal emission is done synchronously. The method will
+only return control after all handlers are called or signal emission was
+stopped.
+
+Note that @ref{g-signal-emitv} doesn't change @var{return-value} if no
+handlers are connected.
+
+The @var{params} points to the argument list for the signal
+emission. The first element in the array is a GValue for the instance
+the signal is being emitted on. The rest are any arguments to be passed
+to the signal. The @var{id} is the signal id, @var{detail} the detail (a
+g-quark and @var{return-value} the location to store the return value of
+the signal emission (it must be provided if the specified signal returns
+a value, but may be ignored otherwise).
+@end deffn
+
+
+@anchor{g-signal-connect-closure-by-id}
+@deffn Procedure g-signal-connect-closure-by-id instance id detail closure after
+
+Returns the handler ID (always greater than 0 for successful
+connections).
+
+Connects a closure to a signal for a particular object.
+
+If @var{closure} is a floating reference (see @ref{g-closure-sink}),
+this function takes ownership of closure.
+
+The @var{instance} is the instance to connect to, the @var{id} the id of
+the signal, @var{detail} the detail (a g-quark). @var{closure} the
+closure to connect, @var{after} (a boolean) whether the handler should
+be called before or after the default handler of the signal.
+@end deffn
+
+
@anchor{g-signal-parse-name}
@deffn Procedure g-signal-parse-name detailed-signal g-type @
[force-detail-quark #t]
diff --git a/doc/cr-gobject-type-info.texi b/doc/cr-gobject-type-info.texi
index f467c78..65f2586 100644
--- a/doc/cr-gobject-type-info.texi
+++ b/doc/cr-gobject-type-info.texi
@@ -17,6 +17,7 @@ Type Information — The GLib Runtime type identification and management system
@table @code
@item @ref{g-type->symbol}
@item @ref{symbol->g-type}
+@item @ref{g-type-from-class}
@item @ref{g-type-name}
@item @ref{g-type-from-name}
@item @ref{g-type-parent}
@@ -91,6 +92,16 @@ passed in and will most likely lead to a crash.
@end deffn
+@anchor{g-type-from-class}
+@deffn Procedure g-type-from-class g-class
+
+Returns a GType.
+
+Obtains and returns the GType for @var{g-class} (a pointer to a valid
+GTypeClass structure).
+@end deffn
+
+
@anchor{g-type-name}
@deffn Procedure g-type-name g-type
diff --git a/doc/cr-support-goops.texi b/doc/cr-support-goops.texi
index 17cbe2e..95cf2e8 100644
--- a/doc/cr-support-goops.texi
+++ b/doc/cr-support-goops.texi
@@ -1,6 +1,6 @@
@c -*-texinfo-*-
@c This is part of the GNU G-Golf Reference Manual.
-@c Copyright (C) 2016 - 2019 Free Software Foundation, Inc.
+@c Copyright (C) 2016 - 2023 Free Software Foundation, Inc.
@c See the file g-golf.texi for copying conditions.
@@ -16,6 +16,10 @@
@item @ref{class-virtual-slots}
@item @ref{class-direct-g-property-slots}
@item @ref{class-g-property-slots}
+@item @ref{class-direct-child-id-slots}
+@item @ref{class-child-id-slots}
+@item @ref{class-direct-g-param-slots}
+@item @ref{class-g-param-slots}
@item @ref{mslot-set!}
@item @ref{generic?}
@end table
@@ -66,6 +70,46 @@ predicate.
@end deffn
+@anchor{class-direct-child-id-slots}
+@deffn Method class-direct-child-id-slots (self <class>)
+
+Returns a list.
+
+Obtains and returns the list of the class direct slots for @var{self}
+that contain a @code{#:child-id} slot definition option.
+@end deffn
+
+
+@anchor{class-child-id-slots}
+@deffn Method class-child-id-slots (self <class>)
+
+Returns a list.
+
+Obtains and returns the list of the class slots for @var{self} that
+contain a @code{#:child-id} slot definition option.
+@end deffn
+
+
+@anchor{class-direct-g-param-slots}
+@deffn Method class-direct-g-param-slots (self <class>)
+
+Returns a list.
+
+Obtains and returns the list of the class direct slots for @var{self}
+that contain a @code{#:g-param} slot definition option.
+@end deffn
+
+
+@anchor{class-g-param-slots}
+@deffn Method class-g-param-slots (self <class>)
+
+Returns a list.
+
+Obtains and returns the list of the class slots for @var{self} that
+contain a @code{#:g-param} slot definition option.
+@end deffn
+
+
@anchor{mslot-set!}
@deffn Procedure mslot-set! inst s1 v1 s2 v2 s3 v3 @dots{}
diff --git a/doc/cr-support-struct.texi b/doc/cr-support-struct.texi
index 20a413f..6b68977 100644
--- a/doc/cr-support-struct.texi
+++ b/doc/cr-support-struct.texi
@@ -165,7 +165,6 @@ field types is @code{void}, @code{interface} or if the total size of the
Returns an integer.
Obtain and returns the @var{field-name} offset for @var{inst}, It is an
-error to call this method if there is no such @var
-{field-name} defined
+error to call this method if there is no such @var{field-name} defined
for @var{inst}.
@end deffn
diff --git a/doc/introduction.texi b/doc/introduction.texi
index 4565ea6..c176735 100644
--- a/doc/introduction.texi
+++ b/doc/introduction.texi
@@ -126,10 +126,10 @@ Makeinfo @geq{} 6.6
@uref{@value{UGUILE-LIB}, Guile-Lib} @geq{} 0.2.5
@item
-@uref{@value{UGLIB}, Glib-2.0} @geq{} 2.48.0
+@uref{@value{UGLIB}, Glib-2.0} @geq{} 2.73.0
@item
-@uref{@value{UGOBJECT}, Gobject-2.0} @geq{} 2.48.0
+@uref{@value{UGOBJECT}, Gobject-2.0} @geq{} 2.73.0
@item
@uref{@value{UGI}, GObject-Introspection-1.0} @geq{} 1.72.0
@@ -152,8 +152,8 @@ test-suite:
@strong{-- Examples Dependencies}
-G-Golf currently needs the following additional software to run its
-examples:
+@emph{Gtk-4.0 examples:} G-Golf currently needs the following additional
+software to run its Gtk-4.0 examples:
@itemize @bullet
@item
@@ -161,6 +161,18 @@ examples:
@item
@uref{@value{UGUILE-CAIRO}, Guile-Cairo} > 1.11.2
+
+G-Golf actually requires a patched version of guile-cairo that contains
+the following new interface (which is not in guile-cairo 1.11.2):
+@code{cairo-pointer->context}.
+@end itemize
+
+@emph{Adwaita examples:} G-Golf currently needs the following additional
+software to run its Adw-1 examples:
+
+@itemize @bullet
+@item
+@uref{@value{UADW1}, Adw-1} @geq{} 1.2.2
@end itemize
diff --git a/doc/ug-bys-sxml-supprt-emacs-users.texi b/doc/ug-bys-sxml-supprt-emacs-users.texi
new file mode 100644
index 0000000..335757e
--- /dev/null
+++ b/doc/ug-bys-sxml-supprt-emacs-users.texi
@@ -0,0 +1,28 @@
+@c -*-texinfo-*-
+@c This is part of the GNU G-Golf Reference Manual.
+@c Copyright (C) 2023 Free Software Foundation, Inc.
+@c See the file g-golf.texi for copying conditions.
+
+
+@node SXML Support - Emacs users
+@subsection SXML Support - Emacs users
+
+G-Golf offers two files to support editing and maintaining GtkWidget
+template and GtkBuilder ui (xml) files as sxml files instead. Currently,
+these files are in the @file{examples/adw-1/adw1-demo/ui} directory.
+
+@file{sxml-ui.el}
+
+Emacs users should import this file in their @file{.emacs} file.
+
+This is an attempt to provide both indentation and font-lock support, so
+ui files editing becomes a more pleasant experience. It is a first draft
+and definitely an experimental attempt. Better then nothing (much better
+imo), but suggestions to improve this first and quite 'naive' draft
+would be welcome.
+
+@file{Makefile}
+
+Offered as an example of the simplest possible way to convert all
+@file{*.scm} files of a directory to their corresponding @file{*.ui}
+files.
diff --git a/doc/ug-bys.texi b/doc/ug-bys.texi
index 470c3fc..c3b6594 100644
--- a/doc/ug-bys.texi
+++ b/doc/ug-bys.texi
@@ -1,6 +1,6 @@
@c -*-texinfo-*-
@c This is part of the GNU G-Golf Reference Manual.
-@c Copyright (C) 2016 - 2021 Free Software Foundation, Inc.
+@c Copyright (C) 2016 - 2023 Free Software Foundation, Inc.
@c See the file g-golf.texi for copying conditions.
@@ -13,6 +13,7 @@
* GOOPS Notes and Conventions::
* Configuring Guile for G-Golf::
* Customizing G-Golf::
+* SXML Support - Emacs users::
@end menu
@@ -20,3 +21,4 @@
@include ug-bys-goops-notes-and-conventions.texi
@include ug-bys-configuring-guile-for-g-golf.texi
@include ug-bys-customizing-g-golf.texi
+@include ug-bys-sxml-supprt-emacs-users.texi
diff --git a/doc/ug-ggv-utils.texi b/doc/ug-ggv-utils.texi
index cf770ea..0121d59 100644
--- a/doc/ug-ggv-utils.texi
+++ b/doc/ug-ggv-utils.texi
@@ -14,6 +14,7 @@ Utils Arcade. G-Golf utilities.
@indentedblock
@table @code
+@item @ref{scm->g-type}
@item @ref{allocate-c-struct}
@end table
@end indentedblock
@@ -26,6 +27,18 @@ Welcome to the G-Golf Utils Arcade.
@subheading Syntax
+
+@anchor{scm->g-type}
+@deffn Procedure scm->g-type value
+
+Returns a GType.
+
+Obtains and returns the GType for @var{value}, which may be a number
+(then assumed to be a valid GType), a string, a symbol (a
+@ref{%g-type-fundamental-types} member) or a <gobject-class>.
+@end deffn
+
+
@anchor{allocate-c-struct}
@deffn Syntax allocate-c-struct name . fields
diff --git a/doc/ug-ggv.texi b/doc/ug-ggv.texi
index 4150500..200f780 100644
--- a/doc/ug-ggv.texi
+++ b/doc/ug-ggv.texi
@@ -1,6 +1,6 @@
@c -*-texinfo-*-
@c This is part of the GNU G-Golf Reference Manual.
-@c Copyright (C) 2022 Free Software Foundation, Inc.
+@c Copyright (C) 2022 - 2023 Free Software Foundation, Inc.
@c See the file g-golf.texi for copying conditions.
@@ -12,6 +12,7 @@
* Cache Park:: Accessing G-Golf caches.
* Customization Square:: G-Golf customization functionality.
* VFunc Alley:: VFunc G-Golf support.
+@c * Template Avenue:: Template G-Golf support.
* Utils Arcade:: G-Golf utilities.
@end menu
diff --git a/doc/variables.texi b/doc/variables.texi
index cc14ac8..f805319 100644
--- a/doc/variables.texi
+++ b/doc/variables.texi
@@ -85,6 +85,7 @@
@set UGOBJECT-Concepts-GType https://developer.gnome.org/gobject/stable/chapter-gtype.html
@set UGOBJECT-Concepts-GObject https://developer.gnome.org/gobject/stable/chapter-gobject.html
@set UGOBJECT-Concepts-Signals https://developer.gnome.org/gobject/stable/chapter-signal.html
+@set UGOBJECT-Class-Hierarchy https://docs.gtk.org/gobject/classes_hierarchy.html
@set UGOBJECT-Type-Info https://developer.gnome.org/gobject/stable/gobject-Type-Information.html
@set UGOBJECT-GType-Module https://developer.gnome.org/gobject/stable/GTypeModule.html
@@ -123,13 +124,17 @@
@set UGTK-MIGRATING-3-TO-4 https://developer.gnome.org/gtk4/stable/gtk-migrating-3-to-4.html
@set UGTK-WEB https://gtk.org/
-@set UGTK4 https://developer.gnome.org/gtk4/stable/
-@set UGTK4-APPLICATION https://developer.gnome.org/gtk4/stable/GtkApplication.html
+@set UGTK4 https://docs.gtk.org/gtk4/index.html
+@set UGTK4-APPLICATION https://docs.gtk.org/gtk4/class.Application.html
+@set UGDK4 https://docs.gtk.org/gdk4/index.html
+@set UGSK4 https://docs.gtk.org/gsk4/index.html
-@set UGDK4 https://developer.gnome.org/gdk4/stable/
-@set UGSK4 https://developer.gnome.org/gsk4/stable/
+@c
+@c Adw-1
+@c
+@set UADW1 https://gnome.pages.gitlab.gnome.org/libadwaita/doc/1-latest/
@c
@c Gio
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 80bf7a5..9a799f6 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,6 +1,6 @@
####
-#### Copyright (C) 2021
+#### Copyright (C) 2021 - 2023
#### Free Software Foundation, Inc.
#### This file is part of GNU G-Golf
@@ -22,4 +22,5 @@
SUBDIRS = \
- gtk-4
+ gtk-4 \
+ adw-1
diff --git a/examples/adw-1/Makefile.am b/examples/adw-1/Makefile.am
new file mode 100644
index 0000000..f3c7509
--- /dev/null
+++ b/examples/adw-1/Makefile.am
@@ -0,0 +1,36 @@
+
+####
+#### Copyright (C) 2023
+#### Free Software Foundation, Inc.
+
+#### This file is part of GNU G-Golf
+
+#### GNU G-Golf 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 3 of the
+#### License, or (at your option) any later version.
+
+#### GNU G-Golf 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 GNU G-Golf. If not, see
+#### <https://www.gnu.org/licenses/lgpl.html>.
+####
+
+
+EXTRA_DIST = \
+ $(wildcard *.scm) \
+ $(wildcard *.png) \
+ $(wildcard adw1-demo/*.scm) \
+ $(wildcard adw1-demo/*.css) \
+ $(wildcard adw1-demo/icons/*) \
+ $(wildcard adw1-demo/ui/*.scm) \
+ $(wildcard adw1-demo/ui/*.ui) \
+ adw1-demo/ui/sxml-ui.el \
+ adw1-demo/ui/Makefile
+
+# currently empty
+# $(wildcard adw1-demo/images/*)
diff --git a/examples/adw-1/adw1-demo.scm b/examples/adw-1/adw1-demo.scm
new file mode 100755
index 0000000..279aa4d
--- /dev/null
+++ b/examples/adw-1/adw1-demo.scm
@@ -0,0 +1,66 @@
+#! /bin/sh
+# -*- mode: scheme; coding: utf-8 -*-
+exec guile -e main -s "$0" "$@"
+!#
+
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(eval-when (expand load eval)
+ (use-modules (oop goops))
+
+ (default-duplicate-binding-handler
+ '(merge-generics replace warn-override-core warn last))
+
+ (use-modules (g-golf))
+
+ (for-each (lambda (name)
+ (gi-import-by-name "Gio" name))
+ '("Action"
+ "SimpleAction"
+ "ActionMap"
+ "Settings"
+ "SettingsSchemaSource"))
+
+ (g-irepository-require "Adw" #:version "1")
+ (for-each (lambda (name)
+ (gi-import-by-name "Adw" name))
+ '("Application")))
+
+
+(add-to-load-path
+ (dirname (current-filename)))
+
+(use-modules (adw1-demo window))
+
+
+(define (main args)
+ (let ((app (make <adw-application>
+ #:application-id "org.gnu.g-golf.adw1.demo")))
+ (connect app 'activate show-window)
+ (let ((status (g-application-run app args)))
+ (exit status))))
diff --git a/examples/adw-1/adw1-demo/debug-info.scm b/examples/adw-1/adw1-demo/debug-info.scm
new file mode 100644
index 0000000..9bb82ab
--- /dev/null
+++ b/examples/adw-1/adw1-demo/debug-info.scm
@@ -0,0 +1,211 @@
+;; -*- mode: scheme; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(define-module (adw1-demo debug-info)
+ #:use-module (ice-9 format)
+ #:use-module (ice-9 match)
+ #:use-module (oop goops)
+ #:use-module (g-golf)
+
+ #:duplicates (merge-generics
+ replace
+ warn-override-core
+ warn
+ last)
+
+ #:export (adw-version
+ debug-info))
+
+
+#;(g-export )
+
+
+(eval-when (expand load eval)
+ (g-irepository-require "Gtk" #:version "4.0")
+ (for-each (lambda (name)
+ (gi-import-by-name "Gdk" name))
+ '("Display"))
+ (for-each (lambda (name)
+ (gi-import-by-name "Gsk" name))
+ '("Renderer"))
+ (for-each (lambda (name)
+ (gi-import-by-name "Gtk" name))
+ '("get_major_version"
+ "get_minor_version"
+ "get_micro_version"))
+ (g-irepository-require "Adw" #:version "1")
+ (for-each (lambda (name)
+ (gi-import-by-name "Adw" name))
+ '("get_major_version"
+ "get_minor_version"
+ "get_micro_version")))
+
+
+(define (glib-header-version)
+ (match (map gi-import-constant
+ (map (lambda (item)
+ (g-irepository-find-by-name "GLib" item))
+ (list "MAJOR_VERSION"
+ "MINOR_VERSION"
+ "MICRO_VERSION")))
+ ((major minor micro)
+ (format #f "~A.~A.~A" major minor micro))))
+
+(define (glib-runtime-version)
+ (format #f "~A.~A.~A"
+ (glib-get-major-version)
+ (glib-get-minor-version)
+ (glib-get-micro-version)))
+
+(define (gtk-version)
+ (format #f "~A.~A.~A"
+ (gtk-get-major-version)
+ (gtk-get-minor-version)
+ (gtk-get-micro-version)))
+
+(define (adw-version)
+ (format #f "~A.~A.~A"
+ (adw-get-major-version)
+ (adw-get-minor-version)
+ (adw-get-micro-version)))
+
+(define (get-gtk-backend-info)
+ (let* ((display (gdk-display-get-default))
+ (class (class-of display)))
+ (case (class-name class)
+ ((<gdk-x11-display>) "X11")
+ ((<gdk-wayland-display>) "Wayland")
+ ((<gdk-broadway-display>) "Broadway")
+ ((<gdk-win32-display>) "Windows")
+ ((<gdk-macos-display>) "MacOS")
+ (else
+ (g-type-name (!g-type class))))))
+
+(define (get-gtk-renderer-info)
+ (let* ((display (gdk-display-get-default))
+ (surface (gdk-surface-new-toplevel display))
+ (renderer (gsk-renderer-new-for-surface surface))
+ (class (class-of renderer)))
+ (case (class-name class)
+ ((<gsk-vulkan-renderer>) "Vulkan")
+ ((<gsk-gl-renderer>) "GL")
+ ((<gsk-cairo-renderer>) "Cairo")
+ (else
+ (g-type-name (!g-type class))))))
+
+
+(define %debug-info-fmt
+ "Adwaita Demo - G-Golf port
+
+Guile:
+- Version: ~A
+
+Running against:
+- Libadwaita: ~A
+- GLib: ~A
+- GTK: ~A
+
+System:
+- Name: ~A
+- Version: ~A
+- Code name: ~A
+
+GTK:
+- GDK backend: ~A
+- GSK renderer: ~A
+
+Environment:
+- Desktop: ~A
+- Session: ~A (~A)
+- Language: ~A
+")
+
+
+(define* (debug-info #:optional (port #f))
+ (format port "~?" %debug-info-fmt
+ (list (version)
+ (adw-version)
+ (glib-runtime-version)
+ (gtk-version)
+ (g-get-os-info "NAME")
+ (or (g-get-os-info "VERSION")
+ " - not available - ")
+ (or (g-get-os-info "VERSION_CODENAME")
+ " - not available - ")
+ (get-gtk-backend-info)
+ (get-gtk-renderer-info)
+ (getenv "XDG_CURRENT_DESKTOP")
+ (getenv "XDG_SESSION_DESKTOP")
+ (getenv "XDG_SESSION_TYPE")
+ (getenv "LANG"))))
+
+
+#!
+
+(call-with-output-file
+ "/tmp/debug-info.txt"
+ (lambda (port) (debug-info port)))
+
+cat /tmp/debug-info.txt
+=> ...
+
+;;;
+;;; surface renderer test
+;;;
+
+,use (g-golf)
+(add-to-load-path "/home/david/gnu/g-golf/git/examples/adw-1")
+,use (adw1-demo debug-info)
+(gi-import-by-name "Adw" "init")
+$3 = #<<function> 7fc7d131c5a0>
+
+(adw-init)
+(gdk-display-get-default)
+$4 = #<<gdk-wayland-display> 7fc7d4cb6a20>
+
+(gdk-surface-new-toplevel $4)
+$5 = #<<gdk-wayland-toplevel> 7fc7d29741d0>
+
+(class-precedence-list (class-of $5))
+$6 = (#<<gobject-class> <gdk-wayland-toplevel> 7fc7cef72b40> #<<gobject-class> …> …)
+
+(for-each dimfi $6)
+;; #<<gobject-class> <gdk-wayland-toplevel> 7fc7cef72b40>
+;; #<<gobject-class> <gdk-wayland-surface> 7fc7cef72d20>
+;; #<<gobject-class> <gdk-surface> 7fc7d10ec960>
+;; #<<gobject-class> <gobject> 7fc7d2977e10>
+;; #<<gobject-class> <gdk-toplevel> 7fc7cef72c30>
+;; #<<gobject-class> <ginterface> 7fc7d2977d20>
+;; #<<gtype-class> <gtype-instance> 7fc7d2977f00>
+;; #<<class> <object> 7fc7dc13f380>
+;; #<<class> <top> 7fc7dc13f400>
+
+(gsk-renderer-new-for-surface $5)
+$7 = #<<gsk-gl-renderer> 7fc7d1c29490>
+
+!#
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/avatar-delete-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/avatar-delete-symbolic.svg
new file mode 100644
index 0000000..47075b8
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/avatar-delete-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 7.96875 1 c -3.851562 0 -6.96875 3.117188 -6.96875 6.96875 s 3.117188 6.96875 6.96875 6.96875 s 6.96875 -3.117188 6.96875 -6.96875 s -3.117188 -6.96875 -6.96875 -6.96875 z m -3 3.96875 h 1 h 0.03125 c 0.253906 0.011719 0.511719 0.128906 0.6875 0.3125 l 1.28125 1.28125 l 1.3125 -1.28125 c 0.265625 -0.230469 0.445312 -0.304688 0.6875 -0.3125 h 1 v 1 c 0 0.285156 -0.035156 0.550781 -0.25 0.75 l -1.28125 1.28125 l 1.25 1.25 c 0.1875 0.1875 0.28125 0.453125 0.28125 0.71875 v 1 h -1 c -0.265625 0 -0.53125 -0.09375 -0.71875 -0.28125 l -1.28125 -1.28125 l -1.28125 1.28125 c -0.1875 0.1875 -0.453125 0.28125 -0.71875 0.28125 h -1 v -1 c 0 -0.265625 0.09375 -0.53125 0.28125 -0.71875 l 1.28125 -1.25 l -1.28125 -1.28125 c -0.210938 -0.195312 -0.304688 -0.46875 -0.28125 -0.75 z m 0 0" fill="#2e3436"/>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/avatar-save-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/avatar-save-symbolic.svg
new file mode 100644
index 0000000..eafcfcb
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/avatar-save-symbolic.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 7.007812 0 v 9.5625 l -2.28125 -2.28125 c -0.191406 -0.1875 -0.457031 -0.28125 -0.71875 -0.28125 h -1 v 1 c 0 0.265625 0.089844 0.53125 0.28125 0.71875 l 4.28125 4.28125 h 0.875 l 4.28125 -4.28125 c 0.1875 -0.1875 0.277344 -0.453125 0.28125 -0.71875 v -1 h -1 c -0.265624 0 -0.53125 0.09375 -0.71875 0.28125 l -2.28125 2.28125 v -9.5625 z m 0 0"/>
+ <path d="m 2 14 l 0.007812 2 h 12 l -0.007812 -2 z m 0 0" fill-rule="evenodd"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-alarm-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-alarm-symbolic.svg
new file mode 100644
index 0000000..b7b6504
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-alarm-symbolic.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16.011"><g fill="#2e3436"><path d="M7.492 5.993A.5.5 0 007 6.501V9H5.5a.5.5 0 100 1h2a.5.5 0 00.5-.5v-3a.5.5 0 00-.508-.508z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1" color="#000" font-weight="400" font-family="sans-serif" overflow="visible"/><path d="M7.5 3C3.922 3 1 5.924 1 9.5 1 13.08 3.922 16 7.5 16S14 13.08 14 9.5C14 5.924 11.078 3 7.5 3zm0 2C9.997 5 12 7.005 12 9.5c0 2.498-2.003 4.5-4.5 4.5A4.485 4.485 0 013 9.5C3 7.005 5.003 5 7.5 5z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none" color="#000" font-weight="400" font-family="sans-serif" overflow="visible"/><path d="M4.12 12.897a1 1 0 00-.692.291l-1.125 1.094a1 1 0 101.394 1.436l1.125-1.094a1 1 0 00-.703-1.727zm6.913.094a1 1 0 00-.68 1.68l.907 1a1 1 0 101.48-1.342l-.906-1a1 1 0 00-.8-.338z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none" color="#000" font-weight="400" font-family="sans-serif" overflow="visible"/><path d="M2.111 1.421a2.5 2.5 0 00-.69 3.468L5.58 2.11a2.5 2.5 0 00-3.468-.69zm10.778 0a2.5 2.5 0 01.69 3.468L9.42 2.11a2.5 2.5 0 013.468-.69z"/></g></svg> \ No newline at end of file
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-stopwatch-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-stopwatch-symbolic.svg
new file mode 100644
index 0000000..3e567db
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-stopwatch-symbolic.svg
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ width="16"
+ viewBox="0 0 16 16.007912"
+ version="1.1"
+ id="svg7384"
+ height="16.007912">
+ <metadata
+ id="metadata90">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Gnome Symbolic Icon Theme</dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <title
+ id="title9167">Gnome Symbolic Icon Theme</title>
+ <defs
+ id="defs7386">
+ <linearGradient
+ osb:paint="solid"
+ id="linearGradient7212">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop7214" />
+ </linearGradient>
+ </defs>
+ <g
+ transform="translate(-720.98275,226.99542)"
+ style="display:inline"
+ id="layer9" />
+ <g
+ transform="translate(-720.98275,226.99542)"
+ style="display:inline"
+ id="g7628">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ id="circle8105"
+ d="m 728.5002,-223.98751 c -3.57801,0 -6.5,2.92199 -6.5,6.5 0,3.57801 2.92199,6.5 6.5,6.5 3.57801,0 6.5,-2.92199 6.5,-6.5 0,-3.57801 -2.92199,-6.5 -6.5,-6.5 z m 0,2 c 2.49713,0 4.5,2.00287 4.5,4.5 0,2.49713 -2.00287,4.5 -4.5,4.5 -2.49713,0 -4.5,-2.00287 -4.5,-4.5 0,-2.49713 2.00287,-4.5 4.5,-4.5 z" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path8109"
+ d="m 725.88106,-226.99532 a 1.0001,1.0001 0 1 0 0,2 h 5.23828 a 1.0001,1.0001 0 1 0 0,-2 z" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.78124988;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path7749"
+ d="m 733.82637,-224.21875 -2.52929,2.50781 1.40625,1.42188 2.53125,-2.50977 z" />
+ <path
+ style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="path7751"
+ d="m 728.0002,-217 h 1 v -4 h -1 z" />
+ </g>
+ <g
+ transform="translate(-479.98255,-140.00458)"
+ style="display:inline"
+ id="layer1" />
+ <g
+ transform="translate(-479.98255,-140.00458)"
+ style="display:inline"
+ id="layer10" />
+ <g
+ transform="translate(-479.98255,-140.00458)"
+ style="display:inline"
+ id="g6387" />
+ <g
+ transform="translate(-479.98255,-140.00458)"
+ style="display:inline"
+ id="layer11" />
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-timer-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-timer-symbolic.svg
new file mode 100644
index 0000000..f95aed6
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-timer-symbolic.svg
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ width="16"
+ viewBox="0 0 16 16"
+ version="1.1"
+ id="svg7384"
+ height="16">
+ <metadata
+ id="metadata90">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Gnome Symbolic Icon Theme</dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <title
+ id="title9167">Gnome Symbolic Icon Theme</title>
+ <defs
+ id="defs7386">
+ <linearGradient
+ osb:paint="solid"
+ id="linearGradient7212">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop7214" />
+ </linearGradient>
+ </defs>
+ <g
+ transform="translate(-760.98275,226.99542)"
+ style="display:inline"
+ id="layer9" />
+ <g
+ transform="translate(-760.98275,226.99542)"
+ style="display:inline"
+ id="g7628">
+ <path
+ d="m 761.0002,-214 h 15 v 2 l -15,0.0625 z"
+ id="path7984"
+ style="opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ <path
+ id="path7986"
+ d="m 772.03516,-224.36523 v 1.52929 l -3.07032,3.07227 v 1.60156 l 3.02539,3.02734 v 1.59766 h 2 v -2.42383 l -2.99804,-3.00195 3.04297,-3.04297 v -2.35937 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ id="path7990"
+ d="m 762.96484,-224.36523 v 2.35937 l 3.04297,3.04297 -2.99609,3.00195 v 2.42383 h 2 v -1.59766 l 3.02344,-3.02734 v -1.60156 l -3.07032,-3.07227 v -1.52929 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ d="m 761.0002,-224 h 15 v -2 h -15 z"
+ id="path7992"
+ style="opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ <path
+ d="m 768.47979,-216.04195 -2.47957,2.55243 h 5 z"
+ id="path7996"
+ style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ <path
+ d="m 768.46776,-220.65203 -1.32395,-1.36285 2.66013,0.01 z"
+ id="path7998"
+ style="display:inline;opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" />
+ </g>
+ <g
+ transform="translate(-519.98255,-140.00458)"
+ style="display:inline"
+ id="layer1" />
+ <g
+ transform="translate(-519.98255,-140.00458)"
+ style="display:inline"
+ id="layer10" />
+ <g
+ transform="translate(-519.98255,-140.00458)"
+ style="display:inline"
+ id="g6387" />
+ <g
+ transform="translate(-519.98255,-140.00458)"
+ style="display:inline"
+ id="layer11" />
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-world-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-world-symbolic.svg
new file mode 100644
index 0000000..1274462
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/clock-world-symbolic.svg
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ width="16"
+ viewBox="0 0 16 16.004578"
+ version="1.1"
+ id="svg7384"
+ height="16.004578">
+ <metadata
+ id="metadata90">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Gnome Symbolic Icon Theme</dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <title
+ id="title9167">Gnome Symbolic Icon Theme</title>
+ <defs
+ id="defs7386">
+ <linearGradient
+ osb:paint="solid"
+ id="linearGradient7212">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop7214" />
+ </linearGradient>
+ </defs>
+ <g
+ transform="translate(-519.98255,160)"
+ style="display:inline"
+ id="layer1" />
+ <g
+ transform="translate(-760.98275,527)"
+ style="display:inline"
+ id="layer9" />
+ <g
+ transform="translate(-760.98275,527)"
+ style="display:inline"
+ id="g7628">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path832"
+ d="m 762.0002,-520 v 1 h 13 v -1 z" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path834"
+ d="m 762.0002,-523 v 1 h 13 v -1 z" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path836"
+ d="m 762.0002,-517 v 1 h 13 v -1 z" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2e3436;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="path838"
+ d="m 768.5002,-527 c -4.13029,0 -7.5,3.36971 -7.5,7.5 0,4.13029 3.36971,7.5 7.5,7.5 4.13029,0 7.5,-3.36971 7.5,-7.5 0,-4.13029 -3.36971,-7.5 -7.5,-7.5 z m 0,2 c 0.25596,0 0.50553,0.0232 0.75195,0.0566 0.19059,0.26016 0.38153,0.59041 0.54883,1.02539 0.42182,1.09678 0.69922,2.67505 0.69922,4.41801 0,1.74296 -0.2774,3.31928 -0.69922,4.41602 -0.16776,0.43617 -0.35967,0.767 -0.55078,1.02734 -0.24581,0.0333 -0.49471,0.0566 -0.75,0.0566 -0.25529,0 -0.50419,-0.0234 -0.75,-0.0566 -0.19111,-0.26034 -0.38302,-0.59117 -0.55078,-1.02734 -0.42182,-1.09674 -0.69922,-2.67306 -0.69922,-4.41602 0,-1.74296 0.2774,-3.32123 0.69922,-4.41797 0.1673,-0.43498 0.35824,-0.76523 0.54883,-1.02539 0.24642,-0.0334 0.49599,-0.0566 0.75195,-0.0566 z m -2.08789,0.4082 c -0.0474,0.10764 -0.10239,0.1998 -0.14649,0.31446 -0.483,1.2558 -0.76562,2.93045 -0.76562,4.77734 0,1.84689 0.28262,3.51959 0.76562,4.77539 0.0443,0.11525 0.0988,0.20826 0.14649,0.31641 -2.00637,-0.81832 -3.41211,-2.78264 -3.41211,-5.0918 0,-2.30916 1.40574,-4.27348 3.41211,-5.0918 z m 4.17578,0 c 2.00637,0.81832 3.41211,2.78264 3.41211,5.0918 0,2.30916 -1.40574,4.27348 -3.41211,5.0918 0.0477,-0.10815 0.10216,-0.20116 0.14649,-0.31641 0.483,-1.2558 0.76562,-2.9285 0.76562,-4.77539 0,-1.84689 -0.28263,-3.52154 -0.76562,-4.77734 -0.0441,-0.11466 -0.0991,-0.20682 -0.14649,-0.31446 z" />
+ </g>
+ <g
+ transform="translate(-519.98255,-40)"
+ id="layer13" />
+ <g
+ transform="translate(-519.98255,160)"
+ style="display:inline"
+ id="g6387" />
+ <g
+ transform="translate(-519.98255,160)"
+ style="display:inline"
+ id="layer10" />
+ <g
+ transform="translate(-519.98255,160)"
+ id="layer12" />
+ <g
+ transform="translate(-519.98255,160)"
+ style="display:inline"
+ id="layer11" />
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchpad-swipe-back-symbolic-rtl.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchpad-swipe-back-symbolic-rtl.svg
new file mode 100644
index 0000000..e25947c
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchpad-swipe-back-symbolic-rtl.svg
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ viewBox="0 0 64 64.000001"
+ id="svg6535"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="two-finger-swipe-left.svg">
+ <defs
+ id="defs6537" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="0.8190337"
+ inkscape:cy="13.44962"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:showpageshadow="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="2560"
+ inkscape:window-height="1376"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid7931" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata6540">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(180,-470.14793)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 38.271484 6.0039062 C 37.981892 5.9956378 37.692703 6.0019094 37.40625 6.0214844 C 34.246377 6.2374271 31.332975 8.1249345 29.902344 11.082031 C 29.173793 10.990041 28.447857 10.978702 27.738281 11.0625 C 24.36672 11.460668 21.373919 13.762084 20.242188 17.148438 L 12 17.148438 L 12 10.148438 L 2 19.648438 L 12 29.148438 L 12 22.148438 L 20.048828 22.148438 C 20.694441 24.742195 22.473591 26.994506 25 28.162109 L 25 47 L 24 47 L 24 39.185547 C 24 36.866788 22.215997 35 20 35 C 17.784003 35 16 36.866788 16 39.185547 L 16 47 L 16 55.814453 L 16 60 L 20 60 L 45 60 L 56 60 C 58.215997 60 60 58.133212 60 55.814453 L 60 43.185547 L 60 34.185547 C 60 31.866788 58.215997 30 56 30 C 53.784003 30 52 31.866788 52 34.185547 L 52 39 L 51 39 L 51 28.185547 C 51 25.866788 49.215997 24 47 24 C 44.784003 24 43 25.866788 43 28.185547 L 43 39 L 42 39 L 42 23.042969 C 44.136586 21.978813 45.853243 20.084457 46.603516 17.640625 C 48.028796 12.998095 45.481769 8.0270562 40.880859 6.4726562 C 40.018187 6.1812063 39.140263 6.0287116 38.271484 6.0039062 z M 38.171875 8.9980469 C 38.752124 9.0164906 39.339992 9.1204781 39.919922 9.3164062 C 43.012882 10.361346 44.694478 13.640769 43.736328 16.761719 C 43.402083 17.85044 42.787396 18.769252 42 19.474609 L 42 15.185547 C 42 12.866788 40.215997 11 38 11 C 35.784003 11 34 12.866788 34 15.185547 L 34 22.945312 C 33.72503 23.436938 33.386634 23.876948 33 24.261719 L 33 20.185547 C 33 17.866788 31.215997 16 29 16 C 26.784003 16 25 17.866788 25 20.185547 L 25 24.666016 C 23.150282 23.179661 22.297135 20.683826 23.027344 18.265625 C 23.981604 15.105485 27.261604 13.320305 30.433594 14.234375 A 1.50015 1.50015 0 0 0 32.361328 12.945312 A 1.50015 1.50015 0 0 0 32.371094 12.921875 C 33.289974 10.433529 35.657461 8.9181241 38.171875 8.9980469 z M 34 27.302734 L 34 39 L 33 39 L 33 27.925781 C 33.346618 27.7409 33.679606 27.531269 34 27.302734 z "
+ transform="translate(-180,470.14793)"
+ id="rect7308" />
+ <g
+ style="display:inline"
+ transform="translate(80,114.14791)"
+ id="g7391">
+ <g
+ id="g7393">
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="391"
+ x="-324"
+ height="24.999994"
+ width="7.99999"
+ id="rect7395"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7397"
+ width="7.99999"
+ height="43.999989"
+ x="-315"
+ y="372.00003"
+ ry="4.1854858"
+ rx="3.999995" />
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="367"
+ x="-306"
+ height="49.000015"
+ width="7.99999"
+ id="rect7399"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7401"
+ width="7.99999"
+ height="36.000011"
+ x="-297"
+ y="380"
+ ry="4.1854858"
+ rx="3.999995" />
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="386"
+ x="-288"
+ height="30.000006"
+ width="7.99999"
+ id="rect7403"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7405"
+ width="28.999994"
+ height="12.99999"
+ x="-324"
+ y="403" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7407"
+ width="34.999985"
+ height="21"
+ x="-315"
+ y="395"
+ ry="4.1854858"
+ rx="3.999995" />
+ <path
+ sodipodi:open="true"
+ d="m -309.03562,368.40192 a 7.4999938,7.5000024 0 0 1 9.43617,-4.50737 7.4999938,7.5000024 0 0 1 4.76917,9.30661 7.4999938,7.5000024 0 0 1 -9.16976,5.02725"
+ sodipodi:end="1.8407347"
+ sodipodi:start="3.4953343"
+ sodipodi:ry="7.5000024"
+ sodipodi:rx="7.4999938"
+ sodipodi:cy="371"
+ sodipodi:cx="-302"
+ sodipodi:type="arc"
+ id="path7409"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <path
+ sodipodi:open="true"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="path7411"
+ sodipodi:type="arc"
+ sodipodi:cx="-311.22797"
+ sodipodi:cy="375.99963"
+ sodipodi:rx="7.4999938"
+ sodipodi:ry="7.5000024"
+ sodipodi:start="0.31864739"
+ sodipodi:end="4.9929531"
+ d="m -304.10552,378.34925 a 7.4999938,7.5000024 0 0 1 -9.38146,4.80209 7.4999938,7.5000024 0 0 1 -4.92078,-9.31976 7.4999938,7.5000024 0 0 1 9.25653,-5.03869" />
+ </g>
+ </g>
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
+ d="m -248,499.29695 -10,-9.5 10,-9.5 z"
+ id="path7413"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <rect
+ transform="scale(-1,-1)"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7415"
+ width="13.061281"
+ height="4.9999938"
+ x="238.62494"
+ y="-492.29697" />
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchpad-swipe-back-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchpad-swipe-back-symbolic.svg
new file mode 100644
index 0000000..e27b4b1
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchpad-swipe-back-symbolic.svg
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ viewBox="0 0 64 64.000001"
+ id="svg6535"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="two-finger-swipe-right.svg">
+ <defs
+ id="defs6537" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="15.562966"
+ inkscape:cy="0.15090121"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:showpageshadow="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="2560"
+ inkscape:window-height="1376"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid7931" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata6540">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(180,-470.14793)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m -129,475.29637 0,7 -14.48047,0 c -0.8685,-2.58098 -2.88029,-4.74387 -5.63867,-5.67578 -1.15023,-0.3886 -2.3288,-0.52948 -3.47461,-0.45118 -3.16004,0.21596 -6.07335,2.10345 -7.50391,5.06055 -0.72859,-0.0926 -1.45444,-0.10529 -2.16406,-0.0215 -3.45482,0.40801 -6.51775,2.81143 -7.58203,6.33594 -1.30748,4.32992 0.83762,8.91584 4.84375,10.76757 l 0,18.83594 -1,0 0,-7.81445 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,7.81445 0,8.81445 0,4.18555 4,0 25,0 11,0 c 2.216,0 4,-1.86679 4,-4.18555 l 0,-12.6289 0,-9 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,4.81445 -1,0 0,-10.81445 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,10.81445 -1,0 0,-15.95703 c 2.13659,-1.06416 3.85324,-2.95852 4.60352,-5.40235 0.0502,-0.16362 0.0846,-0.32791 0.125,-0.49218 l 14.27148,0 0,7 10,-9.5 -10,-9.5 z m -22.82812,3.84961 c 0.58024,0.0183 1.16811,0.12047 1.74804,0.3164 2.47175,0.83508 4.03799,3.09857 4.08008,5.56641 l 0,0.23242 c -0.012,0.54544 -0.0952,1.09784 -0.26367,1.64649 -0.33419,1.08853 -0.94913,2.00757 -1.73633,2.71289 l 0,-4.28711 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,7.75976 c -0.27497,0.49163 -0.61337,0.93164 -1,1.31641 l 0,-4.07617 c 0,-2.31876 -1.784,-4.18555 -4,-4.18555 -2.216,0 -4,1.86679 -4,4.18555 l 0,4.48242 c -1.84972,-1.48636 -2.70286,-3.98414 -1.97266,-6.40235 0.95426,-3.16014 4.23426,-4.94531 7.40625,-4.03125 a 1.50015,1.50015 0 0 0 1.92774,-1.28906 1.5004025,1.5004025 0 0 0 0.01,-0.0234 c 0.91888,-2.48834 3.28636,-4.00326 5.80078,-3.92383 z M -156,497.45066 l 0,11.69727 -1,0 0,-11.07227 c 0.34667,-0.1849 0.67956,-0.39643 1,-0.625 z"
+ id="rect6513"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g7304"
+ transform="translate(18,114.14791)"
+ style="display:inline">
+ <g
+ id="g7306">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7308"
+ width="7.99999"
+ height="24.999994"
+ x="-324"
+ y="391"
+ ry="4.1854858"
+ rx="3.999995" />
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="372.00003"
+ x="-315"
+ height="43.999989"
+ width="7.99999"
+ id="rect7310"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7312"
+ width="7.99999"
+ height="49.000015"
+ x="-306"
+ y="367"
+ ry="4.1854858"
+ rx="3.999995" />
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="380"
+ x="-297"
+ height="36.000011"
+ width="7.99999"
+ id="rect7314"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect7316"
+ width="7.99999"
+ height="30.000006"
+ x="-288"
+ y="386"
+ ry="4.1854858"
+ rx="3.999995" />
+ <rect
+ y="403"
+ x="-324"
+ height="12.99999"
+ width="28.999994"
+ id="rect7318"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="395"
+ x="-315"
+ height="21"
+ width="34.999985"
+ id="rect7320"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="path7322"
+ sodipodi:type="arc"
+ sodipodi:cx="-302"
+ sodipodi:cy="371"
+ sodipodi:rx="7.4999938"
+ sodipodi:ry="7.5000024"
+ sodipodi:start="3.4953343"
+ sodipodi:end="1.8407347"
+ d="m -309.03562,368.40192 a 7.4999938,7.5000024 0 0 1 9.43617,-4.50737 7.4999938,7.5000024 0 0 1 4.76917,9.30661 7.4999938,7.5000024 0 0 1 -9.16976,5.02725"
+ sodipodi:open="true" />
+ <path
+ d="m -304.10552,378.34925 a 7.4999938,7.5000024 0 0 1 -9.38146,4.80209 7.4999938,7.5000024 0 0 1 -4.92078,-9.31976 7.4999938,7.5000024 0 0 1 9.25653,-5.03869"
+ sodipodi:end="4.9929531"
+ sodipodi:start="0.31864739"
+ sodipodi:ry="7.5000024"
+ sodipodi:rx="7.4999938"
+ sodipodi:cy="375.99963"
+ sodipodi:cx="-311.22797"
+ sodipodi:type="arc"
+ id="path7324"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ sodipodi:open="true" />
+ </g>
+ </g>
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path7326"
+ d="m -260.99992,494.29695 10,-9.5 -10,-9.5 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate" />
+ <rect
+ y="-487.29697"
+ x="-278"
+ height="4.9999919"
+ width="20.686279"
+ id="rect7328"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="scale(1,-1)" />
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchscreen-swipe-back-symbolic-rtl.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchscreen-swipe-back-symbolic-rtl.svg
new file mode 100644
index 0000000..a395bf5
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchscreen-swipe-back-symbolic-rtl.svg
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ viewBox="0 0 64 64.000001"
+ id="svg6535"
+ version="1.1"
+ inkscape:version="0.92.4 5da689c313, 2019-01-14"
+ sodipodi:docname="gesture-palm-swipe-right-rtl-symbolic.svg">
+ <defs
+ id="defs6537" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.7670154"
+ inkscape:cx="32.723254"
+ inkscape:cy="14.119354"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:showpageshadow="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1280"
+ inkscape:window-height="1376"
+ inkscape:window-x="1280"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="false"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4193" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata6540">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(180,-470.14793)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 9.6542969 6.9921875 C 8.6081142 6.96848 7.5705827 7.347386 6.7871094 8.1308594 C 5.2201627 9.697806 5.2783584 12.278358 6.9179688 13.917969 L 10 17 L 10 7.0332031 C 9.8847052 7.0208034 9.7697279 6.9948033 9.6542969 6.9921875 z M 6.1171875 16.185547 C 5.0710043 16.16184 4.0354273 16.538791 3.2519531 17.322266 C 1.6850047 18.889214 1.7432022 21.471718 3.3828125 23.111328 L 10 29.728516 L 10 18.414062 L 9.0390625 17.453125 C 8.2192573 16.63332 7.1633707 16.209254 6.1171875 16.185547 z M 6.8242188 29.621094 C 5.778036 29.597386 4.7424577 29.974339 3.9589844 30.757812 C 2.3920377 32.324759 2.4502333 34.905312 4.0898438 36.544922 L 10 42.455078 L 10 31.142578 L 9.7460938 30.888672 C 8.9262885 30.068867 7.8704014 29.644801 6.8242188 29.621094 z "
+ transform="translate(-180,470.14793)"
+ id="rect7306" />
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000656px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 54 10 L 54 49 L 62 49 L 62 34 L 54 10 z "
+ transform="translate(-180,470.14793)"
+ id="path838" />
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.95433986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ d="M 10 7 L 10 57 L 12 57 L 12 7 L 10 7 z M 52 7 L 52 57 L 54 57 L 54 7 L 52 7 z "
+ transform="translate(-180,470.14793)"
+ id="rect869" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m -148,493.14844 c -4.95279,0 -9,4.0472 -9,9 0,4.95279 4.04721,9 9,9 4.95279,0 9,-4.04721 9,-9 0,-4.9528 -4.04721,-9 -9,-9 z m 0,3 c 3.33147,0 6,2.66852 6,6 0,3.33148 -2.66853,6 -6,6 -3.33147,0 -6,-2.66852 -6,-6 0,-3.33148 2.66853,-6 6,-6 z"
+ id="ellipse7314"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ d="m -148,498.14793 c -2.20914,0 -4,1.79086 -4,4 0.001,1.06041 0.42341,2.07695 1.17383,2.82617 l -0.002,0.002 22.17192,22.17183 H -122 c 2.216,0 4,-1.784 4,-4 v -8 c 0,-2.216 -1.784,-4 -4,-4 h -11.34375 l -11.78711,-11.78711 -0.041,-0.041 -0.002,0.002 c -0.74917,-0.75046 -1.76571,-1.17267 -2.82612,-1.17387 z"
+ id="path831"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccsscccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
+ d="m -159,494.64792 -8,7.5 8,7.5 v -5 h 3.5 v -5 h -3.5 z"
+ id="path7413"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <g
+ id="g1107"
+ transform="translate(-64)">
+ <g
+ id="g1080"
+ transform="rotate(-45,-191.43501,474.81355)"
+ style="fill:#000000;fill-opacity:1">
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="490.14792"
+ x="-185"
+ height="34"
+ width="7.99999"
+ id="rect1074"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect1076"
+ width="7.999999"
+ height="30"
+ x="-194"
+ y="494.14792"
+ ry="4.1854858"
+ rx="3.9999995" />
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="504.14792"
+ x="-203"
+ height="20"
+ width="7.99999"
+ id="rect1078"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ </g>
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000656px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -134,480.14793 v 39 h 16.00021 v -15 l -8.00013,-24 z"
+ id="path1082"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <rect
+ style="opacity:1;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:1.95433986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="rect1084"
+ width="44"
+ height="50"
+ x="-170"
+ y="477.14792" />
+ <rect
+ y="477.14792"
+ x="-168"
+ height="50"
+ width="40"
+ id="rect1086"
+ style="opacity:1;fill:#26a269;fill-opacity:1;stroke:none;stroke-width:1.86338997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
+ <ellipse
+ cx="-148"
+ cy="502.14792"
+ rx="7.4999938"
+ ry="7.5000024"
+ id="ellipse1088"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ d="m -148,498.14793 c -2.20914,0 -4,1.79086 -4,4 0.001,1.06041 0.42341,2.07695 1.17383,2.82617 l -0.002,0.002 22.17192,22.17183 H -122 c 2.216,0 4,-1.784 4,-4 v -8 c 0,-2.216 -1.784,-4 -4,-4 h -11.34375 l -11.78711,-11.78711 -0.041,-0.041 -0.002,0.002 c -0.74917,-0.75046 -1.76571,-1.17267 -2.82612,-1.17387 z"
+ id="path1090"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccsscccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
+ d="m -159,494.64792 -8,7.5 8,7.5 v -5 h 3.5 v -5 h -3.5 z"
+ id="path1092"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1094"
+ d="m -137,494.64792 8,7.5 -8,7.5 v -5 h -3.5 v -5 h 3.5 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchscreen-swipe-back-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchscreen-swipe-back-symbolic.svg
new file mode 100644
index 0000000..74b3e39
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/gesture-touchscreen-swipe-back-symbolic.svg
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="64"
+ height="64"
+ viewBox="0 0 64 64.000001"
+ id="svg6535"
+ version="1.1"
+ inkscape:version="0.92.4 5da689c313, 2019-01-14"
+ sodipodi:docname="gesture-palm-swipe-right-symbolic.svg">
+ <defs
+ id="defs6537" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.7670154"
+ inkscape:cx="32.723254"
+ inkscape:cy="14.119354"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:showpageshadow="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1280"
+ inkscape:window-height="1376"
+ inkscape:window-x="1280"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="false"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid4193" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata6540">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(180,-470.14793)">
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 9.6542969 6.9921875 C 8.6081142 6.96848 7.5705827 7.347386 6.7871094 8.1308594 C 5.2201627 9.697806 5.2783584 12.278358 6.9179688 13.917969 L 10 17 L 10 7.0332031 C 9.8847052 7.0208034 9.7697279 6.9948033 9.6542969 6.9921875 z M 6.1171875 16.185547 C 5.0710043 16.16184 4.0354273 16.538791 3.2519531 17.322266 C 1.6850047 18.889214 1.7432022 21.471718 3.3828125 23.111328 L 10 29.728516 L 10 18.414062 L 9.0390625 17.453125 C 8.2192573 16.63332 7.1633707 16.209254 6.1171875 16.185547 z M 6.8242188 29.621094 C 5.778036 29.597386 4.7424577 29.974339 3.9589844 30.757812 C 2.3920377 32.324759 2.4502333 34.905312 4.0898438 36.544922 L 10 42.455078 L 10 31.142578 L 9.7460938 30.888672 C 8.9262885 30.068867 7.8704014 29.644801 6.8242188 29.621094 z "
+ transform="translate(-180,470.14793)"
+ id="rect7306" />
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000656px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 54 10 L 54 49 L 62 49 L 62 34 L 54 10 z "
+ transform="translate(-180,470.14793)"
+ id="path838" />
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.95433986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ d="M 10 7 L 10 57 L 12 57 L 12 7 L 10 7 z M 52 7 L 52 57 L 54 57 L 54 7 L 52 7 z "
+ transform="translate(-180,470.14793)"
+ id="rect869" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m -148,493.14844 c -4.95279,0 -9,4.0472 -9,9 0,4.95279 4.04721,9 9,9 4.95279,0 9,-4.04721 9,-9 0,-4.9528 -4.04721,-9 -9,-9 z m 0,3 c 3.33147,0 6,2.66852 6,6 0,3.33148 -2.66853,6 -6,6 -3.33147,0 -6,-2.66852 -6,-6 0,-3.33148 2.66853,-6 6,-6 z"
+ id="ellipse7314"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ d="m -148,498.14793 c -2.20914,0 -4,1.79086 -4,4 0.001,1.06041 0.42341,2.07695 1.17383,2.82617 l -0.002,0.002 22.17192,22.17183 H -122 c 2.216,0 4,-1.784 4,-4 v -8 c 0,-2.216 -1.784,-4 -4,-4 h -11.34375 l -11.78711,-11.78711 -0.041,-0.041 -0.002,0.002 c -0.74917,-0.75046 -1.76571,-1.17267 -2.82612,-1.17387 z"
+ id="path831"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccsscccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path906"
+ d="m -137,494.64792 8,7.5 -8,7.5 v -5 h -3.5 v -5 h 3.5 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
+ sodipodi:nodetypes="cccccccc" />
+ <g
+ id="g1107"
+ transform="translate(-64)">
+ <g
+ id="g1080"
+ transform="rotate(-45,-191.43501,474.81355)"
+ style="fill:#000000;fill-opacity:1">
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="490.14792"
+ x="-185"
+ height="34"
+ width="7.99999"
+ id="rect1074"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect1076"
+ width="7.999999"
+ height="30"
+ x="-194"
+ y="494.14792"
+ ry="4.1854858"
+ rx="3.9999995" />
+ <rect
+ rx="3.999995"
+ ry="4.1854858"
+ y="504.14792"
+ x="-203"
+ height="20"
+ width="7.99999"
+ id="rect1078"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#4a90d9;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ </g>
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00000656px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m -134,480.14793 v 39 h 16.00021 v -15 l -8.00013,-24 z"
+ id="path1082"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <rect
+ style="opacity:1;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:1.95433986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="rect1084"
+ width="44"
+ height="50"
+ x="-170"
+ y="477.14792" />
+ <rect
+ y="477.14792"
+ x="-168"
+ height="50"
+ width="40"
+ id="rect1086"
+ style="opacity:1;fill:#26a269;fill-opacity:1;stroke:none;stroke-width:1.86338997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
+ <ellipse
+ cx="-148"
+ cy="502.14792"
+ rx="7.4999938"
+ ry="7.5000024"
+ id="ellipse1088"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ d="m -148,498.14793 c -2.20914,0 -4,1.79086 -4,4 0.001,1.06041 0.42341,2.07695 1.17383,2.82617 l -0.002,0.002 22.17192,22.17183 H -122 c 2.216,0 4,-1.784 4,-4 v -8 c 0,-2.216 -1.784,-4 -4,-4 h -11.34375 l -11.78711,-11.78711 -0.041,-0.041 -0.002,0.002 c -0.74917,-0.75046 -1.76571,-1.17267 -2.82612,-1.17387 z"
+ id="path1090"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccsscccccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
+ d="m -159,494.64792 -8,7.5 8,7.5 v -5 h 3.5 v -5 h -3.5 z"
+ id="path1092"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1094"
+ d="m -137,494.64792 8,7.5 -8,7.5 v -5 h -3.5 v -5 h 3.5 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:6;marker:none;enable-background:accumulate"
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/preferences-window-layout-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/preferences-window-layout-symbolic.svg
new file mode 100644
index 0000000..97dc5a8
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/preferences-window-layout-symbolic.svg
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <filter id="a" height="100%" width="100%" x="0%" y="0%">
+ <feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
+ </filter>
+ <mask id="b">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
+ </g>
+ </mask>
+ <clipPath id="c">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="d">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="e">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="f">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="g">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="h">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="i">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="j">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="k">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="l">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="m">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="n">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="o">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="p">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
+ </g>
+ </mask>
+ <clipPath id="q">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="r">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
+ </g>
+ </mask>
+ <clipPath id="s">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="t">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.4"/>
+ </g>
+ </mask>
+ <clipPath id="u">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="v">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.4"/>
+ </g>
+ </mask>
+ <clipPath id="w">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="x">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
+ </g>
+ </mask>
+ <clipPath id="y">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="z">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
+ </g>
+ </mask>
+ <clipPath id="A">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <g fill="#2e3436">
+ <path d="m 3 9 h 4.015625 v 4 h -4.015625 z m 0 0"/>
+ <path d="m 8 9 h 5 v 4 h -5 z m 0 0"/>
+ <path d="m 0.988281 0.96875 v 14.03125 h 14.011719 v -14.03125 z m 1 1 h 12.011719 v 5.03125 h -12.011719 z m 0 6.03125 h 12.011719 v 6 h -12.011719 z m 0 0" fill-opacity="0.35"/>
+ <path d="m 3 3 h 10 v 3 h -10 z m 0 0"/>
+ </g>
+ <g clip-path="url(#c)" mask="url(#b)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 562.460938 212.058594 h 10.449218 c -1.183594 0.492187 -1.296875 2.460937 0 3 h -10.449218 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#e)" mask="url(#d)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 16 632 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#g)" mask="url(#f)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 17 631 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#i)" mask="url(#h)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 18 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#k)" mask="url(#j)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 16 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#m)" mask="url(#l)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 17 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#o)" mask="url(#n)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 19 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#q)" mask="url(#p)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 136 660 v 7 h 7 v -7 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#s)" mask="url(#r)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 199 642 h 3 v 12 h -3 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#u)" mask="url(#t)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 209.5 144.160156 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 s -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#w)" mask="url(#v)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 206.5 144.160156 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 s -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#y)" mask="url(#x)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 229.5 143.160156 c -0.546875 0 -1 0.457032 -1 1 c 0 0.546875 0.453125 1 1 1 s 1 -0.453125 1 -1 c 0 -0.542968 -0.453125 -1 -1 -1 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#A)" mask="url(#z)" transform="matrix(1 0 0 1 -640 -604)">
+ <path d="m 226.453125 143.160156 c -0.519531 0 -0.953125 0.433594 -0.953125 0.953125 v 0.09375 c 0 0.519531 0.433594 0.953125 0.953125 0.953125 h 0.09375 c 0.519531 0 0.953125 -0.433594 0.953125 -0.953125 v -0.09375 c 0 -0.519531 -0.433594 -0.953125 -0.953125 -0.953125 z m 0 0" fill="#2e3436"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/preferences-window-search-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/preferences-window-search-symbolic.svg
new file mode 100644
index 0000000..2a3770e
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/preferences-window-search-symbolic.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 10.804688 10 c -0.8125 0.144531 -1.105469 1.15625 -0.5 1.71875 l 3 3 c 0.957031 0.9375 2.363281 -0.5 1.40625 -1.4375 l -3 -3 c -0.238282 -0.242188 -0.578126 -0.347656 -0.90625 -0.28125 z m 0 0"/>
+ <path d="m 6.5 0 c -3.578125 0 -6.5 2.921875 -6.5 6.5 s 2.921875 6.496094 6.5 6.496094 s 6.5 -2.917969 6.5 -6.496094 s -2.921875 -6.5 -6.5 -6.5 z m 0 2 c 2.496094 0 4.5 2.003906 4.5 4.5 s -2.003906 4.496094 -4.5 4.496094 s -4.5 -2 -4.5 -4.496094 s 2.003906 -4.5 4.5 -4.5 z m 0 0"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-copy-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-copy-symbolic.svg
new file mode 100644
index 0000000..de2f772
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-copy-symbolic.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 6 16 h 6 l 3 -3 v -7 c 0 -0.550781 -0.449219 -1 -1 -1 h -8 c -0.550781 0 -1 0.449219 -1 1 v 9 c 0 0.550781 0.449219 1 1 1 z m 0 0"/>
+ <path d="m 2 12 h 2 v -6 c 0 -1.105469 0.894531 -2 2 -2 h 5 v -2 c 0 -0.550781 -0.449219 -1 -1 -1 h -8 c -0.550781 0 -0.996094 0.445312 -0.996094 0.996094 l -0.003906 9.003906 c 0 0.550781 0.449219 1 1 1 z m 0 0"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-forbidden-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-forbidden-symbolic.svg
new file mode 100644
index 0000000..df9133c
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-forbidden-symbolic.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8 1c3.863 0 7 3.137 7 7s-3.137 7-7 7-7-3.137-7-7 3.137-7 7-7zm0 2a4.93 4.93 0 00-2.75.813l6.937 6.937A4.93 4.93 0 0013 8c0-2.76-2.24-5-5-5zM3.812 5.25A4.93 4.93 0 003 8c0 2.76 2.24 5 5 5a4.93 4.93 0 002.75-.813z" style="line-height:normal;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration-line:none;text-transform:none;marker:none" color="#000" font-weight="400" font-family="Sans" overflow="visible" fill="#2e3436"/></svg> \ No newline at end of file
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-preferences-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-preferences-symbolic.svg
new file mode 100644
index 0000000..0a8de2d
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-preferences-symbolic.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M8 1c-.22 0-.44.011-.656.031l-.406 2.094a5.012 5.012 0 00-.969.312L4.438 1.97c-.389.23-.727.514-1.063.812l.906 1.906a5.057 5.057 0 00-.593.813L1.594 5.22a6.91 6.91 0 00-.406 1.28l1.843 1a4.826 4.826 0 00-.03.5c0 .173.013.332.03.5l-1.843 1c.097.445.228.872.406 1.281l2.094-.281c.17.29.371.563.593.812l-.906 1.907c.336.298.674.582 1.063.812l1.531-1.469c.306.137.634.24.969.313l.406 2.094a7.118 7.118 0 001.312 0l.407-2.094c.334-.073.663-.176.968-.313l1.532 1.47c.388-.23.727-.515 1.062-.813l-.906-1.907a5.11 5.11 0 00.594-.812l2.093.281a6.91 6.91 0 00.407-1.281l-1.844-1c.017-.168.031-.327.031-.5s-.014-.332-.031-.5l1.844-1a6.908 6.908 0 00-.407-1.281l-2.093.281a5.057 5.057 0 00-.594-.813l.906-1.906c-.335-.298-.674-.582-1.062-.812L10.03 3.437a5.015 5.015 0 00-.968-.312l-.407-2.094A7.118 7.118 0 008 1zm0 4a3 3 0 110 6 3 3 0 010-6z" style="marker:none" color="#000" overflow="visible" fill="#474747"/></svg> \ No newline at end of file
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-shutdown-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-shutdown-symbolic.svg
new file mode 100644
index 0000000..129fbcb
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/row-shutdown-symbolic.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16.014"><g color="#000" font-weight="400" font-family="sans-serif" fill="#474747"><path d="M5.04 1.815a1 1 0 00-.546.14 7.009 7.009 0 00-3.254 7.87 7.006 7.006 0 006.75 5.19 7.007 7.007 0 006.766-5.17 7.01 7.01 0 00-3.233-7.88 1 1 0 10-1.007 1.729 4.991 4.991 0 012.308 5.627 4.99 4.99 0 01-4.832 3.693 4.989 4.989 0 01-4.82-3.707 4.992 4.992 0 012.324-5.62 1 1 0 00-.457-1.872z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" overflow="visible"/><path d="M7.984 0A1 1 0 007 1.015v5a1 1 0 102 0v-5A1 1 0 007.984.001z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal" overflow="visible"/></g></svg> \ No newline at end of file
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/style-classes-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/style-classes-symbolic.svg
new file mode 100644
index 0000000..d53b10c
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/style-classes-symbolic.svg
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <filter id="a" height="100%" width="100%" x="0%" y="0%">
+ <feColorMatrix in="SourceGraphic" type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
+ </filter>
+ <mask id="b">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
+ </g>
+ </mask>
+ <clipPath id="c">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="d">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="e">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="f">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="g">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="h">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="i">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="j">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="k">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="l">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="m">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="n">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.05"/>
+ </g>
+ </mask>
+ <clipPath id="o">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="p">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.3"/>
+ </g>
+ </mask>
+ <clipPath id="q">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="r">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
+ </g>
+ </mask>
+ <clipPath id="s">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="t">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.4"/>
+ </g>
+ </mask>
+ <clipPath id="u">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="v">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.4"/>
+ </g>
+ </mask>
+ <clipPath id="w">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="x">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
+ </g>
+ </mask>
+ <clipPath id="y">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <mask id="z">
+ <g filter="url(#a)">
+ <path d="m 0 0 h 16 v 16 h -16 z" fill-opacity="0.5"/>
+ </g>
+ </mask>
+ <clipPath id="A">
+ <path d="m 0 0 h 1024 v 800 h -1024 z"/>
+ </clipPath>
+ <g clip-path="url(#c)" mask="url(#b)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 562.460938 212.058594 h 10.449218 c -1.183594 0.492187 -1.296875 2.460937 0 3 h -10.449218 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#e)" mask="url(#d)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 16 632 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#g)" mask="url(#f)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 17 631 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#i)" mask="url(#h)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 18 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#k)" mask="url(#j)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 16 634 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#m)" mask="url(#l)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 17 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#o)" mask="url(#n)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 19 635 h 1 v 1 h -1 z m 0 0" fill="#2e3436" fill-rule="evenodd"/>
+ </g>
+ <g clip-path="url(#q)" mask="url(#p)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 136 660 v 7 h 7 v -7 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#s)" mask="url(#r)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 199 642 h 3 v 12 h -3 z m 0 0" fill="#2e3436"/>
+ </g>
+ <path d="m 7.996094 0 c -1.109375 0 -2 0.890625 -2 2 v 3.003906 c 0 0.632813 -0.480469 0.996094 -1 0.996094 h -1 c -1.109375 0 -2 0.890625 -2 2 v 1 h 12 v -1 c 0 -1.109375 -0.894532 -2 -2 -2 h -0.976563 c -0.53125 0 -1.023437 -0.359375 -1.023437 -1 v -3 c 0 -1.109375 -0.894532 -2 -2 -2 z m 0 1.40625 c 0.324218 0 0.59375 0.265625 0.59375 0.59375 s -0.269532 0.59375 -0.59375 0.59375 c -0.328125 0 -0.59375 -0.265625 -0.59375 -0.59375 s 0.265625 -0.59375 0.59375 -0.59375 z m 0 0" fill="#2e3436"/>
+ <path d="m 2 10 h 12 l -0.800781 4.003906 c -0.199219 0.820313 -0.699219 0.996094 -1.246094 0.996094 h -1.953125 v -2 l -1.125 2 h -1.847656 l -0.027344 -2 l -1.035156 2 h -0.964844 v -1.5 l -1 1.5 h -3 l 0.210938 -1.046875 z m 0 0" fill="#2e3436"/>
+ <path d="m 134.9375 529.0625 l -5.625 -3.3125" fill="none" stroke="#2e3436" stroke-linecap="round" stroke-width="2" transform="matrix(0 -1 1 0 -538 136)"/>
+ <g clip-path="url(#u)" mask="url(#t)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 209.5 144.160156 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 s -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#w)" mask="url(#v)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 206.5 144.160156 c 0.277344 0 0.5 0.222656 0.5 0.5 v 1 c 0 0.277344 -0.222656 0.5 -0.5 0.5 s -0.5 -0.222656 -0.5 -0.5 v -1 c 0 -0.277344 0.222656 -0.5 0.5 -0.5 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#y)" mask="url(#x)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 229.5 143.160156 c -0.546875 0 -1 0.457032 -1 1 c 0 0.546875 0.453125 1 1 1 s 1 -0.453125 1 -1 c 0 -0.542968 -0.453125 -1 -1 -1 z m 0 0" fill="#2e3436"/>
+ </g>
+ <g clip-path="url(#A)" mask="url(#z)" transform="matrix(1 0 0 1 -256 -660)">
+ <path d="m 226.453125 143.160156 c -0.519531 0 -0.953125 0.433594 -0.953125 0.953125 v 0.09375 c 0 0.519531 0.433594 0.953125 0.953125 0.953125 h 0.09375 c 0.519531 0 0.953125 -0.433594 0.953125 -0.953125 v -0.09375 c 0 -0.519531 -0.433594 -0.953125 -0.953125 -0.953125 z m 0 0" fill="#2e3436"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/tab-new-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/tab-new-symbolic.svg
new file mode 100644
index 0000000..3d2119d
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/tab-new-symbolic.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 3 0 c -1.644531 0 -3 1.355469 -3 3 v 10 c 0 1.644531 1.355469 3 3 3 h 10 c 1.644531 0 3 -1.355469 3 -3 v -10 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 2 h 10 c 0.570312 0 1 0.429688 1 1 v 10 c 0 0.570312 -0.429688 1 -1 1 h -10 c -0.570312 0 -1 -0.429688 -1 -1 v -10 c 0 -0.570312 0.429688 -1 1 -1 z m 0 0"/>
+ <path d="m 4 7 h 8 v 2 h -8 z m 0 0"/>
+ <path d="m 9 4 v 8 h -2 v -8 z m 0 0"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-end-symbolic-rtl.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-end-symbolic-rtl.svg
new file mode 100644
index 0000000..2d8bbec
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-end-symbolic-rtl.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 6.5 14 v -12 h -5 v 12 z m 0 0" fill-opacity="0.35"/>
+ <path d="m 3 1 c -1.644531 0 -3 1.355469 -3 3 v 8 c 0 1.644531 1.355469 3 3 3 h 10 c 1.644531 0 3 -1.355469 3 -3 v -8 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 2 h 10 c 0.570312 0 1 0.429688 1 1 v 8 c 0 0.570312 -0.429688 1 -1 1 h -10 c -0.570312 0 -1 -0.429688 -1 -1 v -8 c 0 -0.570312 0.429688 -1 1 -1 z m 0 0"/>
+ <path d="m 6 2 h 1 v 12 h -1 z m 0 0"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-end-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-end-symbolic.svg
new file mode 100644
index 0000000..3b6b6d4
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-end-symbolic.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 9.5 14 v -12 h 5 v 12 z m 0 0" fill-opacity="0.35"/>
+ <path d="m 13 1 c 1.644531 0 3 1.355469 3 3 v 8 c 0 1.644531 -1.355469 3 -3 3 h -10 c -1.644531 0 -3 -1.355469 -3 -3 v -8 c 0 -1.644531 1.355469 -3 3 -3 z m 0 2 h -10 c -0.570312 0 -1 0.429688 -1 1 v 8 c 0 0.570312 0.429688 1 1 1 h 10 c 0.570312 0 1 -0.429688 1 -1 v -8 c 0 -0.570312 -0.429688 -1 -1 -1 z m 0 0"/>
+ <path d="m 10 2 h -1 v 12 h 1 z m 0 0"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-start-symbolic-rtl.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-start-symbolic-rtl.svg
new file mode 100644
index 0000000..3b6b6d4
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-start-symbolic-rtl.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 9.5 14 v -12 h 5 v 12 z m 0 0" fill-opacity="0.35"/>
+ <path d="m 13 1 c 1.644531 0 3 1.355469 3 3 v 8 c 0 1.644531 -1.355469 3 -3 3 h -10 c -1.644531 0 -3 -1.355469 -3 -3 v -8 c 0 -1.644531 1.355469 -3 3 -3 z m 0 2 h -10 c -0.570312 0 -1 0.429688 -1 1 v 8 c 0 0.570312 0.429688 1 1 1 h 10 c 0.570312 0 1 -0.429688 1 -1 v -8 c 0 -0.570312 -0.429688 -1 -1 -1 z m 0 0"/>
+ <path d="m 10 2 h -1 v 12 h 1 z m 0 0"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-start-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-start-symbolic.svg
new file mode 100644
index 0000000..2d8bbec
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/view-sidebar-start-symbolic.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#2e3436">
+ <path d="m 6.5 14 v -12 h -5 v 12 z m 0 0" fill-opacity="0.35"/>
+ <path d="m 3 1 c -1.644531 0 -3 1.355469 -3 3 v 8 c 0 1.644531 1.355469 3 3 3 h 10 c 1.644531 0 3 -1.355469 3 -3 v -8 c 0 -1.644531 -1.355469 -3 -3 -3 z m 0 2 h 10 c 0.570312 0 1 0.429688 1 1 v 8 c 0 0.570312 -0.429688 1 -1 1 h -10 c -0.570312 0 -1 -0.429688 -1 -1 v -8 c 0 -0.570312 0.429688 -1 1 -1 z m 0 0"/>
+ <path d="m 6 2 h 1 v 12 h -1 z m 0 0"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-about-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-about-symbolic.svg
new file mode 100644
index 0000000..1232984
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-about-symbolic.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <path d="m 8 0 c -4.410156 0 -8 3.589844 -8 8 s 3.589844 8 8 8 s 8 -3.589844 8 -8 s -3.589844 -8 -8 -8 z m 0 2 c 3.332031 0 6 2.667969 6 6 s -2.667969 6 -6 6 s -6 -2.667969 -6 -6 s 2.667969 -6 6 -6 z m 0 1.875 c -0.621094 0 -1.125 0.503906 -1.125 1.125 s 0.503906 1.125 1.125 1.125 s 1.125 -0.503906 1.125 -1.125 s -0.503906 -1.125 -1.125 -1.125 z m -1.523438 3.125 c -0.265624 0.011719 -0.476562 0.230469 -0.476562 0.5 c 0 0.277344 0.222656 0.5 0.5 0.5 h 0.5 v 3 h -0.5 c -0.277344 0 -0.5 0.222656 -0.5 0.5 s 0.222656 0.5 0.5 0.5 h 3 c 0.277344 0 0.5 -0.222656 0.5 -0.5 s -0.222656 -0.5 -0.5 -0.5 h -0.5 v -4 h -2.5 c -0.007812 0 -0.015625 0 -0.023438 0 z m 0 0" fill="#2e3436"/>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-banner-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-banner-symbolic.svg
new file mode 100644
index 0000000..ccf6446
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-banner-symbolic.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg height="16px" viewBox="0 0 16 16" width="16px" xmlns="http://www.w3.org/2000/svg">
+ <g fill="#222222">
+ <path d="m 0 0.972656 v 2 h 0.0117188 v 4.035156 h 13.9921872 l 0.007813 9 h 2 l -0.011719 -11.988281 c 0 -1.644531 -1.355469 -3.046875 -3 -3.046875 z m 12.457031 2.027344 c 0.828125 0 1.5 0.675781 1.5 1.507812 c 0 0.832032 -0.671875 1.503907 -1.5 1.503907 s -1.5 -0.671875 -1.5 -1.503907 c 0 -0.832031 0.671875 -1.507812 1.5 -1.507812 z m 0 0" />
+ <path d="m 15 12 h -14.9882812 v -5.980469 h 14.9882812 z m 0 0" fill-opacity="0.34902" />
+ <path d="m -0.0351562 12 v 1 h 15.0351562 v -1 z m 0 0" />
+ </g>
+ <path d="m 7 8 h 4 c 0.550781 0 1 0.449219 1 1 v 1 c 0 0.550781 -0.449219 1 -1 1 h -4 c -0.550781 0 -1 -0.449219 -1 -1 v -1 c 0 -0.550781 0.449219 -1 1 -1 z m 0 0" fill="#212121" />
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-carousel-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-carousel-symbolic.svg
new file mode 100644
index 0000000..d700fdf
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-carousel-symbolic.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface390543">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 6 13 C 6 13.550781 5.550781 14 5 14 C 4.449219 14 4 13.550781 4 13 C 4 12.449219 4.449219 12 5 12 C 5.550781 12 6 12.449219 6 13 Z M 6 13 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 9 13 C 9 13.550781 8.550781 14 8 14 C 7.449219 14 7 13.550781 7 13 C 7 12.449219 7.449219 12 8 12 C 8.550781 12 9 12.449219 9 13 Z M 9 13 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 12 13 C 12 13.550781 11.550781 14 11 14 C 10.449219 14 10 13.550781 10 13 C 10 12.449219 10.449219 12 11 12 C 11.550781 12 12 12.449219 12 13 Z M 12 13 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 2 C 3.910156 2 3 2.910156 3 4 L 3 9 C 3 10.089844 3.910156 11 5 11 L 11 11 C 12.089844 11 13 10.089844 13 9 L 13 4 C 13 2.910156 12.089844 2 11 2 Z M 5 4 L 11 4 L 11 9 L 5 9 Z M 5 4 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 2 3 C 0.910156 3 0 3.910156 0 5 L 0 8 C 0 9.089844 0.910156 10 2 10 Z M 2 3 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 14 3 C 15.089844 3 16 3.910156 16 5 L 16 8 C 16 9.089844 15.089844 10 14 10 Z M 14 3 "/>
+</g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-clamp-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-clamp-symbolic.svg
new file mode 100644
index 0000000..9269c40
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-clamp-symbolic.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g color="#000" fill="#474747"><path d="M12.293 5.293L9.586 8l2.707 2.707 1.414-1.414L12.414 8l1.293-1.293z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" font-weight="400" font-family="sans-serif" overflow="visible"/><path d="M13 10h1v1h-1zm0-5h1v1h-1z" style="marker:none" overflow="visible"/><path d="M13 5c.554 0 1 .446 1 1s-.446 1-1 1-1-.446-1-1 .446-1 1-1zm0 4c.554 0 1 .446 1 1s-.446 1-1 1-1-.446-1-1 .446-1 1-1z" style="marker:none" overflow="visible"/><path d="M3.707 5.293L2.293 6.707 3.586 8 2.293 9.293l1.414 1.414L6.414 8z" style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;shape-padding:0;isolation:auto;mix-blend-mode:normal;marker:none" font-weight="400" font-family="sans-serif" overflow="visible"/><path d="M3 10H2v1h1zm0-5H2v1h1z" style="marker:none" overflow="visible"/><path d="M3 5c-.554 0-1 .446-1 1s.446 1 1 1 1-.446 1-1-.446-1-1-1zm0 4c-.554 0-1 .446-1 1s.446 1 1 1 1-.446 1-1-.446-1-1-1z" style="marker:none" overflow="visible"/></g></svg> \ No newline at end of file
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-dialog-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-dialog-symbolic.svg
new file mode 100644
index 0000000..3d31e02
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-dialog-symbolic.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><g fill="#222222"><path d="m 2 1.007812 c -0.550781 0 -1 0.449219 -1 1 v 1.984376 h 2 v -0.984376 h 9 v 0.992188 h 2 v -1.992188 c 0 -0.550781 -0.449219 -1 -1 -1 z m 10 12 v 0.992188 h -9 v -0.984375 h -2 v 1.984375 c 0 0.550781 0.449219 1 1 1 h 11 c 0.550781 0 1 -0.449219 1 -1 v -1.992188 z m 0 0" fill-opacity="0.34902"/><path d="m 4 4 c -0.550781 0 -1 0.449219 -1 1 v 7.007812 c 0 0.550782 0.449219 1 1 1 h 7 c 0.550781 0 1 -0.449218 1 -1 v -7.007812 c 0 -0.550781 -0.449219 -1 -1 -1 z m 0 2 h 7 v 3.992188 h -7 z m 0 4.992188 h 3 v 1.007812 h -3 z m 4 0 h 3 v 1.007812 h -3 z m 0 0"/></g></svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-flap-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-flap-symbolic.svg
new file mode 100644
index 0000000..08600fa
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-flap-symbolic.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface390549">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:0.35;" d="M 6 11.972656 L 6 3.972656 L 3 3.972656 L 3 11.972656 Z M 6 11.972656 "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 8 2 L 9 2 L 9 14 L 8 14 Z M 3 1.996094 C 1.910156 1.996094 1 2.90625 1 3.996094 L 1 11.972656 C 1 13.0625 1.910156 13.972656 3 13.972656 L 7 13.972656 L 7 1.996094 Z M 10 1.996094 L 10 13.972656 L 11 13.972656 L 11 1.996094 Z M 11.96875 1.996094 L 11.96875 3.996094 L 13 3.996094 L 13 11.972656 L 11.96875 11.972656 L 11.96875 13.972656 L 13 13.972656 C 13.96875 13.972656 15 13.046875 15 11.972656 L 15 3.996094 C 15 2.90625 14.089844 1.996094 13 1.996094 Z M 3 3.996094 L 6 3.996094 L 6 11.972656 L 3 11.972656 Z M 3 3.996094 "/>
+</g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-leaflet-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-leaflet-symbolic.svg
new file mode 100644
index 0000000..fdd9935
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-leaflet-symbolic.svg
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="16px"
+ height="16px"
+ viewBox="0 0 16 16"
+ version="1.1"
+ id="svg7"
+ sodipodi:docname="widget-leaflet-symbolic.svg"
+ inkscape:version="1.1 (c68e22c387, 2021-05-23)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs11" />
+ <sodipodi:namedview
+ id="namedview9"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="54.5625"
+ inkscape:cx="8"
+ inkscape:cy="8.0091638"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg7" />
+ <g
+ id="surface390556">
+ <path
+ style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;"
+ d="M 3 1.996094 C 1.910156 1.996094 1 2.90625 1 3.996094 L 1 11.972656 C 1 13.0625 1.910156 13.972656 3 13.972656 L 9 13.972656 L 9 1.996094 Z M 10 1.996094 L 10 3.996094 L 13 3.996094 L 13 11.972656 L 10 11.972656 L 10 13.972656 L 13 13.972656 C 13.96875 13.972656 15 13.046875 15 11.972656 L 15 3.996094 C 15 2.90625 14.089844 1.996094 13 1.996094 Z M 3 3.996094 L 8 3.996094 L 8 11.972656 L 3 11.972656 Z M 3 3.996094 "
+ id="path2" />
+ <path
+ style="color:#000000;fill:#2e3335;stroke-linecap:round;-inkscape-stroke:none"
+ d="m 25.638672,304.95898 a 0.5,0.5 0 0 0 0,0.70704 l 2.353515,2.35351 2.353516,-2.35351 a 0.5,0.5 0 0 0 0,-0.70704 0.5,0.5 0 0 0 -0.707031,0 l -1.646485,1.64649 -1.646484,-1.64649 a 0.5,0.5 0 0 0 -0.707031,0 z"
+ id="path4"
+ transform="matrix(0.000000000000000061,1,-1,0.000000000000000061,311.999939,-19.992126)" />
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-list-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-list-symbolic.svg
new file mode 100644
index 0000000..ad353a4
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-list-symbolic.svg
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ viewBox="0 0 16 16"
+ version="1.1"
+ id="svg13"
+ sodipodi:docname="list-view-symbolic.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <sodipodi:namedview
+ pagecolor="#7b7b7b"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1011"
+ id="namedview7"
+ showgrid="false"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-midpoints="true"
+ inkscape:zoom="20.377255"
+ inkscape:cx="6.5128986"
+ inkscape:cy="14.575443"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg13"
+ inkscape:document-rotation="0" />
+ <metadata
+ id="metadata19">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs17" />
+ <g
+ id="g862">
+ <path
+ id="path6793"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:1;marker:none"
+ d="m 2.999921,1.000281 c -1.0907,0 -2,0.9093 -2,2 v 10 c 0,1.0907 0.9093,2 2,2 h 10 c 1.0907,0 2,-0.9093 2,-2 v -10 c 0,-1.0907 -0.9093,-2 -2,-2 z m 0,2 h 10 v 10 h -10 z"
+ sodipodi:nodetypes="sssssssssccccc" />
+ <rect
+ style="fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:8, 8"
+ id="rect6856"
+ width="12"
+ height="2"
+ x="1.99992"
+ y="5.0002441" />
+ <rect
+ style="fill:#2e3436;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-dasharray:8, 8"
+ id="rect6858"
+ width="12"
+ height="2"
+ x="1.99992"
+ y="9.0002441" />
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-tab-view-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-tab-view-symbolic.svg
new file mode 100644
index 0000000..9bbebbe
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-tab-view-symbolic.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface543414">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 3.992188 3 C 3.992188 3 3.285156 2.988281 2.546875 3.355469 C 1.808594 3.726562 0.992188 4.667969 0.992188 6 L 0.992188 13 L -0.0078125 13 L -0.0117188 15 L -0.0078125 15 L 2.992188 15.011719 L 2.992188 15 L 15.992188 15 L 15.992188 13 L 16.003906 13 L 16.003906 5.691406 C 16.003906 4.261719 14.832031 3.058594 13.378906 3.042969 L 11 3.023438 C 11 3.023438 12 3.847656 12 4.988281 L 13.046875 5.03125 C 13.585938 5.054688 13.988281 5.527344 13.988281 6.007812 L 13.988281 13 L 11 13 L 11 6 C 11 6 11.011719 5.289062 10.644531 4.550781 C 10.273438 3.8125 9.332031 3 8 3 Z M 3.992188 3 "/>
+</g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-toast-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-toast-symbolic.svg
new file mode 100644
index 0000000..6302ff5
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-toast-symbolic.svg
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" height="16px" viewBox="0 0 16 16" width="16px"><g fill="#2e3436"><path d="m 13 6.5 c 0 2.761719 -2.238281 5 -5 5 s -5 -2.238281 -5 -5 s 2.238281 -5 5 -5 s 5 2.238281 5 5 z m 0 0"/><path d="m 3 6.5 h 10 v 6 h -10 z m 0 0"/><path d="m 2.5 13 h 11 c 0.550781 0 1 -0.449219 1 -1 s -0.449219 -1 -1 -1 h -11 c -0.550781 0 -1 0.449219 -1 1 s 0.449219 1 1 1 z m 0 0"/><path d="m 10 14 c 0 0.714844 -0.382812 1.375 -1 1.730469 c -0.617188 0.359375 -1.382812 0.359375 -2 0 c -0.617188 -0.355469 -1 -1.015625 -1 -1.730469"/><path d="m 9.5 1.5 c 0 0.828125 -0.671875 1.5 -1.5 1.5 s -1.5 -0.671875 -1.5 -1.5 s 0.671875 -1.5 1.5 -1.5 s 1.5 0.671875 1.5 1.5 z m 0 0"/></g></svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-view-switcher-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-view-switcher-symbolic.svg
new file mode 100644
index 0000000..f3823ac
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/actions/widget-view-switcher-symbolic.svg
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
+<g id="surface390564">
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 3 1 C 1.910156 1 1 1.910156 1 3 L 1 13 C 1 14.089844 1.910156 15 3 15 L 13 15 C 14.089844 15 15 14.089844 15 13 L 15 3 C 15 1.910156 14.089844 1 13 1 Z M 4.976562 2 C 5.53125 2 5.984375 2.453125 5.984375 3.007812 C 5.984375 3.566406 5.535156 4.015625 4.976562 4.019531 C 4.417969 4.015625 3.96875 3.566406 3.96875 3.007812 C 3.96875 2.453125 4.421875 2 4.976562 2 Z M 7.957031 2 C 8.511719 2 8.964844 2.453125 8.964844 3.007812 C 8.964844 3.566406 8.515625 4.015625 7.957031 4.019531 C 7.398438 4.015625 6.949219 3.566406 6.949219 3.007812 C 6.949219 2.453125 7.402344 2 7.957031 2 Z M 11 2 C 11.558594 2 12.011719 2.449219 12.011719 3.007812 C 12.011719 3.277344 11.90625 3.53125 11.714844 3.722656 C 11.527344 3.910156 11.269531 4.019531 11 4.019531 C 10.445312 4.015625 9.992188 3.566406 9.992188 3.007812 C 9.996094 2.453125 10.445312 2 11 2 Z M 3 5 L 13 5 L 13 13 L 3 13 Z M 3 5 "/>
+</g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/apps/org.example.Typeset.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/apps/org.example.Typeset.svg
new file mode 100644
index 0000000..b93b5b8
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/apps/org.example.Typeset.svg
@@ -0,0 +1 @@
+<svg height="128" width="128" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#63452c"/><stop offset=".038" stop-color="#865e3c"/><stop offset=".077" stop-color="#63452c"/><stop offset=".923" stop-color="#63452c"/><stop offset=".962" stop-color="#865e3c"/><stop offset="1" stop-color="#63452c"/></linearGradient><linearGradient id="d" gradientTransform="matrix(.23214 0 0 .20395 -8.567 207.653)" x1="88.596" x2="536.596" xlink:href="#a" y1="-449.394" y2="-449.394"/><linearGradient id="e" gradientUnits="userSpaceOnUse" x1="30" x2="104" y1="84" y2="98"><stop offset="0" stop-color="#deddda"/><stop offset="1" stop-color="#c0bfbc"/></linearGradient><linearGradient id="f" gradientTransform="matrix(.23214 0 0 .125 -8.567 146.174)" x1="88.596" x2="536.596" xlink:href="#a" y1="-449.394" y2="-449.394"/><linearGradient id="g" gradientTransform="matrix(.23214 0 0 .20395 -8.567 207.653)" gradientUnits="userSpaceOnUse" x1="88.596" x2="536.596" y1="-449.394" y2="-449.394"><stop offset="0" stop-color="#3d3846"/><stop offset=".038" stop-color="#77767b"/><stop offset=".077" stop-color="#3d3846"/><stop offset=".923" stop-color="#3d3846"/><stop offset=".962" stop-color="#77767b"/><stop offset="1" stop-color="#3d3846"/></linearGradient><linearGradient id="h" gradientUnits="userSpaceOnUse" x1="30" x2="104" y1="88" y2="102"><stop offset="0" stop-color="#f6f5f4"/><stop offset="1" stop-color="#deddda"/></linearGradient><filter id="b" height="100%" width="100%" x="0%" y="0%"><feColorMatrix in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><mask id="j"><g filter="url(#b)"><path fill-opacity=".4" d="M0 0h128v128H0z"/></g></mask><clipPath id="i"><path d="M0 0h192v152H0z"/></clipPath><mask id="l"><g filter="url(#b)"><path fill-opacity=".2" d="M0 0h128v128H0z"/></g></mask><clipPath id="k"><path d="M0 0h192v152H0z"/></clipPath><clipPath id="m"><path d="M12 76h104v8H12zm0 0"/></clipPath><mask id="o"><g filter="url(#b)"><path fill-opacity=".2" d="M0 0h128v128H0z"/></g></mask><clipPath id="n"><path d="M0 0h192v152H0z"/></clipPath><linearGradient id="p" gradientTransform="matrix(.25 0 0 .125 -14.149 136.174)" gradientUnits="userSpaceOnUse" x1="88.596" x2="536.596" y1="-449.394" y2="-449.394"><stop offset="0" stop-color="#1a5fb4"/><stop offset=".038" stop-color="#3584e4"/><stop offset=".077" stop-color="#1a5fb4"/><stop offset=".923" stop-color="#1a5fb4"/><stop offset=".962" stop-color="#3584e4"/><stop offset="1" stop-color="#1a5fb4"/></linearGradient><linearGradient id="q" gradientTransform="rotate(60 83.053 209)" gradientUnits="userSpaceOnUse" x1="61" x2="67" y1="220" y2="220"><stop offset="0" stop-color="#5e5c64"/><stop offset=".5" stop-color="#9a9996"/><stop offset="1" stop-color="#3d3846"/></linearGradient><linearGradient id="r" gradientTransform="matrix(2.66662 0 0 -2.66662 -106.664 -514.657)" gradientUnits="userSpaceOnUse" x1="58" x2="70" y1="-211" y2="-211"><stop offset="0" stop-color="#77767b"/><stop offset=".5" stop-color="#9a9996"/><stop offset="1" stop-color="#77767b"/></linearGradient><linearGradient id="s" gradientUnits="userSpaceOnUse" x1="58" x2="70" y1="39.5" y2="39.5"><stop offset="0" stop-color="#5e5c64"/><stop offset=".5" stop-color="#c0bfbc"/><stop offset="1" stop-color="#3d3846"/></linearGradient><linearGradient id="c" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#77767b"/><stop offset=".5" stop-color="#c0bfbc"/><stop offset="1" stop-color="#77767b"/></linearGradient><linearGradient id="t" gradientTransform="matrix(1.99998 0 0 -1.99998 -63.998 -393.995)" x1="58" x2="70" xlink:href="#c" y1="-211" y2="-211"/><radialGradient id="u" cx="-194.837" cy="-64" gradientTransform="matrix(0 -.7747 -.7747 0 14.42 -130.439)" gradientUnits="userSpaceOnUse" r="8"><stop offset="0" stop-color="#deddda"/><stop offset="1" stop-color="#77767b"/></radialGradient><linearGradient id="v" gradientTransform="rotate(60 83.053 209)" x1="61" x2="67" xlink:href="#c" y1="220" y2="220"/><path d="M20 54h88a8 8 0 0 1 8 8v46a8 8 0 0 1-8 8H20a8 8 0 0 1-8-8V62a8 8 0 0 1 8-8zm0 0" fill="url(#d)"/><path d="M20 54h88v46H20zm0 0" fill="url(#e)"/><path d="M20 28h88v66H20zm0 0" fill="#f6f5f4"/><path d="M20 52h88a8 8 0 0 1 8 8v22a8 8 0 0 1-8 8H20a8 8 0 0 1-8-8V60a8 8 0 0 1 8-8zm0 0" fill="url(#f)"/><path d="M20 54h88a8 8 0 0 1 8 8v46a8 8 0 0 1-8 8H20a8 8 0 0 1-8-8V62a8 8 0 0 1 8-8zm0 0" fill="url(#g)"/><path d="M21.453 52h85.094c5.219 0 9.453 3.582 9.453 8v44c0 4.418-4.234 8-9.453 8H21.453c-5.219 0-9.453-3.582-9.453-8V60c0-4.418 4.234-8 9.453-8zm0 0" fill="#5e5c64"/><path d="M20 58h88v46H20zm0 0" fill="url(#h)"/><g fill-opacity=".137"><path d="M108 102h-.5v1h.5zm-44.508 0 44 1v-1zm0 0"/><path d="M108 102h-.5v1h.5zm-44.508 0 44 1v-1zM108 100h-.5v1h.5zm-47.508 0 47 1v-1zM108 98h-.5v1h.5zm-50.508 0 50 1v-1zm0 0"/><path d="M20 96h88v8H20zm0 0"/></g><g clip-path="url(#i)" mask="url(#j)" transform="translate(-8 -16)"><path d="M34 94h4v14h-4zm0 0" fill="#241f31"/></g><g clip-path="url(#k)" fill="#241f31" mask="url(#l)" transform="translate(-8 -16)"><path d="M48.535 99H58v9h-9.465zm0 0"/><path d="M44 94h10v14H44zM64 94h18v14H64zm0 0"/><path d="M80 102h6v6h-6zM92 94h6v14h-6zm0 0"/></g><g clip-path="url(#m)"><g clip-path="url(#n)" mask="url(#o)" transform="translate(-8 -16)"><path d="M25.453 44h93.094c5.219 0 9.453 3.582 9.453 8v40c0 4.418-4.234 8-9.453 8H25.453C20.234 100 16 96.418 16 92V52c0-4.418 4.234-8 9.453-8zm0 0"/></g></g><path d="M16 42h96a8 8 0 0 1 8 8v22a8 8 0 0 1-8 8H16a8 8 0 0 1-8-8V50a8 8 0 0 1 8-8zm0 0" fill="url(#p)"/><path d="M17.453 20h93.094c5.219 0 9.453 3.582 9.453 8v40c0 4.418-4.234 8-9.453 8H17.453C12.234 76 8 72.418 8 68V28c0-4.418 4.234-8 9.453-8zm0 0" fill="#3584e4"/><path d="m32.824 216 62.352-36" fill="none" stroke="url(#q)" stroke-linecap="round" stroke-width="6" transform="translate(0 -172)"/><path d="M80 48c0-8.836-7.164-16-16-16s-16 7.164-16 16 7.164 16 16 16 16-7.164 16-16zm0 0" fill="url(#r)"/><path d="M64 30c-8.836 0-16 7.164-16 16s7.164 16 16 16 16-7.164 16-16-7.164-16-16-16zm0 0" fill="#deddda"/><path d="m59 27-1 2 1 2-1 2 1 2-1 2 1 2-1 2 1 2-1 2v1a5.998 5.998 0 0 0 9 5.195c1.855-1.07 3-3.05 3-5.195v-3l-1-2 1-2-1-2 1-2-1-2 1-2-1-2 1-2-1-2zm0 0" fill="url(#s)"/><path d="M69 29s-1.352 3.656-4.91 4.016C60.527 33.375 59 31 59 31l-1 2s2.094 2.781 6.09 2.55c3.996-.234 5.785-4.51 5.91-4.55zm0 0" fill="#fff" fill-opacity=".38"/><path d="M70 31c-.125.04-1.914 4.316-5.91 4.55C60.094 35.782 58 33 58 33l1 2s1.527 2.375 5.09 2.016C67.648 36.656 69 33 69 33l.043.086zm0 0" fill="#241f31" fill-opacity=".337"/><path d="M69 37s-1.352 3.656-4.91 4.016C60.527 41.375 59 39 59 39l-1 2s2.094 2.781 6.09 2.55c3.996-.234 5.785-4.51 5.91-4.55zm0 0" fill="#fff" fill-opacity=".38"/><path d="M69 41s-1.441 3.656-5 4.016S59 43 59 43l-1 2s2.004 2.781 6 2.55c3.996-.234 5.875-4.51 6-4.55zM69 33s-1.352 3.656-4.91 4.016C60.527 37.375 59 35 59 35l-1 2s2.094 2.781 6.09 2.55c3.996-.234 5.785-4.51 5.91-4.55zm0 0" fill="#fff" fill-opacity=".38"/><path d="M70 39c-.125.04-1.914 4.316-5.91 4.55S58 41 58 41l1 2s1.527 2.375 5.09 2.016C67.648 44.656 69 41 69 41l.043.086zm0 0" fill="#241f31" fill-opacity=".337"/><path d="M70 35c-.125.04-1.914 4.316-5.91 4.55C60.094 39.782 58 37 58 37l1 2s1.527 2.375 5.09 2.016C67.648 40.656 69 37 69 37l.043.086zm0 0" fill="#241f31" fill-opacity=".337"/><path d="M76 28c0-6.629-5.371-12-12-12s-12 5.371-12 12 5.371 12 12 12 12-5.371 12-12zm0 0" fill="url(#t)"/><path d="M64 10c-6.629 0-12 5.371-12 12s5.371 12 12 12 12-5.371 12-12-5.371-12-12-12zm0 0" fill="#deddda"/><path d="M52.023 27.406c-.015.2-.02.395-.023.594 0 6.629 5.371 12 12 12s12-5.371 12-12c-.004-.137-.012-.27-.02-.406C75.664 33.98 70.395 38.996 64 39c-6.465-.008-11.758-5.133-11.977-11.594zm0 0" fill="#77767b"/><path d="M64 16c-3.313 0-6 2.688-6 6s2.688 6 6 6 6-2.688 6-6-2.688-6-6-6zm0 0" fill="url(#u)"/><path d="M32.824 216 52.41 204.69" fill="#77767b" stroke="url(#v)" stroke-linecap="round" stroke-width="6" transform="translate(0 -172)"/><path d="M32.824 216 52.41 204.69" fill="#77767b" stroke="url(#q)" stroke-linecap="round" stroke-width="6" transform="translate(0 -172)"/></svg> \ No newline at end of file
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/apps/org.gnome.Boxes.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/apps/org.gnome.Boxes.svg
new file mode 100644
index 0000000..bb0a94f
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/apps/org.gnome.Boxes.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128" version="1.0"><defs><linearGradient id="a"><stop offset="0" stop-color="#fff"/><stop offset=".4" stop-color="#fff"/><stop offset="1" stop-color="#f6f5f4"/></linearGradient><radialGradient xlink:href="#a" id="i" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4 0 0 4 -492.799 -641.952)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="h" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4 0 0 4 -492.799 -681.952)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="g" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6 0 0 6 -785.198 -1065.928)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="f" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6 0 0 6 -785.198 -1153.928)"/><radialGradient xlink:href="#a" id="e" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4 0 0 4 -452.799 -681.952)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="d" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4 0 0 4 -452.799 -641.952)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="c" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6 0 0 6 -697.198 -1065.928)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/><radialGradient xlink:href="#a" id="b" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6 0 0 6 -697.198 -1153.928)" cx="134.2" cy="222.988" fx="134.2" fy="222.988" r="2"/></defs><g transform="translate(0 -172)"><path style="line-height:normal;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none" d="M22.352 194.352h82.687v82.687H22.352z" color="#000" font-weight="400" font-family="sans-serif" overflow="visible" fill="none"/><g color="#000" fill="none" stroke="#f6f5f4" stroke-width="8"><path style="marker:none" d="M84 256l24 24M84 216l24-24M44 256l-24 24M44 216l-24-24M44 216h40v40H44z" overflow="visible"/><path style="marker:none" overflow="visible" d="M20 192h88v88H20z"/></g><path style="marker:none" fill="#d5d3cf" d="M98.5 194v2h-69v-2z"/><path style="marker:none" d="M120 192c0 6.627-5.373 12-12 12-1.85 0-3.222-.095-5.165-1.166-1.092-1.726-3.55-4.584-5.668-5.666C96.096 195.224 96 193.85 96 192c0-6.627 5.373-12 12-12s12 5.373 12 12z" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M110 203h2v69h-2z"/><circle style="marker:none" cx="108" cy="280" r="12" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M79 258v2H49v-2zM99.604 274.425l-1.414 1.415-15-15 1.415-1.415zM103.058 199.793l1.414 1.414-15 15-1.414-1.414z"/><circle style="marker:none" cx="108" cy="190" r="12" color="#000" overflow="visible" fill="url(#b)"/><path style="marker:none" fill="#d5d3cf" d="M86 222h2v26h-2zM79 218v2H49v-2z"/><circle style="marker:none" cx="84" cy="216" r="8" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M98.5 282v2h-69v-2z"/><circle r="12" cy="278" cx="108" style="marker:none" color="#000" overflow="visible" fill="url(#c)"/><path style="marker:none" d="M92 256c0 .666 0 1-.235 1.932-1.165.59-4.765 4.542-5.787 5.822-.502.246-1.295.246-1.978.246a8 8 0 1 1 8-8z" color="#000" overflow="visible" fill="#d5d3cf"/><circle style="marker:none" cx="84" cy="254" r="8" color="#000" overflow="visible" fill="url(#d)"/><circle r="8" cy="214" cx="84" style="marker:none" color="#000" overflow="visible" fill="url(#e)"/><path style="marker:none" fill="#d5d3cf" d="M22 203h2v69h-2z"/><circle r="12" cy="280" cx="20" style="marker:none" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M46 222h2v26h-2z"/><circle r="8" cy="216" cx="44" style="marker:none" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M43.586 259.586L45 261l-15 15-1.414-1.414z"/><path d="M7.912 192c0 6.627 5.372 12 12 12 1.849 0 3.222-.095 5.165-1.166 1.092-1.726 3.55-4.584 5.668-5.666 1.071-1.944 1.167-3.318 1.167-5.168 0-6.627-5.373-12-12-12-6.628 0-12 5.373-12 12z" style="marker:none" color="#000" overflow="visible" fill="#d5d3cf"/><path style="marker:none" fill="#d5d3cf" d="M40.077 214.953l-1.414 1.415-15-15 1.415-1.414z"/><circle r="12" cy="190" cx="20" style="marker:none" color="#000" overflow="visible" fill="url(#f)"/><circle style="marker:none" cx="20" cy="278" r="12" color="#000" overflow="visible" fill="url(#g)"/><circle style="marker:none" cx="44" cy="214" r="8" color="#000" overflow="visible" fill="url(#h)"/><path d="M36 256c0 .666 0 1 .235 1.932 1.165.59 4.765 4.542 5.787 5.822.502.246 1.295.246 1.978.246a8 8 0 1 0-8-8z" style="marker:none" color="#000" overflow="visible" fill="#d5d3cf"/><circle r="8" cy="254" cx="44" style="marker:none" color="#000" overflow="visible" fill="url(#i)"/></g></svg> \ No newline at end of file
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/dark-mode-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/dark-mode-symbolic.svg
new file mode 100644
index 0000000..256ca41
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/dark-mode-symbolic.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ inkscape:version="1.0beta2 (2b71d25d45, 2019-12-03)"
+ sodipodi:docname="dark-mode-symbolic.svg"
+ id="svg8"
+ version="1.1"
+ height="16"
+ width="16">
+ <metadata
+ id="metadata14">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs12" />
+ <sodipodi:namedview
+ inkscape:current-layer="g6"
+ inkscape:window-maximized="1"
+ inkscape:window-y="0"
+ inkscape:window-x="0"
+ inkscape:cy="9.636866"
+ inkscape:cx="14.061833"
+ inkscape:zoom="35.858323"
+ showgrid="true"
+ id="namedview10"
+ inkscape:window-height="1016"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ guidetolerance="10"
+ gridtolerance="10"
+ objecttolerance="10"
+ borderopacity="1"
+ inkscape:document-rotation="0"
+ bordercolor="#666666"
+ pagecolor="#ffffff">
+ <inkscape:grid
+ id="grid841"
+ type="xygrid" />
+ </sodipodi:namedview>
+ <g
+ id="g6"
+ fill="#2e3436">
+ <path
+ d="M 8 4.0058594 C 5.805 4.0058594 4 5.8108594 4 8.0058594 C 4 10.200859 5.805 12.005859 8 12.005859 C 10.195 12.005859 12 10.200859 12 8.0058594 C 12 5.8108594 10.195 4.0058594 8 4.0058594 z M 8 6 C 9.1007925 6 10.005859 6.9050669 10.005859 8.0058594 C 10.005859 9.1066519 9.1007925 10.011719 8 10.011719 C 6.8992075 10.011719 5.9941406 9.1066519 5.9941406 8.0058594 C 5.9941406 6.9050669 6.8992075 6 8 6 z "
+ style="line-height:normal;-inkscape-font-specification:Sans;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none"
+ id="path2" />
+ <path
+ style="fill:#2e3436;fill-opacity:1"
+ d="m 12.596194,2.6966997 0.707107,0.7071067 c 0.195869,0.1958686 0.195869,0.5112382 0,0.7071068 L 12.596194,4.81802 c -0.195868,0.1958686 -0.511238,0.1958686 -0.707106,0 L 11.181981,4.1109132 c -0.195817,-0.1950323 -0.195817,-0.5120745 0,-0.7071068 l 0.707107,-0.7071067 c 0.195868,-0.1958686 0.511238,-0.1958686 0.707106,0 z m -8.4852811,8.4852813 0.7071068,0.707107 c 0.1958686,0.195868 0.1958686,0.511238 0,0.707107 l -0.7071068,0.707106 c -0.1958686,0.195869 -0.5112382,0.195869 -0.7071068,0 L 2.6966994,12.596195 c -0.1958161,-0.195033 -0.1958166,-0.512075 0,-0.707107 l 0.7071067,-0.707107 c 0.1958686,-0.195869 0.5112382,-0.195869 0.7071068,0 z M 7.5000757,1.0005015 h 0.999849 C 8.7762374,0.99998906 9.0003616,1.2241133 8.9998492,1.500426 V 2.500124 C 9.0003616,2.7764366 8.7762374,3.0005609 8.4999247,3.0000485 H 7.5000757 C 7.2237631,3.0005609 6.9996388,2.7764366 7.0001512,2.500124 V 1.500426 C 6.9996388,1.2241133 7.2237631,0.99998906 7.5000757,1.0005015 Z M 7.4993686,13.00066 8.4999247,12.999953 c 0.2763126,-5.13e-4 0.5004372,0.223611 0.4999245,0.499924 l 7.071e-4,1.000405 c 5.127e-4,0.276313 -0.2236119,0.500437 -0.4999245,0.499925 L 7.5000757,14.9995 C 7.2237631,15.000012 6.9996386,14.775888 7.0001512,14.499575 V 13.499877 C 6.9996386,13.223564 7.2237631,12.99944 7.5000757,12.999953 Z M 1.0005012,8.499925 V 7.500076 C 0.99998861,7.2237635 1.2241132,6.9996389 1.5004257,7.0001515 h 0.999698 C 2.7764364,6.999639 3.0005607,7.2237633 3.0000482,7.500076 V 8.499925 C 3.0005607,8.7762375 2.7764362,9.0003621 2.5001237,8.9998495 H 1.5004257 C 1.224113,9.000362 0.99998869,8.7762377 1.0005012,8.499925 Z M 13.000659,8.5006321 12.999952,7.500076 C 12.99944,7.2237633 13.223564,6.999639 13.499877,7.0001515 h 0.999698 c 0.276312,-5.126e-4 0.500437,0.223612 0.499924,0.4999245 l 7.07e-4,1.0005561 c 5.13e-4,0.2763127 -0.223611,0.500437 -0.499924,0.4999245 L 13.499877,8.9998495 C 13.223564,9.0003621 12.99944,8.7762375 12.999952,8.499925 Z m 0.302642,4.0955629 -0.707107,0.707106 c -0.195868,0.195869 -0.511238,0.195869 -0.707106,0 l -0.707107,-0.707106 c -0.195817,-0.195033 -0.195816,-0.512075 0,-0.707107 l 0.707107,-0.707107 c 0.195868,-0.195869 0.511238,-0.195869 0.707106,0 l 0.707107,0.707107 c 0.195869,0.195868 0.195869,0.511238 0,0.707107 z M 4.8180197,4.1109132 4.1109129,4.81802 c -0.1958686,0.1958686 -0.5112382,0.1958686 -0.7071068,0 L 2.6966994,4.1109132 c -0.1958164,-0.1950323 -0.1958164,-0.5120745 0,-0.7071068 L 3.4038061,2.6966997 c 0.1958686,-0.1958686 0.5112382,-0.1958686 0.7071068,0 l 0.7071068,0.7071067 c 0.1958686,0.1958686 0.1958686,0.5112382 0,0.7071068 z"
+ id="path844"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssccsssssssccssccccccccccccccccccccccccccccccccccccccsssccsssssssccssss" />
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/light-mode-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/light-mode-symbolic.svg
new file mode 100644
index 0000000..c2e769b
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/light-mode-symbolic.svg
@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16">
+ <g fill="#2e3436">
+ <path d="M8 4.006c-2.195 0-4 1.805-4 4 0 2.195 1.805 4 4 4 2.195 0 4-1.805 4-4 0-2.195-1.805-4-4-4z" style="line-height:normal;-inkscape-font-specification:Sans;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000;text-transform:none;text-orientation:mixed;white-space:normal;shape-padding:0;isolation:auto;mix-blend-mode:normal;solid-color:#000;solid-opacity:1;marker:none" color="#bebebe" font-weight="400" font-family="Sans" overflow="visible"/>
+ <path d="M7.5 0h1c.277 0 .5.223.5.5v2c0 .277-.223.5-.5.5h-1a.499.499 0 0 1-.5-.5v-2c0-.277.223-.5.5-.5zM7.5 13h1c.277 0 .5.223.5.5v2c0 .277-.223.5-.5.5h-1a.499.499 0 0 1-.5-.5v-2c0-.277.223-.5.5-.5zM1.99 2.697l.707-.707a.499.499 0 0 1 .707 0l1.414 1.414a.499.499 0 0 1 0 .707l-.707.707a.499.499 0 0 1-.707 0L1.99 3.404a.499.499 0 0 1 0-.707zM11.182 11.89l.707-.708a.499.499 0 0 1 .707 0l1.415 1.414a.499.499 0 0 1 0 .707l-.708.707a.499.499 0 0 1-.707 0l-1.414-1.414a.499.499 0 0 1 0-.707zM2.697 14.01l-.707-.707a.499.499 0 0 1 0-.707l1.414-1.414a.499.499 0 0 1 .707 0l.707.707a.499.499 0 0 1 0 .707L3.404 14.01a.499.499 0 0 1-.707 0zM11.89 4.818l-.708-.707a.499.499 0 0 1 0-.707l1.414-1.414a.499.499 0 0 1 .707 0l.708.707a.499.499 0 0 1 0 .707l-1.415 1.414a.499.499 0 0 1-.707 0zM16 7.5v1c0 .277-.223.5-.5.5h-2a.499.499 0 0 1-.5-.5v-1c0-.277.223-.5.5-.5h2c.277 0 .5.223.5.5zM3 7.5v1c0 .277-.223.5-.5.5h-2a.499.499 0 0 1-.5-.5v-1c0-.277.223-.5.5-.5h2c.277 0 .5.223.5.5z"/>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/tab-audio-muted-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/tab-audio-muted-symbolic.svg
new file mode 100644
index 0000000..0c44c8c
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/tab-audio-muted-symbolic.svg
@@ -0,0 +1 @@
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path style="fill:#2e3436" d="M8 2a1 1 0 0 0-.768.354L5 5H4c-1.108 0-2 .892-2 2v2c0 1.108.892 2 2 2h1.004l2.228 2.635a.97.97 0 0 0 .768.36Zm5.945 2.996a.985.985 0 0 0-.652.297L12 6.586l-1.293-1.293A1 1 0 0 0 10 5c-.89 0-1.337 1.077-.707 1.707L10.586 8 9.293 9.293c-.91.942.472 2.324 1.414 1.414L12 9.414l1.293 1.293c.942.91 2.324-.472 1.414-1.414L13.414 8l1.293-1.293c.711-.736.023-1.74-.762-1.71Z"/></svg> \ No newline at end of file
diff --git a/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/tab-audio-playing-symbolic.svg b/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/tab-audio-playing-symbolic.svg
new file mode 100644
index 0000000..de03837
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/hicolor/scalable/status/tab-audio-playing-symbolic.svg
@@ -0,0 +1 @@
+<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><path style="fill:#2e3436;fill-opacity:1;stroke-width:1px;stroke-linejoin:miter" d="M11.04 2.004a.951.951 0 0 0-.727.281L8 4.578V6h1.39l2.305-2.299a1.017 1.017 0 0 0 .03-1.392 1.008 1.008 0 0 0-.686-.305ZM8 7v2h4c.75 0 1-.501 1-1.002 0-.5-.25-.998-1-.998Zm0 3v1.422l2.322 2.293c.405.411 1.065.346 1.414-.024a1.017 1.017 0 0 0-.03-1.392L9.39 10Z"/><path style="fill:#2e3436" d="M7 2a1 1 0 0 0-.768.354L4 5H3c-1.108 0-2 .892-2 2v2c0 1.108.892 2 2 2h1.004l2.228 2.635a.97.97 0 0 0 .768.36Z"/></svg> \ No newline at end of file
diff --git a/examples/adw-1/adw1-demo/icons/org.example.Typeset.Source.svg b/examples/adw-1/adw1-demo/icons/org.example.Typeset.Source.svg
new file mode 100644
index 0000000..392d686
--- /dev/null
+++ b/examples/adw-1/adw1-demo/icons/org.example.Typeset.Source.svg
@@ -0,0 +1,3635 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ inkscape:export-ydpi="96"
+ inkscape:export-xdpi="96"
+ inkscape:export-filename="Template.png"
+ width="192"
+ height="152"
+ id="svg11300"
+ sodipodi:version="0.32"
+ inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
+ sodipodi:docname="nonexistant.app.Typeset.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0"
+ style="display:inline;enable-background:new"
+ viewBox="0 0 192 152"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <title
+ id="title4162">Adwaita Icon Template</title>
+ <defs
+ id="defs3">
+ <linearGradient
+ id="linearGradient1154"
+ inkscape:collect="always">
+ <stop
+ id="stop1142"
+ offset="0"
+ style="stop-color:#77767b;stop-opacity:1" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.05000014"
+ id="stop1144" />
+ <stop
+ id="stop1146"
+ offset="0.09980702"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#9a9996;stop-opacity:1"
+ offset="0.90000081"
+ id="stop1148" />
+ <stop
+ id="stop1150"
+ offset="0.95000082"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ <stop
+ id="stop1152"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1078"
+ id="linearGradient914"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,-460.60691,395.4264)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ id="linearGradient1078"
+ inkscape:collect="always">
+ <stop
+ id="stop1066"
+ offset="0"
+ style="stop-color:#77767b;stop-opacity:1" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.03571429"
+ id="stop1068" />
+ <stop
+ id="stop1070"
+ offset="0.07136531"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#9a9996;stop-opacity:1"
+ offset="0.9285714"
+ id="stop1072" />
+ <stop
+ id="stop1074"
+ offset="0.96428573"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ <stop
+ id="stop1076"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1073"
+ id="linearGradient1064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.23214285,0,0,0.32894738,-376.56691,435.82697)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1073">
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="0"
+ id="stop1060" />
+ <stop
+ id="stop1062"
+ offset="0.03846154"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ <stop
+ style="stop-color:#9a9996;stop-opacity:1"
+ offset="0.07685554"
+ id="stop1064" />
+ <stop
+ id="stop1067"
+ offset="0.92307693"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.96153849"
+ id="stop1069" />
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="1"
+ id="stop1071" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1154"
+ id="linearGradient1140"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.19642829,0,0,0.34210528,-365.40268,445.74005)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient10876"
+ id="linearGradient1001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.8293937,-0.81599442,0.81599442,1.8293937,-4327.9736,278.58079)"
+ x1="1660.8571"
+ y1="806.29718"
+ x2="1662.9901"
+ y2="812.88245" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient10876">
+ <stop
+ style="stop-color:#949390;stop-opacity:1"
+ offset="0"
+ id="stop10872" />
+ <stop
+ style="stop-color:#68676b;stop-opacity:1"
+ offset="1"
+ id="stop10874" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(-693.32504,153.44901)"
+ inkscape:collect="always"
+ xlink:href="#linearGradient988"
+ id="linearGradient990"
+ x1="64.000008"
+ y1="202.38483"
+ x2="64.000008"
+ y2="444.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient988">
+ <stop
+ style="stop-color:#a347ba;stop-opacity:1;"
+ offset="0"
+ id="stop984" />
+ <stop
+ style="stop-color:#c061cb;stop-opacity:1"
+ offset="1"
+ id="stop986" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1879"
+ id="linearGradient1053"
+ x1="384"
+ y1="120"
+ x2="416"
+ y2="120"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,-681.32503,374.44901)" />
+ <linearGradient
+ id="linearGradient1879"
+ inkscape:collect="always">
+ <stop
+ id="stop1873"
+ offset="0"
+ style="stop-color:#e8e7e4;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0.51104856"
+ id="stop1875" />
+ <stop
+ id="stop1877"
+ offset="1"
+ style="stop-color:#c2bfba;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ y2="236"
+ x2="96"
+ y1="236"
+ x1="32"
+ gradientTransform="translate(604.81684,170.58641)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1099"
+ xlink:href="#linearGradient1036" />
+ <linearGradient
+ id="linearGradient1036">
+ <stop
+ id="stop1032"
+ offset="0"
+ style="stop-color:#d5d3cf;stop-opacity:1;" />
+ <stop
+ id="stop1034"
+ offset="1"
+ style="stop-color:#f6f5f4;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ r="32"
+ fy="-76"
+ fx="-244"
+ cy="-76"
+ cx="-244"
+ gradientTransform="matrix(0.88333331,0,0,0.88333331,-460.35018,463.11973)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1103"
+ xlink:href="#linearGradient1069" />
+ <linearGradient
+ id="linearGradient1069">
+ <stop
+ id="stop1065"
+ offset="0"
+ style="stop-color:#d5d3cf;stop-opacity:1" />
+ <stop
+ id="stop1067-1"
+ offset="1"
+ style="stop-color:#949390;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="232"
+ x2="64"
+ y1="262.5"
+ x1="64"
+ id="linearGradient1027"
+ xlink:href="#linearGradient1025"
+ gradientTransform="translate(-470.5864,432.81685)" />
+ <linearGradient
+ id="linearGradient1025">
+ <stop
+ id="stop1021"
+ offset="0"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ id="stop1023"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1020">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop1016" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.09411765"
+ offset="1"
+ id="stop1018" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect35304-9"
+ is_visible="true" />
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath1609-7">
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path1611-5"
+ d="m 252,116 28,-28 v -8 h -36 v 36 z"
+ style="fill:#e74747;stroke:none;stroke-width:0.25px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1697"
+ id="linearGradient1049"
+ x1="20"
+ y1="238"
+ x2="108"
+ y2="238"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient1697">
+ <stop
+ id="stop1685"
+ offset="0"
+ style="stop-color:#deddda;stop-opacity:1" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1"
+ offset="0.04545455"
+ id="stop1687" />
+ <stop
+ id="stop1689"
+ offset="0.09090909"
+ style="stop-color:#deddda;stop-opacity:1" />
+ <stop
+ style="stop-color:#deddda;stop-opacity:1"
+ offset="0.90909094"
+ id="stop1691" />
+ <stop
+ id="stop1693"
+ offset="0.95454544"
+ style="stop-color:#eeeeec;stop-opacity:1" />
+ <stop
+ id="stop1695"
+ offset="1"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1245">
+ <stop
+ style="stop-color:#9a9996;stop-opacity:1"
+ offset="0"
+ id="stop1241" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="1"
+ id="stop1243" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath1289">
+ <path
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 64,-148 h 64 l 64,-64 64,64 h 192 c 17.728,0 32,14.272 32,32 v 288 c 0,17.728 -14.272,32 -32,32 H 256 l -64,-64 -64,64 H 64 C 46.272,204 32,189.728 32,172 v -288 c 0,-17.728 14.408898,-34.19889 32,-32 z"
+ id="path1291"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccsssscccssss" />
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#paint3_linear-2-6-5"
+ id="linearGradient1383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0,6,-12,0,-264,209.99687)"
+ x2="1" />
+ <linearGradient
+ id="paint3_linear-2-6-5"
+ x2="1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0,6,-12,0,-64,209.99687)">
+ <stop
+ stop-color="#C01C27"
+ id="stop91-0-7-4" />
+ <stop
+ offset="1"
+ stop-color="#E01B24"
+ id="stop93-2-5-7" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6058"
+ id="radialGradient1099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.757743,-9.5621778e-8,3.7652438e-8,1.9495846,-82.64437,131.95505)"
+ cx="-24.238829"
+ cy="225.59558"
+ fx="-24.238829"
+ fy="225.59558"
+ r="24" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient6058">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop6054" />
+ <stop
+ style="stop-color:#f6f5f4;stop-opacity:1"
+ offset="1"
+ id="stop6056" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1115"
+ id="linearGradient1097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0015061,0,0,0.99993452,-117.15963,352.51519)"
+ x1="43.843597"
+ y1="234.00014"
+ x2="-60.000004"
+ y2="234.00014" />
+ <linearGradient
+ id="linearGradient1115"
+ inkscape:collect="always">
+ <stop
+ id="stop1103"
+ offset="0"
+ style="stop-color:#d5d3cf;stop-opacity:1" />
+ <stop
+ style="stop-color:#e3e2df;stop-opacity:1"
+ offset="0.03846154"
+ id="stop1105" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.07692308"
+ id="stop1107" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.92307693"
+ id="stop1109" />
+ <stop
+ style="stop-color:#e3e2df;stop-opacity:1"
+ offset="0.96153843"
+ id="stop1111" />
+ <stop
+ id="stop1113"
+ offset="1"
+ style="stop-color:#d5d3cf;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1351-3"
+ id="linearGradient1574"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,180,83)"
+ x1="344"
+ y1="76"
+ x2="340"
+ y2="72" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1351-3">
+ <stop
+ style="stop-color:#d5d3cf;stop-opacity:1"
+ offset="0"
+ id="stop1347" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop1349-6" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath1609">
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path1611"
+ d="m 252,116 28,-28 v -8 h -36 v 36 z"
+ style="fill:#e74747;stroke:none;stroke-width:0.25px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1187"
+ id="linearGradient1572"
+ gradientUnits="userSpaceOnUse"
+ x1="256"
+ y1="268"
+ x2="256"
+ y2="-180.00006" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1187">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop1183" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="1"
+ id="stop1185" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient985"
+ inkscape:collect="always">
+ <stop
+ id="stop981"
+ offset="0"
+ style="stop-color:#f9f06b;stop-opacity:1" />
+ <stop
+ id="stop983"
+ offset="1"
+ style="stop-color:#f9f06b;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1076">
+ <stop
+ style="stop-color:#d5d3cf;stop-opacity:1"
+ offset="0"
+ id="stop1064-3" />
+ <stop
+ id="stop1066-7"
+ offset="0.03571428"
+ style="stop-color:#e4e1de;stop-opacity:1" />
+ <stop
+ style="stop-color:#d5d3cf;stop-opacity:1"
+ offset="0.07142857"
+ id="stop1068-5" />
+ <stop
+ id="stop1070-9"
+ offset="0.9285714"
+ style="stop-color:#d5d3cf;stop-opacity:1" />
+ <stop
+ style="stop-color:#e4e1de;stop-opacity:1"
+ offset="0.96428573"
+ id="stop1072-2" />
+ <stop
+ style="stop-color:#d5d3cf;stop-opacity:1"
+ offset="1"
+ id="stop1074-2" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient985"
+ id="linearGradient1106-2-7"
+ x1="301"
+ y1="33.559235"
+ x2="104"
+ y2="33.559235"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,-375.35922,572.37304)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1020"
+ id="radialGradient1030-8-1"
+ cx="63.999996"
+ cy="194.19048"
+ fx="63.999996"
+ fy="194.19048"
+ r="44"
+ gradientTransform="matrix(-4.1363634,1.2532736e-6,-2.6513804e-7,-1.3909091,-54.131932,-340.73849)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1076"
+ id="linearGradient1444-2-3-3-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25,0,0,0.25,-395.35922,460.38207)"
+ x1="120"
+ y1="619.96387"
+ x2="568"
+ y2="619.96387" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1697"
+ id="linearGradient1278"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(2,-22)"
+ x1="50"
+ y1="238"
+ x2="74"
+ y2="238" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1245"
+ id="linearGradient1280"
+ gradientUnits="userSpaceOnUse"
+ x1="65"
+ y1="204"
+ x2="65"
+ y2="200" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1073-0"
+ id="linearGradient8402"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.23214285,0,0,0.20394738,-8.5666383,379.65249)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ id="linearGradient1073-0"
+ inkscape:collect="always">
+ <stop
+ id="stop1060-3"
+ offset="0"
+ style="stop-color:#63452c;stop-opacity:1" />
+ <stop
+ style="stop-color:#865e3c;stop-opacity:1"
+ offset="0.03846154"
+ id="stop1062-4" />
+ <stop
+ id="stop1064-0"
+ offset="0.07685554"
+ style="stop-color:#63452c;stop-opacity:1" />
+ <stop
+ style="stop-color:#63452c;stop-opacity:1"
+ offset="0.92307693"
+ id="stop1067-3" />
+ <stop
+ id="stop1069-9"
+ offset="0.96153849"
+ style="stop-color:#865e3c;stop-opacity:1" />
+ <stop
+ id="stop1071-1"
+ offset="1"
+ style="stop-color:#63452c;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1182"
+ id="linearGradient8404"
+ gradientUnits="userSpaceOnUse"
+ x1="30"
+ y1="264"
+ x2="104"
+ y2="278" />
+ <linearGradient
+ id="linearGradient1182"
+ inkscape:collect="always">
+ <stop
+ id="stop1178"
+ offset="0"
+ style="stop-color:#deddda;stop-opacity:1" />
+ <stop
+ id="stop1180"
+ offset="1"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1073-0"
+ id="linearGradient8406"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.23214285,0,0,0.125,-8.5666383,318.17401)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1928"
+ id="linearGradient8408"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.23214285,0,0,0.20394738,-8.5666383,379.65249)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1928">
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="0"
+ id="stop1916" />
+ <stop
+ id="stop1918"
+ offset="0.03846154"
+ style="stop-color:#77767b;stop-opacity:1" />
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="0.07685554"
+ id="stop1920" />
+ <stop
+ id="stop1922"
+ offset="0.92307693"
+ style="stop-color:#3d3846;stop-opacity:1" />
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="0.96153849"
+ id="stop1924" />
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="1"
+ id="stop1926" />
+ </linearGradient>
+ <linearGradient
+ y2="278"
+ x2="104"
+ y1="264"
+ x1="30"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1938"
+ xlink:href="#linearGradient2212"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2212">
+ <stop
+ style="stop-color:#f6f5f4;stop-opacity:1"
+ offset="0"
+ id="stop2208" />
+ <stop
+ style="stop-color:#deddda;stop-opacity:1"
+ offset="1"
+ id="stop2210" />
+ </linearGradient>
+ <clipPath
+ id="clipPath1992"
+ clipPathUnits="userSpaceOnUse">
+ <rect
+ style="opacity:0.2;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect1994"
+ width="104"
+ height="8"
+ x="12"
+ y="248" />
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2008"
+ id="linearGradient1932"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.25000058,0,0,0.1249992,-14.149027,308.17365)"
+ x1="88.595886"
+ y1="-449.39401"
+ x2="536.59589"
+ y2="-449.39401" />
+ <linearGradient
+ id="linearGradient2008"
+ inkscape:collect="always">
+ <stop
+ id="stop1996"
+ offset="0"
+ style="stop-color:#1a5fb4;stop-opacity:1" />
+ <stop
+ style="stop-color:#3584e4;stop-opacity:1"
+ offset="0.03846154"
+ id="stop1998" />
+ <stop
+ id="stop2000"
+ offset="0.07685554"
+ style="stop-color:#1a5fb4;stop-opacity:1" />
+ <stop
+ style="stop-color:#1a5fb4;stop-opacity:1"
+ offset="0.92307693"
+ id="stop2002" />
+ <stop
+ id="stop2004"
+ offset="0.96153849"
+ style="stop-color:#3584e4;stop-opacity:1" />
+ <stop
+ id="stop2006"
+ offset="1"
+ style="stop-color:#1a5fb4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ y2="220"
+ x2="67.000298"
+ y1="220"
+ x1="60.999699"
+ gradientTransform="rotate(60,83.052899,209.00012)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2370-3"
+ xlink:href="#linearGradient5442"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5442">
+ <stop
+ style="stop-color:#5e5c64;stop-opacity:1"
+ offset="0"
+ id="stop5436" />
+ <stop
+ id="stop5438"
+ offset="0.5"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="1"
+ id="stop5440" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2016"
+ id="linearGradient8414"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.6666251,0,0,2.6666251,-106.66373,343.65773)"
+ x1="58"
+ y1="-211"
+ x2="70"
+ y2="-211" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2016">
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="0"
+ id="stop2010" />
+ <stop
+ id="stop2012"
+ offset="0.5"
+ style="stop-color:#9a9996;stop-opacity:1" />
+ <stop
+ style="stop-color:#77767b;stop-opacity:1"
+ offset="1"
+ id="stop2014" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5182"
+ id="linearGradient8416"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,174)"
+ x1="58"
+ y1="43.49958"
+ x2="70"
+ y2="43.49958" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5182">
+ <stop
+ style="stop-color:#5e5c64;stop-opacity:1"
+ offset="0"
+ id="stop5176" />
+ <stop
+ id="stop5178"
+ offset="0.5"
+ style="stop-color:#c0bfbc;stop-opacity:1" />
+ <stop
+ style="stop-color:#3d3846;stop-opacity:1"
+ offset="1"
+ id="stop5180" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1799"
+ id="linearGradient8422"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.9999773,0,0,1.9999773,-63.998267,221.99516)"
+ x1="58"
+ y1="-211"
+ x2="70"
+ y2="-211" />
+ <linearGradient
+ id="linearGradient1799"
+ inkscape:collect="always">
+ <stop
+ id="stop1793"
+ offset="0"
+ style="stop-color:#77767b;stop-opacity:1" />
+ <stop
+ style="stop-color:#c0bfbc;stop-opacity:1"
+ offset="0.5"
+ id="stop1795" />
+ <stop
+ id="stop1797"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ r="7.9999094"
+ fy="-64.000015"
+ fx="-194.83652"
+ cy="-64.000015"
+ cx="-194.83652"
+ gradientTransform="matrix(0.77469554,0,0,0.77469569,-41.560819,-14.419746)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient1505-1"
+ xlink:href="#linearGradient1183"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient1183">
+ <stop
+ id="stop1179"
+ offset="0"
+ style="stop-color:#deddda;stop-opacity:1" />
+ <stop
+ id="stop1181"
+ offset="1"
+ style="stop-color:#77767b;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1799"
+ id="linearGradient8424"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(60,83.052899,209.00011)"
+ x1="60.999699"
+ y1="220"
+ x2="67.000298"
+ y2="220" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5442"
+ id="linearGradient143387"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(60,83.052899,209.00012)"
+ x1="60.999699"
+ y1="220"
+ x2="67.000298"
+ y2="220" />
+ </defs>
+ <sodipodi:namedview
+ stroke="#ef2929"
+ fill="#f57900"
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="0.25490196"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="6.3958359"
+ inkscape:cx="55.504864"
+ inkscape:cy="107.25729"
+ inkscape:current-layer="layer9"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:showpageshadow="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ width="400px"
+ height="300px"
+ inkscape:snap-nodes="true"
+ inkscape:snap-bbox="true"
+ objecttolerance="7"
+ gridtolerance="12"
+ guidetolerance="13"
+ inkscape:window-maximized="1"
+ inkscape:pagecheckerboard="false"
+ showguides="false"
+ inkscape:guide-bbox="true"
+ inkscape:locked="false"
+ inkscape:measure-start="0,0"
+ inkscape:measure-end="0,0"
+ inkscape:object-nodes="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-global="true"
+ inkscape:object-paths="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ showborder="true"
+ inkscape:snap-center="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-midpoints="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:snap-text-baseline="true"
+ borderlayer="true"
+ inkscape:deskcolor="#d1d1d1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid5883"
+ spacingx="2"
+ spacingy="2"
+ enabled="true"
+ visible="true"
+ empspacing="4"
+ originx="8"
+ originy="8" />
+ <sodipodi:guide
+ position="72,16"
+ orientation="0,1"
+ id="guide1073"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="20,72"
+ orientation="1,0"
+ id="guide1075"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,112"
+ orientation="0,1"
+ id="guide1099"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,136"
+ orientation="0,1"
+ id="guide993"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="112,72"
+ orientation="1,0"
+ id="guide995"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="8.0000001,72"
+ orientation="1,0"
+ id="guide867"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="128,72"
+ orientation="1,0"
+ id="guide869"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,124"
+ orientation="0,1"
+ id="guide871"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <inkscape:grid
+ type="xygrid"
+ id="grid873"
+ spacingx="1"
+ spacingy="1"
+ empspacing="8"
+ color="#000000"
+ opacity="0.49019608"
+ empcolor="#000000"
+ empopacity="0.08627451"
+ dotted="true"
+ originx="8"
+ originy="8" />
+ <sodipodi:guide
+ position="32,72"
+ orientation="1,0"
+ id="guide877"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="124,72"
+ orientation="1,0"
+ id="guide879"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,128"
+ orientation="0,1"
+ id="guide881"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,20"
+ orientation="0,1"
+ id="guide883"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="16,72"
+ orientation="1,0"
+ id="guide885"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="136,72"
+ orientation="1,0"
+ id="guide887"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,8"
+ orientation="0,1"
+ id="guide897"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,32"
+ orientation="0,1"
+ id="guide899"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="264,264"
+ orientation="-0.70710678,0.70710678"
+ id="guide950"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ <sodipodi:guide
+ position="72,72"
+ orientation="0.70710678,0.70710678"
+ id="guide952"
+ inkscape:locked="false"
+ inkscape:label=""
+ inkscape:color="rgb(0,0,255)" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata4">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>GNOME Design Team</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
+ <dc:title>Adwaita Icon Template</dc:title>
+ <dc:subject>
+ <rdf:Bag />
+ </dc:subject>
+ <dc:date />
+ <dc:rights>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:rights>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:publisher>
+ <dc:identifier />
+ <dc:relation />
+ <dc:language />
+ <dc:coverage />
+ <dc:description />
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:contributor>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" />
+ <cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="App Icon"
+ inkscape:groupmode="layer"
+ style="display:inline"
+ transform="translate(8,-156)">
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="template"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <rect
+ inkscape:label="0"
+ y="172"
+ x="9.2651362e-08"
+ height="128"
+ width="128"
+ id="hicolor"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:0;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="symbolic"
+ width="16"
+ height="16"
+ x="160"
+ y="172"
+ inkscape:label="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="baseplate"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <g
+ id="g1481"
+ transform="translate(0,168)">
+ <g
+ id="g1430"
+ transform="translate(-502.58934,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect1418"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1420"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1422"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1424"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1426"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path1428"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-358.58936,-158.75232)"
+ id="g1444">
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="rect1432"
+ width="128"
+ height="128"
+ x="4.5893426"
+ y="330.75232"
+ inkscape:label="512x512" />
+ <circle
+ cx="68.589371"
+ cy="394.75232"
+ r="59.504131"
+ id="circle1434"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="339.24728"
+ x="25.084349"
+ height="111.01005"
+ width="87.009987"
+ id="rect1436"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="343.24756"
+ x="17.084608"
+ height="103.00952"
+ width="103.00952"
+ id="rect1438"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="359.24728"
+ x="13.08435"
+ height="87.010048"
+ width="111.01004"
+ id="rect1440"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1442"
+ d="M 4.5893689,447.7523 H 132.58937"
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ </g>
+ <g
+ id="g1458"
+ transform="translate(-214.58936,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect1446"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1448"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1450"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1452"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1454"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path1456"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ style="display:inline;fill:#000000;enable-background:new"
+ transform="matrix(7.9911709,0,0,8.0036407,-167.7909,-4846.0776)"
+ id="g12027"
+ inkscape:export-xdpi="12"
+ inkscape:export-ydpi="12" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="128"
+ width="128"
+ height="128"
+ x="9.2651362e-08"
+ y="172"
+ inkscape:label="0" />
+ <g
+ id="g883"
+ style="fill:none;fill-opacity:0.25098039;stroke:#a579b3;stroke-opacity:1"
+ transform="translate(-24,24)" />
+ <g
+ id="g900"
+ style="fill:none;fill-opacity:0.25098039;stroke:#a579b3;stroke-opacity:1"
+ transform="translate(-24,24)" />
+ <rect
+ inkscape:label=""
+ y="172"
+ x="160"
+ height="16"
+ width="16"
+ id="16"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:'Cantarell, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.332649;enable-background:new"
+ x="0"
+ y="167"
+ id="text863"
+ inkscape:label="icon-name"><tspan
+ style="font-size:4px;stroke-width:0.332649"
+ sodipodi:role="line"
+ id="tspan861"
+ x="0"
+ y="167">Hicolor</tspan></text>
+ <text
+ inkscape:label="icon-name"
+ id="text867"
+ y="167"
+ x="160"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4px;line-height:125%;font-family:Cantarell;-inkscape-font-specification:'Cantarell, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.332649;enable-background:new"
+ xml:space="preserve"><tspan
+ y="167"
+ x="160"
+ id="tspan865"
+ sodipodi:role="line"
+ style="font-size:4px;stroke-width:0.332649">Symbolic</tspan></text>
+ <g
+ id="g1318"
+ transform="translate(-502.58934,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect13805-6"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle2892-2"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect2894-9"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect2896-1"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect2898-2"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path2900-7"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-358.58936,-158.75232)"
+ id="g1332">
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="rect1320"
+ width="128"
+ height="128"
+ x="4.5893426"
+ y="330.75232"
+ inkscape:label="512x512" />
+ <circle
+ cx="68.589371"
+ cy="394.75232"
+ r="59.504131"
+ id="circle1322"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="339.24728"
+ x="25.084349"
+ height="111.01005"
+ width="87.009987"
+ id="rect1324"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="343.24756"
+ x="17.084608"
+ height="103.00952"
+ width="103.00952"
+ id="rect1326"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="359.24728"
+ x="13.08435"
+ height="87.010048"
+ width="111.01004"
+ id="rect1328"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1330"
+ d="M 4.5893689,447.7523 H 132.58937"
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ </g>
+ <g
+ id="g1346"
+ transform="translate(-214.58936,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect1334"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1336"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1338"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1340"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1342"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path1344"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(0,312)"
+ id="g1525">
+ <g
+ transform="translate(-502.58934,-158.75232)"
+ id="g1495">
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="rect1483"
+ width="128"
+ height="128"
+ x="4.5893426"
+ y="330.75232"
+ inkscape:label="512x512" />
+ <circle
+ cx="68.589371"
+ cy="394.75232"
+ r="59.504131"
+ id="circle1485"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="339.24728"
+ x="25.084349"
+ height="111.01005"
+ width="87.009987"
+ id="rect1487"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="343.24756"
+ x="17.084608"
+ height="103.00952"
+ width="103.00952"
+ id="rect1489"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="359.24728"
+ x="13.08435"
+ height="87.010048"
+ width="111.01004"
+ id="rect1491"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1493"
+ d="M 4.5893689,447.7523 H 132.58937"
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ </g>
+ <g
+ id="g1509"
+ transform="translate(-358.58936,-158.75232)">
+ <rect
+ inkscape:label="512x512"
+ y="330.75232"
+ x="4.5893426"
+ height="128"
+ width="128"
+ id="rect1497"
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate" />
+ <circle
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle1499"
+ r="59.504131"
+ cy="394.75232"
+ cx="68.589371" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1501"
+ width="87.009987"
+ height="111.01005"
+ x="25.084349"
+ y="339.24728"
+ rx="8.701004"
+ ry="7.9292889" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1503"
+ width="103.00952"
+ height="103.00952"
+ x="17.084608"
+ y="343.24756"
+ rx="7.9238095"
+ ry="7.9238095" />
+ <rect
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1505"
+ width="111.01004"
+ height="87.010048"
+ x="13.08435"
+ y="359.24728"
+ rx="7.9292889"
+ ry="8.701005" />
+ <path
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 4.5893689,447.7523 H 132.58937"
+ id="path1507"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-214.58936,-158.75232)"
+ id="g1523">
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;marker:none;enable-background:accumulate"
+ id="rect1511"
+ width="128"
+ height="128"
+ x="4.5893426"
+ y="330.75232"
+ inkscape:label="512x512" />
+ <circle
+ cx="68.589371"
+ cy="394.75232"
+ r="59.504131"
+ id="circle1513"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="339.24728"
+ x="25.084349"
+ height="111.01005"
+ width="87.009987"
+ id="rect1515"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="343.24756"
+ x="17.084608"
+ height="103.00952"
+ width="103.00952"
+ id="rect1517"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="359.24728"
+ x="13.08435"
+ height="87.010048"
+ width="111.01004"
+ id="rect1519"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1521"
+ d="M 4.5893689,447.7523 H 132.58937"
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ </g>
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer9"
+ inkscape:label="icons"
+ style="display:inline">
+ <g
+ style="display:inline;enable-background:new"
+ id="g1064"
+ transform="translate(92.457943,4.92209)">
+ <rect
+ ry="8"
+ rx="7.9999995"
+ y="207.07791"
+ x="-438.45795"
+ height="76"
+ width="112.00001"
+ id="rect884"
+ style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient914);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect886"
+ width="112.00001"
+ height="84"
+ x="-438.45795"
+ y="195.07791"
+ rx="7.9999995"
+ ry="8" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1096"
+ transform="translate(158)">
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient1064);fill-opacity:1;stroke:none;stroke-width:0.24999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1048"
+ width="104"
+ height="100"
+ x="-356"
+ y="188"
+ rx="7.999999"
+ ry="8" />
+ <rect
+ ry="8"
+ rx="7.9999986"
+ y="184"
+ x="-356"
+ height="99.999992"
+ width="104"
+ id="rect929-36-9"
+ style="display:inline;opacity:1;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:0.24999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1138"
+ transform="translate(-130.00003)">
+ <rect
+ ry="8"
+ rx="7.999999"
+ y="188"
+ x="-347.99994"
+ height="104"
+ width="87.999878"
+ id="rect1134"
+ style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient1140);fill-opacity:1;stroke:none;stroke-width:0.24999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:0.24999996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1136"
+ width="88"
+ height="107.99999"
+ x="-347.99997"
+ y="180"
+ rx="7.9999967"
+ ry="8" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1278"
+ transform="translate(184.01133,-10.5513)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path945"
+ d="m -558.01133,415.5513 a 59.999995,59.999995 0 0 1 -59.99999,60 59.999995,59.999995 0 0 1 -60,-60 59.999995,59.999995 0 0 1 60,-59.99999 59.999995,59.999995 0 0 1 59.99999,59.99999 z"
+ style="display:inline;opacity:1;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ style="display:inline;opacity:1;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect978"
+ width="112"
+ height="114"
+ x="-674.01123"
+ y="357.5513"
+ rx="56"
+ ry="56" />
+ <path
+ style="display:inline;opacity:1;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m -558.01133,413.5513 a 59.999995,59.999995 0 0 1 -59.99999,59.99999 59.999995,59.999995 0 0 1 -60,-59.99999 59.999995,59.999995 0 0 1 60,-60 59.999995,59.999995 0 0 1 59.99999,60 z"
+ id="path981"
+ inkscape:connector-curvature="0" />
+ <circle
+ r="54"
+ style="display:inline;opacity:1;fill:#424048;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="circle983"
+ cx="-618.01129"
+ cy="413.5513" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path928"
+ d="m -591.9764,386.54325 a 1.0016649,1.0016649 0 0 0 -0.77686,0.33008 l -21.97461,23.66504 a 5.9999995,5.9999995 0 0 0 -5.58203,-0.52246 l -14.2207,-15.80079 a 2.0033298,2.0033298 0 0 0 -1.60352,-0.68212 2.0033298,2.0033298 0 0 0 -1.37402,3.36181 l 14.21924,15.79932 a 5.9999995,5.9999995 0 0 0 -0.20997,5.30517 5.9999995,5.9999995 0 0 0 2.4043,2.69922 l -11.8584,30.49366 a 1.0016649,1.0016649 0 1 0 1.86719,0.72558 l 11.85742,-30.49121 a 5.9999995,5.9999995 0 0 0 3.65332,-0.39209 5.9999995,5.9999995 0 0 0 3.03516,-7.92383 5.9999995,5.9999995 0 0 0 -0.7251,-1.2041 l 21.9795,-23.66992 a 1.0016649,1.0016649 0 0 0 -0.69092,-1.69336 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.2;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4.00625896;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" />
+ <path
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:url(#linearGradient1001);stroke-width:4.00625896;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -618.01122,413.5513 -18,-20"
+ id="path987"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path989"
+ d="m -618.01122,413.5513 26.00001,-28"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.00312948;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ inkscape:transform-center-y="1.7677675"
+ sodipodi:nodetypes="cc"
+ inkscape:transform-center-x="-1.7677635" />
+ <path
+ inkscape:transform-center-x="-1.767762"
+ sodipodi:nodetypes="cc"
+ inkscape:transform-center-y="1.7677675"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#e01b24;stroke-width:2.00312948;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -618.01122,413.5513 -14,36"
+ id="path991"
+ inkscape:connector-curvature="0" />
+ <circle
+ r="5.9999995"
+ cy="125.93015"
+ cx="-732.8739"
+ id="circle993"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#d5d3cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:7.77220678;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ transform="rotate(-24.039088)" />
+ <circle
+ r="2.0031295"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#131c1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8.01251698;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="circle995"
+ cx="-617.98218"
+ cy="413.5513" />
+ <circle
+ r="2"
+ cy="413.5513"
+ cx="-617.98218"
+ id="circle997"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#131c1a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8.01251698;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="circle1003-6"
+ d="m -618.01122,359.5513 a 54,54 0 0 0 -54,54 54,54 0 0 0 0.0415,1.1709 54,54 0 0 1 53.9585,-53.1709 54,54 0 0 1 53.9585,52.82813 54,54 0 0 0 0.0415,-0.82813 54,54 0 0 0 -54.00001,-54 z"
+ style="display:inline;opacity:0.1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.01129822px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1365"
+ transform="translate(339.32504,14.55099)">
+ <path
+ sodipodi:nodetypes="cccsscc"
+ inkscape:connector-curvature="0"
+ id="rect970"
+ d="m -681.32504,357.44901 v 84 h 96 c 4.432,0 8,-3.568 8,-8 v -68 c 0,-4.432 -3.568,-8 -8,-8 z"
+ style="display:inline;opacity:1;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:0.37684458;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ <path
+ style="display:inline;opacity:1;fill:url(#linearGradient1053);fill-opacity:1;stroke:none;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m -679.32503,369.44901 v 70 h 93.99999 c 4.432,0 8,-3.568 8,-8 v -54 c 0,-4.432 -3.568,-8 -8,-8 z"
+ id="rect954-3-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsscc" />
+ <path
+ sodipodi:nodetypes="cccsscc"
+ inkscape:connector-curvature="0"
+ id="rect970-5-3"
+ d="m -681.32504,339.44901 v 94 h 96 c 4.432,0 8,-3.568 8,-8 v -78 c 0,-4.432 -3.568,-8 -8,-8 z"
+ style="display:inline;opacity:1;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:0.37684458;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ <path
+ sodipodi:nodetypes="cccsscc"
+ inkscape:connector-curvature="0"
+ id="rect970-5"
+ d="m -681.32504,337.44901 v 94 h 96 c 4.432,0 8,-3.568 8,-8 v -78 c 0,-4.432 -3.568,-8 -8,-8 z"
+ style="display:inline;opacity:1;fill:url(#linearGradient990);fill-opacity:1;stroke:none;stroke-width:0.37684458;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ <g
+ transform="matrix(0.140625,0,0,0.140625,-722.55795,165.74946)"
+ aria-label="a"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:322.10223389px;line-height:1.25;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:1;enable-background:new"
+ id="g1059">
+ <path
+ sodipodi:nodetypes="sccscssscccssscsccscc"
+ inkscape:connector-curvature="0"
+ d="m 812.20261,1309.7929 c -27.70079,0 -55.72369,7.4083 -74.72772,20.9366 l 18.03773,35.1092 c 12.56198,-9.9852 31.56602,-16.1051 49.92584,-16.1051 27.05659,0 42.19199,14.4169 42.19199,35.9977 l -50.00981,-0.2354 c -52.82417,-0.2486 -74.40225,26.624 -74.40225,57.2238 0,29.9555 22.04572,51.6578 62.6306,51.6578 25.44607,0 52.4405,-7.5298 61.78146,-23.3128 l 0.003,21.3432 53.33034,-0.01 -0.006,-104.013 c -0.003,-52.5026 -35.93005,-78.5921 -88.75482,-78.5921 z m -11.67969,151.6087 c -17.71562,0 -28.34499,-8.3747 -28.34499,-20.9367 0,-11.5956 7.40547,-23.1197 30.91845,-22.9689 l 44.53407,0.2354 0.003,16.1495 c 0.003,16.8142 -30.36157,27.5207 -47.11089,27.5207 z"
+ style="fill:#813d9c;stroke-width:1"
+ id="path1057" />
+ </g>
+ <g
+ aria-label="a"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:1000%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ id="g1063"
+ transform="translate(-690.63092,149.52514)">
+ <path
+ d="m 55.305889,221.92387 c -0.944974,0.77446 -1.612023,1.05106 -2.445832,1.05106 -1.278503,0 -1.667605,-0.77447 -1.667605,-3.20851 v -10.78724 c 0,-2.8766 -0.277936,-4.48085 -1.111745,-5.80851 -1.22291,-1.99149 -4.573306,-3.04255 -7.852936,-3.04255 -5.225182,0 -9.33863,2.71064 -9.33863,6.19575 0,1.27234 1.056163,2.37871 2.39025,2.37871 1.334086,0 2.501413,-1.10637 2.501413,-2.3234 0,-0.22127 -0.05563,-0.49787 -0.111176,-0.8851 -0.111177,-0.49787 -0.16676,-0.94042 -0.16676,-1.32766 0,-1.49362 1.778783,-2.71064 4.002271,-2.71064 2.723757,0 4.672684,1.60425 4.672684,4.59149 v 4.39862 c -7.655771,2.24877 -9.953459,2.84819 -12.343697,4.95032 -1.22292,1.10637 -2.001135,2.98723 -2.001135,4.81276 0,3.48511 2.445832,5.91915 5.836637,5.91915 2.445831,0 5.172972,-1.1617 8.563777,-4.0383 0.277937,2.93191 1.790584,4.0383 4.069655,4.0383 1.889959,0 3.057287,-0.66383 5.002829,-2.76596 z m -9.128066,-3.1532 c 0,1.65958 -0.277936,2.26809 -1.445263,2.93191 -1.389682,0.77448 -3.338597,1.21703 -4.505924,1.21703 -1.945553,0 -3.501982,-1.88085 -3.501982,-4.25958 v -0.22127 c 0.05563,-3.31915 2.949483,-4.39712 9.453169,-6.6652 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, ';fill:#813d9c;stroke-width:1.38632321px"
+ id="path1061"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssscsssscsssccsscsccscssccs" />
+ </g>
+ <path
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1000%;font-family:Satisfy;-inkscape-font-specification:Satisfy;letter-spacing:0px;word-spacing:0px;display:inline;fill:#813d9c;fill-opacity:1;stroke:none;stroke-width:1.52590454px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m -607.01212,390.12301 c -0.91395,-0.0795 -2.06633,0.23842 -3.45713,0.95369 -1.3908,0.71527 -2.80146,1.78817 -4.232,3.21871 -1.43053,1.3908 -2.76173,3.07963 -3.99358,5.06648 -1.19211,1.98686 -2.06633,4.19227 -2.62265,6.61623 -0.4371,1.78817 -0.59605,3.33791 -0.47684,4.64924 0.11921,1.27158 0.39737,2.32462 0.83448,3.15909 0.43711,0.79475 0.97356,1.37094 1.60935,1.72857 0.63579,0.39738 1.23185,0.59606 1.78817,0.59606 1.19211,-0.0795 2.38423,-0.33776 3.57634,-0.77488 1.03316,-0.39736 2.12593,-1.01329 3.27831,-1.84777 1.15238,-0.87422 2.20541,-2.10606 3.1591,-3.69555 -0.0397,1.0729 0.0199,1.96699 0.17882,2.68225 0.19868,0.71527 0.39737,1.29143 0.59605,1.72857 0.23842,0.51658 0.53645,0.91394 0.89409,1.19211 0.35763,0.23845 0.77487,0.3974 1.25172,0.47685 0.47684,0.11922 0.97355,0.15898 1.49014,0.11921 0.55631,-0.0398 1.09277,-0.13908 1.60934,-0.29804 0.51659,-0.15894 0.97357,-0.35763 1.37094,-0.59605 0.59606,-0.39736 1.33119,-1.0729 2.20541,-2.02659 0.91395,-0.99342 1.8279,-2.06632 2.74187,-3.21871 0.95369,-1.19211 1.86764,-2.36436 2.74185,-3.51673 0.87421,-1.19211 1.58947,-2.18554 2.14579,-2.98028 0.47687,-0.63579 0.75503,-1.19211 0.83449,-1.66897 0.11917,-0.47683 0.0993,-0.83448 -0.0596,-1.0729 -0.15895,-0.23839 -0.39737,-0.31787 -0.71528,-0.23842 -0.31789,0.0398 -0.63578,0.23844 -0.95369,0.59607 -0.23843,0.31789 -0.63578,0.81461 -1.1921,1.49013 -0.51659,0.67554 -1.11264,1.45041 -1.78817,2.32463 -0.67553,0.87421 -1.41066,1.78817 -2.20541,2.74186 -0.755,0.91394 -1.49014,1.7683 -2.2054,2.56303 -0.71527,0.75501 -1.39081,1.39081 -2.0266,1.90738 -0.63579,0.47685 -1.15238,0.71527 -1.54974,0.71527 -0.47685,0 -0.85435,-0.0993 -1.13251,-0.29802 -0.23843,-0.23842 -0.41724,-0.53645 -0.53645,-0.89409 -0.11922,-0.35763 -0.19869,-0.73514 -0.23843,-1.1325 0,-0.43712 0.0199,-0.83448 0.0596,-1.19212 0.11921,-0.59605 0.21856,-1.09276 0.29803,-1.49014 0.0795,-0.39736 0.13909,-0.73514 0.17882,-1.01329 0.0795,-0.31791 0.13909,-0.61593 0.17882,-0.89409 0.0794,-0.31789 0.15894,-0.65566 0.23842,-1.01329 0.39737,-1.82791 0.71527,-3.31805 0.95369,-4.47043 0.23842,-1.15237 0.41724,-2.06633 0.53645,-2.74186 0.11922,-0.67552 0.17882,-1.13251 0.17882,-1.37093 0,-0.27819 -0.0198,-0.457 -0.0596,-0.53645 -0.0795,-0.0398 -0.23842,-0.0596 -0.47684,-0.0596 -0.19868,0 -0.4967,0.0198 -0.89408,0.0596 -0.35763,0.0398 -0.81461,0.11921 -1.37093,0.23842 0.83448,-1.27159 1.15238,-2.28488 0.95369,-3.03989 -0.15895,-0.79474 -0.51658,-1.3908 -1.07291,-1.78817 -0.67552,-0.4371 -1.54974,-0.75501 -2.62264,-0.95369 z m -1.40371,3.72833 c 0.15149,0.008 0.28114,0.0567 0.39041,0.14604 0.11922,0.15896 0.19869,0.37751 0.23843,0.65566 0.0397,0.23842 0.0199,0.57618 -0.0596,1.0133 -0.0397,0.39736 -0.21856,0.91395 -0.53645,1.54975 0.31789,-0.0794 0.63579,-0.13905 0.95369,-0.17882 0.31789,-0.0398 0.57618,-0.0993 0.77487,-0.17882 0.23842,-0.0794 0.45697,-0.13904 0.65566,-0.17882 0.15895,-0.0397 0.17882,0.27817 0.0596,0.95369 -0.0795,0.6358 -0.21855,1.45041 -0.41724,2.44384 -0.19869,0.99344 -0.43711,2.0266 -0.71527,3.09949 -0.27816,1.0729 -0.51658,2.00672 -0.71526,2.80147 -0.0397,0.19868 -0.21856,0.51657 -0.53645,0.95369 -0.27816,0.43711 -0.65567,0.91395 -1.13251,1.43053 -0.43711,0.51658 -0.95369,1.0133 -1.54975,1.49014 -0.55632,0.47685 -1.13251,0.87422 -1.72856,1.19211 -0.55632,0.27813 -1.11264,0.43707 -1.66896,0.47685 -0.55632,0 -1.05303,-0.21856 -1.49014,-0.65566 -0.23842,-0.23843 -0.39737,-0.73513 -0.47685,-1.49014 -0.0795,-0.79474 -0.0596,-1.70871 0.0596,-2.74186 0.15895,-1.03317 0.41724,-2.12594 0.77488,-3.27831 0.35763,-1.19211 0.83448,-2.30475 1.43053,-3.33791 1.43054,-2.50345 2.68226,-4.21214 3.75516,-5.1261 0.83448,-0.71526 1.47971,-1.06246 1.9342,-1.04012 z"
+ id="path1065"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="translate(-691.52809,151.52514)"
+ id="g1069"
+ style="display:inline;fill:#813d9c;enable-background:new">
+ <path
+ sodipodi:nodetypes="cccccccccsccsscccccccccccscccccccscs"
+ inkscape:connector-curvature="0"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#813d9c;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 37,68 c -2.704645,-0.03825 -2.704645,4.03825 0,4 h 9.880859 c 0.01107,0.001 0.285634,0.0327 0.585938,0.197266 0.306304,0.16789 0.485897,0.188343 0.537109,0.939453 v -0.01953 L 48.25,78.310547 C 47.789324,78.134111 47.480469,78.058594 47.480469,78.058594 L 47.244141,78 H 38 c -4.333333,0 -5.896484,4.367188 -5.896484,4.367188 L 32,82.675781 V 85 c 0,3.03333 1.431289,5.127712 2.939453,6.070312 C 36.447617,92.012912 38,92 38,92 h 7.591797 l 3.392578,-2.203125 0.01953,0.320313 c 0.08969,2.735348 4.223189,2.492675 3.992188,-0.234376 l -1,-17.009765 v -0.0098 c -0.140818,-2.06533 -1.461734,-3.545828 -2.607422,-4.173828 -1.145688,-0.62799 -2.257813,-0.685547 -2.257813,-0.685547 L 47.064453,68 Z m 1,14 h 8.644531 c 0.106906,0.0312 0.525263,0.141312 1.03711,0.482422 0.558515,0.372213 0.877827,0.68942 0.894531,1.355469 L 48.714844,85.201172 44.408203,88 H 38 C 38,88 37.552383,87.9871 37.060547,87.679688 36.568711,87.372288 36,86.96667 36,85 V 83.435547 C 36.102847,83.130577 36.534758,82 38,82 Z"
+ transform="translate(0,172)"
+ id="path1067" />
+ </g>
+ <rect
+ y="337.44901"
+ x="-681.32501"
+ height="94"
+ width="8"
+ id="rect1073"
+ style="display:inline;opacity:1;fill:#3d3846;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" />
+ <g
+ id="g985"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:322.10223389px;line-height:1.25;font-family:Montserrat;-inkscape-font-specification:'Montserrat, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;enable-background:new"
+ aria-label="a"
+ transform="matrix(0.140625,0,0,0.140625,-722.55795,167.74946)">
+ <path
+ id="path983"
+ style="fill:#ffffff;stroke-width:1"
+ d="m 812.20261,1309.7929 c -27.70079,0 -55.72369,7.4083 -74.72772,20.9366 l 18.03773,35.1092 c 12.56198,-9.9852 31.56602,-16.1051 49.92584,-16.1051 27.05659,0 42.19199,14.4169 42.19199,35.9977 l -50.00981,-0.2354 c -52.82417,-0.2486 -74.40225,26.624 -74.40225,57.2238 0,29.9555 22.04572,51.6578 62.6306,51.6578 25.44607,0 52.4405,-7.5298 61.78146,-23.3128 l 0.003,21.3432 53.33034,-0.01 -0.006,-104.013 c -0.003,-52.5026 -35.93005,-78.5921 -88.75482,-78.5921 z m -11.67969,151.6087 c -17.71562,0 -28.34499,-8.3747 -28.34499,-20.9367 0,-11.5956 7.40547,-23.1197 30.91845,-22.9689 l 44.53407,0.2354 0.003,16.1495 c 0.003,16.8142 -30.36157,27.5207 -47.11089,27.5207 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sccscssscccssscsccscc" />
+ </g>
+ <g
+ transform="translate(-690.63092,151.52514)"
+ id="text993"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:1000%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ aria-label="a">
+ <path
+ sodipodi:nodetypes="cssscsssscsssccsscsccscssccs"
+ inkscape:connector-curvature="0"
+ id="path995"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Nimbus Roman';-inkscape-font-specification:'Nimbus Roman, ';fill:#ffffff;stroke-width:1.38632321px"
+ d="m 55.305889,221.92387 c -0.944974,0.77446 -1.612023,1.05106 -2.445832,1.05106 -1.278503,0 -1.667605,-0.77447 -1.667605,-3.20851 v -10.78724 c 0,-2.8766 -0.277936,-4.48085 -1.111745,-5.80851 -1.22291,-1.99149 -4.573306,-3.04255 -7.852936,-3.04255 -5.225182,0 -9.33863,2.71064 -9.33863,6.19575 0,1.27234 1.056163,2.37871 2.39025,2.37871 1.334086,0 2.501413,-1.10637 2.501413,-2.3234 0,-0.22127 -0.05563,-0.49787 -0.111176,-0.8851 -0.111177,-0.49787 -0.16676,-0.94042 -0.16676,-1.32766 0,-1.49362 1.778783,-2.71064 4.002271,-2.71064 2.723757,0 4.672684,1.60425 4.672684,4.59149 v 4.39862 c -7.655771,2.24877 -9.953459,2.84819 -12.343697,4.95032 -1.22292,1.10637 -2.001135,2.98723 -2.001135,4.81276 0,3.48511 2.445832,5.91915 5.836637,5.91915 2.445831,0 5.172972,-1.1617 8.563777,-4.0383 0.277937,2.93191 1.790584,4.0383 4.069655,4.0383 1.889959,0 3.057287,-0.66383 5.002829,-2.76596 z m -9.128066,-3.1532 c 0,1.65958 -0.277936,2.26809 -1.445263,2.93191 -1.389682,0.77448 -3.338597,1.21703 -4.505924,1.21703 -1.945553,0 -3.501982,-1.88085 -3.501982,-4.25958 v -0.22127 c 0.05563,-3.31915 2.949483,-4.39712 9.453169,-6.6652 z" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path1011"
+ d="m -607.01212,392.12301 c -0.91395,-0.0795 -2.06633,0.23842 -3.45713,0.95369 -1.3908,0.71527 -2.80146,1.78817 -4.232,3.21871 -1.43053,1.3908 -2.76173,3.07963 -3.99358,5.06648 -1.19211,1.98686 -2.06633,4.19227 -2.62265,6.61623 -0.4371,1.78817 -0.59605,3.33791 -0.47684,4.64924 0.11921,1.27158 0.39737,2.32462 0.83448,3.15909 0.43711,0.79475 0.97356,1.37094 1.60935,1.72857 0.63579,0.39738 1.23185,0.59606 1.78817,0.59606 1.19211,-0.0795 2.38423,-0.33776 3.57634,-0.77488 1.03316,-0.39736 2.12593,-1.01329 3.27831,-1.84777 1.15238,-0.87422 2.20541,-2.10606 3.1591,-3.69555 -0.0397,1.0729 0.0199,1.96699 0.17882,2.68225 0.19868,0.71527 0.39737,1.29143 0.59605,1.72857 0.23842,0.51658 0.53645,0.91394 0.89409,1.19211 0.35763,0.23845 0.77487,0.3974 1.25172,0.47685 0.47684,0.11922 0.97355,0.15898 1.49014,0.11921 0.55631,-0.0398 1.09277,-0.13908 1.60934,-0.29804 0.51659,-0.15894 0.97357,-0.35763 1.37094,-0.59605 0.59606,-0.39736 1.33119,-1.0729 2.20541,-2.02659 0.91395,-0.99342 1.8279,-2.06632 2.74187,-3.21871 0.95369,-1.19211 1.86764,-2.36436 2.74185,-3.51673 0.87421,-1.19211 1.58947,-2.18554 2.14579,-2.98028 0.47687,-0.63579 0.75503,-1.19211 0.83449,-1.66897 0.11917,-0.47683 0.0993,-0.83448 -0.0596,-1.0729 -0.15895,-0.23839 -0.39737,-0.31787 -0.71528,-0.23842 -0.31789,0.0398 -0.63578,0.23844 -0.95369,0.59607 -0.23843,0.31789 -0.63578,0.81461 -1.1921,1.49013 -0.51659,0.67554 -1.11264,1.45041 -1.78817,2.32463 -0.67553,0.87421 -1.41066,1.78817 -2.20541,2.74186 -0.755,0.91394 -1.49014,1.7683 -2.2054,2.56303 -0.71527,0.75501 -1.39081,1.39081 -2.0266,1.90738 -0.63579,0.47685 -1.15238,0.71527 -1.54974,0.71527 -0.47685,0 -0.85435,-0.0993 -1.13251,-0.29802 -0.23843,-0.23842 -0.41724,-0.53645 -0.53645,-0.89409 -0.11922,-0.35763 -0.19869,-0.73514 -0.23843,-1.1325 0,-0.43712 0.0199,-0.83448 0.0596,-1.19212 0.11921,-0.59605 0.21856,-1.09276 0.29803,-1.49014 0.0795,-0.39736 0.13909,-0.73514 0.17882,-1.01329 0.0795,-0.31791 0.13909,-0.61593 0.17882,-0.89409 0.0794,-0.31789 0.15894,-0.65566 0.23842,-1.01329 0.39737,-1.82791 0.71527,-3.31805 0.95369,-4.47043 0.23842,-1.15237 0.41724,-2.06633 0.53645,-2.74186 0.11922,-0.67552 0.17882,-1.13251 0.17882,-1.37093 0,-0.27819 -0.0198,-0.457 -0.0596,-0.53645 -0.0795,-0.0398 -0.23842,-0.0596 -0.47684,-0.0596 -0.19868,0 -0.4967,0.0198 -0.89408,0.0596 -0.35763,0.0398 -0.81461,0.11921 -1.37093,0.23842 0.83448,-1.27159 1.15238,-2.28488 0.95369,-3.03989 -0.15895,-0.79474 -0.51658,-1.3908 -1.07291,-1.78817 -0.67552,-0.4371 -1.54974,-0.75501 -2.62264,-0.95369 z m -1.40371,3.72833 c 0.15149,0.008 0.28114,0.0567 0.39041,0.14604 0.11922,0.15896 0.19869,0.37751 0.23843,0.65566 0.0397,0.23842 0.0199,0.57618 -0.0596,1.0133 -0.0397,0.39736 -0.21856,0.91395 -0.53645,1.54975 0.31789,-0.0794 0.63579,-0.13905 0.95369,-0.17882 0.31789,-0.0398 0.57618,-0.0993 0.77487,-0.17882 0.23842,-0.0794 0.45697,-0.13904 0.65566,-0.17882 0.15895,-0.0397 0.17882,0.27817 0.0596,0.95369 -0.0795,0.6358 -0.21855,1.45041 -0.41724,2.44384 -0.19869,0.99344 -0.43711,2.0266 -0.71527,3.09949 -0.27816,1.0729 -0.51658,2.00672 -0.71526,2.80147 -0.0397,0.19868 -0.21856,0.51657 -0.53645,0.95369 -0.27816,0.43711 -0.65567,0.91395 -1.13251,1.43053 -0.43711,0.51658 -0.95369,1.0133 -1.54975,1.49014 -0.55632,0.47685 -1.13251,0.87422 -1.72856,1.19211 -0.55632,0.27813 -1.11264,0.43707 -1.66896,0.47685 -0.55632,0 -1.05303,-0.21856 -1.49014,-0.65566 -0.23842,-0.23843 -0.39737,-0.73513 -0.47685,-1.49014 -0.0795,-0.79474 -0.0596,-1.70871 0.0596,-2.74186 0.15895,-1.03317 0.41724,-2.12594 0.77488,-3.27831 0.35763,-1.19211 0.83448,-2.30475 1.43053,-3.33791 1.43054,-2.50345 2.68226,-4.21214 3.75516,-5.1261 0.83448,-0.71526 1.47971,-1.06246 1.9342,-1.04012 z"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1000%;font-family:Satisfy;-inkscape-font-specification:Satisfy;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.52590454px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" />
+ <g
+ transform="translate(-691.52809,153.52514)"
+ id="g1022"
+ style="display:inline;enable-background:new">
+ <path
+ id="path1016"
+ transform="translate(0,172)"
+ d="m 37,68 c -2.704645,-0.03825 -2.704645,4.03825 0,4 h 9.880859 c 0.01107,0.001 0.285634,0.0327 0.585938,0.197266 0.306304,0.16789 0.485897,0.188343 0.537109,0.939453 v -0.01953 L 48.25,78.310547 C 47.789324,78.134111 47.480469,78.058594 47.480469,78.058594 L 47.244141,78 H 38 c -4.333333,0 -5.896484,4.367188 -5.896484,4.367188 L 32,82.675781 V 85 c 0,3.03333 1.431289,5.127712 2.939453,6.070312 C 36.447617,92.012912 38,92 38,92 h 7.591797 l 3.392578,-2.203125 0.01953,0.320313 c 0.08969,2.735348 4.223189,2.492675 3.992188,-0.234376 l -1,-17.009765 v -0.0098 c -0.140818,-2.06533 -1.461734,-3.545828 -2.607422,-4.173828 -1.145688,-0.62799 -2.257813,-0.685547 -2.257813,-0.685547 L 47.064453,68 Z m 1,14 h 8.644531 c 0.106906,0.0312 0.525263,0.141312 1.03711,0.482422 0.558515,0.372213 0.877827,0.68942 0.894531,1.355469 L 48.714844,85.201172 44.408203,88 H 38 C 38,88 37.552383,87.9871 37.060547,87.679688 36.568711,87.372288 36,86.96667 36,85 V 83.435547 C 36.102847,83.130577 36.534758,82 38,82 Z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccsccsscccccccccccscccccccscs" />
+ </g>
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="rect1201"
+ d="m -681.32504,431.44901 v 10 h 8 v -2 h -6 v -6 h 6 v -2 z"
+ style="display:inline;opacity:1;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1217"
+ d="m -678.32504,431.44901 v -94"
+ style="display:inline;opacity:0.15;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ </g>
+ <g
+ id="g1844"
+ transform="translate(-20.749999,15.499996)">
+ <rect
+ y="536.5"
+ x="-177.25"
+ style="display:inline;fill:url(#linearGradient1097);fill-opacity:1;stroke-width:1;enable-background:new"
+ width="104"
+ height="48"
+ rx="8"
+ id="rect1091"
+ ry="8" />
+ <path
+ sodipodi:nodetypes="ssssssssccccs"
+ inkscape:connector-curvature="0"
+ id="rect1093"
+ d="m -169.25,478.5 c -4.432,0 -8,3.568 -8,8 v 84 c 0,4.432 3.568,8 8,8 h 88 c 4.432,0 8,-3.568 8,-8 v -84 c 0,-4.432 -3.568,-8 -8,-8 h -42 v 2 h -4 v -2 z"
+ style="display:inline;fill:url(#radialGradient1099);fill-opacity:1;stroke-width:1.6841507;enable-background:new" />
+ <g
+ transform="translate(170.67783,294.50313)"
+ style="display:inline;enable-background:new"
+ id="g1381">
+ <rect
+ ry="13.072174"
+ id="rect1371"
+ rx="13.072174"
+ height="28"
+ width="28"
+ style="display:inline;fill:#f5c211;enable-background:new"
+ x="-283.92783"
+ y="193.99687" />
+ <path
+ sodipodi:nodetypes="ccssssc"
+ id="path1373"
+ d="m -276,211 h 12 v 0.99687 c 0,2.20914 -1.7909,4 -4,4 h -4 c -2.20914,0 -4,-1.79086 -4,-4 z"
+ style="display:inline;fill:url(#linearGradient1383);enable-background:new"
+ inkscape:connector-curvature="0" />
+ <rect
+ id="rect1375"
+ height="2"
+ width="12"
+ style="display:inline;fill:#ffffff;enable-background:new"
+ x="-276"
+ y="209.99687" />
+ <path
+ sodipodi:nodetypes="scsccs"
+ id="path1377"
+ d="m -276,204.99687 c 0,-0.55229 0.44772,-1 1,-1 0.55228,0 1,0.44771 1,1 v 3 h -2 z"
+ style="display:inline;fill:#b45600;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="scsccs"
+ id="path1379"
+ d="m -266,204.99687 c 0,-0.55229 0.44772,-1 1,-1 0.55228,0 1,0.44771 1,1 v 3 h -2 z"
+ style="display:inline;fill:#b45600;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(170.75,294.5)"
+ style="display:inline;enable-background:new"
+ id="g1387">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#62a0ea;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="m 26,20 v 17 c 0,0 0.123719,2.819005 -2.894531,4.328125 l 1.789062,3.576172 C 29.876281,42.413417 30,37 30,37 v -1 h 12 v 2 c 0,0 -0.0278,1.167429 -0.470703,2.230469 C 41.086357,41.293509 40.7,42 39,42 h -1 l -2,4 h 2 1 c 3.3,0 5.413643,-2.293509 6.220703,-4.230469 C 46.027773,39.832571 46,38 46,38 V 20 Z m 4,4 h 12 v 2 H 30 Z m 0,6 h 12 v 2 H 30 Z"
+ transform="translate(-358,176)"
+ id="path1385"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(196.75,294.5)"
+ style="display:inline;enable-background:new"
+ id="g1393">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#26a269;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"
+ d="m 60,78 a 2,2 0 0 0 -2,2 2,2 0 0 0 2,2 2,2 0 0 0 2,-2 2,2 0 0 0 -2,-2 z m -4,6 a 2,2 0 0 0 -2,2 2,2 0 0 0 2,2 2,2 0 0 0 2,-2 2,2 0 0 0 -2,-2 z m 8,0 a 2,2 0 0 0 -2,2 2,2 0 0 0 2,2 2,2 0 0 0 2,-2 2,2 0 0 0 -2,-2 z m 6,6 -4,2 v 4 h -4 v -2 -2 l -4,2 v 2 L 50,95.998 50.07227,100 c -0.001,1.12729 -0.87241,1.99805 -2,1.99805 -1.12827,0 -2,-0.87174 -2,-2.000003 h -4 c 0,3.290023 2.70998,6.000003 6,6.000003 3.29001,0 6,-2.70998 6,-6.000003 L 70,100 Z m -15.927734,3.996094 -4,2 h 4 z"
+ transform="translate(-352,168)"
+ id="path1389"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path1391"
+ d="m -309.92783,267.99687 4,-2 v 2 z"
+ style="display:inline;fill:#26a269;enable-background:new"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#deddda;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m -177.25,528.5 h 104"
+ id="path1397"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1458"
+ d="m -177.25,527.5 h 104"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#c0bfbc;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1395"
+ d="m -125.25,480.5 v 100"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#deddda;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ <path
+ d="m -153.08925,552.65236 q 0,-1.12461 -0.36927,-1.94707 -0.36927,-0.83925 -0.97353,-1.40995 -0.23499,-0.23498 -0.50355,-0.4364 -0.40285,-0.30214 -0.57069,-0.46998 -0.67141,-0.63783 -1.00711,-1.47709 -0.3357,-0.83925 -0.3357,-1.77921 0,-0.97353 0.35249,-1.796 0.35248,-0.82246 0.99032,-1.46029 0.53712,-0.53712 1.51065,-1.0071 0.77211,-0.36927 1.72885,-0.36927 0.95675,0 1.76243,0.36927 0.90639,0.40284 1.51065,1.0071 0.63783,0.63783 0.99032,1.46029 0.35249,0.82247 0.35249,1.796 0,1.02389 -0.35249,1.82957 -0.35249,0.7889 -0.99032,1.42673 -0.16785,0.16784 -0.60426,0.46998 -0.13428,0.10067 -0.46998,0.4364 -0.68818,0.67141 -1.02388,1.49388 -0.31892,0.80569 -0.31892,1.86314 1.14138,0 1.98063,-0.38607 0.85604,-0.40283 1.40994,-0.95675 0.21821,-0.21819 0.41963,-0.48675 0.30213,-0.41963 0.46998,-0.58749 0.65462,-0.6546 1.49387,-0.9903 0.83925,-0.35249 1.77921,-0.35249 0.97353,0 1.796,0.35249 0.82246,0.35248 1.4603,0.9903 0.60426,0.60427 1.0071,1.51067 0.35248,0.78889 0.35248,1.74564 0,0.95675 -0.35248,1.74564 -0.40284,0.90638 -1.0071,1.51065 -0.63784,0.63783 -1.4603,0.99031 -0.82247,0.35249 -1.796,0.35249 -0.93996,0 -1.77921,-0.33572 -0.83925,-0.35246 -1.49387,-1.00708 -0.16785,-0.16785 -0.46998,-0.58748 -0.20142,-0.26856 -0.41963,-0.48677 -0.68818,-0.65461 -1.51065,-0.99031 -0.80568,-0.35248 -1.87992,-0.35248 0,1.14136 0.38606,1.99742 0.40284,0.83924 0.95674,1.39314 0.21821,0.21822 0.48677,0.41964 0.41962,0.30213 0.58747,0.46998 0.65462,0.65462 0.99032,1.49386 0.35249,0.83925 0.35249,1.77922 0,0.97352 -0.35249,1.79599 -0.35249,0.82247 -0.99032,1.46029 -0.60426,0.60428 -1.51065,1.00711 -0.78889,0.35249 -1.74564,0.35249 -0.95675,0 -1.74564,-0.35249 -0.90639,-0.40283 -1.51065,-1.00711 -0.63784,-0.63782 -0.99032,-1.46029 -0.35249,-0.82247 -0.35249,-1.79599 0,-0.93997 0.3357,-1.77922 0.35249,-0.83924 1.00711,-1.49386 0.16784,-0.16785 0.58747,-0.46998 0.26856,-0.20142 0.48677,-0.41964 0.65461,-0.68818 0.99031,-1.49385 0.35249,-0.82248 0.35249,-1.89671 -1.05746,0 -1.89671,0.35248 -0.82247,0.3357 -1.47708,0.99031 -0.23499,0.23499 -0.43641,0.50355 -0.30213,0.40285 -0.46998,0.5707 -0.63783,0.6714 -1.47708,1.00708 -0.83926,0.33572 -1.77922,0.33572 -0.97353,0 -1.79599,-0.35249 -0.82247,-0.35248 -1.4603,-0.99031 -0.55391,-0.53712 -1.0071,-1.51065 -0.36927,-0.77211 -0.36927,-1.72886 0,-0.95675 0.36927,-1.76242 0.40284,-0.9064 1.0071,-1.51067 0.63783,-0.63782 1.4603,-0.9903 0.82246,-0.35249 1.79599,-0.35249 1.02389,0 1.81279,0.35249 0.80568,0.35248 1.44351,0.9903 0.16785,0.16786 0.46998,0.60427 0.10071,0.13428 0.43641,0.46997 0.6714,0.6714 1.49387,1.00711 0.82246,0.33571 1.87992,0.33571 z"
+ style="font-style:normal;font-weight:normal;font-size:medium;line-height:1000%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#a347ba;fill-opacity:1;stroke:none;stroke-width:0.85939318px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ id="path1476"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g1331"
+ transform="translate(-14,72)">
+ <g
+ id="g6295"
+ inkscape:label="network-wireless-signal-excellent"
+ transform="translate(191.9998,-389)"
+ style="display:inline">
+ <rect
+ clip-path="none"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect6303"
+ width="16"
+ height="16"
+ x="-505"
+ y="70.000198"
+ transform="rotate(-90)" />
+ <circle
+ r="1"
+ cy="209"
+ cx="28"
+ clip-path="none"
+ style="display:inline;fill:#241f31;fill-opacity:1;stroke:none"
+ id="path6305"
+ transform="matrix(1.9999995,0,0,1.9999995,22.000213,84.0001)" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;marker:none;enable-background:accumulate"
+ d="m 78.000188,491.0002 c -2.81422,0 -5.17173,1 -7,2.58557 v 1.41443 h 1.48072 c 1.51928,-1.26466 3.21936,-2 5.51928,-2 2.29992,0 4,0.77953 5.51928,2 h 1.48072 v -1.38128 c -1.64044,-1.46575 -4.18578,-2.61872 -7,-2.61872 z"
+ id="rect11714"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccscccs" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;marker:none;enable-background:accumulate"
+ d="m 78.000188,494.0002 c -2.16664,0 -4.01982,0.73878 -5,2 v 1 h 2 c 0.78878,-0.60652 1.75887,-1 3,-1 1.24113,0 2.21938,0.39348 3,1 h 2 v -1 c -0.99478,-1.2229 -2.8734,-2 -5,-2 z"
+ id="rect11703"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccscccs" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:2.32782054;marker:none;enable-background:accumulate"
+ mask="none"
+ clip-path="none"
+ d="m 78.000188,497.0002 c -1.25733,0 -2.21571,0.31165 -3,1 v 1 h 3 0.375 2.625 v -1 c -0.8369,-0.67206 -1.74267,-1 -3,-1 z"
+ id="path6297"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="zccccccz" />
+ </g>
+ <g
+ transform="rotate(90,197,316.99999)"
+ inkscape:label="battery-full"
+ id="g3728"
+ style="display:inline">
+ <desc
+ id="desc11549">battery is full and there is no a/c connected.</desc>
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
+ id="rect2928"
+ width="2"
+ height="6"
+ x="25"
+ y="-247"
+ transform="scale(1,-1)" />
+ <path
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#241f31;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"
+ d="m 35,239 v 10 H 23 v -2 H 21.484375 C 21.25,247 21,246.75 21,246.53125 V 241.5625 C 20.98437,241.28125 21.340963,241.01563 21.622213,241 H 23 v -2 z"
+ id="path2930"
+ sodipodi:nodetypes="ccccccccccc"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="236"
+ x="20"
+ height="16"
+ width="16"
+ id="rect3704-3"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none" />
+ <rect
+ transform="scale(1,-1)"
+ y="-247"
+ x="28"
+ height="6"
+ width="2"
+ id="rect4227"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;enable-background:accumulate"
+ id="rect4229"
+ width="2"
+ height="6"
+ x="31"
+ y="-247"
+ transform="scale(1,-1)" />
+ </g>
+ <g
+ transform="translate(262.00001,-136)"
+ id="g3288"
+ inkscape:label="network-cellular-signal-good"
+ style="display:inline">
+ <path
+ id="path3290"
+ d="m 33.5,277.5 v 12"
+ style="display:inline;opacity:0.35;fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:#241f31;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:export-filename="/Users/hylkebons/tmp/mid/Toolbar/Graphics/tiny_toolbar_icons/icons/cell-network-no-connection.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/Users/hylkebons/tmp/mid/Toolbar/Graphics/tiny_toolbar_icons/icons/cell-network-no-connection.png"
+ style="display:inline;fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:#241f31;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 29.5,280.49216 V 289.5"
+ id="path3292"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path3294"
+ d="m 25.5,283.5 v 6"
+ style="display:inline;fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:#241f31;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:export-filename="/Users/hylkebons/tmp/mid/Toolbar/Graphics/tiny_toolbar_icons/icons/cell-network-no-connection.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:export-ydpi="90"
+ inkscape:export-xdpi="90"
+ inkscape:export-filename="/Users/hylkebons/tmp/mid/Toolbar/Graphics/tiny_toolbar_icons/icons/cell-network-no-connection.png"
+ style="display:inline;fill:#bebebe;fill-opacity:1;fill-rule:evenodd;stroke:#241f31;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 21.5,286.5 v 3"
+ id="path3296"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="276"
+ x="20"
+ height="16"
+ width="16"
+ id="rect3298"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none" />
+ </g>
+ <g
+ style="display:inline"
+ transform="translate(262,-196)"
+ inkscape:label="mail-unread"
+ id="g35596">
+ <rect
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none"
+ id="rect35598"
+ width="16"
+ height="16"
+ x="19.99975"
+ y="296" />
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc"
+ id="path35600"
+ d="m 22.999801,300.99992 5.000005,4.00007 4.999994,-4.00002"
+ style="fill:none;stroke:#241f31;stroke-width:1.99999976;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="300"
+ x="21.9998"
+ height="9"
+ width="12"
+ id="rect35604"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#241f31;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ </g>
+ <g
+ inkscape:label="call-missed"
+ id="g9250"
+ style="display:inline"
+ transform="translate(160.9998,-177)">
+ <rect
+ y="317"
+ x="141.0002"
+ height="16"
+ width="16"
+ id="rect44122"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path44196"
+ d="m 149.99715,317.00012 v 0.78125 a 1.001098,1.001098 0 0 0 1.03125,1.21875 h 0.59375 l -2.5625,2.5625 -2.375,-2.28125 a 1.0054782,1.0054782 0 0 0 -0.71875,-0.28125 h -0.125 -0.84375 v 0.75 a 1.0054782,1.0054782 0 0 0 0,0.0937 1.0054782,1.0054782 0 0 0 0.28125,0.875 l 3.09375,2.96875 0.6875,0.6875 0.71875,-0.6875 3.21875,-3.25 v 0.5625 a 1.0001,1.0001 0 0 0 1,1 h 1 v -0.84375 a 1.0001,1.0001 0 0 0 0,-0.1562 v -3 -1 h -1 -2.96875 a 1.0001,1.0001 0 0 0 -0.0312,0 z"
+ style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:xx-small;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="ccccccccscccccscc"
+ inkscape:connector-curvature="0"
+ style="display:inline;opacity:1;fill:#241f31;fill-opacity:1;stroke:none;enable-background:new"
+ d="m 141.2661,330.71341 c -0.34368,-0.34368 -0.34865,-1.07502 -2e-5,-1.42366 l 0.0404,-0.0403 c 4.26664,-4.24462 11.16673,-4.2381 15.42494,0.0201 l 0.02,0.0201 c 0.35061,0.35061 0.31852,1.07025 -0.0201,1.44378 l -1.93062,1.99693 c -0.35652,0.35653 -0.93056,0.35652 -1.28709,10e-6 l -1.28709,-1.2871 c -0.35652,-0.35653 -0.35653,-0.93055 -1e-5,-1.28709 l 0.30167,-0.30165 c -2.22715,-1.06378 -4.81163,-1.06378 -7.03876,10e-6 l 0.30166,0.30164 c 0.35653,0.35654 0.35652,0.93056 0,1.2871 l -1.28709,1.28708 c -0.35653,0.35653 -0.93663,0.3625 -1.28709,0 z"
+ id="rect5922-5-0" />
+ </g>
+ <g
+ inkscape:label="user-available"
+ id="g8272"
+ style="display:inline"
+ transform="translate(240.9998,-237)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8268"
+ transform="translate(241.0002,217)"
+ d="m -196.5,141 c -1.385,0 -2.5,1.115 -2.5,2.5 v 5 c 0,1.385 1.115,2.5 2.5,2.5 h 6.375 l 3.125,4 v -4.0625 c 1.14126,-0.23235 2,-1.22563 2,-2.4375 v -5 c 0,-1.385 -1.115,-2.5 -2.5,-2.5 z"
+ style="fill:#241f31;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <rect
+ y="357"
+ x="41.000198"
+ height="16"
+ width="16"
+ id="rect11252"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none" />
+ </g>
+ <g
+ transform="translate(60.99979,383)"
+ inkscape:label="airplane-mode"
+ id="g5836"
+ style="display:inline;enable-background:new">
+ <rect
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect5092"
+ width="16"
+ height="16"
+ x="261.00021"
+ y="-243" />
+ <path
+ style="fill:#241f31;fill-opacity:1;stroke:none"
+ d="m 267.49679,-242 c -0.79399,9.7e-4 -0.78072,0.0333 -0.53125,1.03125 l 1.625,4.96875 h -4.5 l -1.21875,-1.78125 c -0.13926,-0.20883 -0.1227,-0.21873 -0.34375,-0.21875 h -0.21875 c -0.42773,0 -0.28125,0.4375 -0.28125,0.4375 l 0.28125,2.5625 -0.28125,2.5625 c 0,0 -0.13986,0.43749 0.25,0.4375 h 0.25 c 0.21159,0 0.20422,-0.009 0.34375,-0.21875 L 264.09054,-234 h 4.5 l -1.625,4.9375 c -0.26171,1.04691 -0.2647,1.06251 0.53125,1.0625 0.43199,0 0.43388,-0.0117 0.71875,-0.5 l 3.6875,-5.5 h 3.09375 c 0.554,0 1,-0.446 1,-1 0,-0.554 -0.446,-1 -1,-1 h -3.09375 l -3.6875,-5.5 c -0.2665,-0.45685 -0.28331,-0.49822 -0.65625,-0.5 z"
+ id="path6273"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline"
+ inkscape:label="audio-input-microphone"
+ id="g3281-5"
+ transform="translate(282,-156)">
+ <rect
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect3825-9-5"
+ width="16"
+ height="16"
+ x="20"
+ y="276" />
+ <path
+ inkscape:connector-curvature="0"
+ d="m -176.5,235 c -0.27614,0 -0.5,0.22386 -0.5,0.5 v 2.96875 c 0,1.96838 1.25801,3.62455 3,4.25 V 244 h -2 c -0.56475,0 -1,0.49007 -1,1 v 1 h 0.84375 2.15625 5 0.0937 0.90625 v -1 c -6e-5,-0.58435 -0.47642,-0.99995 -1,-1 h -2 v -1.28125 c 1.74199,-0.62545 3,-2.28162 3,-4.25 V 235.5 c 0,-0.27614 -0.22386,-0.5 -0.5,-0.5 -0.27614,0 -0.5,0.22386 -0.5,0.5 0,0.069 0.006,0.12768 0.0312,0.1875 v 2.78125 c 0,1.96415 -1.57895,3.53125 -3.53125,3.53125 -1.9523,0 -3.5,-1.5671 -3.5,-3.53125 V 235.5 c 0,-0.27614 -0.22386,-0.5 -0.5,-0.5 z m 3.9998,-4.01288 c 1.385,0 2.5,1.115 2.5,2.5 V 238.5 c 0,1.385 -1.115,2.5 -2.5,2.5 -1.385,0 -2.5,-1.115 -2.5,-2.5 v -5.01288 c 0,-1.385 1.115,-2.5 2.5,-2.5 z"
+ style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:1.00302994;marker:none;enable-background:accumulate"
+ transform="translate(200.0002,46)"
+ id="rect6806" />
+ </g>
+ <g
+ style="display:inline"
+ inkscape:label="camera-photo"
+ id="g11537"
+ transform="translate(282,-176)">
+ <rect
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect11539"
+ width="16"
+ height="16"
+ x="20"
+ y="276" />
+ <path
+ inkscape:connector-curvature="0"
+ id="rect5238"
+ d="m 26,278 c -0.549959,0 -1,0.45004 -1,1 v 1 h -3 c -0.552014,0 -1,0.45004 -1,1 v 8 c 0,0.54996 0.447986,1 1,1 h 12 c 0.552014,0 1,-0.45004 1,-1 v -8 c 0,-0.54996 -0.447986,-1 -1,-1 h -3 v -1 c 0,-0.54996 -0.450041,-1 -1,-1 z m 2,3 c 2.209139,0 4,1.79086 4,4 0,2.20914 -1.790861,4 -4,4 -2.209139,0 -4,-1.79086 -4,-4 0,-2.20914 1.790861,-4 4,-4 z m 0,2 c -1.10457,0 -2,0.89543 -2,2 0,1.10457 0.89543,2 2,2 1.10457,0 2,-0.89543 2,-2 0,-1.10457 -0.89543,-2 -2,-2 z"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" />
+ </g>
+ <g
+ id="g8762"
+ inkscape:label="input-dialpad"
+ style="display:inline"
+ transform="translate(222.0002,-470)">
+ <rect
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect8764"
+ width="16"
+ height="16"
+ x="20"
+ y="276"
+ transform="translate(99.9998,334)" />
+ <path
+ sodipodi:nodetypes="cssccsssscscscccccccccccccccccccccccccccccccccccccccccccccccccccc"
+ inkscape:connector-curvature="0"
+ id="rect8806"
+ transform="translate(120,380)"
+ d="m 3.5,230 c 0,0 -1.5,0 -1.5,1.5 v 9 C 2,242 3.5,242 3.5,242 H 5 v 2 c 0,0.554 0.446,1 1,1 h 4 c 0.554,0 1,-0.446 1,-1 v -2 h 1.5 c 1.5,0 1.5,-1.5 1.5,-1.5 v -9 C 14,230 12.5,230 12.5,230 Z m 0.5,2 h 2 v 2 H 4 Z m 3,0 h 2 v 2 H 7 Z m 3,0 h 2 v 2 h -2 z m -6,3 h 2 v 2 H 4 Z m 3,0 h 2 v 2 H 7 Z m 3,0 h 2 v 2 h -2 z m -6,3 h 2 v 2 H 4 Z m 3,0 h 2 v 2 H 7 Z m 3,0 h 2 v 2 h -2 z m -3,3 h 2 v 2 H 7 Z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ </g>
+ <g
+ id="g14087"
+ style="display:inline"
+ transform="translate(220.9998,-77)">
+ <g
+ transform="translate(1.6357422e-6)"
+ style="display:inline"
+ id="g8093"
+ inkscape:label="audio-volume-high">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ id="path5491"
+ d="m 41.0002,201.99979 h 2.484375 L 46.453329,199 H 47.0002 v 11.99917 L 46.524903,211 43.484575,207.99938 H 41.0002 Z"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none" />
+ <rect
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect6203"
+ width="16"
+ height="16"
+ x="41.000198"
+ y="197" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;marker:none;enable-background:accumulate"
+ d="m 56.00019,205.0002 c 0,-2.81422 -1,-5.17173 -2.58557,-7 h -1.41443 v 1.48072 c 1.26466,1.51928 2,3.21936 2,5.51928 0,2.29992 -0.77953,4 -2,5.51928 v 1.48072 h 1.38128 c 1.46575,-1.64044 2.61872,-4.18578 2.61872,-7 z"
+ id="rect11714-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccscccs" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0;marker:none;enable-background:accumulate"
+ d="m 53.00019,205.0002 c 0,-2.16664 -0.73878,-4.01982 -2,-5 h -1 v 2 c 0.60652,0.78878 1,1.75887 1,3 0,1.24113 -0.39348,2.21938 -1,3 v 2 h 1 c 1.2229,-0.99478 2,-2.8734 2,-5 z"
+ id="rect11703-1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="scccscccs" />
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:2.32782054;marker:none;enable-background:accumulate"
+ mask="none"
+ clip-path="none"
+ d="m 50.00019,205.0002 c 0,-1.25733 -0.31165,-2.21571 -1,-3 h -1 v 6 h 1 c 0.67206,-0.8369 1,-1.74267 1,-3 z"
+ id="path6297-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="zccccz" />
+ </g>
+ </g>
+ <g
+ id="g11497-6-7-9-1"
+ inkscape:label="application-rss+xml"
+ transform="translate(314.00001,-298)"
+ style="display:inline">
+ <rect
+ y="398"
+ x="48"
+ height="16"
+ width="16"
+ id="rect10727-3-4-6-9"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;opacity:0.51464431;fill:none;stroke:none;stroke-width:3;marker:none;enable-background:accumulate" />
+ <ellipse
+ ry="3.236068"
+ rx="2"
+ cy="97.1875"
+ cx="323.0625"
+ transform="matrix(1.0000007,0,0,0.61803426,-271.06253,349.93467)"
+ id="path4983"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69602728;marker:none;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5814"
+ d="m 50.0002,399.99988 v 1 c 0,0.55016 0.45347,1 1,1 4.97056,0 9,4.02944 9,9 0,0.55016 0.45347,1 1,1 h 1 v -1 c 0,-6.07513 -4.92487,-11 -11,-11 z m 0,4 v 1 c 0,0.55016 0.45347,1 1,1 2.76143,0 5,2.23857 5,5 0,0.55016 0.45347,1 1,1 h 1 v -1 c 0,-3.866 -3.134,-7 -7,-7 z"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.33333492;marker:none;enable-background:new" />
+ </g>
+ <g
+ transform="translate(-219.99999,-261.99997)"
+ inkscape:label="emblem-music"
+ id="g6252"
+ style="display:inline">
+ <rect
+ y="381.99997"
+ x="582"
+ height="16"
+ width="16"
+ id="rect24874-7-8-7"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
+ <circle
+ r="2.4306796"
+ cy="174.17094"
+ cx="345.99619"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#241f31;stroke-width:1.94454503;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:new"
+ id="path6170"
+ transform="matrix(1.0285185,0,0,1.028518,229.63673,214.36204)" />
+ <circle
+ r="2.4306796"
+ cy="174.17094"
+ cx="345.99619"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:#241f31;stroke-width:1.94454503;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:new"
+ id="path6170-5"
+ transform="matrix(1.0285185,0,0,1.028518,237.63673,214.36204)" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.50793636;marker:none;enable-background:new"
+ id="rect6190"
+ width="2.0000219"
+ height="9.515729"
+ x="587.00018"
+ y="384" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.50793636;marker:none;enable-background:new"
+ id="rect6190-8"
+ width="2.0000412"
+ height="9.5626974"
+ x="595.00018"
+ y="384" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.50793636;marker:none;enable-background:new"
+ id="rect6190-8-8"
+ width="10.000017"
+ height="2"
+ x="587.00018"
+ y="384" />
+ </g>
+ <g
+ transform="translate(-139.0002,-241)"
+ inkscape:label="emblem-synchronizing"
+ id="g5244"
+ style="display:inline">
+ <rect
+ width="16"
+ height="16"
+ x="-397"
+ y="501.00021"
+ id="rect10837-5-8-4-4-2-3"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none;enable-background:new"
+ transform="rotate(-90)" />
+ <path
+ sodipodi:nodetypes="cccccccccccccccc"
+ inkscape:connector-curvature="0"
+ style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 515.90195,383.0005 c -0.0423,0.008 -0.0841,0.0181 -0.125,0.0312 -0.44715,0.10014 -0.79228,0.5419 -0.78125,1 v 1.6875 c 0.004,1.31255 0.004,1.31255 -1.5625,1.3125 h -1.4375 c -0.52358,5e-5 -0.99995,0.47642 -1,1 -0.008,0.0726 -0.008,0.14613 0,0.21875 v 0.78125 h 6 v -1 -4 c 0.006,-0.0623 0.006,-0.12518 0,-0.1875 v -0.8125 h -0.8125 c -0.0916,-0.0236 -0.18665,-0.0342 -0.28125,-0.0312 z"
+ id="path4597-1" />
+ <path
+ sodipodi:nodetypes="cccccccccccccccc"
+ inkscape:connector-curvature="0"
+ style="color:#bebebe;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ d="m 501.0047,389 v 1 4 c -0.006,0.0623 -0.006,0.12518 0,0.1875 V 395 h 0.8125 c 0.0916,0.0236 0.18665,0.0342 0.28125,0.0312 0.0423,-0.008 0.0841,-0.0181 0.125,-0.0312 0.44715,-0.10014 0.79228,-0.5419 0.78125,-1 v -1.6875 C 503.00029,391 503.00029,391 504.5672,391 h 1.4375 c 0.52358,-5e-5 0.99995,-0.47642 1,-1 0.008,-0.0726 0.008,-0.14613 0,-0.21875 V 389 Z"
+ id="path10913" />
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:Sans;-inkscape-font-specification:Sans;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.33333325;marker:none;enable-background:accumulate"
+ d="m 268,165 c -3.15321,0 -5.81948,2.12571 -6.6875,5 h 2.09375 c 0.7734,-1.76501 2.53819,-3 4.59375,-3 2.05556,0 3.82035,1.23499 4.59375,3 h 2.09375 c -0.86802,-2.87429 -3.53429,-5 -6.6875,-5 z m -6.6875,9 c 0.86802,2.87429 3.53429,5 6.6875,5 3.15321,0 5.81948,-2.12571 6.6875,-5 h -2.09375 c -0.7734,1.76501 -2.53819,3 -4.59375,3 -2.05556,0 -3.82035,-1.23499 -4.59375,-3 z"
+ transform="translate(241.0002,217)"
+ id="path1483" />
+ </g>
+ <g
+ inkscape:label="emblem-videos"
+ transform="translate(482.0002,-110)"
+ id="g21333-9-5"
+ style="display:inline">
+ <g
+ style="display:inline"
+ inkscape:label="camera-web"
+ id="use21331-8-1"
+ transform="matrix(-1,0,0,1,-124.0002,-46)">
+ <rect
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ id="rect2132"
+ width="16"
+ height="16"
+ x="20"
+ y="276" />
+ <rect
+ ry="1"
+ rx="0.99980003"
+ y="280"
+ x="21.03125"
+ height="9"
+ width="9.96875"
+ id="rect2134"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:1;marker:none" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path2136"
+ d="M 31,284.4693 34.469295,281 H 35.0002 v 7 h -0.5 z"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:1;marker:none"
+ sodipodi:nodetypes="cccccc" />
+ </g>
+ </g>
+ <g
+ transform="matrix(-1,0,0,1,863.00037,79.003359)"
+ inkscape:label="call-start"
+ id="g6051"
+ style="display:inline;enable-background:new">
+ <rect
+ y="20.996641"
+ x="-521.00037"
+ height="16"
+ width="16"
+ id="rect43299-3"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:1;marker:none"
+ transform="scale(-1,1)" />
+ <path
+ transform="translate(241.0002,-473)"
+ inkscape:connector-curvature="0"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:none"
+ d="M 266.96875,495 C 266.43472,495 266,495.42699 266,495.96875 v 0.0625 C 266.01714,502.64406 271.38317,508 278,508 h 0.0312 c 0.54483,0 0.9688,-0.446 0.9688,-1 v -1 -2 c 0,-0.554 -0.446,-1 -1,-1 h -2 c -0.554,0 -1,0.446 -1,1 v 0.46875 C 272.44314,503.56487 270.43513,501.55686 269.53125,499 H 270 c 0.55401,0 1,-0.44599 1,-1 v -2 c 0,-0.55401 -0.44599,-1 -1,-1 h -1 -1 -0.96875 -0.0312 -0.0312 z"
+ id="rect5922" />
+ </g>
+ <g
+ transform="translate(162,-526)"
+ inkscape:label="document-edit"
+ id="g10444"
+ style="display:inline">
+ <rect
+ y="646"
+ x="180"
+ height="16"
+ width="16"
+ id="rect10447"
+ style="fill:none;stroke:none" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ sodipodi:nodetypes="cccccc"
+ id="path13107"
+ d="m 182.67863,656.29269 5.84933,-5.85075 2.99982,2.99981 -5.82888,5.87306 -4.02677,1.07184 z"
+ inkscape:connector-curvature="0" />
+ <path
+ id="rect9831"
+ d="m 191.63729,647.67638 c -0.20052,0 -0.40103,0.0768 -0.55468,0.23047 l -1.76953,1.76758 3.05273,3.05273 1.76953,-1.76953 c 0.3073,-0.3073 0.3073,-0.80208 0,-1.10938 l -1.94336,-1.9414 c -0.15365,-0.15365 -0.35417,-0.23047 -0.55469,-0.23047 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-77.999996,142.00001)"
+ inkscape:label="go-home"
+ id="g9849"
+ style="display:inline">
+ <g
+ transform="translate(-853.0002,532.99999)"
+ style="display:inline"
+ id="use9847"
+ inkscape:label="user-home">
+ <path
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0"
+ id="path2140"
+ d="M 1256.0002,-568.99998 V -562 h 10 v -6.99998"
+ style="fill:none;stroke:#241f31;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path2142"
+ d="m 1254.0002,-567.99998 7,-5 7,5"
+ style="fill:none;stroke:#241f31;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="-567"
+ x="1259.0002"
+ height="6"
+ width="3"
+ id="rect2144"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:#241f31;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
+ <rect
+ style="display:inline;fill:#241f31;fill-opacity:1;stroke:none"
+ id="rect2146"
+ width="1"
+ height="1"
+ x="-1269.0004"
+ y="-568"
+ transform="scale(-1,1)" />
+ <rect
+ style="display:inline;fill:#241f31;fill-opacity:1;stroke:none"
+ id="rect2148"
+ width="1"
+ height="1"
+ x="-1254.0004"
+ y="-568"
+ transform="scale(-1,1)" />
+ <rect
+ y="-575"
+ x="1253.0002"
+ height="16"
+ width="16"
+ id="rect2150"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
+ </g>
+ </g>
+ <g
+ id="g40070"
+ inkscape:label="user-trash"
+ transform="matrix(-1,0,0,1,625.94876,-856)"
+ style="display:inline">
+ <rect
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ id="rect40076"
+ width="16"
+ height="16"
+ x="227.9998"
+ y="996" />
+ <path
+ d="m 230.9998,1001 v 9 h 9 v -9 h 2 v 9 c 0,2 -2,2 -2,2 h -9 c -2,0 -2,-2 -2,-2 v -9 z m 4.00001,1 h 1.00002 v 6 h -1.00002 z m 2,0 h 1.00002 v 6 h -1.00002 z m -4,0 h 0.99999 v 6 h -0.99999 z m -1.00001,-6 c -2,0 -2,2 -2,2 h -2 v 2 h 15 v -2 h -2 c 0,-2 -2,-2 -2,-2 z m 0,1 h 7 v 1 h -7 z"
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ id="path3799"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ id="g35539"
+ transform="translate(35.758249,-843.1781)"
+ inkscape:label="emblem-important"
+ style="display:inline">
+ <path
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ d="m 354.1907,964.17812 c -3.86599,0 -7,3.13401 -7,7 0,3.86599 3.13401,7 7,7 3.86599,0 7,-3.13401 7,-7 0,-3.86599 -3.13401,-7 -7,-7 z m -0.0937,1.96875 a 1.0001,1.0001 0 0 1 1.09375,1.03125 v 5 a 1.0001,1.0001 0 1 1 -2,0 v -5 a 1.0001,1.0001 0 0 1 0.78125,-1 1.0001,1.0001 0 0 1 0.125,-0.0313 z m 0.0937,8.03125 c 0.55228,0 1,0.44772 1,1 0,0.55228 -0.44772,1 -1,1 -0.55229,0 -1,-0.44772 -1,-1 0,-0.55228 0.44771,-1 1,-1 z"
+ id="path35543"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="963.1781"
+ x="346.1907"
+ height="16"
+ width="16"
+ id="rect35549"
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate" />
+ </g>
+ <g
+ transform="translate(-59.05126,-281)"
+ inkscape:label="emblem-favorite"
+ id="g8559"
+ style="display:inline">
+ <rect
+ style="color:#bebebe;display:inline;overflow:visible;visibility:visible;fill:none;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
+ id="rect14243"
+ width="16"
+ height="16"
+ x="441.00021"
+ y="381" />
+ <path
+ style="display:inline;fill:#000000;fill-opacity:1;stroke:none;enable-background:new"
+ sodipodi:nodetypes="cscsscccccc"
+ inkscape:connector-curvature="0"
+ id="path4"
+ d="m 456.0002,386.76617 c 0,-2.07495 -1.68742,-3.75698 -3.76925,-3.75698 -1.37132,0 -2.57123,0.73006 -3.23065,1.8214 -0.65942,-1.09135 -1.85953,-1.8214 -3.23085,-1.8214 -2.08183,0 -3.76925,1.68203 -3.76925,3.75698 0,1.07968 0.45777,2.05239 1.18953,2.73766 h -10e-4 l 5.72506,5.49617 5.89867,-5.49617 h -0.002 c 0.73186,-0.68517 1.18933,-1.65788 1.18933,-2.73766" />
+ </g>
+ </g>
+ <g
+ id="g2014"
+ transform="translate(-70.030303,-207)">
+ <g
+ transform="matrix(0.3,0,0,-0.21279762,-440.7697,766.3631)"
+ style="display:inline;fill:url(#linearGradient1572);fill-opacity:1;stroke-width:1.0298574;enable-background:new"
+ clip-path="none"
+ id="g1479">
+ <rect
+ transform="scale(-1,1)"
+ clip-path="none"
+ ry="37.594406"
+ rx="26.666666"
+ y="-190.965"
+ x="-429.33334"
+ height="451.13287"
+ width="346.66669"
+ id="rect1473"
+ style="opacity:1;vector-effect:none;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:53.73949814;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
+ <rect
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:53.73949814;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ id="rect1475"
+ width="346.66669"
+ height="451.13287"
+ x="-429.33334"
+ y="-181.56641"
+ rx="26.666666"
+ ry="37.594406"
+ clip-path="none"
+ transform="scale(-1,1)" />
+ <rect
+ style="opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:53.73949814;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ id="rect1477"
+ width="346.66669"
+ height="451.13284"
+ x="-429.33334"
+ y="-153.37062"
+ rx="26.666666"
+ ry="37.594406"
+ clip-path="none"
+ transform="scale(-1,1)" />
+ </g>
+ <g
+ id="g1497"
+ style="display:inline;enable-background:new"
+ transform="translate(-427.9697,519)">
+ <circle
+ r="1.9999998"
+ cy="252"
+ cx="108"
+ id="circle1481"
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1483"
+ cx="108"
+ cy="242"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="232"
+ cx="108"
+ id="circle1485-8"
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1487"
+ cx="108"
+ cy="222"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="212"
+ cx="108"
+ id="circle1489"
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1493"
+ cx="108"
+ cy="202"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="192"
+ cx="108"
+ id="circle1495"
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ id="g1518"
+ style="display:inline;enable-background:new"
+ transform="translate(-427.9697,519)">
+ <circle
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1499-7"
+ cx="20"
+ cy="272"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="262"
+ cx="20"
+ id="circle1501"
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1503"
+ cx="20"
+ cy="252"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="242"
+ cx="20"
+ id="circle1505"
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1507"
+ cx="20"
+ cy="232"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="222"
+ cx="20"
+ id="circle1509"
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1511"
+ cx="20"
+ cy="212"
+ r="1.9999998" />
+ <circle
+ r="1.9999998"
+ cy="202"
+ cx="20"
+ id="circle1513-9"
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:7.99999905;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1515"
+ cx="20"
+ cy="192"
+ r="1.9999998" />
+ </g>
+ <g
+ transform="translate(-427.9697,518)"
+ id="g1538"
+ style="display:inline;opacity:0.3;stroke:#d5d3cf;enable-background:new">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1520"
+ d="m 28,192 h 72"
+ style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 28,202 h 72"
+ id="path1522"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1524"
+ d="m 28,212 h 72"
+ style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1526"
+ d="m 28,222 h 72"
+ style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 28,232 h 72"
+ id="path1528"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 28,242 h 72"
+ id="path1530"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1532"
+ d="m 28,252 h 72"
+ style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1534"
+ d="m 28,262 h 72"
+ style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;fill-rule:evenodd;stroke:#d5d3cf;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 28,272 H 94"
+ id="path1536"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-447.9697,519)"
+ id="g1568"
+ style="display:inline;enable-background:new">
+ <g
+ id="g1546"
+ transform="translate(14.00001,-11.999987)"
+ style="opacity:0.1;stroke:#00000f;stroke-opacity:1">
+ <path
+ transform="translate(0,-3e-6)"
+ style="display:inline;fill:none;stroke:#00000f;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 35.99999,249.99999 -8,8"
+ id="path1540"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ transform="translate(0,-3e-6)"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1542"
+ d="m 27.99999,257.99999 -14,14"
+ style="display:inline;fill:none;stroke:#00000f;stroke-width:12;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ <circle
+ r="30.117647"
+ cy="227.99998"
+ cx="57.999996"
+ id="circle1544"
+ style="opacity:1;fill:none;fill-opacity:0.3858268;stroke:#00000f;stroke-width:3.76470613;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ transform="translate(14.00001,-13.999987)"
+ id="g1558"
+ style="display:inline;enable-background:new">
+ <path
+ style="display:inline;opacity:0.15400002;fill:none;stroke:#ffffff;stroke-width:1.63784266;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m 11.890335,268.55054 15.45714,-15.45715"
+ id="path1548"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1550-2"
+ d="m 35.99999,249.99999 -8,8"
+ style="fill:none;stroke:#949390;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;stroke:#d5d3cf;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 35.99999,247.99999 -8,8"
+ id="path1552"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#241f31;stroke-width:12;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 27.99999,257.99999 -14,14"
+ id="path1554"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path1556"
+ d="m 27.99999,255.99999 -14,14"
+ style="fill:none;stroke:#424048;stroke-width:12;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <circle
+ transform="scale(-1,1)"
+ r="29.937637"
+ style="display:inline;opacity:0.5;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.44194174;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="circle1560"
+ cx="-71.999969"
+ cy="212.06238" />
+ <circle
+ r="30.117647"
+ cy="214"
+ cx="72.000008"
+ id="circle1562"
+ style="opacity:1;fill:none;fill-opacity:0.3858268;stroke:#1a5fb4;stroke-width:3.76470613;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <circle
+ style="opacity:1;fill:none;fill-opacity:0.3858268;stroke:#62a0ea;stroke-width:3.76470613;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="circle1564"
+ cx="72.000008"
+ cy="212"
+ r="30.117647" />
+ <path
+ sodipodi:nodetypes="cc"
+ style="display:inline;opacity:0.15400002;fill:none;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="M 25,255 41,239"
+ id="path1566"
+ inkscape:connector-curvature="0" />
+ </g>
+ <rect
+ clip-path="url(#clipPath1609)"
+ transform="matrix(0,1,1,0,-427.9697,519)"
+ ry="8"
+ rx="8"
+ y="88"
+ x="252"
+ height="36"
+ width="36"
+ id="rect1570"
+ style="display:inline;opacity:1;fill:url(#linearGradient1574);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ </g>
+ <g
+ id="g2185"
+ transform="translate(19.359232,-27.373028)">
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:0.01129821px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect929-36-9-9-5"
+ width="112"
+ height="86"
+ x="-365.35922"
+ y="539.37305"
+ rx="7.9999995"
+ ry="7.999999" />
+ <rect
+ rx="3.9999998"
+ style="display:inline;opacity:1;vector-effect:none;fill:#241f31;fill-opacity:1;stroke:none;stroke-width:0.01129821px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect946-0-7-4-0"
+ width="92"
+ height="76"
+ x="-361.35922"
+ y="543.37305"
+ ry="4" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient1444-2-3-3-3);fill-opacity:1;stroke:none;stroke-width:0.01129821px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m -365.35922,615.37304 v 4 c 0,4.432 3.568,8 8,8 h 96 c 4.432,0 8,-3.568 8,-8 v -4 c 0,4.432 -3.568,8 -8,8 h -96 c -4.432,0 -8,-3.568 -8,-8 z"
+ id="rect929-3-6-3-9-3"
+ sodipodi:nodetypes="csssscssc" />
+ <rect
+ y="-615.37305"
+ x="-357.35922"
+ height="68"
+ width="84"
+ id="rect968-2-6"
+ style="display:inline;opacity:0.05;vector-effect:none;fill:url(#radialGradient1030-8-1);fill-opacity:1;stroke:none;stroke-width:0.01121096px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ transform="scale(1,-1)" />
+ <path
+ id="path1092-6-1-3-7-5-5-1"
+ style="display:inline;opacity:0.23600003;fill:none;stroke:#e5a50a;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m -357.35922,585.37304 h 26 l 10,-23 6,39 8,-16 h 34"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ id="path1092-6-1-3-7-5-1-0-0"
+ style="display:inline;opacity:1;fill:none;stroke:url(#linearGradient1106-2-7);stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
+ d="m -357.35922,585.37304 h 26 l 10,-23 6,39 8,-16 h 6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <g
+ transform="translate(-373.35921,341.37304)"
+ id="g1063-6"
+ style="display:inline;enable-background:new">
+ <path
+ style="display:inline;opacity:1;vector-effect:none;fill:#949390;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 115.99999,232 v 4 c 0,2.20914 -1.79086,4 -4,4 -2.20914,0 -4,-1.79086 -4,-4 v -2 l 4,-2 z"
+ id="path1066-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="csscccc" />
+ <path
+ sodipodi:nodetypes="ccsscc"
+ inkscape:connector-curvature="0"
+ id="path1074-2"
+ d="m 115.99999,248 v 6 h -4 c -2.216,0 -4,-1.784 -4,-4 v -2 z"
+ style="display:inline;opacity:1;vector-effect:none;fill:#949390;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <path
+ id="path1076-0"
+ d="m 115.99999,252 v -4 a 4,3.9999998 0 0 0 -4,-4 4,3.9999998 0 0 0 -4,4 4,3.9999998 0 0 0 4,4 z"
+ style="display:inline;opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <ellipse
+ ry="1.0000002"
+ rx="1"
+ cy="250"
+ cx="-113.99997"
+ id="ellipse1078-6"
+ style="display:inline;opacity:1;vector-effect:none;fill:#68676b;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ transform="scale(-1,1)" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 115.99999,230 v 4 a 4,3.9999998 0 0 1 -4,4 4,3.9999998 0 0 1 -4,-4 4,3.9999998 0 0 1 4,-4 z"
+ id="path1080-1" />
+ <ellipse
+ transform="scale(-1)"
+ style="display:inline;opacity:1;vector-effect:none;fill:#68676b;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="ellipse1082-5"
+ cx="-113.99997"
+ cy="-232"
+ rx="1"
+ ry="1.0000002" />
+ <path
+ sodipodi:nodetypes="csscccc"
+ inkscape:connector-curvature="0"
+ id="path1084-5"
+ d="m 107.99999,218 v 4 c 0,2.20914 1.79086,4 4,4 2.20914,0 4,-1.79086 4,-4 v -2 l -4,-2 z"
+ style="display:inline;opacity:1;vector-effect:none;fill:#949390;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <path
+ id="path1086-4"
+ d="m 107.99999,216 v 4 a 4,3.9999998 0 0 0 4,4 4,3.9999998 0 0 0 4,-4 4,3.9999998 0 0 0 -4,-4 z"
+ style="display:inline;opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ inkscape:connector-curvature="0" />
+ <ellipse
+ ry="1.0000002"
+ rx="1"
+ cy="-218"
+ cx="109.99997"
+ id="ellipse1088-7"
+ style="display:inline;opacity:1;vector-effect:none;fill:#68676b;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ transform="scale(1,-1)" />
+ <path
+ style="display:inline;opacity:1;vector-effect:none;fill:#949390;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 115.99999,206 v 6 h -4 c -2.216,0 -4,-1.784 -4,-4 v -2 z"
+ id="path1090-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsscc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;opacity:1;vector-effect:none;fill:#d5d3cf;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ d="m 115.99999,210 v -4 a 4,3.9999998 0 0 0 -4,-4 4,3.9999998 0 0 0 -4,4 4,3.9999998 0 0 0 4,4 z"
+ id="path1092-5" />
+ <ellipse
+ transform="scale(-1,1)"
+ style="display:inline;opacity:1;vector-effect:none;fill:#68676b;fill-opacity:1;stroke:none;stroke-width:3.99999952;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="ellipse1094-6"
+ cx="-113.99997"
+ cy="208"
+ rx="1"
+ ry="1.0000002" />
+ </g>
+ </g>
+ <g
+ id="g2539"
+ transform="translate(9.5367431e-7,2.4e-4)"
+ style="display:inline;enable-background:new">
+ <rect
+ ry="8"
+ rx="7.999999"
+ y="225.99976"
+ x="12.000266"
+ height="62"
+ width="104"
+ id="rect1081-1"
+ style="display:inline;vector-effect:none;fill:url(#linearGradient8402);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <g
+ id="g1883-9"
+ transform="translate(2.6595592e-4,-8.0002393)">
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient8404);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1172-1"
+ width="87.999992"
+ height="46"
+ x="19.999998"
+ y="234" />
+ <rect
+ style="opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:1.12328;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1174-3"
+ width="87.999992"
+ height="66"
+ x="19.999998"
+ y="208" />
+ </g>
+ <rect
+ style="display:inline;vector-effect:none;fill:url(#linearGradient8406);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1164-8"
+ width="104"
+ height="38"
+ x="12.000266"
+ y="223.99976"
+ rx="7.999999"
+ ry="8" />
+ <rect
+ style="display:inline;vector-effect:none;fill:url(#linearGradient8408);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect1476-4"
+ width="104"
+ height="62"
+ x="12.000266"
+ y="225.99976"
+ rx="7.999999"
+ ry="8" />
+ <rect
+ style="vector-effect:none;fill:#5e5c64;fill-opacity:1;stroke:none;stroke-width:1.14018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1478-9"
+ width="104"
+ height="60"
+ x="12.000267"
+ y="223.99976"
+ rx="9.454545"
+ ry="8" />
+ <g
+ id="g3308"
+ transform="translate(0,-2)">
+ <g
+ transform="translate(-578.75348,-12.522289)"
+ id="g1953">
+ <g
+ style="display:inline;enable-background:new"
+ transform="translate(578.75348,10.522289)"
+ id="g1668-6">
+ <rect
+ y="234"
+ x="19.999998"
+ height="46"
+ width="87.999992"
+ id="rect1666-2"
+ style="display:inline;opacity:1;vector-effect:none;fill:url(#linearGradient1938);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ </g>
+ <g
+ transform="translate(578.75348,16.522289)"
+ style="display:inline;enable-background:new"
+ id="g1688-9">
+ <path
+ style="display:inline;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 108,272 h -0.5 v 1 h 0.5 z m -44.507811,0 44.000001,1 v -1 z"
+ id="path1680-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="path1682-7"
+ d="m 108,272 h -0.5 v 1 h 0.5 z m -44.507811,0 44.000001,1 v -1 z"
+ style="display:inline;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" />
+ <path
+ style="display:inline;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 108,270 h -0.5 v 1 h 0.5 z m -47.507811,0 47.000001,1 v -1 z"
+ id="path1684-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0"
+ id="path1686-9"
+ d="m 108,268 h -0.5 v 1 h 0.5 z m -50.507811,0 50.000001,1 v -1 z"
+ style="display:inline;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" />
+ </g>
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#000000;fill-opacity:0.137255;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="rect1749-2"
+ width="88"
+ height="7.9999995"
+ x="598.75348"
+ y="282.52228" />
+ </g>
+ <rect
+ y="252"
+ x="26"
+ height="14"
+ width="4"
+ id="rect2344"
+ style="opacity:0.4;fill:#241f31;stroke:none;stroke-width:5.9981;stroke-opacity:0.461288" />
+ <g
+ transform="matrix(1,0,0,1.75,0,-189)"
+ style="opacity:0.2;stroke-width:0.755929"
+ id="g2585">
+ <rect
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53414;stroke-opacity:0.461288"
+ id="rect2352"
+ width="9.4649925"
+ height="5.1428704"
+ x="40.535011"
+ y="254.85715" />
+ <rect
+ y="252"
+ x="36"
+ height="8"
+ width="10"
+ id="rect2346"
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53414;stroke-opacity:0.461288" />
+ <rect
+ y="252"
+ x="56"
+ height="8"
+ width="18"
+ id="rect2354"
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53414;stroke-opacity:0.461288" />
+ <rect
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53415;stroke-opacity:0.461288"
+ id="rect2364"
+ width="6"
+ height="3.4285715"
+ x="72"
+ y="256.57144" />
+ <rect
+ style="opacity:1;fill:#241f31;stroke:none;stroke-width:4.53415;stroke-opacity:0.461288"
+ id="rect2366"
+ width="6"
+ height="8"
+ x="84"
+ y="252" />
+ </g>
+ </g>
+ <rect
+ style="opacity:0.2;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.14018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1988"
+ width="111.99973"
+ height="56.00024"
+ x="8.000267"
+ y="199.99976"
+ rx="9.454545"
+ ry="8"
+ clip-path="url(#clipPath1992)" />
+ <rect
+ ry="8"
+ rx="7.9999986"
+ y="214"
+ x="7.999999"
+ height="37.999756"
+ width="112.00026"
+ id="rect1930"
+ style="display:inline;vector-effect:none;fill:url(#linearGradient1932);fill-opacity:1;stroke:none;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="8"
+ rx="9.454545"
+ y="191.99976"
+ x="8.000267"
+ height="56.00024"
+ width="111.99973"
+ id="rect1488-8"
+ style="vector-effect:none;fill:#3584e4;fill-opacity:1;stroke:none;stroke-width:1.14018;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="display:inline;fill:none;stroke:url(#linearGradient143387);stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ d="m 32.823351,215.99976 62.35383,-36"
+ id="path1732-5"
+ inkscape:connector-curvature="0" />
+ <g
+ transform="translate(0,1)"
+ id="g2076">
+ <circle
+ r="15.999751"
+ cy="-219.00024"
+ cx="64.000275"
+ id="circle1496-5"
+ style="display:inline;vector-effect:none;fill:url(#linearGradient8414);fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ transform="scale(1,-1)" />
+ <circle
+ transform="matrix(0,-1,-1,0,0,0)"
+ style="display:inline;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="circle1498-9"
+ cx="-216.99995"
+ cy="-64.000275"
+ r="15.999798" />
+ </g>
+ <g
+ id="g973"
+ transform="translate(2.6595592e-4,-6.0002393)">
+ <path
+ style="fill:url(#linearGradient8416);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 59,205 -1,2 1,2 -1,2 1,2 -1,2 1,2 -1,2 1,2 -1,2 v 1 c 3e-4,2.14329 1.143853,4.12367 3,5.19531 1.856406,1.0718 4.143594,1.0718 6,0 1.856147,-1.07164 2.9997,-3.05202 3,-5.19531 v -3 l -1,-2 1,-2 -1,-2 1,-2 -1,-2 1,-2 -1,-2 1,-2 -1,-2 z"
+ id="path1500-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccsscccccccccccc" />
+ <g
+ transform="translate(0,2)"
+ id="g1485-6">
+ <path
+ sodipodi:nodetypes="czcczcc"
+ inkscape:connector-curvature="0"
+ id="path1502-8"
+ d="m 69.000686,204.99955 c 0,0 -1.352518,3.65721 -4.912302,4.01705 C 60.5286,209.37644 59,207 59,207 l -1,2 c 0,0 2.09255,2.78313 6.088384,2.55042 C 68.084218,211.31771 69.87645,207.0386 70,206.99999 Z"
+ style="fill:#ffffff;fill-opacity:0.38189;stroke:none;stroke-width:0.0821677;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="csccsccc"
+ id="path1504-5"
+ d="m 69.999996,206.99964 c -0.12355,0.0386 -1.915778,4.31807 -5.911612,4.55078 -3.995834,0.23271 -6.088388,-2.55078 -6.088388,-2.55078 l 1,2 c 0,0 1.528604,2.37546 5.088388,2.01562 3.559784,-0.35984 4.911612,-4.01562 4.911612,-4.01562 l 0.04297,0.0859 z"
+ style="fill:#241f31;fill-opacity:0.338583;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ffffff;fill-opacity:0.38189;stroke:none;stroke-width:0.0821677;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 69.000686,212.99955 c 0,0 -1.352518,3.65721 -4.912302,4.01705 C 60.5286,217.37644 59,215 59,215 l -1,2 c 0,0 2.09255,2.78313 6.088384,2.55042 C 68.084218,219.31771 69.87645,215.0386 70,214.99999 Z"
+ id="path1525-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czcczcc" />
+ <path
+ sodipodi:nodetypes="czcczcc"
+ inkscape:connector-curvature="0"
+ id="path1527-8"
+ d="m 69.000686,216.99955 c 0,0 -1.440906,3.65721 -5.00069,4.01705 C 60.440212,221.37644 59,219 59,219 l -1,2 c 0,0 2.004162,2.78313 5.999996,2.55042 C 67.99583,223.31771 69.87645,219.0386 70,218.99999 Z"
+ style="fill:#ffffff;fill-opacity:0.38189;stroke:none;stroke-width:0.0821677;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:#ffffff;fill-opacity:0.38189;stroke:none;stroke-width:0.0821677;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 69.000686,208.99955 c 0,0 -1.352518,3.65721 -4.912302,4.01705 C 60.5286,213.37644 59,211 59,211 l -1,2 c 0,0 2.09255,2.78313 6.088384,2.55042 C 68.084218,215.31771 69.87645,211.0386 70,210.99999 Z"
+ id="path1530-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="czcczcc" />
+ <path
+ sodipodi:nodetypes="csccsccc"
+ inkscape:connector-curvature="0"
+ id="path1532-6"
+ transform="translate(0,172)"
+ d="m 70,43 c -0.12355,0.03861 -1.915778,4.318071 -5.911612,4.550781 C 60.092554,47.783491 58,45 58,45 l 1,2 c 0,0 1.528604,2.375465 5.088388,2.015625 C 67.648172,48.655785 69,45 69,45 l 0.04297,0.08594 z"
+ style="fill:#241f31;fill-opacity:0.338583;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="csccsccc"
+ inkscape:connector-curvature="0"
+ style="fill:#241f31;fill-opacity:0.338583;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 69.999996,210.99964 c -0.12355,0.0386 -1.915778,4.31807 -5.911612,4.55078 -3.995834,0.23271 -6.088388,-2.55078 -6.088388,-2.55078 l 1,2 c 0,0 1.528604,2.37546 5.088388,2.01562 3.559784,-0.35984 4.911612,-4.01562 4.911612,-4.01562 l 0.04297,0.0859 z"
+ id="path1534-7" />
+ </g>
+ </g>
+ <g
+ id="g1254">
+ <circle
+ transform="scale(1,-1)"
+ style="display:inline;vector-effect:none;fill:url(#linearGradient8422);fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="circle1510-6"
+ cx="64.000282"
+ cy="-200.00005"
+ r="11.999864" />
+ <circle
+ r="11.999864"
+ cy="-64.000282"
+ cx="-194.00011"
+ id="circle1512-6"
+ style="display:inline;vector-effect:none;fill:#deddda;fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ transform="matrix(0,-1,-1,0,0,0)" />
+ <path
+ style="display:inline;vector-effect:none;fill:#77767b;fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ d="m 52.02175,199.40601 a 11.999864,11.999864 0 0 0 -0.02148,0.59375 11.999864,11.999864 0 0 0 12,12 11.999864,11.999864 0 0 0 12,-12 11.999864,11.999864 0 0 0 -0.01953,-0.40625 11.999864,11.999864 0 0 1 -11.980469,11.40625 11.999864,11.999864 0 0 1 -11.978516,-11.59375 z"
+ id="circle1814-2"
+ inkscape:connector-curvature="0" />
+ <circle
+ transform="matrix(0,-1,-1,0,0,0)"
+ style="display:inline;vector-effect:none;fill:url(#radialGradient1505-1);fill-opacity:1;stroke:none;stroke-width:15.9998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
+ id="circle1514-9"
+ cx="-194.00011"
+ cy="-64.000282"
+ r="6.0001068" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:#77767b;stroke:url(#linearGradient8424);stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 32.823351,215.99976 52.40883,204.69208"
+ id="path1516-7"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1742-6"
+ d="M 32.823351,215.99976 52.40883,204.69208"
+ style="display:inline;fill:#77767b;stroke:url(#linearGradient2370-3);stroke-width:6;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"
+ sodipodi:nodetypes="cc" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="grid"
+ style="display:inline"
+ sodipodi:insensitive="true">
+ <circle
+ cx="64.000031"
+ cy="236"
+ r="59.504131"
+ id="circle2892"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9292889"
+ rx="8.701004"
+ y="180.49496"
+ x="20.495007"
+ height="111.01005"
+ width="87.009987"
+ id="rect2894"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="7.9238095"
+ rx="7.9238095"
+ y="184.49524"
+ x="12.495266"
+ height="103.00952"
+ width="103.00952"
+ id="rect2896"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ ry="8.701005"
+ rx="7.9292889"
+ y="200.49496"
+ x="8.4950066"
+ height="87.010048"
+ width="111.01004"
+ id="rect2898"
+ style="display:inline;opacity:0.1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.99000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.99000001, 0.99000001;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path2900"
+ d="M 2.6203015e-5,288.99999 H 128.00003"
+ style="display:inline;fill:none;stroke:#62a0ea;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" />
+ </g>
+ <g
+ id="g1648"
+ transform="translate(-120.50005,-26)">
+ <g
+ id="g1207"
+ style="display:inline;enable-background:new"
+ transform="translate(-89.5,194)">
+ <rect
+ ry="8"
+ rx="8"
+ y="234"
+ x="20"
+ height="58"
+ width="88"
+ id="rect1041"
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient1049);fill-opacity:1;stroke:none;stroke-width:0.01184966px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
+ <rect
+ style="opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:1;stroke:none;stroke-width:0.01184966px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal"
+ id="rect15435-6"
+ width="88"
+ height="108"
+ x="20"
+ y="180"
+ rx="8"
+ ry="8" />
+ <rect
+ ry="4"
+ rx="4"
+ y="186"
+ x="24"
+ height="98"
+ width="80"
+ id="rect1167-6"
+ style="display:inline;opacity:1;vector-effect:none;fill:#1a5fb4;fill-opacity:1;stroke:none;stroke-width:0.0119126px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#3584e4;fill-opacity:1;stroke:none;stroke-width:0.0119126px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect15441-8"
+ width="80"
+ height="98"
+ x="24"
+ y="184"
+ rx="4"
+ ry="4" />
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#1c71d8;fill-opacity:1;stroke:none;stroke-width:0.01190936px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect15443-6"
+ width="80"
+ height="2"
+ x="24"
+ y="216"
+ rx="0"
+ ry="0" />
+ <rect
+ style="display:inline;opacity:1;vector-effect:none;fill:#1c71d8;fill-opacity:1;stroke:none;stroke-width:0.01190936px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
+ id="rect15461-2"
+ width="80"
+ height="2"
+ x="24"
+ y="248"
+ rx="0"
+ ry="0" />
+ <g
+ id="g1088">
+ <path
+ sodipodi:nodetypes="sssccccccss"
+ inkscape:connector-curvature="0"
+ id="path26035"
+ d="m 55,196 h 18 c 1.662,0 3,1 3,3 v 5 H 72.03125 L 72,200 H 56 l 0.03125,4 H 52 v -5 c 0,-1.662 1.338,-3 3,-3 z"
+ style="opacity:1;vector-effect:none;fill:url(#linearGradient1278);fill-opacity:1;stroke:none;stroke-width:0.01184966px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal" />
+ <rect
+ style="opacity:0.1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1059"
+ width="24"
+ height="4"
+ x="52"
+ y="202"
+ ry="1.5"
+ rx="1.5" />
+ <path
+ style="opacity:1;fill:url(#linearGradient1280);fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 55,200 c -1.662,0 -3,1.338 -3,3 v 1 h 4 v -2 h 16 v 2 h 4 v -1 c 0,-1.662 -1.338,-3 -3,-3 z"
+ id="rect1061"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssccccccsss" />
+ <rect
+ y="202"
+ x="56"
+ height="2"
+ width="16"
+ id="rect1189"
+ style="opacity:0.1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <use
+ x="0"
+ y="0"
+ xlink:href="#g1088"
+ id="use1090"
+ transform="translate(0,32)"
+ width="100%"
+ height="100%" />
+ <use
+ height="100%"
+ width="100%"
+ transform="translate(0,64)"
+ id="use1092"
+ xlink:href="#g1088"
+ y="0"
+ x="0" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/examples/adw-1/adw1-demo/leaflet.scm b/examples/adw-1/adw1-demo/leaflet.scm
new file mode 100644
index 0000000..8827a7d
--- /dev/null
+++ b/examples/adw-1/adw1-demo/leaflet.scm
@@ -0,0 +1,132 @@
+;; -*- mode: scheme; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(define-module (adw1-demo leaflet)
+ #:use-module (oop goops)
+ #:use-module (g-golf)
+
+ #:duplicates (merge-generics
+ replace
+ warn-override-core
+ warn
+ last)
+
+ #:export (<adw-demo-page-leaflet>
+ %adw-leaflet-transition-type))
+
+
+(g-export !transition-type
+ !transition-row
+ !action-row)
+
+
+(eval-when (expand load eval)
+ (g-irepository-require "Gtk" #:version "4.0")
+ (for-each (lambda (name)
+ (gi-import-by-name "Gtk" name))
+ '("ClosureExpression"))
+ (g-irepository-require "Adw" #:version "1")
+ (for-each (lambda (name)
+ (gi-import-by-name "Adw" name))
+ '("Bin"
+ "Clamp"
+ "PreferencesGroup"
+ "StatusPage"
+ "ComboRow"
+ "ActionRow"
+ "EnumListModel"
+ "EnumListItem"
+ "LeafletTransitionType")))
+
+
+(define %adw-leaflet-transition-type #f)
+
+(eval-when (expand load eval)
+ (set! %adw-leaflet-transition-type
+ (gi-cache-ref 'enum 'adw-leaflet-transition-type)))
+
+
+(define-class <adw-demo-page-leaflet> (<adw-bin>)
+ ;; slots
+ (transition-type #:g-param `(enum
+ #:type ,%adw-leaflet-transition-type)
+ #:accessor !transition-type)
+ (transition-row #:child-id "transition-row" #:accessor !transition-row)
+ (action-row #:child-id "action-row" #:accessor !action-row)
+ ;; class options
+ #:template (string-append (dirname (current-filename))
+ "/ui/leaflet.ui")
+ #:child-ids '("transition-row"
+ "action-row")
+ #:g-signal '(next-page ;; name
+ none ;; return-type
+ () ;; param-types
+ (run-first))) ;; signal flags
+
+(define-method (initialize (self <adw-demo-page-leaflet>) initargs)
+ (next-method)
+ ;; AdwComboRow requires their expression property to be set, it is
+ ;; used to bind strings to the labels produced by the default factory
+ ;; (if AdwComboRow:factory is not set).
+ (let ((transition-row (!transition-row self))
+ (action-row (!action-row self))
+ (closure (transition-name-closure)))
+
+ (set! (!expression transition-row)
+ (make-expression 'string closure '()))
+
+ (bind-property transition-row
+ "selected"
+ self
+ "transition-type"
+ '(sync-create bidirectional))
+
+ (connect action-row
+ "activated"
+ (lambda (r)
+ (emit self 'next-page)))))
+
+(define (make-expression type closure flags)
+ (gtk-closure-expression-new (symbol->g-type type)
+ (!g-closure closure)
+ flags))
+
+(define (get-transition-name adw-enum-list-item)
+ (case (!value adw-enum-list-item)
+ ((0) "Over") ;; later (G_ "Over")
+ ((1) "Under") ;; ...
+ ((2) "Slide")
+ (else
+ (scm-error 'unlikely #f "This instance is a ghost: ~S"
+ (list adw-enum-list-item) #f))))
+
+(define (transition-name-closure)
+ (make <closure>
+ #:function get-transition-name
+ #:return-type 'string
+ #:param-types (list <adw-enum-list-item>)))
diff --git a/examples/adw-1/adw1-demo/preferences.scm b/examples/adw-1/adw1-demo/preferences.scm
new file mode 100644
index 0000000..205c29b
--- /dev/null
+++ b/examples/adw-1/adw1-demo/preferences.scm
@@ -0,0 +1,130 @@
+;; -*- mode: scheme; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(define-module (adw1-demo preferences)
+ #:use-module (oop goops)
+ #:use-module (g-golf)
+
+ #:duplicates (merge-generics
+ replace
+ warn-override-core
+ warn
+ last)
+
+ #:export (<adw-demo-preferences-window>))
+
+
+(g-export !toast-bt
+ !go-to-subpage-1-ar
+ !subpage-1
+ !subpage-1-bt
+ !go-to-subpage-2-ar
+ !subpage-2
+ !subpage-2-bt)
+
+
+(eval-when (expand load eval)
+ (g-irepository-require "Gtk" #:version "4.0")
+ (for-each (lambda (name)
+ (gi-import-by-name "Gtk" name))
+ '("Button"))
+ (g-irepository-require "Adw" #:version "1")
+ (for-each (lambda (name)
+ (gi-import-by-name "Adw" name))
+ '("StatusPage"
+ "PreferencesWindow"
+ "PreferencesPage"
+ "PreferencesGroup"
+ "Toast"
+ "ComboRow"
+ "ActionRow")))
+
+
+(define-class <adw-demo-preferences-window> (<adw-preferences-window>)
+ ;; slots
+ (toast-bt #:child-id "toast-bt" #:accessor !toast-bt)
+ (go-to-subpage-1-ar #:child-id "go-to-subpage-1-ar"
+ #:accessor !go-to-subpage-1-ar)
+ (subpage-1 #:child-id "subpage-1" #:accessor !subpage-1)
+ (subpage-1-bt #:child-id "subpage-1-bt" #:accessor !subpage-1-bt)
+ (go-to-subpage-2-ar #:child-id "go-to-subpage-2-ar"
+ #:accessor !go-to-subpage-2-ar)
+ (subpage-2 #:child-id "subpage-2" #:accessor !subpage-2)
+ (subpage-2-bt #:child-id "subpage-2-bt" #:accessor !subpage-2-bt)
+ ;; class options
+ #:template (string-append (dirname (current-filename))
+ "/ui/preferences.ui")
+
+ #:child-ids '("toast-bt"
+ "go-to-subpage-1-ar"
+ "subpage-1"
+ "subpage-1-bt"
+ "go-to-subpage-2-ar"
+ "subpage-2"
+ "subpage-2-bt"))
+
+
+(define-method (initialize (self <adw-demo-preferences-window>) initargs)
+ (next-method)
+
+ (connect (!toast-bt self)
+ 'clicked
+ (lambda (b)
+ (toast-show-cb self)))
+
+ (connect (!go-to-subpage-1-ar self)
+ 'activated
+ (lambda (r)
+ (go-to-subpage-1-ar-cb self)))
+
+ (connect (!subpage-1-bt self)
+ 'clicked
+ (lambda (b)
+ (return-to-preferences-cb self)))
+
+ (connect (!go-to-subpage-2-ar self)
+ 'activated
+ (lambda (r)
+ (go-to-subpage-2-ar-cb self)))
+
+ (connect (!subpage-2-bt self)
+ 'clicked
+ (lambda (b)
+ (return-to-preferences-cb self))))
+
+(define (toast-show-cb prefs-win)
+ (add-toast prefs-win (make <adw-toast> #:title "Example Toast")))
+
+(define (go-to-subpage-1-ar-cb prefs-win)
+ (present-subpage prefs-win (!subpage-1 prefs-win)))
+
+(define (go-to-subpage-2-ar-cb prefs-win)
+ (present-subpage prefs-win (!subpage-2 prefs-win)))
+
+(define (return-to-preferences-cb prefs-win)
+ (close-subpage prefs-win))
diff --git a/examples/adw-1/adw1-demo/style-dark.css b/examples/adw-1/adw1-demo/style-dark.css
new file mode 100644
index 0000000..4aebb20
--- /dev/null
+++ b/examples/adw-1/adw1-demo/style-dark.css
@@ -0,0 +1,39 @@
+#custom-button-1 {
+ color: @red_1;
+}
+
+#custom-button-2 {
+ color: @purple_1;
+}
+
+.tab-page-color-1 {
+ background: shade(@blue_5, 0.7);
+}
+
+.tab-page-color-2 {
+ background: shade(@green_5, 0.6);
+}
+
+.tab-page-color-3 {
+ background: shade(@yellow_5, 0.5);
+}
+
+.tab-page-color-4 {
+ background: shade(@orange_5, 0.6);
+}
+
+.tab-page-color-5 {
+ background: shade(@red_5, 0.7);
+}
+
+.tab-page-color-6 {
+ background: shade(@purple_5, 0.7);
+}
+
+.tab-page-color-7 {
+ background: shade(@brown_5, 0.7);
+}
+
+.tab-page-color-8 {
+ background: #363636;
+}
diff --git a/examples/adw-1/adw1-demo/style.css b/examples/adw-1/adw1-demo/style.css
new file mode 100644
index 0000000..6f4e5d0
--- /dev/null
+++ b/examples/adw-1/adw1-demo/style.css
@@ -0,0 +1,82 @@
+stacksidebar {
+ border-left-width: 0px;
+ border-right-width: 0px;
+}
+
+/* Mimic the status page. */
+.avatar-page,
+.timed-animation-page {
+ margin: 36px 12px;
+}
+
+.avatar-page > box > label.title,
+.timed-animation-page > box > label.title {
+ margin-bottom: 12px;
+}
+
+.avatar-page > box > label.description {
+ margin-bottom: 36px;
+}
+
+flowbox.inline flowboxchild {
+ padding: 0;
+ background: none;
+ color: inherit;
+}
+
+#custom-button-1 {
+ color: @red_3;
+}
+
+#custom-button-2 {
+ color: @purple_3;
+}
+
+#custom-button-3 {
+ color: white;
+ background-color: @green_5;
+}
+
+#custom-button-4 {
+ color: white;
+ background-color: @orange_4;
+}
+
+#animation-sample {
+ min-width: 30px;
+ min-height: 30px;
+ border-radius: 24px;
+ background: linear-gradient(to bottom, @green_2, @green_5);
+}
+
+.tab-page-color-1 {
+ background: shade(@blue_1, 1.2);
+}
+
+.tab-page-color-2 {
+ background: shade(@green_1, 1.2);
+}
+
+.tab-page-color-3 {
+ background: shade(@yellow_1, 1.2);
+}
+
+.tab-page-color-4 {
+ background: shade(@orange_1, 1.2);
+}
+
+.tab-page-color-5 {
+ background: shade(@red_1, 1.4);
+}
+
+.tab-page-color-6 {
+ background: shade(@purple_1, 1.3);
+}
+
+.tab-page-color-7 {
+ background: shade(@brown_1, 1.3);
+}
+
+.tab-page-color-8 {
+ background: white;
+}
diff --git a/examples/adw-1/adw1-demo/ui/Makefile b/examples/adw-1/adw1-demo/ui/Makefile
new file mode 100644
index 0000000..aa36bf5
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/Makefile
@@ -0,0 +1,42 @@
+
+####
+#### Copyright (C) 2023
+#### Free Software Foundation, Inc.
+
+#### This file is part of GNU G-Golf.
+
+#### GNU G-Golf is free software; you can redistribute it and/or
+#### modify it under the terms of the GNU General Public License as
+#### published by the Free Software Foundation; either version 3 of the
+#### License, or (at your option) any later version.
+
+#### GNU G-Golf 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
+#### General Public License for more details.
+
+#### You should have received a copy of the GNU General Public License
+#### along with GNU G-Golf. If not, see
+#### <https://www.gnu.org/licenses/gpl.html>.
+####
+
+### Commentary:
+
+### Code:
+
+
+SCM_SRC := $(shell find . -name "*.scm")
+
+XML = $(subst .scm,.ui,$(SCM_SRC))
+
+all: $(XML)
+
+$(XML): %.ui: %.scm
+ ( cd `dirname $<`; \
+ guile --debug \
+ -l `basename $<` \
+ -c '(make-ui)' \
+ > `basename $@` || { rm `basename $@`; false; } )
+
+clean:
+ rm -f $(XML)
diff --git a/examples/adw-1/adw1-demo/ui/leaflet.scm b/examples/adw-1/adw1-demo/ui/leaflet.scm
new file mode 100644
index 0000000..4e00860
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/leaflet.scm
@@ -0,0 +1,87 @@
+;; -*- mode: sxml-ui; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(use-modules (g-golf support sxml))
+
+
+(define %adw-combo-row
+ '(object (@ (class "AdwComboRow")
+ (id "transition-row"))
+ (property (@ (name "title")
+ (translatable "yes")) "Transition Type")
+ (property (@ (name "subtitle")
+ (translatable "yes")) "The type of transition to use when the leaflet adapts its size or when changing the visible child")
+ ;; the binding is done in scheme, see (adw1-demo leaflet), as part
+ ;; of the <adw-demo-page-leaflet>) initialize method
+ #;(property (@ (name "selected")
+ (bind-source "AdwDemoPageLeaflet")
+ (bind-property "transition-type")
+ (bind-flags "sync-create|bidirectional")))
+ (property (@ (name "model"))
+ (object (@ (class "AdwEnumListModel"))
+ (property (@ (name "enum-type")) AdwLeafletTransitionType)))))
+
+
+(define %adw-action-row
+ '(object (@ (class "AdwActionRow")
+ (id "action-row"))
+ (property (@ (name "title")
+ (translatable "yes")) "Go to the next page of the leaflet")
+ (property (@ (name "use-underline")) True)
+ (property (@ (name "activatable")) True)
+ ;; signal - activated - swapped
+ (child
+ (object (@ (class "GtkImage"))
+ (property (@ (name "icon-name")) go-next-symbolic)))))
+
+
+(define %leaflet
+ `(interface
+ (requires (@ (version "4.0") (lib "gtk")))
+ (requires (@ (version "1.0") (lib "libadwaita")))
+ (template (@ (class "AdwDemoPageLeaflet")
+ (parent "AdwBin"))
+ (property (@ (name "child"))
+ (object (@ (class "AdwStatusPage"))
+ (property (@ (name "icon-name")) widget-leaflet-symbolic)
+ (property (@ (name "title")
+ (translatable "yes")) Leaflet)
+ (property (@ (name "description")
+ (translatable "yes")) "A widget showing either all its children or only one, depending on the available space. This window is using a leaflet, you can control it with the settings below.")
+ (property (@ (name "child"))
+ (object (@ (class "AdwClamp"))
+ (property (@ (name "child"))
+ (object (@ (class "AdwPreferencesGroup"))
+ (child ,%adw-combo-row)
+ (child ,%adw-action-row))))))))))
+
+
+(define (make-ui)
+ (sxml->ui %leaflet))
+
+
diff --git a/examples/adw-1/adw1-demo/ui/leaflet.ui b/examples/adw-1/adw1-demo/ui/leaflet.ui
new file mode 100644
index 0000000..c90044c
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/leaflet.ui
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface><requires version="4.0" lib="gtk" /><requires version="1.0" lib="libadwaita" /><template class="AdwDemoPageLeaflet" parent="AdwBin"><property name="child"><object class="AdwStatusPage"><property name="icon-name">widget-leaflet-symbolic</property><property name="title" translatable="yes">Leaflet</property><property name="description" translatable="yes">A widget showing either all its children or only one, depending on the available space. This window is using a leaflet, you can control it with the settings below.</property><property name="child"><object class="AdwClamp"><property name="child"><object class="AdwPreferencesGroup"><child><object class="AdwComboRow" id="transition-row"><property name="title" translatable="yes">Transition Type</property><property name="subtitle" translatable="yes">The type of transition to use when the leaflet adapts its size or when changing the visible child</property><property name="model"><object class="AdwEnumListModel"><property name="enum-type">AdwLeafletTransitionType</property></object></property></object></child><child><object class="AdwActionRow" id="action-row"><property name="title" translatable="yes">Go to the next page of the leaflet</property><property name="use-underline">True</property><property name="activatable">True</property><child><object class="GtkImage"><property name="icon-name">go-next-symbolic</property></object></child></object></child></object></property></object></property></object></property></template></interface>
diff --git a/examples/adw-1/adw1-demo/ui/preferences.scm b/examples/adw-1/adw1-demo/ui/preferences.scm
new file mode 100644
index 0000000..96fc9b9
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/preferences.scm
@@ -0,0 +1,215 @@
+;; -*- mode: sxml-ui; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(use-modules (g-golf support sxml))
+
+
+(define %prefs-group-1-1
+ '(object (@ (class "AdwPreferencesGroup"))
+ (property (@ (name "description")) "Preferences are organized in pages, this example has the following pages:")
+ (property (@ (name "title")
+ (translatable "yes")) Pages)
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) L_ayout)
+ (property (@ (name "use-underline")) True)))
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) S_earch)
+ (property (@ (name "use-underline")) True)))))
+
+(define %prefs-group-1-2
+ '(object (@ (class "AdwPreferencesGroup"))
+ (property (@ (name "description")) "Preferences are grouped together, a group can have a title and a description. Descriptions will be wrapped if they are too long. This page has the following groups:")
+ (property (@ (name "title")
+ (translatable "yes")) Groups)
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) "An Untitled Group")))
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) Pages)))
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) Groups)))
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) Preferences)))))
+
+(define %prefs-group-1-3
+ '(object (@ (class "AdwPreferencesGroup"))
+ (property (@ (name "title")
+ (translatable "yes")) Preferences)
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) "Preferences rows are appended to the list box")))
+ (child
+ (object (@ (class "GtkLabel"))
+ (property (@ (name "ellipsize")) end)
+ (property (@ (name "label")
+ (translatable "yes")) "Other widgets are appended after the list box")
+ (property (@ (name "margin-top")) 12)
+ (property (@ (name "margin-bottom")) 12)
+ (property (@ (name "xalign")) 0)
+ (style (class (@ (name "dim-label"))))))))
+
+(define %prefs-group-1-4
+ '(object (@ (class "AdwPreferencesGroup"))
+ (property (@ (name "title")
+ (translatable "yes")) Toasts)
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) "Show a Toast")
+ (child
+ (object (@ (class "GtkButton")
+ (id "toast-bt"))
+ (property (@ (name "label")
+ (translatable "yes")) Show)
+ ;; (property (@ (name "action-name")) toast.show)
+ (property (@ (name "valign")) center)))))))
+
+(define %prefs-group-1-5
+ '(object (@ (class "AdwPreferencesGroup"))
+ (property (@ (name "description")) "Preferences windows can have subpages.")
+ (property (@ (name "title")
+ (translatable "yes")) Subpages)
+ (child
+ (object (@ (class "AdwActionRow")
+ (id "go-to-subpage-1-ar"))
+ (property (@ (name "title")
+ (translatable "yes")) "Go to a Subpage")
+ (property (@ (name "activatable")) True)
+ ;; signal - activated - subpage1-activated-cb - swapped
+ (child
+ (object (@ (class "GtkImage"))
+ (property (@ (name "icon-name")) go-next-symbolic)))))
+ (child
+ (object (@ (class "AdwActionRow")
+ (id "go-to-subpage-2-ar"))
+ (property (@ (name "title")
+ (translatable "yes")) "Go to Another Subpage")
+ (property (@ (name "activatable")) True)
+ ;; signal - activated - subpage2-activated-cb - swapped
+ (child
+ (object (@ (class "GtkImage"))
+ (property (@ (name "icon-name")) go-next-symbolic)))))))
+
+(define %prefs-group-2-1
+ '(object (@ (class "AdwPreferencesGroup"))
+ (property (@ (name "description")) "Preferences can be searched, do so using one of the following ways:")
+ (property (@ (name "title")
+ (translatable "yes")) Searching)
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) "Activate the Search Button")))
+ (child
+ (object (@ (class "AdwPreferencesRow"))
+ (property (@ (name "title")
+ (translatable "yes")) Ctrl + f)
+ (child
+ (object (@ (class "GtkShortcutLabel"))
+ (property (@ (name "accelerator")) "<ctrl>f")
+ (property (@ (name "margin-top")) 12)
+ (property (@ (name "margin-bottom")) 12)
+ (property (@ (name "margin-start")) 12)
+ (property (@ (name "margin-end")) 12)))))
+ (child
+ (object (@ (class "AdwActionRow"))
+ (property (@ (name "title")
+ (translatable "yes")) "Directly Type Your Search")))))
+
+(define %subpage-1
+ '(object (@ (class "AdwStatusPage")
+ (id "subpage-1"))
+ (property (@ (name "title")
+ (translatable "yes")) "This is a Subpage")
+ (property (@ (name "child"))
+ (object (@ (class "GtkButton")
+ (id "subpage-1-bt"))
+ (property (@ (name "label")
+ (translatable "yes")) "Return to Preferences")
+ (property (@ (name "halign")) center)
+ ;; signal - clicked - return-to-preferences-cb - swapped
+ (style
+ (class (@ (name "suggested-action")))
+ (class (@ (name "pill"))))))))
+
+(define %subpage-2
+ '(object (@ (class "AdwStatusPage")
+ (id "subpage-2"))
+ (property (@ (name "title")
+ (translatable "yes")) "This is Another Subpage")
+ (property (@ (name "child"))
+ (object (@ (class "GtkButton")
+ (id "subpage-2-bt"))
+ (property (@ (name "label")
+ (translatable "yes")) "Return to Preferences")
+ (property (@ (name "halign")) center)
+ ;; signal - clicked - return-to-preferences-cb - swapped
+ (style
+ (class (@ (name "suggested-action")))
+ (class (@ (name "pill"))))))))
+
+(define %sxml
+ `(interface
+ (requires (@ (version "4.0") (lib "gtk")))
+ (requires (@ (version "1.0") (lib "libadwaita")))
+ (template (@ (class "AdwDemoPreferencesWindow")
+ (parent "AdwPreferencesWindow"))
+ (property (@ (name "can-navigate-back")) True)
+ (child
+ (object (@ (class "AdwPreferencesPage"))
+ (property (@ (name "icon-name")) preferences-window-layout-symbolic)
+ (property (@ (name "title")) L_ayout)
+ (property (@ (name "use-underline")) True)
+ (child ,%prefs-group-1-1)
+ (child ,%prefs-group-1-2)
+ (child ,%prefs-group-1-3)
+ (child ,%prefs-group-1-4)
+ (child ,%prefs-group-1-5)))
+ (child
+ (object (@ (class "AdwPreferencesPage"))
+ (property (@ (name "icon-name")) preferences-window-search-symbolic)
+ (property (@ (name "title")) _Search)
+ (property (@ (name "use-underline")) True)
+ (child ,%prefs-group-2-1))))
+ ,%subpage-1
+ ,%subpage-2))
+
+
+(define (make-ui)
+ (sxml->ui %sxml))
diff --git a/examples/adw-1/adw1-demo/ui/preferences.ui b/examples/adw-1/adw1-demo/ui/preferences.ui
new file mode 100644
index 0000000..dc50300
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/preferences.ui
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface><requires version="4.0" lib="gtk" /><requires version="1.0" lib="libadwaita" /><template class="AdwDemoPreferencesWindow" parent="AdwPreferencesWindow"><property name="can-navigate-back">True</property><child><object class="AdwPreferencesPage"><property name="icon-name">preferences-window-layout-symbolic</property><property name="title">L_ayout</property><property name="use-underline">True</property><child><object class="AdwPreferencesGroup"><property name="description">Preferences are organized in pages, this example has the following pages:</property><property name="title" translatable="yes">Pages</property><child><object class="AdwActionRow"><property name="title" translatable="yes">L_ayout</property><property name="use-underline">True</property></object></child><child><object class="AdwActionRow"><property name="title" translatable="yes">S_earch</property><property name="use-underline">True</property></object></child></object></child><child><object class="AdwPreferencesGroup"><property name="description">Preferences are grouped together, a group can have a title and a description. Descriptions will be wrapped if they are too long. This page has the following groups:</property><property name="title" translatable="yes">Groups</property><child><object class="AdwActionRow"><property name="title" translatable="yes">An Untitled Group</property></object></child><child><object class="AdwActionRow"><property name="title" translatable="yes">Pages</property></object></child><child><object class="AdwActionRow"><property name="title" translatable="yes">Groups</property></object></child><child><object class="AdwActionRow"><property name="title" translatable="yes">Preferences</property></object></child></object></child><child><object class="AdwPreferencesGroup"><property name="title" translatable="yes">Preferences</property><child><object class="AdwActionRow"><property name="title" translatable="yes">Preferences rows are appended to the list box</property></object></child><child><object class="GtkLabel"><property name="ellipsize">end</property><property name="label" translatable="yes">Other widgets are appended after the list box</property><property name="margin-top">12</property><property name="margin-bottom">12</property><property name="xalign">0</property><style><class name="dim-label" /></style></object></child></object></child><child><object class="AdwPreferencesGroup"><property name="title" translatable="yes">Toasts</property><child><object class="AdwActionRow"><property name="title" translatable="yes">Show a Toast</property><child><object class="GtkButton" id="toast-bt"><property name="label" translatable="yes">Show</property><property name="valign">center</property></object></child></object></child></object></child><child><object class="AdwPreferencesGroup"><property name="description">Preferences windows can have subpages.</property><property name="title" translatable="yes">Subpages</property><child><object class="AdwActionRow" id="go-to-subpage-1-ar"><property name="title" translatable="yes">Go to a Subpage</property><property name="activatable">True</property><child><object class="GtkImage"><property name="icon-name">go-next-symbolic</property></object></child></object></child><child><object class="AdwActionRow" id="go-to-subpage-2-ar"><property name="title" translatable="yes">Go to Another Subpage</property><property name="activatable">True</property><child><object class="GtkImage"><property name="icon-name">go-next-symbolic</property></object></child></object></child></object></child></object></child><child><object class="AdwPreferencesPage"><property name="icon-name">preferences-window-search-symbolic</property><property name="title">_Search</property><property name="use-underline">True</property><child><object class="AdwPreferencesGroup"><property name="description">Preferences can be searched, do so using one of the following ways:</property><property name="title" translatable="yes">Searching</property><child><object class="AdwActionRow"><property name="title" translatable="yes">Activate the Search Button</property></object></child><child><object class="AdwPreferencesRow"><property name="title" translatable="yes">Ctrl+f</property><child><object class="GtkShortcutLabel"><property name="accelerator">&lt;ctrl&gt;f</property><property name="margin-top">12</property><property name="margin-bottom">12</property><property name="margin-start">12</property><property name="margin-end">12</property></object></child></object></child><child><object class="AdwActionRow"><property name="title" translatable="yes">Directly Type Your Search</property></object></child></object></child></object></child></template><object class="AdwStatusPage" id="subpage-1"><property name="title" translatable="yes">This is a Subpage</property><property name="child"><object class="GtkButton" id="subpage-1-bt"><property name="label" translatable="yes">Return to Preferences</property><property name="halign">center</property><style><class name="suggested-action" /><class name="pill" /></style></object></property></object><object class="AdwStatusPage" id="subpage-2"><property name="title" translatable="yes">This is Another Subpage</property><property name="child"><object class="GtkButton" id="subpage-2-bt"><property name="label" translatable="yes">Return to Preferences</property><property name="halign">center</property><style><class name="suggested-action" /><class name="pill" /></style></object></property></object></interface>
diff --git a/examples/adw-1/adw1-demo/ui/sxml-ui.el b/examples/adw-1/adw1-demo/ui/sxml-ui.el
new file mode 100644
index 0000000..45db97d
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/sxml-ui.el
@@ -0,0 +1,101 @@
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+;;;
+;;; sxml-ui derived mode
+;;; sxml template ui mode
+;;;
+
+(defvar %template-ui-sxml-tags-indent-0
+ '(section
+ item))
+
+(defvar %template-ui-sxml-tags-indent-1
+ '(interface
+ template
+ object
+ style
+ property
+ child
+ menu
+ section
+ item
+ attribute
+ binding
+ closure
+ lookup
+ signal))
+
+(define-derived-mode sxml-ui-mode
+ scheme-mode "sxml template ui mode"
+ "sxml template ui mode"
+
+ (dolist (elt %template-ui-sxml-tags-indent-0)
+ (put elt 'scheme-indent-function 0))
+
+ (dolist (elt %template-ui-sxml-tags-indent-1)
+ (put elt 'scheme-indent-function 1)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(menu\\)\\>"
+ . font-lock-constant-face)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(section\\)\\>"
+ . font-lock-doc-face)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(item\\)\\>"
+ . font-lock-warning-face)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(attribute\\)\\>"
+ . font-lock-comment-face)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(interface\\|template\\)\\>"
+ . font-lock-preprocessor-face)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(requires\\)\\>"
+ . font-lock-comment-face)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(object\\|\\|template\\)\\>"
+ . font-lock-preprocessor-face)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(property\\)\\>"
+ . font-lock-comment-face)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(child\\|style\\)\\>"
+ . font-lock-warning-face)))
+
+(font-lock-add-keywords 'sxml-ui-mode
+ '(("\\<\\(version\\|class\\|parent\\|name\\|translatable\\|id\\|bind-source\\|bind-property\\|bind-flags\\|type\\)\\>"
+ . font-lock-variable-name-face)))
diff --git a/examples/adw-1/adw1-demo/ui/welcome.scm b/examples/adw-1/adw1-demo/ui/welcome.scm
new file mode 100644
index 0000000..d21aff9
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/welcome.scm
@@ -0,0 +1,51 @@
+;; -*- mode: sxml-ui; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(use-modules (g-golf support sxml))
+
+
+(define %sxml
+ `(interface
+ (requires (@ (version "4.0") (lib "gtk")))
+ (requires (@ (version "1.0") (lib "libadwaita")))
+ (template (@ (class "AdwDemoPageWelcome")
+ (parent "AdwBin"))
+ (property (@ (name "child"))
+ (object (@ (class "AdwStatusPage"))
+ (property (@ (name "icon-name"))
+ "org.gnome.Adwaita1.Demo-symbolic")
+ (property (@ (name "title")
+ (translatable "yes"))
+ "Welcome to Adwaita Demo")
+ (property (@ (name "description")
+ (translatable "yes"))
+ "This is a tour of the features the library has to offer."))))))
+
+
+(define (make-ui)
+ (sxml->ui %sxml))
diff --git a/examples/adw-1/adw1-demo/ui/welcome.ui b/examples/adw-1/adw1-demo/ui/welcome.ui
new file mode 100644
index 0000000..cf2f637
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/welcome.ui
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface><requires version="4.0" lib="gtk" /><requires version="1.0" lib="libadwaita" /><template class="AdwDemoPageWelcome" parent="AdwBin"><property name="child"><object class="AdwStatusPage"><property name="icon-name">org.gnome.Adwaita1.Demo-symbolic</property><property name="title" translatable="yes">Welcome to Adwaita Demo</property><property name="description" translatable="yes">This is a tour of the features the library has to offer.</property></object></property></template></interface>
diff --git a/examples/adw-1/adw1-demo/ui/window.scm b/examples/adw-1/adw1-demo/ui/window.scm
new file mode 100644
index 0000000..78d4508
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/window.scm
@@ -0,0 +1,213 @@
+;; -*- mode: sxml-ui; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(use-modules (g-golf support sxml))
+
+
+(define %primary-menu
+ '(menu (@ (id "primary-menu"))
+ (section
+ (item
+ (attribute (@ (name "label")
+ (translatable "yes")) _Inspector)
+ (attribute (@ (name "action")) app.inspector)))
+ (section
+ (item
+ (attribute (@ (name "label")
+ (translatable "yes")) _Preferences)
+ (attribute (@ (name "action")) app.preferences))
+ (item
+ (attribute (@ (name "label")
+ (translatable "yes")) _"About Adwaita Demo")
+ (attribute (@ (name "action")) app.about)))))
+
+(define %header-bar-1
+ '(object (@ (class "AdwHeaderBar"))
+ (property (@ (name "show-end-title-buttons")
+ (bind-source "main-leaflet")
+ (bind-property "folded")
+ (bind-flags "sync-create")))
+ (child (@ (type "start"))
+ (object (@ (class "GtkButton")
+ (id "color-scheme-button"))))
+ (child (@ (type "end"))
+ (object (@ (class "GtkMenuButton"))
+ (property (@ (name "menu-model")) primary-menu)
+ (property (@ (name "icon-name")) open-menu-symbolic)
+ (property (@ (name "primary")) True)))))
+
+(define %stack-sidebar
+ '(object (@ (class "GtkStackSidebar"))
+ (property (@ (name "width-request")) 270)
+ (property (@ (name "vexpand")) True)
+ (property (@ (name "stack")) stack)))
+
+(define %header-bar-2
+ '(object (@ (class "AdwHeaderBar"))
+ (property (@ (name "show-start-title-buttons")
+ (bind-source "main-leaflet")
+ (bind-property "folded")
+ (bind-flags "sync-create")))
+ (property (@ (name "title-widget"))
+ (object (@ (class "GtkBox"))))
+ (child (@ (type "start"))
+ (object (@ (class "GtkButton")
+ (id "main-go-previous"))
+ (property (@ (name "valign")) center)
+ (property (@ (name "tooltip-text")
+ (translatable "yes")) Back)
+ (property (@ (name "icon-name")) go-previous-symbolic)
+ (property (@ (name "visible")
+ (bind-source "main-leaflet")
+ (bind-property "folded")
+ (bind-flags "sync-create")))))))
+
+(define %welcome-page
+ '(object (@ (class "GtkStackPage"))
+ (property (@ (name "title")
+ (translatable "yes")) Welcome)
+ (property (@ (name "child"))
+ (object (@ (class "AdwDemoPageWelcome"))))))
+
+(define %leaflet-page
+ '(object (@ (class "GtkStackPage"))
+ (property (@ (name "title")
+ (translatable "yes")) Leaflet)
+ (property (@ (name "child"))
+ (object (@ (class "AdwDemoPageLeaflet")
+ (id "leaflet-page"))
+ ;; signal - next-page ...
+ ))))
+
+(define %stack
+ `(object (@ (class "GtkStack")
+ (id "stack"))
+ (property (@ (name "vexpand")) True)
+ (property (@ (name "vhomogeneous")) False)
+ ;; signal - notify::visible-child ...
+ (child ,%welcome-page)
+ (child ,%leaflet-page)))
+
+(define %main-leaflet
+ `(object (@ (class "AdwLeaflet")
+ (id "main-leaflet"))
+ (property (@ (name "can-navigate-back")) True)
+ (property (@ (name "transition-type")
+ (bind-source "leaflet-page")
+ (bind-property "transition-type")
+ (bind-flags "sync-create|bidirectional")))
+ (child
+ (object (@ (class "GtkBox"))
+ (property (@ (name "orientation")) vertical)
+ (child ,%header-bar-1)
+ (child ,%stack-sidebar)))
+ (child
+ (object (@ (class "AdwLeafletPage"))
+ (property (@ (name "navigatable")) False)
+ (property (@ (name "child"))
+ (object (@ (class "GtkSeparator"))))))
+ (child
+ (object (@ (class "GtkBox"))
+ (property (@ (name "orientation")) vertical)
+ (property (@ (name "hexpand")) True)
+ (child ,%header-bar-2)
+ (child ,%stack)))))
+
+(define %header-bar-3
+ '(object (@ (class "AdwHeaderBar"))
+ (property (@ (name "title-widget"))
+ (object (@ (class "GtkBox"))))
+ (child (@ (type "start"))
+ (object (@ (class "GtkButton")
+ (id "subpage-go-previous"))
+ (property (@ (name "valign")) center)
+ (property (@ (name "tooltip-text")
+ (translatable "yes")) Back)
+ (property (@ (name "icon-name")) go-previous-symbolic)
+ #;(property (@ (name "visible")
+ (bind-source "main-leaflet")
+ (bind-property "folded")
+ (bind-flags "sync-create")))))))
+
+(define %status-page
+ '(object (@ (class "AdwStatusPage"))
+ (property (@ (name "vexpand")) True)
+ (property (@ (name "title")
+ (translatable "yes")) Go Back)
+ (property (@ (name "child"))
+ (object (@ (class "GtkBox"))
+ (property (@ (name "orientation")) vertical)
+ (property (@ (name "halign")) center)
+ (property (@ (name "spacing")) 12)
+ (child
+ (object (@ (class "GtkImage"))
+ (property (@ (name "icon-name"))
+ gesture-touchscreen-swipe-back-symbolic)
+ (property (@ (name "pixel-size")) 128)
+ (style (class (@ (name "dim-label"))))))
+ (child
+ (object (@ (class "GtkImage"))
+ (property (@ (name "icon-name"))
+ gesture-touchpad-swipe-back-symbolic)
+ (property (@ (name "pixel-size")) 128)
+ (style (class (@ (name "dim-label"))))))))))
+
+(define %window
+ `(interface
+ (requires (@ (version "4.0") (lib "gtk")))
+ (requires (@ (version "1.0") (lib "libadwaita")))
+ ,%primary-menu
+ (template (@ (class "AdwDemoWindow")
+ (parent "AdwApplicationWindow"))
+ (property (@ (name "title")
+ (translatable "yes")) "Adwaita Demo")
+ (property (@ (name "default-width")) 800)
+ (property (@ (name "default-height")) 576)
+ (property (@ (name "content"))
+ (object (@ (class "AdwToastOverlay")
+ (id "toast-overlay"))
+ (property (@ (name "child"))
+ (object (@ (class "AdwLeaflet")
+ (id "subpage-leaflet"))
+ (property (@ (name "can-navigate-back")) True)
+ (property (@ (name "width-request")) 360)
+ (property (@ (name "can-unfold")) False)
+ (property (@ (name "transition-type")
+ (bind-source "leaflet-page")
+ (bind-property "transition-type")
+ (bind-flags "sync-create|bidirectional")))
+ (child ,%main-leaflet)
+ (child
+ (object (@ (class "GtkBox"))
+ (property (@ (name "orientation")) vertical)
+ (child ,%header-bar-3)
+ (child ,%status-page))))))))))
+
+
+(define (make-ui)
+ (sxml->ui %window))
diff --git a/examples/adw-1/adw1-demo/ui/window.ui b/examples/adw-1/adw1-demo/ui/window.ui
new file mode 100644
index 0000000..34eec8c
--- /dev/null
+++ b/examples/adw-1/adw1-demo/ui/window.ui
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface><requires version="4.0" lib="gtk" /><requires version="1.0" lib="libadwaita" /><menu id="primary-menu"><section><item><attribute name="label" translatable="yes">_Inspector</attribute><attribute name="action">app.inspector</attribute></item></section><section><item><attribute name="label" translatable="yes">_Preferences</attribute><attribute name="action">app.preferences</attribute></item><item><attribute name="label" translatable="yes">_About Adwaita Demo</attribute><attribute name="action">app.about</attribute></item></section></menu><template class="AdwDemoWindow" parent="AdwApplicationWindow"><property name="title" translatable="yes">Adwaita Demo</property><property name="default-width">800</property><property name="default-height">576</property><property name="content"><object class="AdwToastOverlay" id="toast-overlay"><property name="child"><object class="AdwLeaflet" id="subpage-leaflet"><property name="can-navigate-back">True</property><property name="width-request">360</property><property name="can-unfold">False</property><property name="transition-type" bind-source="leaflet-page" bind-property="transition-type" bind-flags="sync-create|bidirectional" /><child><object class="AdwLeaflet" id="main-leaflet"><property name="can-navigate-back">True</property><property name="transition-type" bind-source="leaflet-page" bind-property="transition-type" bind-flags="sync-create|bidirectional" /><child><object class="GtkBox"><property name="orientation">vertical</property><child><object class="AdwHeaderBar"><property name="show-end-title-buttons" bind-source="main-leaflet" bind-property="folded" bind-flags="sync-create" /><child type="start"><object class="GtkButton" id="color-scheme-button" /></child><child type="end"><object class="GtkMenuButton"><property name="menu-model">primary-menu</property><property name="icon-name">open-menu-symbolic</property><property name="primary">True</property></object></child></object></child><child><object class="GtkStackSidebar"><property name="width-request">270</property><property name="vexpand">True</property><property name="stack">stack</property></object></child></object></child><child><object class="AdwLeafletPage"><property name="navigatable">False</property><property name="child"><object class="GtkSeparator" /></property></object></child><child><object class="GtkBox"><property name="orientation">vertical</property><property name="hexpand">True</property><child><object class="AdwHeaderBar"><property name="show-start-title-buttons" bind-source="main-leaflet" bind-property="folded" bind-flags="sync-create" /><property name="title-widget"><object class="GtkBox" /></property><child type="start"><object class="GtkButton" id="main-go-previous"><property name="valign">center</property><property name="tooltip-text" translatable="yes">Back</property><property name="icon-name">go-previous-symbolic</property><property name="visible" bind-source="main-leaflet" bind-property="folded" bind-flags="sync-create" /></object></child></object></child><child><object class="GtkStack" id="stack"><property name="vexpand">True</property><property name="vhomogeneous">False</property><child><object class="GtkStackPage"><property name="title" translatable="yes">Welcome</property><property name="child"><object class="AdwDemoPageWelcome" /></property></object></child><child><object class="GtkStackPage"><property name="title" translatable="yes">Leaflet</property><property name="child"><object class="AdwDemoPageLeaflet" id="leaflet-page" /></property></object></child></object></child></object></child></object></child><child><object class="GtkBox"><property name="orientation">vertical</property><child><object class="AdwHeaderBar"><property name="title-widget"><object class="GtkBox" /></property><child type="start"><object class="GtkButton" id="subpage-go-previous"><property name="valign">center</property><property name="tooltip-text" translatable="yes">Back</property><property name="icon-name">go-previous-symbolic</property></object></child></object></child><child><object class="AdwStatusPage"><property name="vexpand">True</property><property name="title" translatable="yes">GoBack</property><property name="child"><object class="GtkBox"><property name="orientation">vertical</property><property name="halign">center</property><property name="spacing">12</property><child><object class="GtkImage"><property name="icon-name">gesture-touchscreen-swipe-back-symbolic</property><property name="pixel-size">128</property><style><class name="dim-label" /></style></object></child><child><object class="GtkImage"><property name="icon-name">gesture-touchpad-swipe-back-symbolic</property><property name="pixel-size">128</property><style><class name="dim-label" /></style></object></child></object></property></object></child></object></child></object></property></object></property></template></interface>
diff --git a/examples/adw-1/adw1-demo/welcome.scm b/examples/adw-1/adw1-demo/welcome.scm
new file mode 100644
index 0000000..ffde7b5
--- /dev/null
+++ b/examples/adw-1/adw1-demo/welcome.scm
@@ -0,0 +1,51 @@
+;; -*- mode: scheme; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(define-module (adw1-demo welcome)
+ #:use-module (oop goops)
+ #:use-module (g-golf)
+
+ #:duplicates (merge-generics
+ replace
+ warn-override-core
+ warn
+ last)
+
+ #:export (<adw-demo-page-welcome>))
+
+
+(eval-when (expand load eval)
+ (g-irepository-require "Adw" #:version "1")
+ (for-each (lambda (name)
+ (gi-import-by-name "Adw" name))
+ '("Bin")))
+
+
+(define-class <adw-demo-page-welcome> (<adw-bin>)
+ #:template (string-append (dirname (current-filename))
+ "/ui/welcome.ui"))
diff --git a/examples/adw-1/adw1-demo/window.scm b/examples/adw-1/adw1-demo/window.scm
new file mode 100644
index 0000000..c293dd0
--- /dev/null
+++ b/examples/adw-1/adw1-demo/window.scm
@@ -0,0 +1,256 @@
+;; -*- mode: scheme; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(define-module (adw1-demo window)
+ #:use-module (oop goops)
+ #:use-module (g-golf)
+
+ #:duplicates (merge-generics
+ replace
+ warn-override-core
+ warn
+ last)
+
+ #:export (<adw-demo-window>
+ show-window))
+
+
+(g-export !main-leaflet
+ !main-go-previous
+ !color-scheme-button
+ !stack
+ !leaflet-page
+ !subpage-leaflet
+ !subpage-go-previous)
+
+
+(use-modules (adw1-demo debug-info)
+ (adw1-demo preferences)
+ (adw1-demo welcome)
+ (adw1-demo leaflet))
+
+
+(eval-when (expand load eval)
+ (g-irepository-require "Gtk" #:version "4.0")
+ (for-each (lambda (name)
+ (gi-import-by-name "Gdk" name))
+ '("Display"))
+ (for-each (lambda (name)
+ (gi-import-by-name "Gtk" name))
+ '("License"
+ "Window"
+ "ClosureExpression"
+ "IconTheme"
+ "Stack"
+ "Button"))
+ (g-irepository-require "Adw" #:version "1")
+ (for-each (lambda (name)
+ (gi-import-by-name "Adw" name))
+ '("Application"
+ "ApplicationWindow"
+ "AboutWindow"
+ "StyleManager"
+ "ColorScheme"
+ "Leaflet"
+ "NavigationDirection")))
+
+
+(define-class <adw-demo-window> (<adw-application-window>)
+ ;; slots
+ (main-leaflet #:accessor !main-leaflet #:child-id "main-leaflet")
+ (main-go-previous #:accessor !main-go-previous #:child-id "main-go-previous")
+ (color-scheme-button #:accessor !color-scheme-button #:child-id "color-scheme-button")
+ (stack #:accessor !stack #:child-id "stack")
+ (leaflet-page #:accessor !leaflet-page #:child-id "leaflet-page")
+ (subpage-leaflet #:accessor !subpage-leaflet #:child-id "subpage-leaflet")
+ (subpage-go-previous #:accessor !subpage-go-previous #:child-id "subpage-go-previous")
+ ;; class options
+ #:template (string-append (dirname (current-filename))
+ "/ui/window.ui")
+ #:child-ids '("main-leaflet"
+ "main-go-previous"
+ "color-scheme-button"
+ "stack"
+ "leaflet-page"
+ "subpage-leaflet"
+ "subpage-go-previous"))
+
+(define (install-actions app)
+ (let ((a-inspector (make <g-simple-action> #:name "inspector"))
+ (a-preferences (make <g-simple-action> #:name "preferences"))
+ (a-about (make <g-simple-action> #:name "about")))
+
+ (add-action app a-inspector)
+ (connect a-inspector
+ 'activate
+ (lambda (s-action g-variant)
+ (gtk-window-set-interactive-debugging #t)))
+
+ (add-action app a-preferences)
+ (connect a-preferences
+ 'activate
+ (lambda (s-action g-variant)
+ (let ((window (get-active-window app))
+ (pref-win (make <adw-demo-preferences-window>)))
+ (set-transient-for pref-win window)
+ (present pref-win))))
+
+ (add-action app a-about)
+ (connect a-about
+ 'activate
+ (lambda (s-action g-variant)
+ (show-about app)))
+ ))
+
+(define %developers
+ '("Adrien Plazas"
+ "Alexander Mikhaylenko"
+ "Andrei Lișiță"
+ "Guido Günther"
+ "Jamie Murphy"
+ "Julian Sparber"
+ "Manuel Genovés"
+ "Zander Brown"))
+
+(define (show-about app)
+ (let ((about (make <adw-about-window>
+ #:transient-for (get-active-window app)
+ #:application-icon "org.gnome.Adwaita1.Demo"
+ #:application-name "Adwaita Demo"
+ #:developer-name "The GNOME Project"
+ #:version (adw-version)
+ #:website "https://gitlab.gnome.org/GNOME/libadwaita"
+ #:issue-url "https://gitlab.gnome.org/GNOME/libadwaita/-/issues/new"
+ #:debug-info (debug-info)
+ #:copyright "© 2017–2022 Purism SPC"
+ #:license-type 'lgpl-2-1
+ #:developers %developers
+ #:designers '("GNOME Design Team")
+ #:artists '("GNOME Design Team")
+ ;; #:translator-credits "translator-credits"
+ )))
+ (add-link about "_Documentation"
+ "https://gnome.pages.gitlab.gnome.org/libadwaita/doc/main/")
+ (add-link about "_Chat"
+ "https://matrix.to/#/#libadwaita:gnome.org")
+ (present about)))
+
+(define (show-window app)
+ (let* ((display (gdk-display-get-default))
+ (manager (adw-style-manager-get-default))
+ (icon-theme (gtk-icon-theme-get-for-display display)))
+ (add-search-path icon-theme (string-append (dirname (current-filename))
+ "/icons"))
+ (let* ((window (make <adw-demo-window>
+ #:application app))
+ (color-scheme-button (!color-scheme-button window))
+ (expression (make-expression 'string
+ (transform-to-closure)
+ '())))
+
+ (install-actions app)
+
+ (bind expression
+ color-scheme-button
+ "icon-name"
+ manager)
+
+ (connect color-scheme-button
+ 'clicked
+ (lambda (b)
+ (if (get-dark manager)
+ (set-color-scheme manager 'force-light)
+ (set-color-scheme manager 'force-dark))))
+
+ (connect manager
+ 'notify::system-supports-color-schemes
+ (lambda (manager p-spec)
+ (notify-system-supports-color-schemes-cb window manager)))
+ (notify-system-supports-color-schemes-cb window manager)
+
+ (connect-after (!stack window)
+ 'notify::visible-child
+ (lambda (s c)
+ ;; FIXME
+ ;; - the second arg
+ ;; g-closure-marshal-g-value-ref <- must be enhanced
+ ;; (dimfi s c (g-object-type-name c)
+ (notify-visible-child-cb window)))
+
+ (connect (!main-go-previous window)
+ 'clicked
+ (lambda (b)
+ (main-go-previous-cb window)))
+
+ (connect (!subpage-go-previous window)
+ 'clicked
+ (lambda (b)
+ (subpage-go-previous-cb window)))
+
+ (connect (!leaflet-page window)
+ 'next-page
+ (lambda (l)
+ (navigate (!subpage-leaflet window) 'forward)))
+
+ (present window))))
+
+(define (make-expression type closure flags)
+ (gtk-closure-expression-new (symbol->g-type type)
+ (!g-closure closure)
+ flags))
+
+(define (transform-to-closure)
+ (make <closure>
+ #:function manager-dark-transform-to
+ #:return-type 'string
+ #:param-types `(,<adw-style-manager>)))
+
+(define (manager-dark-transform-to manager)
+ (color-scheme-button-icon-name (!dark manager)))
+
+(define (color-scheme-button-icon-name dark?)
+ (if dark?
+ "dark-mode-symbolic"
+ "light-mode-symbolic"))
+
+(define* (notify-system-supports-color-schemes-cb window
+ #:optional manager)
+ (let* ((manager (or manager (adw-style-manager-get-default)))
+ (supports? (get-system-supports-color-schemes manager)))
+ (set-visible (!color-scheme-button window) (not supports?))
+ (when supports?
+ (set-color-scheme manager 'default))))
+
+(define (notify-visible-child-cb window)
+ (navigate (!main-leaflet window) 'forward))
+
+(define (main-go-previous-cb window)
+ (navigate (!main-leaflet window) 'back))
+
+(define (subpage-go-previous-cb window)
+ (navigate (!subpage-leaflet window) 'back))
diff --git a/examples/adw-1/hello-world.png b/examples/adw-1/hello-world.png
new file mode 100644
index 0000000..2ef0cfe
--- /dev/null
+++ b/examples/adw-1/hello-world.png
Binary files differ
diff --git a/examples/adw-1/hello-world.scm b/examples/adw-1/hello-world.scm
new file mode 100755
index 0000000..4e24877
--- /dev/null
+++ b/examples/adw-1/hello-world.scm
@@ -0,0 +1,89 @@
+#! /bin/sh
+# -*- mode: scheme; coding: utf-8 -*-
+exec guile -e main -s "$0" "$@"
+!#
+
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(eval-when (expand load eval)
+ (use-modules (oop goops))
+
+ (default-duplicate-binding-handler
+ '(merge-generics replace warn-override-core warn last))
+
+ (use-modules (g-golf))
+
+ (g-irepository-require "Gtk" #:version "4.0")
+ (for-each (lambda (name)
+ (gi-import-by-name "Adw" name))
+ '("Application"
+ "ApplicationWindow"))
+ (for-each (lambda (name)
+ (gi-import-by-name "Gtk" name))
+ '("ApplicationWindow"
+ "Box"
+ "Label"
+ "Button")))
+
+
+(define (activate app)
+ (let ((window (make <adw-application-window>
+ #:title "Hello"
+ #:default-width 320
+ #:default-height 240
+ #:application app))
+ (box (make <gtk-box>
+ #:margin-top 6
+ #:margin-start 6
+ #:margin-bottom 6
+ #:margin-end 6
+ #:orientation 'vertical))
+ (label (make <gtk-label>
+ #:label "Hello, World!"
+ #:hexpand #t
+ #:vexpand #t))
+ (button (make <gtk-button>
+ #:label "Close")))
+
+ (connect button
+ 'clicked
+ (lambda (b)
+ (close window)))
+
+ (set-content window box)
+ (append box label)
+ (append box button)
+ (present window)))
+
+
+(define (main args)
+ (let ((app (make <adw-application>
+ #:application-id "org.adw.example")))
+ (connect app 'activate activate)
+ (let ((status (g-application-run app args)))
+ (exit status))))
diff --git a/examples/gtk-4/animated-paintable.scm b/examples/gtk-4/animated-paintable.scm
index 67cb005..30bb245 100755
--- a/examples/gtk-4/animated-paintable.scm
+++ b/examples/gtk-4/animated-paintable.scm
@@ -137,7 +137,7 @@ exec guile -e main -s "$0" "$@"
(image (make <gtk-image>)))
(set-from-paintable image nuclear)
(set-child window image)
- (show window)))
+ (present window)))
(define (main args)
diff --git a/examples/gtk-4/clipboard.scm b/examples/gtk-4/clipboard.scm
index 614fd15..a7f0a64 100755
--- a/examples/gtk-4/clipboard.scm
+++ b/examples/gtk-4/clipboard.scm
@@ -154,7 +154,7 @@ exec guile -e main -s "$0" "$@"
(append box-2 copy-2)
(append box-2 image-to)
(append box-2 paste-2)
- (show window)))
+ (present window)))
(define (main args)
diff --git a/examples/gtk-4/css-basics.scm b/examples/gtk-4/css-basics.scm
index a53d976..0ed463b 100755
--- a/examples/gtk-4/css-basics.scm
+++ b/examples/gtk-4/css-basics.scm
@@ -89,7 +89,7 @@ exec guile -e main -s "$0" "$@"
(append box label)
(append box button)
(apply-css window css-provider)
- (show window)))
+ (present window)))
(define (main args)
diff --git a/examples/gtk-4/drawing-widget.scm b/examples/gtk-4/drawing-widget.scm
index 015c727..0c75954 100755
--- a/examples/gtk-4/drawing-widget.scm
+++ b/examples/gtk-4/drawing-widget.scm
@@ -80,7 +80,7 @@ exec guile -e main -s "$0" "$@"
#:application app))
(drawing-widget (make <drawing-widget>)))
(set-child window drawing-widget)
- (show window)))
+ (present window)))
(define (main args)
diff --git a/examples/gtk-4/hello-world.scm b/examples/gtk-4/hello-world.scm
index 70b5c55..fdc9537 100755
--- a/examples/gtk-4/hello-world.scm
+++ b/examples/gtk-4/hello-world.scm
@@ -75,7 +75,7 @@ exec guile -e main -s "$0" "$@"
(set-child window box)
(append box label)
(append box button)
- (show window)))
+ (present window)))
(define (main args)
diff --git a/examples/gtk-4/nuclear-icon.scm b/examples/gtk-4/nuclear-icon.scm
index 23d9a02..23d9a02 100755..100644
--- a/examples/gtk-4/nuclear-icon.scm
+++ b/examples/gtk-4/nuclear-icon.scm
diff --git a/examples/gtk-4/peg-solitaire.scm b/examples/gtk-4/peg-solitaire.scm
index c5943c2..c6a949c 100755
--- a/examples/gtk-4/peg-solitaire.scm
+++ b/examples/gtk-4/peg-solitaire.scm
@@ -57,7 +57,10 @@ exec guile -e main -s "$0" "$@"
"DragSource"
"DropTarget"
"MediaStream"
- "MediaFile")))
+ "MediaFile"
+ "get_major_version"
+ "get_minor_version"
+ "get_micro_version")))
(define-class <solitaire-peg> (<gobject> <gdk-paintable>)
@@ -234,6 +237,21 @@ exec guile -e main -s "$0" "$@"
(lambda (g-object property)
(unref g-object)))))
+;;;
+;;; Check version
+;;;
+
+(define (gtk-check-version major minor micro)
+ (let ((gtk-major (gtk-get-major-version))
+ (gtk-minor (gtk-get-minor-version))
+ (gtk-micro (gtk-get-micro-version)))
+ (or (> gtk-major major)
+ (and (= gtk-major major)
+ (> gtk-minor minor))
+ (and (= gtk-major major)
+ (= gtk-minor minor)
+ (>= gtk-micro micro)))))
+
;;;
;;; The game board
@@ -261,7 +279,12 @@ exec guile -e main -s "$0" "$@"
#:row-spacing 6
#:row-homogeneous #t))
(css-provider (let ((provider (make <gtk-css-provider>)))
- (gtk-css-provider-load-from-data provider %css-data)
+ (cond ((gtk-check-version 4 10 0)
+ (gtk-css-provider-load-from-data provider
+ %css-data
+ (string-length %css-data)))
+ (else
+ (gtk-css-provider-load-from-data provider %css-data)))
provider)))
(set-child window grid)
(do ((i 0
@@ -315,7 +338,7 @@ exec guile -e main -s "$0" "$@"
(set-titlebar window header-bar)
(pack-start header-bar restart)
(create-board window)
- (show window)))
+ (present window)))
(define (main args)
diff --git a/examples/gtk-4/revealer.scm b/examples/gtk-4/revealer.scm
index 7a12ed8..4ecce23 100755
--- a/examples/gtk-4/revealer.scm
+++ b/examples/gtk-4/revealer.scm
@@ -77,9 +77,9 @@ exec guile -e main -s "$0" "$@"
((0)
(error "<gtk-builder> - add-from-file failed: " ui))
(else
- (letrec* ((window (get-object builder "window"))
- (revealers (get-revealers builder))
- (count 0))
+ (let ((window (get-object builder "window"))
+ (revealers (get-revealers builder))
+ (count 0))
(g-timeout-add 690
(lambda ()
(let ((revealer (list-ref revealers count)))
@@ -93,7 +93,7 @@ exec guile -e main -s "$0" "$@"
#f
#t))))
(add-window app window)
- (show window))))))
+ (present window))))))
(define (main args)
(let ((app (make <gtk-application>
diff --git a/examples/gtk-4/search-bar.scm b/examples/gtk-4/search-bar.scm
index 1d746c0..9a653c0 100755
--- a/examples/gtk-4/search-bar.scm
+++ b/examples/gtk-4/search-bar.scm
@@ -101,7 +101,7 @@ exec guile -e main -s "$0" "$@"
(set-child search-bar search-entry)
(append box search-bar)
(append box label)
- (show window)))
+ (present window)))
(define (main args)
diff --git a/examples/gtk-4/simple-paintable.scm b/examples/gtk-4/simple-paintable.scm
index 314b61b..befc933 100755
--- a/examples/gtk-4/simple-paintable.scm
+++ b/examples/gtk-4/simple-paintable.scm
@@ -79,7 +79,7 @@ exec guile -e main -s "$0" "$@"
(image (make <gtk-image>)))
(set-from-paintable image nuclear)
(set-child window image)
- (show window)))
+ (present window)))
(define (main args)
diff --git a/g-golf.scm b/g-golf.scm
index 21fae09..23acb3d 100644
--- a/g-golf.scm
+++ b/g-golf.scm
@@ -58,7 +58,9 @@
#:use-module (g-golf support union)
#:use-module (g-golf support bytevector)
#:use-module (g-golf support ffi)
+ #:use-module (g-golf support sxml)
#:use-module (g-golf init)
+ #:use-module (g-golf glib version-information)
#:use-module (g-golf glib mem-alloc)
#:use-module (g-golf glib main-event-loop)
#:use-module (g-golf glib io-channels)
@@ -66,6 +68,7 @@
#:use-module (g-golf glib unix-utils)
#:use-module (g-golf glib glist)
#:use-module (g-golf glib gslist)
+ #:use-module (g-golf glib byte-arrays)
#:use-module (g-golf glib quarks)
#:use-module (g-golf gobject type-info)
#:use-module (g-golf gobject gobject)
@@ -103,6 +106,7 @@
#:use-module (g-golf gdk events)
#:use-module (g-golf hl-api n-decl)
#:use-module (g-golf hl-api gtype)
+ #:use-module (g-golf hl-api gparam)
#:use-module (g-golf hl-api iface)
#:use-module (g-golf hl-api gobject)
#:use-module (g-golf hl-api events)
@@ -158,7 +162,9 @@
(g-golf support union)
(g-golf support bytevector)
(g-golf support ffi)
+ (g-golf support sxml)
(g-golf init)
+ (g-golf glib version-information)
(g-golf glib mem-alloc)
(g-golf glib main-event-loop)
(g-golf glib io-channels)
@@ -166,6 +172,7 @@
(g-golf glib unix-utils)
(g-golf glib glist)
(g-golf glib gslist)
+ (g-golf glib byte-arrays)
(g-golf glib quarks)
(g-golf gobject type-info)
(g-golf gobject gobject)
@@ -203,6 +210,7 @@
(g-golf gdk events)
(g-golf hl-api n-decl)
(g-golf hl-api gtype)
+ (g-golf hl-api gparam)
(g-golf hl-api iface)
(g-golf hl-api gobject)
(g-golf hl-api events)
diff --git a/g-golf/gi/cache-others.scm b/g-golf/gi/cache-others.scm
index 5ea2048..dc17cca 100644
--- a/g-golf/gi/cache-others.scm
+++ b/g-golf/gi/cache-others.scm
@@ -39,6 +39,20 @@
g-inst-cache-remove!
g-inst-cache-show
+ ;; g-type cache
+ %g-type-cache
+ g-type-cache-ref
+ g-type-cache-set!
+ g-type-cache-remove!
+ g-type-cache-show
+
+ ;; class cache
+ %g-class-cache
+ g-class-cache-ref
+ g-class-cache-set!
+ g-class-cache-remove!
+ g-class-cache-show
+
;; boxed sa - scheme allocated - cache
%g-boxed-sa-cache
g-boxed-sa-cache-ref
@@ -120,7 +134,87 @@
;;;
-;;; The g-boxed(instance) scheme allocated cache
+;;; The g-type cache
+;;;
+
+
+(define %g-type-cache #f)
+(define g-type-cache-ref #f)
+(define g-type-cache-set! #f)
+(define g-type-cache-remove! #f)
+(define g-type-cache-show #f)
+
+(eval-when (expand load eval)
+ (let* ((%g-type-cache-default-size 1013)
+ (g-type-cache
+ (make-hash-table %g-type-cache-default-size)))
+
+ (set! %g-type-cache
+ (lambda () g-type-cache))
+
+ (set! g-type-cache-ref
+ (lambda (g-type)
+ (hashq-ref g-type-cache g-type)))
+
+ (set! g-type-cache-set!
+ (lambda (g-type class)
+ (hashq-set! g-type-cache g-type class)))
+
+ (set! g-type-cache-remove!
+ (lambda (g-type)
+ (hashq-remove! g-type-cache g-type)))
+
+ (set! g-type-cache-show
+ (lambda ()
+ (hash-for-each (lambda (key value)
+ (%dimfi key value))
+ g-type-cache)))))
+
+
+;;;
+;;; The g-class cache
+;;;
+
+
+(define %g-class-cache #f)
+(define g-class-cache-ref #f)
+(define g-class-cache-set! #f)
+(define g-class-cache-remove! #f)
+(define g-class-cache-show #f)
+
+(eval-when (expand load eval)
+ (let* ((%g-class-cache-default-size 1013)
+ (g-class-cache
+ (make-hash-table %g-class-cache-default-size)))
+
+ (set! %g-class-cache
+ (lambda () g-class-cache))
+
+ (set! g-class-cache-ref
+ (lambda (g-class)
+ (hashq-ref g-class-cache
+ (pointer-address g-class))))
+
+ (set! g-class-cache-set!
+ (lambda (g-class class)
+ (hashq-set! g-class-cache
+ (pointer-address g-class)
+ class)))
+
+ (set! g-class-cache-remove!
+ (lambda (g-class)
+ (hashq-remove! g-class-cache
+ (pointer-address g-class))))
+
+ (set! g-class-cache-show
+ (lambda ()
+ (hash-for-each (lambda (key value)
+ (%dimfi key value))
+ g-class-cache)))))
+
+
+;;;
+;;; The g-boxed(classance) scheme allocated cache
;;;
(define %dimfi
diff --git a/g-golf/gi/object-info.scm b/g-golf/gi/object-info.scm
index 05d33c7..ea76680 100644
--- a/g-golf/gi/object-info.scm
+++ b/g-golf/gi/object-info.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2016, 2021
+;;;; Copyright (C) 2016, 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -76,7 +76,11 @@
g-object-info-get-n-vfuncs
g-object-info-get-vfunc
g-object-info-find-vfunc
- g-object-info-get-class-struct))
+ g-object-info-get-class-struct
+ g-object-info-get-set-value-function
+ g-object-info-get-set-value-function-pointer
+ g-object-info-get-get-value-function
+ g-object-info-get-get-value-function-pointer))
;;;
@@ -111,6 +115,8 @@
n-properties: ~A
n-signals: ~A
n-vfuncts: ~A
+ set-value-function: ~A
+ get-value-function: ~A
")
@@ -147,7 +153,9 @@
(g-object-info-get-n-methods info)
(g-object-info-get-n-properties info)
(g-object-info-get-n-signals info)
- (g-object-info-get-n-vfuncs info)))
+ (g-object-info-get-n-vfuncs info)
+ (g-object-info-get-set-value-function info)
+ (g-object-info-get-get-value-function info)))
(gi-object-show-methods info port)
(values)))
@@ -330,6 +338,22 @@
#f
pointer)))
+(define (g-object-info-get-set-value-function info)
+ (gi->scm (g_object_info_get_set_value_function info)
+ 'string))
+
+(define (g-object-info-get-set-value-function-pointer info)
+ (gi->scm (g_object_info_get_set_value_function_pointer info)
+ 'pointer))
+
+(define (g-object-info-get-get-value-function info)
+ (gi->scm (g_object_info_get_get_value_function info)
+ 'string))
+
+(define (g-object-info-get-get-value-function-pointer info)
+ (gi->scm (g_object_info_get_get_value_function_pointer info)
+ 'pointer))
+
;;;
;;; GI Bindings
@@ -466,3 +490,27 @@
(dynamic-func "g_object_info_get_class_struct"
%libgirepository)
(list '*)))
+
+(define g_object_info_get_set_value_function
+ (pointer->procedure '*
+ (dynamic-func "g_object_info_get_set_value_function"
+ %libgirepository)
+ (list '*)))
+
+(define g_object_info_get_set_value_function_pointer
+ (pointer->procedure '*
+ (dynamic-func "g_object_info_get_set_value_function_pointer"
+ %libgirepository)
+ (list '*)))
+
+(define g_object_info_get_get_value_function
+ (pointer->procedure '*
+ (dynamic-func "g_object_info_get_get_value_function"
+ %libgirepository)
+ (list '*)))
+
+(define g_object_info_get_get_value_function_pointer
+ (pointer->procedure '*
+ (dynamic-func "g_object_info_get_get_value_function_pointer"
+ %libgirepository)
+ (list '*)))
diff --git a/g-golf/gi/utils.scm b/g-golf/gi/utils.scm
index 9184e38..cee0cc0 100644
--- a/g-golf/gi/utils.scm
+++ b/g-golf/gi/utils.scm
@@ -76,7 +76,8 @@
scm->gi-pointers
#;scm->gi-glist
scm->gi-gslist
- scm->gi-n-gtype))
+ scm->gi-n-gtype
+ scm->gi-gtypes))
(define %gi-pointer-size (sizeof '*))
diff --git a/g-golf/glib.scm b/g-golf/glib.scm
index 7f19137..2e9eb3e 100644
--- a/g-golf/glib.scm
+++ b/g-golf/glib.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2016 - 2020
+;;;; Copyright (C) 2016 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -45,6 +45,7 @@
#:use-module (g-golf support utils)
#:use-module (g-golf support enum)
#:use-module (g-golf init)
+ #:use-module (g-golf glib version-information)
#:use-module (g-golf glib mem-alloc)
#:use-module (g-golf glib main-event-loop)
#:use-module (g-golf glib io-channels)
@@ -52,6 +53,7 @@
#:use-module (g-golf glib unix-utils)
#:use-module (g-golf glib glist)
#:use-module (g-golf glib gslist)
+ #:use-module (g-golf glib byte-arrays)
#:use-module (g-golf glib quarks)
@@ -72,6 +74,7 @@
(g-golf support utils)
(g-golf support enum)
(g-golf init)
+ (g-golf glib version-information)
(g-golf glib mem-alloc)
(g-golf glib main-event-loop)
(g-golf glib io-channels)
@@ -79,4 +82,5 @@
(g-golf glib unix-utils)
(g-golf glib glist)
(g-golf glib gslist)
+ (g-golf glib byte-arrays)
(g-golf glib quarks)))
diff --git a/g-golf/glib/byte-arrays.scm b/g-golf/glib/byte-arrays.scm
new file mode 100644
index 0000000..b41c4cc
--- /dev/null
+++ b/g-golf/glib/byte-arrays.scm
@@ -0,0 +1,57 @@
+;; -*- mode: scheme; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(define-module (g-golf glib byte-arrays)
+ #:use-module (ice-9 match)
+ #:use-module (system foreign)
+ #:use-module (g-golf gi utils)
+ #:use-module (g-golf init)
+
+ #:export (g-bytes-new))
+
+
+;;;
+;;; Glib Low level API
+;;;
+
+(define (g-bytes-new data size)
+ (gi->scm (g_bytes_new (scm->gi data 'pointer)
+ size)
+ 'pointer))
+
+
+;;;
+;;; Glib Bindings
+;;;
+
+(define g_bytes_new
+ (pointer->procedure '*
+ (dynamic-func "g_bytes_new"
+ %libglib)
+ (list '* ;; data
+ size_t))) ;; size
diff --git a/g-golf/glib/misc-util-funcs.scm b/g-golf/glib/misc-util-funcs.scm
index bdb282c..2161c8b 100644
--- a/g-golf/glib/misc-util-funcs.scm
+++ b/g-golf/glib/misc-util-funcs.scm
@@ -34,7 +34,8 @@
#:export (g-get-prgname
g-set-prgname
g-get-system-data-dirs
- g-get-system-config-dirs))
+ g-get-system-config-dirs
+ g-get-os-info))
;;;
@@ -53,6 +54,10 @@
(define (g-get-system-config-dirs)
(gi->scm (g_get_system_config_dirs) 'strings))
+(define (g-get-os-info key-name)
+ (gi->scm (g_get_os_info (string->pointer key-name))
+ 'string))
+
;;;
;;; Glib Bindings
@@ -81,3 +86,9 @@
(dynamic-func "g_get_system_config_dirs"
%libglib)
(list ))) ;; void
+
+(define g_get_os_info
+ (pointer->procedure '*
+ (dynamic-func "g_get_os_info"
+ %libglib)
+ (list '*))) ;; key-name
diff --git a/g-golf/glib/version-information.scm b/g-golf/glib/version-information.scm
new file mode 100644
index 0000000..910da77
--- /dev/null
+++ b/g-golf/glib/version-information.scm
@@ -0,0 +1,75 @@
+;; -*- mode: scheme; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(define-module (g-golf glib version-information)
+ #:use-module (ice-9 match)
+ #:use-module (system foreign)
+ #:use-module (srfi srfi-4)
+ #:use-module (g-golf gi utils)
+ #:use-module (g-golf init)
+
+ #:export (glib-get-major-version
+ glib-get-minor-version
+ glib-get-micro-version))
+
+
+;;;
+;;;
+;;;
+
+(define (glib-get-major-version)
+ (let* ((bv-ptr (glib_major_version_ptr))
+ (bv (pointer->bytevector bv-ptr (sizeof uint32))))
+ (u32vector-ref bv 0)))
+
+(define (glib-get-minor-version)
+ (let* ((bv-ptr (glib_minor_version_ptr))
+ (bv (pointer->bytevector bv-ptr (sizeof uint32))))
+ (u32vector-ref bv 0)))
+
+(define (glib-get-micro-version)
+ (let* ((bv-ptr (glib_micro_version_ptr))
+ (bv (pointer->bytevector bv-ptr (sizeof uint32))))
+ (u32vector-ref bv 0)))
+
+
+;;;
+;;; Glib Bindings
+;;;
+
+(define (glib_major_version_ptr)
+ (dynamic-pointer "glib_major_version"
+ (dynamic-link "libglib-2.0")))
+
+(define (glib_minor_version_ptr)
+ (dynamic-pointer "glib_minor_version"
+ (dynamic-link "libglib-2.0")))
+
+(define (glib_micro_version_ptr)
+ (dynamic-pointer "glib_micro_version"
+ (dynamic-link "libglib-2.0")))
diff --git a/g-golf/gobject/gobject.scm b/g-golf/gobject/gobject.scm
index 01fedf6..9487985 100644
--- a/g-golf/gobject/gobject.scm
+++ b/g-golf/gobject/gobject.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2016 - 2022
+;;;; Copyright (C) 2016 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -43,7 +43,8 @@
warn
last)
- #:export (g-object-class-find-property
+ #:export (g-object-class-install-property
+ g-object-class-find-property
g-object-new
g-object-new-with-properties
g-object-ref
@@ -55,14 +56,17 @@
g-object-remove-toggle-ref
g-object-type ;; from libg-golf
g-object-type-name ;; from libg-golf
- g-object-get-property ;; from libg-golf
- g-object-set-property)) ;; from libg-golf
+ g-object-get-property
+ g-object-set-property))
;;;
;;; GObject Low level API
;;;
+(define (g-object-class-install-property g-class p-id p-spec)
+ (g_object_class_install_property g-class p-id p-spec))
+
(define (g-object-class-find-property g-class property-name)
(gi->scm (g_object_class_find_property g-class
(string->pointer property-name))
@@ -104,6 +108,7 @@
(define (g-object-type object)
(g_object_type object))
+;; from libg-golf
(define (g-object-type-name object)
(g-type-name (g-object-type object)))
@@ -122,6 +127,14 @@
;;; GObject Bindings
;;;
+(define g_object_class_install_property
+ (pointer->procedure void
+ (dynamic-func "g_object_class_install_property"
+ %libgobject)
+ (list '* ;; g-class
+ unsigned-int ;; p-id
+ '*))) ;; p-spec
+
(define g_object_class_find_property
(pointer->procedure '*
(dynamic-func "g_object_class_find_property"
diff --git a/g-golf/gobject/params-vals.scm b/g-golf/gobject/params-vals.scm
index 9bcde71..2fdf6cd 100644
--- a/g-golf/gobject/params-vals.scm
+++ b/g-golf/gobject/params-vals.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2016 - 2022
+;;;; Copyright (C) 2016 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -38,6 +38,7 @@
#:use-module (g-golf support struct)
#:use-module (g-golf support union)
#:use-module (g-golf support utils)
+ #:use-module (g-golf support libg-golf)
#:use-module (g-golf gi cache-gi)
#:use-module (g-golf gi utils)
#:use-module (g-golf gobject type-info)
@@ -55,6 +56,7 @@
g-value-type-name
g-value-ref
g-value-set!
+ g-param-spec-int
g-value-get-int
g-value-set-int
g-value-get-uint
@@ -65,6 +67,7 @@
g-value-set-float
g-value-get-double
g-value-set-double
+ g-param-spec-enum
g-value-get-enum
g-value-get-flags
g-value-get-string
@@ -77,7 +80,31 @@
g-value-set-pointer
g-value-get-object
g-value-set-object
- g-value-get-variant))
+ g-value-get-variant
+
+ ;; Type and Values
+ g-type-param-boolean
+ g-type-param-char
+ g-type-param-uchar
+ g-type-param-int
+ g-type-param-uint
+ g-type-param-long
+ g-type-param-ulong
+ g-type-param-int64
+ g-type-param-uint64
+ g-type-param-float
+ g-type-param-double
+ g-type-param-enum
+ g-type-param-flags
+ g-type-param-string
+ g-type-param-param
+ g-type-param-boxed
+ g-type-param-pointer
+ g-type-param-object
+ g-type-param-unichar
+ g-type-param-override
+ g-type-param-gtype
+ g-type-param-variant))
(g-export g-value-set-enum
@@ -181,6 +208,24 @@
(g_value_set_boolean g-value
(if bool 1 0)))
+(define (g-param-spec-int name nick blurb minimum maximum default flags)
+ (let* ((nick (or nick name))
+ (blurb (or blurb nick))
+ (minimum (or minimum -2147483648)) ;; FIXME import G_MININT
+ (maximum (or maximum 2147483647)) ;; FIXME import G_MAXINT
+ (default (or default 0))
+ (flags (or flags '(readable writable)))
+ (g-param-flags
+ (@ (g-golf gobject param-spec) %g-param-flags)))
+ (gi->scm (g_param_spec_int (string->pointer name)
+ (string->pointer nick)
+ (string->pointer blurb)
+ minimum
+ maximum
+ default
+ (flags->integer g-param-flags flags))
+ 'pointer)))
+
(define (g-value-get-int g-value)
(g_value_get_int g-value))
@@ -205,6 +250,24 @@
(define (g-value-set-double g-value double)
(g_value_set_double g-value double))
+(define (g-param-spec-enum name nick blurb type default flags)
+ (let* ((nick (or nick name))
+ (blurb (or blurb nick))
+ (g-type (!g-type type))
+ (default (if default
+ (enum->value type default)
+ 0))
+ (flags (or flags '(readable writable)))
+ (g-param-flags
+ (@ (g-golf gobject param-spec) %g-param-flags)))
+ (gi->scm (g_param_spec_enum (string->pointer name)
+ (string->pointer nick)
+ (string->pointer blurb)
+ g-type
+ default
+ (flags->integer g-param-flags flags))
+ 'pointer)))
+
(define (g-value-get-gi-enum g-value)
(let* ((g-name (g-value-type-name g-value))
(name (g-name->name g-name)))
@@ -368,18 +431,17 @@
(list '*
int)))
-(define g_value_get_uint
- (pointer->procedure unsigned-int
- (dynamic-func "g_value_get_uint"
- %libgobject)
- (list '*)))
-
-(define g_value_set_uint
- (pointer->procedure void
- (dynamic-func "g_value_set_uint"
+(define g_param_spec_int
+ (pointer->procedure '*
+ (dynamic-func "g_param_spec_int"
%libgobject)
- (list '*
- unsigned-int)))
+ (list '* ;; name
+ '* ;; nick
+ '* ;; blurb
+ int ;; minimum
+ int ;; maximum
+ int ;; default-value
+ unsigned-int))) ;; flags
(define g_value_get_int
(pointer->procedure int
@@ -394,6 +456,19 @@
(list '*
int)))
+(define g_value_get_uint
+ (pointer->procedure unsigned-int
+ (dynamic-func "g_value_get_uint"
+ %libgobject)
+ (list '*)))
+
+(define g_value_set_uint
+ (pointer->procedure void
+ (dynamic-func "g_value_set_uint"
+ %libgobject)
+ (list '*
+ unsigned-int)))
+
(define g_value_get_float
(pointer->procedure float
(dynamic-func "g_value_get_float"
@@ -420,6 +495,17 @@
(list '*
double)))
+(define g_param_spec_enum
+ (pointer->procedure '*
+ (dynamic-func "g_param_spec_enum"
+ %libgobject)
+ (list '* ;; name
+ '* ;; nick
+ '* ;; blurb
+ size_t ;; g-type
+ int ;; default-value
+ unsigned-int))) ;; flags
+
(define g_value_get_enum
(pointer->procedure int
(dynamic-func "g_value_get_enum"
@@ -516,3 +602,31 @@
(dynamic-func "g_value_get_variant"
%libgobject)
(list '*)))
+
+
+;;;
+;;; From libg-golf
+;;;
+
+(define g-type-param-boolean g_type_param_boolean)
+(define g-type-param-char g_type_param_char)
+(define g-type-param-uchar g_type_param_uchar)
+(define g-type-param-int g_type_param_int)
+(define g-type-param-uint g_type_param_uint)
+(define g-type-param-long g_type_param_long)
+(define g-type-param-ulong g_type_param_ulong)
+(define g-type-param-int64 g_type_param_int64)
+(define g-type-param-uint64 g_type_param_uint64)
+(define g-type-param-float g_type_param_float)
+(define g-type-param-double g_type_param_double)
+(define g-type-param-enum g_type_param_enum)
+(define g-type-param-flags g_type_param_flags)
+(define g-type-param-string g_type_param_string)
+(define g-type-param-param g_type_param_param)
+(define g-type-param-boxed g_type_param_boxed)
+(define g-type-param-pointer g_type_param_pointer)
+(define g-type-param-object g_type_param_object)
+(define g-type-param-unichar g_type_param_unichar)
+(define g-type-param-override g_type_param_override)
+(define g-type-param-gtype g_type_param_gtype)
+(define g-type-param-variant g_type_param_variant)
diff --git a/g-golf/gobject/signals.scm b/g-golf/gobject/signals.scm
index e6bdc1c..7249963 100644
--- a/g-golf/gobject/signals.scm
+++ b/g-golf/gobject/signals.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2019 - 2021
+;;;; Copyright (C) 2019 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -29,6 +29,7 @@
(define-module (g-golf gobject signals)
#:use-module (rnrs bytevectors)
#:use-module (ice-9 match)
+ #:use-module (ice-9 format)
#:use-module (oop goops)
#:use-module (system foreign)
#:use-module (srfi srfi-4)
@@ -48,9 +49,11 @@
warn
last)
- #:export (g-signal-query
+ #:export (g-signal-newv
+ g-signal-query
g-signal-lookup
g-signal-list-ids
+ g-signal-emitv
g-signal-connect-closure-by-id
g-signal-parse-name
@@ -84,6 +87,85 @@
0
%null-pointer)))
+(define %g-signal-newv-args-fmt
+ "
+ g_signal_newv
+ name: ~S
+ iface-type: ~A
+ flags: ~A
+ class-closure: ~A
+ accumulator: ~A
+ accu-data: ~A
+ c-marshaller: ~A
+ return-type: ~A
+ n-param: ~A
+ param-types: ~A
+
+")
+
+(define* (show-g-signal-newv name
+ iface-type
+ flags
+ class-closure
+ accumulator
+ accu-data
+ c-marshaller
+ return-type
+ n-param
+ param-types
+ #:optional (port (current-output-port)))
+ (format port "~?" %g-signal-newv-args-fmt
+ (list name
+ iface-type
+ flags
+ class-closure
+ accumulator
+ accu-data
+ c-marshaller
+ return-type
+ n-param
+ param-types)))
+
+(define (g-signal-newv name
+ iface-type
+ flags
+ class-closure
+ accumulator
+ accu-data
+ c-marshaller
+ return-type
+ n-param
+ param-types)
+ (let* ((%scm->g-type (@ (g-golf hl-api utils) scm->g-type))
+ (name (if (symbol? name) (symbol->string name) name))
+ (flags (flags->integer %g-signal-flags flags))
+ (class-closure (scm->gi class-closure 'pointer))
+ (accumulator (scm->gi accumulator 'pointer))
+ (accu-data (scm->gi accu-data 'pointer))
+ (c-marshaller (scm->gi c-marshaller 'pointer))
+ (return-type (%scm->g-type return-type))
+ (param-types (scm->gi (map %scm->g-type param-types) 'gtypes)))
+ #;(show-g-signal-newv name
+ iface-type
+ flags
+ class-closure
+ accumulator
+ accu-data
+ c-marshaller
+ return-type
+ n-param
+ param-types)
+ (g_signal_newv (scm->gi name 'string)
+ iface-type
+ flags
+ class-closure
+ accumulator
+ accu-data
+ c-marshaller
+ return-type
+ n-param
+ param-types)))
+
(define (g-signal-query id)
(let ((gsq (g-signal-query-new)))
(g_signal_query id gsq)
@@ -98,6 +180,15 @@
n-param
(decode-param-types n-param param-types))))))
+(define (g-signal-lookup name g-type)
+ (let ((gsl (g_signal_lookup (scm->gi name 'string)
+ g-type)))
+ (case gsl
+ ((0)
+ #f)
+ (else
+ gsl))))
+
(define (g-signal-list-ids g-type)
(let* ((s-uint (sizeof unsigned-int))
(n-id-bv (make-bytevector s-uint 0))
@@ -110,14 +201,9 @@
(g-free ids)
results))
-(define (g-signal-lookup name g-type)
- (let ((gsl (g_signal_lookup (scm->gi name 'string)
- g-type)))
- (case gsl
- ((0)
- #f)
- (else
- gsl))))
+(define (g-signal-emitv params id detail return-value)
+ (g_signal_emitv params id detail
+ (scm->gi return-value 'pointer)))
(define (g-signal-connect-closure-by-id g-inst
signal-id detail closure after?)
@@ -168,6 +254,21 @@
;;; Signals Bindings
;;;
+(define g_signal_newv
+ (pointer->procedure unsigned-int
+ (dynamic-func "g_signal_newv"
+ %libgobject)
+ (list '* ;; name
+ size_t ;; iface-type
+ unsigned-int ;; flags
+ '* ;; class-closure
+ '* ;; accumulator
+ '* ;; accu-data
+ '* ;; c-marshaller
+ size_t ;; return-type
+ unsigned-int ;; n-param
+ '*))) ;; param-types
+
(define g_signal_query
(pointer->procedure void
(dynamic-func "g_signal_query"
@@ -189,6 +290,15 @@
(list size_t ;; g-type
'*))) ;; n-id (pointer to guint)
+(define g_signal_emitv
+ (pointer->procedure void
+ (dynamic-func "g_signal_emitv"
+ %libgobject)
+ (list '* ;; params
+ unsigned-int ;; id
+ uint32 ;; detail
+ '*))) ;; return-value
+
(define g_signal_connect_closure_by_id
(pointer->procedure unsigned-long
(dynamic-func "g_signal_connect_closure_by_id"
diff --git a/g-golf/gobject/type-info.scm b/g-golf/gobject/type-info.scm
index c579d4a..c07a319 100644
--- a/g-golf/gobject/type-info.scm
+++ b/g-golf/gobject/type-info.scm
@@ -33,6 +33,8 @@
#:use-module (system foreign)
#:use-module (rnrs arithmetic bitwise)
#:use-module (g-golf init)
+ #:use-module (g-golf support utils)
+ #:use-module (g-golf support libg-golf)
#:use-module (g-golf support flags)
#:use-module (g-golf support bytevector)
#:use-module (g-golf glib mem-alloc)
@@ -50,6 +52,8 @@
#:export (g-type->symbol
symbol->g-type
+ g-type-from-class ;; from libg-golf
+
g-type-name
g-type-from-name
g-type-parent
@@ -99,6 +103,11 @@
%g-type-fundamental-shift))))
+;; from libg-golf
+(define (g-type-from-class g-class)
+ (g_type_from_class g-class))
+
+
;;;
;;; GObject Low level API
;;;
@@ -327,7 +336,7 @@
'* ;; class-init (func)
unsigned-int ;; instance-size
'* ;; instance-init (func)
- int))) ;; flags
+ unsigned-int))) ;; flags
(define g_type_add_interface_static
(pointer->procedure void
diff --git a/g-golf/hl-api.scm b/g-golf/hl-api.scm
index 62bc338..bae8a22 100644
--- a/g-golf/hl-api.scm
+++ b/g-golf/hl-api.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2018 - 2022
+;;;; Copyright (C) 2018 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -33,6 +33,7 @@
#:use-module (g-golf support goops)
#:use-module (g-golf hl-api n-decl)
#:use-module (g-golf hl-api gtype)
+ #:use-module (g-golf hl-api gparam)
#:use-module (g-golf hl-api iface)
#:use-module (g-golf hl-api gobject)
#:use-module (g-golf hl-api events)
@@ -61,6 +62,7 @@
(g-golf support goops)
(g-golf hl-api n-decl)
(g-golf hl-api gtype)
+ (g-golf hl-api gparam)
(g-golf hl-api iface)
(g-golf hl-api gobject)
(g-golf hl-api events)
diff --git a/g-golf/hl-api/callable.scm b/g-golf/hl-api/callable.scm
index 3f4887d..b58003a 100644
--- a/g-golf/hl-api/callable.scm
+++ b/g-golf/hl-api/callable.scm
@@ -723,7 +723,10 @@
#:args-out args-out)))
(define* (gi-argument->scm type-tag type-desc gi-argument clb/arg
- #:key (forced-type #f) (is-pointer? #f) (args-out #f))
+ #:key (forced-type #f)
+ (is-pointer? #f)
+ (args-out #f)
+ (g-value-ptr? #f))
;; forced-type is only used for 'inout and 'out arguments, in which
;; case it is 'pointer - see 'simple' types below.
@@ -762,7 +765,9 @@
gi-arg-val)))
(case name
((g-value)
- (g-value-ref foreign))
+ (if g-value-ptr?
+ foreign
+ (g-value-ref foreign)))
(else
(if (or (!is-opaque? gi-type)
(!is-semi-opaque? gi-type))
diff --git a/g-golf/hl-api/callback.scm b/g-golf/hl-api/callback.scm
index 273ecb1..c4826bb 100644
--- a/g-golf/hl-api/callback.scm
+++ b/g-golf/hl-api/callback.scm
@@ -150,6 +150,14 @@
(g-callable-info-prepare-closure
info ffi-cif ffi-closure-callback user-data)))
+(define (preserve-g-value-ptr? callback)
+ (case (!name callback)
+ ((get-property
+ set-property)
+ #t)
+ (else
+ #f)))
+
(define (g-golf-callback-closure-marshal ffi-cif
return-value
ffi-args
@@ -161,6 +169,7 @@
(callback-closure (pointer->scm user-data))
(callback (!callback callback-closure))
(procedure (!procedure callback-closure))
+ (g-value-ptr? (preserve-g-value-ptr? callback))
(return-type (!return-type callback))
(gi-argument (!gi-arg-result callback)))
(when (%debug)
@@ -210,7 +219,7 @@
int16
uint16
int32
- uint3
+ uint32
unichar
int64
uint64
@@ -242,7 +251,8 @@
gi-argument
argument
#:forced-type forced-type
- #:is-pointer? is-pointer?))
+ #:is-pointer? is-pointer?
+ #:g-value-ptr? g-value-ptr?))
((void)
(if is-pointer?
ffi-value
diff --git a/g-golf/hl-api/function.scm b/g-golf/hl-api/function.scm
index cda2f27..09a0837 100644
--- a/g-golf/hl-api/function.scm
+++ b/g-golf/hl-api/function.scm
@@ -81,7 +81,8 @@
(n-gi-arg-out (!n-gi-arg-out f-inst))
(gi-args-out (!gi-args-out f-inst))
(gi-arg-result (!gi-arg-result f-inst)))
- (callable-prepare-gi-arguments f-inst args)
+ (unless (memq 'skip-prepare-gi-arguments args)
+ (callable-prepare-gi-arguments f-inst args))
(with-gerror g-error
(g-function-info-invoke info
gi-args-in
diff --git a/g-golf/hl-api/glib.scm b/g-golf/hl-api/glib.scm
index 281da08..1889221 100644
--- a/g-golf/hl-api/glib.scm
+++ b/g-golf/hl-api/glib.scm
@@ -71,14 +71,14 @@
#:return-type 'boolean
#:param-types '()))
(g-closure (!g-closure closure))
- (source (g-idle-source-new))
- (dummy (g-source-set-priority source
- (ensure-priority priority)))
- (dummy (g-source-set-closure source g-closure))
- (id (g-source-attach source #f)))
- (g-source-unref source)
- (g-closure-unref g-closure)
- id))
+ (source (g-idle-source-new)))
+ (g-source-set-priority source
+ (ensure-priority priority))
+ (g-source-set-closure source g-closure)
+ (let ((id (g-source-attach source #f)))
+ (g-source-unref source)
+ (g-closure-unref g-closure)
+ id)))
(define* (g-timeout-add interval proc #:optional (priority 'default))
(let* ((closure (make <closure>
@@ -86,14 +86,14 @@
#:return-type 'boolean
#:param-types '()))
(g-closure (!g-closure closure))
- (source (g-timeout-source-new interval))
- (dummy (g-source-set-priority source
- (ensure-priority priority)))
- (dummy (g-source-set-closure source g-closure))
- (id (g-source-attach source #f)))
- (g-source-unref source)
- (g-closure-unref g-closure)
- id))
+ (source (g-timeout-source-new interval)))
+ (g-source-set-priority source
+ (ensure-priority priority))
+ (g-source-set-closure source g-closure)
+ (let ((id (g-source-attach source #f)))
+ (g-source-unref source)
+ (g-closure-unref g-closure)
+ id)))
(define* (g-timeout-add-seconds interval proc
#:optional (priority 'default))
@@ -102,14 +102,14 @@
#:return-type 'boolean
#:param-types '()))
(g-closure (!g-closure closure))
- (source (g-timeout-source-new-seconds interval))
- (dummy (g-source-set-priority source
- (ensure-priority priority)))
- (dummy (g-source-set-closure source g-closure))
- (id (g-source-attach source #f)))
- (g-source-unref source)
- (g-closure-unref g-closure)
- id))
+ (source (g-timeout-source-new-seconds interval)))
+ (g-source-set-priority source
+ (ensure-priority priority))
+ (g-source-set-closure source g-closure)
+ (let ((id (g-source-attach source #f)))
+ (g-source-unref source)
+ (g-closure-unref g-closure)
+ id)))
;;;
diff --git a/g-golf/hl-api/gobject.scm b/g-golf/hl-api/gobject.scm
index 18a4012..bee6b6c 100644
--- a/g-golf/hl-api/gobject.scm
+++ b/g-golf/hl-api/gobject.scm
@@ -44,6 +44,7 @@
#:use-module (g-golf gobject)
#:use-module (g-golf gi)
#:use-module (g-golf hl-api gtype)
+ #:use-module (g-golf hl-api gparam)
#:use-module (g-golf hl-api iface)
#:replace (connect)
@@ -60,7 +61,8 @@
<ginterface>
ginterface-class?
- g-object-find-class-by-g-type
+ g-value->scm
+
g-object-find-class
g-object-make-class
g-interface-make-class
@@ -120,7 +122,7 @@
#t
(loop rest)))))))
-(define (compute-extra-slots class g-properties slots)
+(define (compute-g-property-slots class g-properties slots)
(if (null? g-properties)
'()
(let* ((module (resolve-module '(g-golf hl-api gobject)))
@@ -133,42 +135,50 @@
;; following necessary let variable binding.
(g-class (and info ;; info is #f for derived class(es)
(g-type-class info)))
- (extra-slots (filter-map
- (lambda (g-property)
- (let* ((g-name (g-base-info-get-name g-property))
- (name (g-name->name g-name)))
- (if (has-slot? slots name)
- #f
- (let* ((k-name (symbol->keyword name))
- (a-name (symbol-append '! name))
- (a-inst (if (module-variable module a-name)
- (module-ref module a-name)
- (let ((a-inst (make-accessor a-name)))
- (module-g-export! module `(,a-name))
- (module-set! module a-name a-inst)
- a-inst)))
- (g-param-spec
- (and g-class
- (g-object-class-find-property g-class g-name)))
- (g-type (if g-param-spec
- (g-param-spec-type g-param-spec)
- (gi-property-g-type g-property)))
- (g-flags (if g-param-spec
- (g-param-spec-get-flags g-param-spec)
- (g-property-info-get-flags g-property)))
- (slot (make <slot>
- #:name name
- #:g-property g-property
- #:g-name g-name
- #:g-param-spec g-param-spec
- #:g-type g-type
- #:g-flags g-flags
- #:allocation #:g-property
- #:accessor a-inst
- #:init-keyword k-name)))
- slot))))
- g-properties)))
- extra-slots)))
+ (g-property-slots
+ (filter-map
+ (lambda (g-property)
+ (let* ((g-name (g-base-info-get-name g-property))
+ (name (g-name->name g-name)))
+ (if (has-slot? slots name)
+ #f
+ (let* ((k-name (symbol->keyword name))
+ (a-name (symbol-append '! name))
+ (a-inst (if (module-variable module a-name)
+ (module-ref module a-name)
+ (let ((a-inst (make-accessor a-name)))
+ (module-g-export! module `(,a-name))
+ (module-set! module a-name a-inst)
+ a-inst)))
+ (g-param-spec
+ (and g-class
+ (g-object-class-find-property g-class g-name)))
+ (g-type (if g-param-spec
+ (g-param-spec-type g-param-spec)
+ (gi-property-g-type g-property)))
+ (g-flags (if g-param-spec
+ (g-param-spec-get-flags g-param-spec)
+ (g-property-info-get-flags g-property)))
+ (slot (make <slot>
+ #:name name
+ #:g-property g-property
+ #:g-name g-name
+ #:g-param-spec g-param-spec
+ #:g-type g-type
+ #:g-flags g-flags
+ #:allocation #:g-property
+ #:accessor a-inst
+ #:init-keyword k-name)))
+ slot))))
+ g-properties)))
+ g-property-slots)))
+
+(define (compute-g-param-value-cache-slots g-param-slots)
+ (map (lambda (slot)
+ (make <slot>
+ #:name (symbol-append (slot-ref slot 'name)
+ '_)))
+ g-param-slots))
(define (n-prop-prop-accessors class)
;; Note that at this point, the g-type slot of the class is still
@@ -202,50 +212,57 @@
(cons (get-property info i)
result)))))))))
+(define (filter-g-param-slots slots)
+ (filter-map (lambda (slot)
+ (and (get-keyword #:g-param
+ (slot-definition-options slot)
+ #f)
+ slot))
+ slots))
+
(define-method (compute-slots (class <gobject-class>))
(let* ((slots (next-method))
- (extra (compute-extra-slots class
- (gobject-ginterface-direct-properties class)
- slots)))
+ (direct-slots (slot-ref class 'direct-slots))
+ (g-param-slots (filter-g-param-slots direct-slots))
+ (g-param-value-cache-slots
+ (compute-g-param-value-cache-slots g-param-slots))
+ (g-property-slots
+ (compute-g-property-slots class
+ (gobject-ginterface-direct-properties class)
+ slots)))
(slot-set! class 'direct-slots
- (append (slot-ref class 'direct-slots)
- extra))
- (append slots extra)))
-
-(define* (is-readable? slot #:optional (slot-opts #f))
- (let* ((slot-opts (or slot-opts
- (slot-definition-options slot)))
- (g-flags (get-keyword #:g-flags slot-opts #f)))
- (and g-flags
- (memq 'readable g-flags))))
-
-(define* (is-writable? slot #:optional (slot-opts #f))
- (let* ((slot-opts (or slot-opts
- (slot-definition-options slot)))
- (g-flags (get-keyword #:g-flags slot-opts #f)))
- (and g-flags
- (memq 'writable g-flags)
- (not (memq 'construct-only g-flags)))))
-
-(define-method (compute-get-n-set (class <gobject-class>) slot-def)
- (case (slot-definition-allocation slot-def)
- ((#:g-property)
- (let* ((name (slot-definition-name slot-def))
- (slot-opts (slot-definition-options slot-def))
- (g-name (get-keyword #:g-name slot-opts #f))
- (g-type (get-keyword #:g-type slot-opts #f)))
- (list (lambda (obj)
- #;(if (is-readable? slot-def slot-opts)
- (g-inst-get-property (!g-inst obj) g-name g-type)
- (error "Unreadable slot:" name))
- (g-inst-get-property (!g-inst obj) g-name g-type))
- (lambda (obj val)
- #;(if (is-writable? slot-def slot-opts)
- (g-inst-set-property (!g-inst obj) g-name g-type val)
- (error "Unwritable slot:" name))
- (g-inst-set-property (!g-inst obj) g-name g-type val)))))
- (else
- (next-method))))
+ (append direct-slots
+ g-param-value-cache-slots
+ g-property-slots))
+ (append slots
+ g-param-value-cache-slots
+ g-property-slots)))
+
+(define (g-property-slot? slot)
+ (eq? (slot-definition-allocation slot) #:g-property))
+
+(define (g-param-slot? slot)
+ (get-keyword #:g-param
+ (slot-definition-options slot)
+ #f))
+
+(define-method (compute-get-n-set (class <gobject-class>) slot)
+ (cond ((g-property-slot? slot)
+ (let* ((slot-opts (slot-definition-options slot))
+ (g-name (get-keyword #:g-name slot-opts #f))
+ (g-type (get-keyword #:g-type slot-opts #f)))
+ (list (lambda (obj)
+ (g-inst-get-property (!g-inst obj) g-name g-type))
+ (lambda (obj val)
+ (g-inst-set-property (!g-inst obj) g-name g-type val)))))
+ ((g-param-slot? slot)
+ (let ((name (symbol->string (slot-definition-name slot))))
+ (list (lambda (obj)
+ (g-inst-g-param-get-property obj name))
+ (lambda (obj val)
+ (g-inst-g-param-set-property obj name val)))))
+ (else
+ (next-method))))
(define-method (initialize (class <gobject-class>) initargs)
(let ((info (get-keyword #:info initargs #f))
@@ -255,92 +272,340 @@
(cond (info initargs)
(g-type (cons* #:info g-type initargs))
(else
- (cons* #:derived #t
- #:info (g-golf-type-register class initargs)
- initargs))))))
+ (receive (g-type class-init-func-closure class-init-func)
+ (g-golf-g-type-register class initargs)
+ (cons* #:derived #t
+ #:info g-type
+ #:class-init-func-closure class-init-func-closure
+ #:class-init-func class-init-func
+ initargs)))))
+ (install-properties class)
+ (install-signals class initargs)))
+
+(define (install-properties class)
+ ;; To expose slots as gobject properties, <gobject> processes a
+ ;; #:g-param slot option and creates a new gobject property.
+ (let loop ((id 1)
+ (slots (class-direct-g-param-slots class)))
+ (match slots
+ (() 'done)
+ ((slot . rest)
+ (install-property class slot id)
+ (loop (+ id 1)
+ rest)))))
+
+(define (install-property class slot id)
+ (unless (!derived class)
+ (scm-error 'invalid-class #f
+ "Can't add properties to non-derived type: ~S"
+ (list class) #f))
+ (let ((g-class (!g-class class))
+ (name (slot-definition-name slot)))
+ (if (g-object-class-find-property g-class
+ (symbol->string name))
+ (scm-error 'invalid-property #f
+ "There is already a property named ~A in ~S"
+ (list name class) #f)
+ (g-object-class-install-property g-class
+ id
+ (g-param-construct slot)))))
+
+#!
+;; We used the following to get started, just keeping the message in
+;; case ...
+
+(define %get-set-property-default-func-warning-msg
+ "
+WARNING: I can see that you are adding new properties to your
+derived class, but failed to provide a custom [get|set]-property
+vfunc, so those newly added properties won't work as expected.
+
+")
+!#
-(define (g-golf-type-register class initargs)
+(define %get-property-func
+ (procedure->pointer void
+ (lambda (g-inst p-id g-value p-spec)
+ (let* ((inst (g-inst-cache-ref g-inst))
+ (p-name (g-param-spec-get-name p-spec))
+ (p-name_ (string-append p-name "_")))
+ #;(dimfi '%get-property-func p-name)
+ #;(dimfi " " 'g-inst g-inst)
+ #;(dimfi " " 'inst inst)
+ (g-value-set! g-value
+ (slot-ref inst
+ (string->symbol p-name_)))
+ (values)))
+ (list '*
+ unsigned-int
+ '*
+ '*)))
+
+(define %set-property-func
+ (procedure->pointer void
+ (lambda (g-inst p-id g-value p-spec)
+ (let* ((inst (g-inst-cache-ref g-inst))
+ (p-name (g-param-spec-get-name p-spec))
+ (p-name_ (string-append p-name "_")))
+ #;(dimfi '%set-property-func p-name)
+ #;(dimfi " " 'g-inst g-inst)
+ #;(dimfi " " 'inst inst)
+ (slot-set! inst
+ (string->symbol p-name_)
+ (g-value-ref g-value))
+ (values)))
+ (list '*
+ unsigned-int
+ '*
+ '*)))
+
+(define (lookup-template-procedures-make-g-bytes template)
+ (if template
+ (let* ((module (resolve-module '(g-golf hl-api function)))
+ (template-bv (call-with-input-file template
+ (lambda (port) (get-bytevector-all port)) #:binary #t))
+ (g-bytes (g-bytes-new (bytevector->pointer template-bv)
+ (bytevector-length template-bv))))
+ (values (module-ref module 'gtk-widget-class-set-template)
+ (module-ref module 'gtk-widget-class-bind-template-child-full)
+ g-bytes))
+ (values #f #f #f)))
+
+(define (lookup-g-class-get-set-p-vfunc-offset)
+ (let ((g-object-struct-fields (!g-struct-fields <gobject>)))
+ (values
+ (match (assq-ref g-object-struct-fields 'get-property)
+ ((type offset flags) offset))
+ (match (assq-ref g-object-struct-fields 'set-property)
+ ((type offset flags) offset)))))
+
+(define (%class-init-func name properties template child-ids)
+ (if (and (null? properties)
+ (not template))
+ ;; we return #f, g-type-register-static-simple will then select
+ ;; the %class-init-func defined in (g-golf gobject type-info)
+ (values #f #f)
+ (let ((class-init-func-closure
+ (lambda (g-class class-data)
+ (let ((%name name)
+ (%properties properties)
+ (%template template)
+ (%child-ids child-ids))
+ #;(dimfi '%class-init-func %name)
+ #;(dimfi " " 'g-class g-class)
+ #;(dimfi " " 'g-class g-class)
+ #;(dimfi " " 'g-type (g-type-from-class g-class))
+ #;(dimfi " " 'child-ids %child-ids)
+ (unless (null? %properties)
+ (receive (get-p-vfunc-offset set-p-vfunc-offset)
+ (lookup-g-class-get-set-p-vfunc-offset)
+ (bv-ptr-set! (gi-pointer-inc g-class
+ get-p-vfunc-offset)
+ %get-property-func)
+ (bv-ptr-set! (gi-pointer-inc g-class
+ set-p-vfunc-offset)
+ %set-property-func)))
+ (when %template
+ (receive (set-template bind-template-child-full g-bytes)
+ (lookup-template-procedures-make-g-bytes %template)
+ (set-template g-class g-bytes)
+ (for-each (lambda (child-id)
+ (bind-template-child-full g-class
+ child-id
+ #f
+ 0))
+ %child-ids)))
+ (values)))))
+ (values class-init-func-closure
+ (procedure->pointer void
+ class-init-func-closure
+ (list '* '*))))))
+
+(define (lookup-init-template-func)
+ (let* ((init-template-func (gi-cache-ref 'function 'gtk-widget-init-template))
+ (gi-argument (slot-ref init-template-func 'gi-args-in))
+ (init-template (slot-ref init-template-func 'i-func)))
+ (values init-template gi-argument)))
+
+(define (instance-init-proc g-inst g-class)
+ (receive (init-template gi-argument)
+ (lookup-init-template-func)
+ (let* ((class (g-class-cache-ref g-class))
+ (g-type (!g-type class)))
+ #;(dimfi '%instance-init-func (class-name class))
+ #;(dimfi " " 'g-type g-type)
+ #;(dimfi " " 'g-inst g-inst)
+ #;(dimfi " " 'inst (g-inst-cache-ref g-inst))
+ #;(dimfi " " 'template-initialization...)
+ (gi-argument-set! gi-argument 'v-pointer g-inst)
+ (apply init-template
+ (list g-inst 'skip-prepare-gi-arguments))
+ (let ((g-inst-construct-g-type (%g-inst-construct-g-type)))
+ ;; we only creating a goops proxy instance under the following
+ ;; conditions - mandatory to avoid 'double' instance creation
+ #;(dimfi " " 'g-inst-construct-g-type g-inst-construct-g-type)
+ (unless (and g-inst-construct-g-type
+ (= g-type g-inst-construct-g-type))
+ #;(dimfi " " 'inst
+ (make class #:g-inst g-inst))
+ (make class #:g-inst g-inst)))
+ (values))))
+
+(define %instance-init-func
+ (procedure->pointer void
+ instance-init-proc
+ (list '* '*)))
+
+(define (is-a-gtk-widget? dsupers)
+ (member '<gtk-widget>
+ (map class-name
+ (apply append (map class-precedence-list dsupers)))))
+
+(define (find-parent-g-type dsupers)
+ (!g-type (find gobject-class?
+ (apply append
+ (map class-precedence-list dsupers)))))
+
+(define (find-g-param-slots slots)
+ (filter-map (lambda (slot-description)
+ (and (get-keyword #:g-param (cdr slot-description) #f)
+ slot-description))
+ slots))
+
+(define (g-golf-g-type-register class initargs)
(let* ((name (get-keyword #:name initargs #f))
(g-name (class-name->g-name name))
(dsupers (get-keyword #:dsupers initargs '()))
- (p-type (!g-type (find gobject-class?
- (apply append
- (map class-precedence-list dsupers))))))
- (match (g-type-query p-type)
- ((p-type p-name class-size instance-size)
- (let ((g-type (g-type-register-static-simple p-type
- g-name
- class-size
- #f ;; class-init-func
- instance-size
- #f ;; instance-init-func
- '())))
- (for-each (lambda (iface-class)
- (g-golf-type-add-interface g-type iface-class))
- (filter-map (lambda (class)
- (and (ginterface-class? class) class))
- dsupers))
- g-type)))))
-
-(define (g-golf-type-add-interface g-type iface-class)
+ (p-type (find-parent-g-type dsupers))
+ (slots (get-keyword #:slots initargs '()))
+ (properties (find-g-param-slots slots))
+ (template (get-keyword #:template initargs #f))
+ (child-ids (get-keyword #:child-ids initargs '())))
+ (if (and template
+ (not (is-a-gtk-widget? dsupers)))
+ (scm-error 'invalid-class #f
+ "Invalid (template) class: ~A"
+ (list name) #f)
+ (match (g-type-query p-type)
+ ((p-type p-name class-size instance-size)
+ (receive (class-init-func-closure class-init-func)
+ (%class-init-func name properties template child-ids)
+ (let ((g-type (g-type-register-static-simple p-type
+ g-name
+ class-size
+ class-init-func
+ instance-size
+ (and template
+ %instance-init-func)
+ '())))
+ (for-each (lambda (iface-class)
+ (g-golf-g-type-add-interface g-type iface-class))
+ (filter-map (lambda (class)
+ (and (ginterface-class? class) class))
+ dsupers))
+ (values g-type
+ class-init-func-closure
+ class-init-func))))))))
+
+(define (g-golf-g-type-add-interface g-type iface-class)
(g-type-add-interface-static g-type
(!g-type iface-class)
(gi-iface-info-struct iface-class)))
-(define (g-inst-get-property inst g-name g-type)
- (let* ((g-value (g-value-init g-type))
- (dummy (g-object-get-property inst g-name g-value))
- (result (%g-inst-get-property-value g-value)))
- (g-value-unset g-value)
- result))
-
-(define (%g-inst-get-property-value g-value)
- (let ((value (g-value-ref g-value)))
- (case (g-value-type-tag g-value)
- ((object)
+(define (g-inst-get-property g-inst g-name g-type)
+ (let ((g-value (g-value-init g-type)))
+ (g-object-get-property g-inst g-name g-value)
+ (let ((result (g-value->scm g-value g-type)))
+ (g-value-unset g-value)
+ result)))
+
+(define (g-value->scm g-value g-type)
+ (case (g-type->symbol g-type)
+ ((#f)
+ ;; Most likely a fundamental type that is not in GObject.
+ (receive (value class)
+ (g-value-func-ref g-value g-type)
(if (or (not value)
(null-pointer? value))
#f
- (or (g-inst-cache-ref value)
- (let* ((module (resolve-module '(g-golf hl-api gobject)))
- (r-type (g-value-type g-value))
- (info (g-irepository-find-by-gtype r-type))
- (g-name (g-registered-type-info-get-type-name info))
- (c-name (g-name->class-name g-name))
- (type (module-ref module c-name)))
- (make type #:g-inst value)))))
- ((interface)
+ (make class #:g-inst value))))
+ ((object
+ interface)
+ (let ((value (g-value-ref g-value)))
(if (or (not value)
(null-pointer? value))
#f
(or (g-inst-cache-ref value)
- (let* ((module (resolve-module '(g-golf hl-api gobject)))
- (r-type (g-value-type g-value))
- (info (g-irepository-find-by-gtype r-type))
- (g-name (g-registered-type-info-get-type-name info))
- (c-name (g-name->class-name g-name))
- (type (module-ref module c-name)))
- (make type #:g-inst value)))))
- (else
- value))))
+ (let ((class (g-type-cache-ref g-type)))
+ (make class #:g-inst value))))))
+ (else
+ (g-value-ref g-value))))
-(define* (g-inst-set-property inst g-name g-type value)
+(define (g-inst-set-property g-inst g-name g-type value)
(let ((g-value (g-value-init g-type)))
- (g-value-set! g-value
- (%g-inst-set-property-value g-type value))
- (g-object-set-property inst g-name g-value)
+ (match (g-type->symbol g-type)
+ (#f
+ ;; Most likely a fundamental type that is not in GObject.
+ (g-value-func-set g-value g-type value))
+ (else
+ (g-value-set! g-value
+ (scm->g-property g-type value))))
+ (g-object-set-property g-inst g-name g-value)
(g-value-unset g-value)
(values)))
-(define %g-inst-set-property-value
- (@@ (g-golf hl-api gtype) %g-inst-set-property-value))
+(define (g-inst-g-param-get-property obj name)
+ (let* ((klass (class-of obj))
+ (g-class (!g-class klass))
+ (p-spec (g-object-class-find-property g-class name))
+ (p-spec-type (g-param-spec-type p-spec)))
+ (g-inst-get-property (!g-inst obj) name p-spec-type)))
+
+(define (g-inst-g-param-set-property obj name val)
+ (let* ((klass (class-of obj))
+ (g-class (!g-class klass))
+ (p-spec (g-object-class-find-property g-class name))
+ (p-spec-type (g-param-spec-type p-spec)))
+ (g-inst-set-property (!g-inst obj) name p-spec-type val)))
;;;
;;; Signals
;;;
-(define (install-signals! class)
+(define (install-signals class initargs)
+ (for-each (lambda (signal)
+ (install-signal class signal))
+ (find-signals initargs)))
+
+(define (install-signal class signal)
+ (match signal
+ ((name return-type param-types flags)
+ (g-signal-newv name
+ (!g-type class)
+ flags
+ #f ;; class-closure
+ #f ;; accumulator
+ #f ;; accu-data
+ #f ;; c-marshaller
+ return-type
+ (length param-types)
+ param-types))))
+
+(define (find-signals initargs)
+ (let loop ((args initargs)
+ (signals '()))
+ (match args
+ (() signals)
+ ((kw def . rest)
+ (if (eq? kw #:g-signal)
+ (loop rest
+ (cons def signals))
+ (loop rest
+ signals))))))
+
+#!
+(define (install-signals class)
(let ((signals (gobject-class-signals class)))
(dimfi class)
(for-each (lambda (info)
@@ -359,6 +624,7 @@
(loop (+ i 1)
(cons (g-object-info-get-signal info i)
result)))))))
+!#
;;;
@@ -372,6 +638,21 @@
#:info (g-irepository-find-by-name "GObject" "Object")
#:metaclass <gobject-class>)
+(define* (is-readable? slot #:optional (slot-opts #f))
+ (let* ((slot-opts (or slot-opts
+ (slot-definition-options slot)))
+ (g-flags (get-keyword #:g-flags slot-opts #f)))
+ (and g-flags
+ (memq 'readable g-flags))))
+
+(define* (is-writable? slot #:optional (slot-opts #f))
+ (let* ((slot-opts (or slot-opts
+ (slot-definition-options slot)))
+ (g-flags (get-keyword #:g-flags slot-opts #f)))
+ (and g-flags
+ (memq 'writable g-flags)
+ (not (memq 'construct-only g-flags)))))
+
(define safe-class-name
(@@ (oop goops describe) safe-class-name))
@@ -422,7 +703,8 @@
(define-class <ginterface> (<gtype-instance>)
#:info #t
- #:g-type -1 ;; g-object-find-class-by-g-type
+ #:g-type -1 ;; so we do not break g-type-cahe-ref ...
+ #:g-name "GInterface" ;; fake name - specializer-vfunc-lookup needs one
#:metaclass <gobject-class>)
(define (ginterface-class? class)
@@ -455,7 +737,8 @@
;; Another example of a runtime class is the GdkWaylandClipboard, which
;; subclass GdkClipboard.
-(define (g-object-find-class-by-g-type g-type)
+;; this definition preceeds the existance of a g-type-cache
+#;(define (g-object-find-class-by-g-type g-type)
(let loop ((classes (class-subclasses <gtype-instance>)))
(match classes
(() #f)
@@ -466,36 +749,56 @@
(define (g-object-find-class foreign)
(let* ((g-type (g-object-type foreign))
- (class (g-object-find-class-by-g-type g-type)))
+ (class (g-type-cache-ref g-type)))
(if class
(values class (class-name class) g-type)
(g-object-make-class foreign g-type))))
+(define (g-object-class-precedence-list g-type)
+ (let loop ((g-type g-type)
+ (class #f)
+ (results `((,g-type ,(g-type-name g-type) #f))))
+ (if class
+ results
+ (let* ((p-type (g-type-parent g-type))
+ (p-class (g-type-cache-ref p-type)))
+ (loop p-type
+ p-class
+ (cons (list p-type (g-type-name p-type) p-class)
+ results))))))
+
(define* (g-object-make-class foreign #:optional g-type)
(let* ((module (resolve-module '(g-golf hl-api gobject)))
- (g-type (or g-type (g-object-type foreign)))
- (g-name (g-object-type-name foreign))
- (c-name (g-name->class-name g-name))
- (parent (g-type-parent g-type))
- (p-g-name (g-type-name parent))
- (p-name (g-name->class-name p-g-name))
- (p-class-var (module-variable module p-name))
- (p-class (and p-class-var (module-ref module p-name))))
- (when (%debug)
- (dimfi 'g-object-make-class)
- (dimfi " " g-type g-name c-name 'p-name p-name))
- (if p-class
- (let* ((public-i (module-public-interface module))
- (ifaces (g-object-class-interfaces g-type))
- (c-inst (make-class (cons p-class ifaces)
- '()
- #:name c-name
- #:g-type g-type)))
- (module-define! module c-name c-inst)
- (module-add! public-i c-name
- (module-variable module c-name))
- (values c-inst c-name g-type))
- (error "Undefined (parent) class: " p-name))))
+ (public-i (module-public-interface module))
+ (g-type (or g-type (g-object-type foreign))))
+ (let loop ((cpl (g-object-class-precedence-list g-type)))
+ (match cpl
+ ((child) ;; instanciated in the previous step
+ (match child
+ ((g-type g-name _)
+ (let ((c-inst (g-type-cache-ref g-type)))
+ (values c-inst (class-name c-inst) g-type)))))
+ ((parent child . rest)
+ (match parent
+ ((p-type p-name p-class)
+ (let ((p-class (or p-class
+ ;; instanciated in the previous step
+ (g-type-cache-ref p-type))))
+ (match child
+ ((g-type g-name _)
+ (let* ((ifaces (g-object-class-interfaces g-type))
+ (c-name (g-name->class-name g-name))
+ (c-inst (make-class (cons p-class ifaces)
+ '()
+ #:name c-name
+ #:g-type g-type)))
+ #;(dimfi 'g-object-make-class)
+ #;(dimfi " " c-inst)
+ #;(dimfi " " 'ifaces ifaces)
+ (module-define! module c-name c-inst)
+ (module-add! public-i c-name
+ (module-variable module c-name))
+ (loop (cons child rest)))))))))))))
(define (g-object-class-interfaces g-type)
(let ((module (resolve-module '(g-golf hl-api gobject)))
@@ -506,7 +809,7 @@
(m-var (module-variable module name)))
(or (and m-var
(variable-ref m-var))
- (g-interface-make-class g-type))))
+ (g-interface-make-class iface))))
ifaces)))
(define (g-interface-make-class g-type)
diff --git a/g-golf/hl-api/gparam.scm b/g-golf/hl-api/gparam.scm
new file mode 100644
index 0000000..40a2d3b
--- /dev/null
+++ b/g-golf/hl-api/gparam.scm
@@ -0,0 +1,96 @@
+;; -*- mode: scheme; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(define-module (g-golf hl-api gparam)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 receive)
+ #:use-module (oop goops)
+ #:use-module (g-golf support)
+ #:use-module (g-golf glib)
+ #:use-module (g-golf gobject)
+
+ #:duplicates (merge-generics
+ replace
+ warn-override-core
+ warn
+ last)
+
+ #:export (g-param-construct
+
+ g-param-construct-int
+ g-param-construct-enum))
+
+
+#;(g-export )
+
+
+(define (g-param-construct slot)
+ (let* ((options (slot-definition-options slot))
+ (name (get-keyword #:name options #f))
+ (p-spec (get-keyword #:g-param options #f)))
+ #;(dimfi 'g-param-construct name p-spec)
+ (match p-spec
+ ((param-type . param-desc)
+ (case param-type
+ ((int)
+ (g-param-construct-int name param-desc))
+ ((enum)
+ (g-param-construct-enum name param-desc))
+ (else
+ (scm-error 'g-param-construct #f
+ "Unimplemented g-param-construct type: ~S"
+ (list param-type) #f)))))))
+
+
+(define (g-param-construct-int name param-desc)
+ (let ((nick (get-keyword #:nick param-desc #f))
+ (blurb (get-keyword #:blurb param-desc #f))
+ (minimum (get-keyword #:minimum param-desc #f))
+ (maximum (get-keyword #:maximum param-desc #f))
+ (default (get-keyword #:default param-desc #f))
+ (flags (get-keyword #:flags param-desc #f)))
+ (g-param-spec-int (symbol->string name)
+ nick
+ blurb
+ minimum
+ maximum
+ default
+ flags)))
+
+(define (g-param-construct-enum name param-desc)
+ (let ((nick (get-keyword #:nick param-desc #f))
+ (blurb (get-keyword #:blurb param-desc #f))
+ (type (get-keyword #:type param-desc #f))
+ (default (get-keyword #:default param-desc #f))
+ (flags (get-keyword #:flags param-desc #f)))
+ (g-param-spec-enum (symbol->string name)
+ nick
+ blurb
+ type
+ default
+ flags)))
diff --git a/g-golf/hl-api/gtype.scm b/g-golf/hl-api/gtype.scm
index 906049f..e08d3c3 100644
--- a/g-golf/hl-api/gtype.scm
+++ b/g-golf/hl-api/gtype.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2018 - 2022
+;;;; Copyright (C) 2018 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -38,6 +38,7 @@
#:use-module (ice-9 match)
#:use-module (ice-9 receive)
#:use-module (ice-9 format)
+ #:use-module (srfi srfi-1)
#:use-module (oop goops)
#:use-module (g-golf support)
#:use-module (g-golf glib)
@@ -53,16 +54,26 @@
#:export (<gtype-class>
<gtype-instance>
- g-type-class))
+ g-type-class
+ %g-inst-construct-g-type
+ g-value-func-ref
+ g-value-func-set
+ scm->g-property))
(g-export !info
- !derived
!namespace
!g-type
!g-name
!g-class
!g-struct-fields
+ !derived
+ !set-value-func
+ !set-value-func-ptr
+ !g-value-set-proc
+ !get-value-func
+ !get-value-func-ptr
+ !g-value-get-proc
!g-inst
unref
@@ -77,14 +88,27 @@
(define-class <gtype-class> (<class>)
(info #:accessor !info #:init-keyword #:info)
- (derived #:accessor !derived
- #:init-keyword #:derived #:init-value #f)
(namespace #:accessor !namespace #:init-value #f)
(g-type #:accessor !g-type #:init-keyword #:g-type)
- (g-name #:accessor !g-name)
+ (g-name #:accessor !g-name #:init-keyword #:g-name)
(g-class #:accessor !g-class)
(g-struct-fields #:accessor !g-struct-fields
- #:init-keyword #:g-struct-fields #:init-value #f))
+ #:init-keyword #:g-struct-fields #:init-value #f)
+ (derived #:accessor !derived #:init-keyword #:derived #:init-value #f)
+ (class-init-func-closure #:init-keyword #:class-init-func-closure #:init-value #f)
+ (class-init-func #:init-keyword #:class-init-func #:init-value #f)
+ (set-value-func #:accessor !set-value-func
+ #:init-keyword #:set-value-func #:init-value #f)
+ (set-value-func-ptr #:accessor !set-value-func-ptr
+ #:init-keyword #:set-value-func-ptr #:init-value #f)
+ (g-value-set-proc #:accessor !g-value-set-proc
+ #:init-keyword #:g-value-set-proc #:init-value #f)
+ (get-value-func #:accessor !get-value-func
+ #:init-keyword #:get-value-func #:init-value #f)
+ (get-value-func-ptr #:accessor !get-value-func-ptr
+ #:init-keyword #:get-value-func-ptr #:init-value #f)
+ (g-value-get-proc #:accessor !g-value-get-proc
+ #:init-keyword #:g-value-get-proc #:init-value #f))
(define-method (initialize (self <gtype-class>) initargs)
(let ((info (or (get-keyword #:info initargs #f)
@@ -95,14 +119,16 @@
((? pointer?) ;; a GI class definition
(let* ((namespace (g-base-info-get-namespace info))
(g-type (g-registered-type-info-get-g-type info))
- (g-f-type (g-type-fundamental g-type))
(g-name (g-registered-type-info-get-type-name info))
(g-class (g-type-class info #:g-type g-type)))
(mslot-set! self
'namespace namespace
'g-type g-type
'g-name g-name
- 'g-class g-class)))
+ 'g-class g-class)
+ (g-type-cache-set! g-type self)
+ (and g-class
+ (g-class-cache-set! g-class self))))
((? number?) ;; either a runtime or a derived class
(let* ((g-type info)
(g-name (g-type-name g-type))
@@ -111,7 +137,10 @@
'info #f
'g-type g-type
'g-name g-name
- 'g-class g-class))))))
+ 'g-class g-class)
+ (g-type-cache-set! g-type self)
+ (and g-class
+ (g-class-cache-set! g-class self)))))))
(define* (g-type-class info #:key (g-type #f))
(let* ((g-type (or g-type
@@ -260,56 +289,134 @@
(g-inst (or g-inst?
(g-inst-construct self split-kw))))
(next-method self split-rest)
+ (set! (!g-inst self) g-inst)
+ (g-inst-cache-set! g-inst self)
(case g-type-name
((object) ;; [not when interface]
(when (g-object-is-floating g-inst)
(g-object-ref-sink g-inst))
(g-object-add-toggle-ref g-inst %g-toggle-notify #f)))
- (set! (!g-inst self) g-inst)
- (g-inst-cache-set! g-inst self)))))
+ (initialize-g-param-slots self)
+ (unless (null? (class-child-id-slots class))
+ (initialize-child-id-slots self))))))
+
+(define (initialize-g-param-slots inst)
+ (let* ((class (class-of inst))
+ (g-class (!g-class class)))
+ (for-each (lambda (item)
+ (match item
+ ((g-class g-param-slots)
+ (for-each
+ (lambda (slot)
+ (let* ((name (slot-definition-name slot))
+ (p-name (symbol->string name))
+ (p-spec (g-object-class-find-property g-class p-name))
+ (p-spec-default (g-param-spec-get-default-value p-spec))
+ (default (g-value-ref p-spec-default))
+ (name_ (symbol-append name '_)))
+ (slot-set! inst name_ default)))
+ g-param-slots))))
+ (g-class-g-param-slots class))))
+
+(define (g-class-g-param-slots class)
+ (filter-map (lambda (c)
+ (let ((g-param-direct-slots
+ (class-direct-g-param-slots c)))
+ (if (null? g-param-direct-slots)
+ #f
+ (list (!g-class c)
+ g-param-direct-slots))))
+ (class-precedence-list class)))
+
+(define (initialize-child-id-slots inst)
+ (let* ((module (resolve-module '(g-golf hl-api function)))
+ (get-template-child
+ (module-ref module 'gtk-widget-get-template-child)))
+ (for-each (lambda (cpl-class)
+ (for-each (lambda (slot)
+ (let* ((options (slot-definition-options slot))
+ (name (get-keyword #:name options))
+ (child-id (get-keyword #:child-id options)))
+ (slot-set! inst
+ name
+ (get-template-child inst
+ (!g-type cpl-class)
+ child-id))))
+ (class-direct-child-id-slots cpl-class)))
+ (class-precedence-list (class-of inst)))))
(define %g_value_init
(@@ (g-golf gobject generic-values) g_value_init))
+
+(define %g-inst-construct-g-type (make-parameter #f))
+
(define-method (g-inst-construct (self <gtype-instance>)
g-property-initargs)
- (if (null? g-property-initargs)
- (g-object-new (!g-type (class-of self)))
- (let* ((class (class-of self))
- (g-type (!g-type class))
- (slot-def-init-val-pairs
- (slot-definition-init-value-pairs self g-property-initargs))
- (n-prop (length slot-def-init-val-pairs))
- (%g-value-size (g-value-size))
- (g-values (bytevector->pointer
- (make-bytevector (* n-prop %g-value-size) 0)))
- (names
- (let loop ((i 0)
- (names '())
- (g-value g-values)
- (slot-def-init-val-pairs slot-def-init-val-pairs))
- (match slot-def-init-val-pairs
- (()
- (reverse! names))
- ((slot-def-init-val-pair . rest)
- (match slot-def-init-val-pair
- ((slot-def . init-val)
- (let* ((slot-opts (slot-definition-options slot-def))
- (g-name (get-keyword #:g-name slot-opts #f))
- (g-type (get-keyword #:g-type slot-opts #f)))
- (%g_value_init g-value g-type)
- (g-value-set! g-value
- (%g-inst-set-property-value g-type init-val))
- (loop (+ i 1)
- (cons g-name names)
- (gi-pointer-inc g-value %g-value-size)
- rest)))))))))
- (g-object-new-with-properties g-type
- n-prop
- (scm->gi names 'strings)
- g-values))))
-
-(define (%g-inst-set-property-value g-type value)
+ (let ((g-type (!g-type (class-of self))))
+ (parameterize ((%g-inst-construct-g-type g-type))
+ (if (null? g-property-initargs)
+ (g-object-new g-type)
+ (let* ((slot-def-init-val-pairs
+ (slot-definition-init-value-pairs self g-property-initargs))
+ (n-prop (length slot-def-init-val-pairs))
+ (%g-value-size (g-value-size))
+ (g-values (bytevector->pointer
+ (make-bytevector (* n-prop %g-value-size) 0)))
+ (names
+ (let loop ((i 0)
+ (names '())
+ (g-value g-values)
+ (slot-def-init-val-pairs slot-def-init-val-pairs))
+ (match slot-def-init-val-pairs
+ (()
+ (reverse! names))
+ ((slot-def-init-val-pair . rest)
+ (match slot-def-init-val-pair
+ ((slot-def . init-val)
+ (let* ((slot-opts (slot-definition-options slot-def))
+ (g-name (get-keyword #:g-name slot-opts #f))
+ (g-type (get-keyword #:g-type slot-opts #f)))
+ (%g_value_init g-value g-type)
+ (match (g-type->symbol g-type)
+ (#f
+ ;; Most likely a fundamental type that is not in GObject.
+ (g-value-func-set g-value g-type init-val))
+ (else
+ (g-value-set! g-value
+ (scm->g-property g-type init-val))))
+ (loop (+ i 1)
+ (cons g-name names)
+ (gi-pointer-inc g-value %g-value-size)
+ rest)))))))))
+ (g-object-new-with-properties g-type
+ n-prop
+ (scm->gi names 'strings)
+ g-values))))))
+
+(define (g-value-func-ref g-value g-type)
+ (let ((class (g-type-cache-ref g-type)))
+ (if class
+ (let ((g-value-get-proc (!g-value-get-proc class)))
+ (if g-value-get-proc
+ (values (g-value-get-proc g-value) class)
+ (scm-error 'failed #f "Undefined g-value-get-proc for g-type: ~A"
+ (list g-type) #f)))
+ (scm-error 'failed #f "Undefined class for g-type: ~A"
+ (list g-type) #f))))
+
+(define (g-value-func-set g-value g-type value)
+ (let ((class (g-type-cache-ref g-type)))
+ (if class
+ (let ((g-value-set-proc (!g-value-set-proc class)))
+ (if g-value-set-proc
+ (g-value-set-proc g-value (!g-inst value))
+ (scm-error 'failed #f "Undefined g-value-set-proc for g-type: ~A"
+ (list g-type) #f)))
+ (scm-error 'failed #f "Undefined class for g-type: ~A"
+ (list g-type) #f))))
+
+(define (scm->g-property g-type value)
(let ((g-type (if (symbol? g-type)
g-type
(g-type->symbol g-type))))
diff --git a/g-golf/hl-api/n-decl.scm b/g-golf/hl-api/n-decl.scm
index 718136f..7fa9686 100644
--- a/g-golf/hl-api/n-decl.scm
+++ b/g-golf/hl-api/n-decl.scm
@@ -77,7 +77,7 @@
;;;
(define %gi-import-namespace-exceptions
- '("Glib"
+ '("GLib"
"GObject"))
(define (gi-namespace-import-exception? namespace)
diff --git a/g-golf/hl-api/object.scm b/g-golf/hl-api/object.scm
index 191b175..44a2bd6 100644
--- a/g-golf/hl-api/object.scm
+++ b/g-golf/hl-api/object.scm
@@ -127,11 +127,31 @@
(class-struct (g-object-info-get-class-struct info))
(g-struct-fields (and class-struct
(gi-struct-field-desc class-struct)))
+ (set-value-func-ptr
+ (g-object-info-get-set-value-function-pointer info))
+ (get-value-func-ptr
+ (g-object-info-get-get-value-function-pointer info))
(c-inst (make-class supers
'()
#:name c-name
#:info info
#:g-struct-fields g-struct-fields
+ #:set-value-func
+ (g-object-info-get-set-value-function info)
+ #:set-value-func-ptr set-value-func-ptr
+ #:g-value-set-proc
+ (and set-value-func-ptr
+ (pointer->procedure void
+ set-value-func-ptr
+ (list '* '*)))
+ #:get-value-func
+ (g-object-info-get-get-value-function info)
+ #:get-value-func-ptr get-value-func-ptr
+ #:g-value-get-proc
+ (and get-value-func-ptr
+ (pointer->procedure '*
+ get-value-func-ptr
+ (list '*)))
#:metaclass metaclass)))
(module-define! module c-name c-inst)
(module-add! public-i c-name
diff --git a/g-golf/hl-api/signal.scm b/g-golf/hl-api/signal.scm
index 5838d76..107cffe 100644
--- a/g-golf/hl-api/signal.scm
+++ b/g-golf/hl-api/signal.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2019 - 2020
+;;;; Copyright (C) 2019 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -71,14 +71,14 @@
!name
!flags
!iface-type
- !iface-name
!iface-class
!return-type
!param-types
!param-args
connect
- connect-after)
+ connect-after
+ emit)
;;;
@@ -100,31 +100,17 @@
(g-signal-parse-name s-name i-type)
(match (g-signal-query s-id)
((id name iface-type flags return-type n-param param-types)
- (let* ((iface-name (g-type-name iface-type))
- (iface-key (string->symbol
- (g-studly-caps-expand iface-name)))
- (signal (or (gi-signal-cache-ref iface-key s-name)
- (let* ((iface-info (g-irepository-find-by-gtype iface-type))
- (iface-s-info (g-object-info-find-signal iface-info name))
- (param-args (signal-arguments iface-s-info))
- (s-inst (make <signal>
- #:id id
- #:name name
- #:iface-type iface-type
- #:iface-name iface-name
- #:flags flags
- #:return-type return-type
- #:n-param n-param
- #:param-types param-types
- #:param-args param-args)))
- (gi-signal-cache-set! iface-key s-name s-inst)
- s-inst)))
+ (let* ((signal (or (gi-signal-cache-ref i-class-name s-name)
+ (make-signal s-id s-name
+ name i-type i-class-name
+ flags return-type n-param param-types)))
+ (param-args (!param-args signal))
(closure (make <closure>
#:function function
#:return-type return-type
#:param-types (cons 'object param-types)
- #:param-args (cons #f
- (!param-args signal)))))
+ #:param-args (and param-args
+ (cons #f param-args)))))
(g-signal-connect-closure-by-id (!g-inst inst)
(!id signal)
detail
@@ -132,6 +118,25 @@
after?)
(values)))))))
+(define (make-signal id s-name name iface-type iface-name
+ flags return-type n-param param-types)
+ (let* ((iface-info (g-irepository-find-by-gtype iface-type))
+ (iface-s-info (and iface-info
+ (g-object-info-find-signal iface-info name)))
+ (param-args (and iface-s-info
+ (signal-arguments iface-s-info)))
+ (s-inst (make <signal>
+ #:id id
+ #:name name
+ #:iface-type iface-type
+ #:flags flags
+ #:return-type return-type
+ #:n-param n-param
+ #:param-types param-types
+ #:param-args param-args)))
+ (gi-signal-cache-set! iface-name s-name s-inst)
+ s-inst))
+
(define (signal-arguments info)
(let loop ((n-arg (g-callable-info-get-n-args info))
(args '()))
@@ -144,6 +149,57 @@
#:arg-pos n-arg)
args)))))
+(define-method (emit (inst <gtype-instance>) name . args)
+ (apply signal-emit inst name args))
+
+(define %g_value_init
+ (@@ (g-golf gobject generic-values) g_value_init))
+
+(define %prepare-g-value-in
+ (@@ (g-golf hl-api closure) prepare-g-value-in))
+
+(define %prepare-return-val
+ (@@ (g-golf hl-api closure) prepare-return-val))
+
+(define (signal-emit inst s-name . args)
+ (let* ((i-class (class-of inst))
+ (i-class-name (class-name i-class))
+ (i-type (!g-type i-class))
+ (s-id (g-signal-lookup (symbol->string s-name) i-type)))
+ (if s-id
+ (match (g-signal-query s-id)
+ ((id name iface-type flags return-type n-param param-types)
+ (let* ((%g-value-size (g-value-size))
+ (signal (or (gi-signal-cache-ref i-class-name s-name)
+ (make-signal s-id s-name
+ name i-type i-class-name
+ flags return-type n-param param-types)))
+ (params (bytevector->pointer
+ (make-bytevector (* (+ n-param 1) %g-value-size) 0))))
+ (%g_value_init params iface-type)
+ (g-value-set-object params (!g-inst inst))
+ (let loop ((i 0)
+ (g-value (gi-pointer-inc params %g-value-size)))
+ (if (= i n-param)
+ 'done
+ (let ((type (list-ref param-types i))
+ (val (list-ref args i)))
+ (%prepare-g-value-in g-value type val)
+ (loop (+ i 1)
+ (gi-pointer-inc g-value %g-value-size)))))
+ (case return-type
+ ((none)
+ (g-signal-emitv params id 0 #f)
+ (values))
+ (else
+ (let ((return-val (bytevector->pointer
+ (make-bytevector %g-value-size 0))))
+ (%prepare-return-val return-val (!return-type signal))
+ (g-signal-emitv params id 0 return-val)
+ (g-value-ref return-val)))))))
+ (scm-error 'invalid #f "Unknown signal ~A on object ~A"
+ (list s-name inst) #f))))
+
;;;
;;; The <signal> class, accesors and methods
@@ -153,7 +209,6 @@
(id #:accessor !id #:init-keyword #:id #:init-value #f)
(name #:accessor !name #:init-keyword #:name)
(iface-type #:accessor !iface-type #:init-keyword #:iface-type)
- (iface-name #:accessor !iface-name #:init-keyword #:iface-name)
(iface-class #:accessor !iface-class #:init-keyword #:iface-class)
(flags #:accessor !flags #:init-keyword #:flags)
(return-type #:accessor !return-type #:init-keyword #:return-type)
@@ -163,22 +218,20 @@
(define-method (initialize (self <signal>) initargs)
(next-method)
- (let* ((module (resolve-module '(g-golf hl-api gobject)))
- (iface-type (!iface-type self))
- (iface-name (g-type-name iface-type))
- (iface-c-name (g-name->class-name iface-name))
- (iface-class (module-ref module iface-c-name)))
+ (let* ((iface-type (!iface-type self))
+ (iface-class (g-type-cache-ref iface-type)))
(mslot-set! self
- 'iface-name iface-name
'iface-class iface-class)))
(define-method (describe (self <signal>))
(next-method)
(newline)
- (for-each (lambda (argument)
- (describe argument)
- (newline))
- (!param-args self)))
+ (let ((param-args (!param-args self)))
+ (when param-args ;; #f for user defined signals
+ (for-each (lambda (argument)
+ (describe argument)
+ (newline))
+ param-args))))
;;;
diff --git a/g-golf/hl-api/utils.scm b/g-golf/hl-api/utils.scm
index 9cb315b..b337235 100644
--- a/g-golf/hl-api/utils.scm
+++ b/g-golf/hl-api/utils.scm
@@ -80,13 +80,16 @@
results)))))))
(define (scm->g-type value)
- (letrec* ((v-class (class-of value))
- (v-cpl (class-precedence-list v-class))
- (is-a- (lambda (value class)
- (and (memq class v-cpl) #t))))
- (cond ((is-a- value <string>)
+ (let ((v-class (class-of value)))
+ (cond ((number? value)
+ value) ;; we assume it is a g-type
+ ((string? value)
(symbol->g-type 'string))
- ((is-a- value <gobject>)
+ ((symbol? value)
+ (symbol->g-type value))
+ ((gobject-class? value)
+ (!g-type value))
+ ((gobject-class? v-class)
(!g-type v-class))
(else
(error "Unimplemented scm->g-type for " value)))))
diff --git a/g-golf/hl-api/vfunc.scm b/g-golf/hl-api/vfunc.scm
index 7a499e5..b8d5b52 100644
--- a/g-golf/hl-api/vfunc.scm
+++ b/g-golf/hl-api/vfunc.scm
@@ -241,43 +241,51 @@ situations a VFunc (method) long name is mandatory and ~S is invalid.")
(specializer-vfunc-lookup specializer g-name)))))))
(define (specializer-vfunc-lookup specializer g-name)
- (let loop ((supers (class-direct-supers specializer))
+ (let loop ((cpl (class-precedence-list specializer))
(results '()))
- (match supers
+ (match cpl
(() (reverse results))
((super . rest)
- (let* ((g-long-name-prefix
- (name->g-name (g-name->name (!g-name super) 'as-string) 'as-string))
- (gf-long-name?
- (and (string-contains g-name g-long-name-prefix) #t))
- (g-name (if gf-long-name?
- (string-drop g-name
- (+ (string-length g-long-name-prefix) 1))
- g-name))
- (g-vfunc-lookup (cond ((gobject-class? super)
- g-object-vfunc-lookup)
- ((ginterface-class? super)
- g-interface-vfunc-lookup)
- (else
- #f))))
- (if g-vfunc-lookup
- (let ((info (g-vfunc-lookup super g-name)))
- (if info
- (loop rest
- (cons (list super
- g-name
- g-long-name-prefix
- gf-long-name?
- info)
- results))
- (loop rest results)))
+ (let ((vf-info (vfunc-info-lookup super g-name)))
+ (if vf-info
+ (receive (g-name g-long-name-prefix gf-long-name?)
+ (vfunc-names super g-name)
+ (loop rest
+ (cons (list super
+ g-name
+ g-long-name-prefix
+ gf-long-name?
+ vf-info)
+ results)))
(loop rest results)))))))
-(define (g-object-vfunc-lookup c-lass g-name)
- (g-object-info-find-vfunc (!info c-lass) g-name))
-
-(define (g-interface-vfunc-lookup c-lass g-name)
- (g-interface-info-find-vfunc (!info c-lass) g-name))
+(define (vfunc-names class g-name)
+ (let* ((name (g-name->name (!g-name class) 'as-string))
+ (g-long-name-prefix (name->g-name name 'as-string))
+ (gf-long-name? (and (string-contains g-name
+ g-long-name-prefix)
+ #t))
+ (g-name (if gf-long-name?
+ (string-drop g-name
+ (+ (string-length g-long-name-prefix) 1))
+ g-name)))
+ (values g-name g-long-name-prefix gf-long-name?)))
+
+(define (vfunc-info-lookup class g-name)
+ (let ((find-vfunc-proc (cond ((gobject-class? class)
+ g-object-info-find-vfunc)
+ ((ginterface-class? class)
+ g-interface-info-find-vfunc)
+ (else
+ #f))))
+ (and find-vfunc-proc
+ ;; derived class info slot value is #f
+ (let ((info (!info class)))
+ (match info
+ ((? pointer?)
+ (find-vfunc-proc info g-name))
+ (else
+ #f))))))
;; Below is a modified version of the (define-syntax method ...) code in
diff --git a/g-golf/override/gdk.scm b/g-golf/override/gdk.scm
index 11af607..30fc7f4 100644
--- a/g-golf/override/gdk.scm
+++ b/g-golf/override/gdk.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2021
+;;;; Copyright (C) 2021 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -36,12 +36,10 @@
#f
`(lambda (clipboard value)
(let* ((i-func ,proc)
- (g-value-set-value
- ,(@@ (g-golf hl-api gobject) %g-inst-set-property-value))
(g-type (scm->g-type value))
(g-value (g-value-init g-type)))
(g-value-set! g-value
- (g-value-set-value g-type value))
+ (scm->g-property g-type value))
(i-func clipboard g-value)
(g-value-unset g-value)
(values)))
@@ -53,14 +51,12 @@
#f
`(lambda (content-provider)
(let* ((i-func ,proc)
- (g-value-get-value
- ,(@@ (g-golf hl-api gobject) %g-inst-get-property-value))
(content-formats (ref-formats content-provider))
(g-types (gdk-content-formats-get-gtypes content-formats))
(g-type (car g-types))
(g-value (g-value-init g-type))
(dum (i-func content-provider g-value))
- (value (g-value-get-value g-value)))
+ (value (g-value->scm g-value g-type)))
(g-boxed-free (g-param-spec-type
(g-object-class-find-property
(!g-class (class-of content-provider))
diff --git a/g-golf/override/gtk.scm b/g-golf/override/gtk.scm
index 46437da..2f0d776 100644
--- a/g-golf/override/gtk.scm
+++ b/g-golf/override/gtk.scm
@@ -43,9 +43,8 @@
#f
`(lambda (container child name)
(let* ((i-func ,proc)
- (g-value-get-value
- ,(@@ (g-golf hl-api gobject) %g-inst-get-property-value))
- (g-class (!g-class (class-of container)))
+ (class (class-of container))
+ (g-class (!g-class class))
(p-spec
(gtk-container-class-find-child-property g-class name)))
(if p-spec
@@ -55,7 +54,7 @@
(dum (begin
(i-func container child name g-value)
#t))
- (value (g-value-get-value g-value)))
+ (value (g-value->scm g-value g-type)))
(g-value-unset g-value)
value)
(error "No child property" container name))))
@@ -66,8 +65,6 @@
#f
`(lambda (container child name value)
(let* ((i-func ,proc)
- (g-value-set-value
- ,(@@ (g-golf hl-api gobject) %g-inst-set-property-value))
(g-class (!g-class (class-of container)))
(p-spec
(gtk-container-class-find-child-property g-class name)))
@@ -76,7 +73,7 @@
(g-type (g-value-type default-value))
(g-value (g-value-init g-type)))
(g-value-set! g-value
- (g-value-set-value g-type value))
+ (scm->g-property g-type value))
(i-func container child name g-value)
(g-value-unset g-value)
(values))
@@ -97,12 +94,10 @@
'(("Gtk" "TreeModel"))
`(lambda (store iter column value)
(let* ((i-func ,proc)
- (g-value-set-value
- ,(@@ (g-golf hl-api gobject) %g-inst-set-property-value))
(g-type (gtk-tree-model-get-column-type store column))
(g-value (g-value-init g-type)))
(g-value-set! g-value
- (g-value-set-value g-type value))
+ (scm->g-property g-type value))
(i-func store iter column g-value)
(g-value-unset g-value)
(values)))
@@ -113,12 +108,10 @@
'(("Gtk" "TreeModel"))
`(lambda (store iter column value)
(let* ((i-func ,proc)
- (g-value-set-value
- ,(@@ (g-golf hl-api gobject) %g-inst-set-property-value))
(g-type (gtk-tree-model-get-column-type store column))
(g-value (g-value-init g-type)))
(g-value-set! g-value
- (g-value-set-value g-type value))
+ (scm->g-property g-type value))
(i-func store iter column g-value)
(g-value-unset g-value)
(values)))
@@ -129,14 +122,13 @@
#f
`(lambda (model iter column)
(let* ((i-func ,proc)
- (g-value-get-value
- ,(@@ (g-golf hl-api gobject) %g-inst-get-property-value))
- (g-value (g-value-new))
- (dum (i-func model iter column g-value))
- (value (g-value-get-value g-value)))
- (g-value-unset g-value)
- value))
- '(0 1 2)))
+ (g-value (g-value-new)))
+ (i-func model iter column g-value)
+ (let* ((g-type (g-value-type g-value))
+ (value (g-value->scm g-value g-type)))
+ (g-value-unset g-value)
+ value)))
+ '(0 1 2)))
(define (gtk-text-buffer-insert-ov proc)
diff --git a/g-golf/support.scm b/g-golf/support.scm
index 595898a..a3d8201 100644
--- a/g-golf/support.scm
+++ b/g-golf/support.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2016 - 2022
+;;;; Copyright (C) 2016 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -50,6 +50,7 @@
#:use-module (g-golf support union)
#:use-module (g-golf support bytevector)
#:use-module (g-golf support ffi)
+ #:use-module (g-golf support sxml)
#:duplicates (merge-generics
replace
@@ -73,4 +74,5 @@
(g-golf support struct)
(g-golf support union)
(g-golf support bytevector)
- (g-golf support ffi)))
+ (g-golf support ffi)
+ (g-golf support sxml)))
diff --git a/g-golf/support/goops.scm b/g-golf/support/goops.scm
index 58a259d..a956580 100644
--- a/g-golf/support/goops.scm
+++ b/g-golf/support/goops.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2016, 2021
+;;;; Copyright (C) 2016, 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -63,6 +63,10 @@
class-virtual-slots
class-direct-g-property-slots
class-g-property-slots
+ class-direct-child-id-slots
+ class-child-id-slots
+ class-direct-g-param-slots
+ class-g-param-slots
#;describe)
@@ -111,6 +115,38 @@
slot-definition))
(class-slots self)))
+(define-method (class-direct-child-id-slots (self <class>))
+ (filter-map (lambda (slot-definition)
+ (and (get-keyword #:child-id
+ (slot-definition-options slot-definition)
+ #f)
+ slot-definition))
+ (class-direct-slots self)))
+
+(define-method (class-child-id-slots (self <class>))
+ (filter-map (lambda (slot-definition)
+ (and (get-keyword #:child-id
+ (slot-definition-options slot-definition)
+ #f)
+ slot-definition))
+ (class-slots self)))
+
+(define-method (class-direct-g-param-slots (self <class>))
+ (filter-map (lambda (slot-definition)
+ (and (get-keyword #:g-param
+ (slot-definition-options slot-definition)
+ #f)
+ slot-definition))
+ (class-direct-slots self)))
+
+(define-method (class-g-param-slots (self <class>))
+ (filter-map (lambda (slot-definition)
+ (and (get-keyword #:g-param
+ (slot-definition-options slot-definition)
+ #f)
+ slot-definition))
+ (class-slots self)))
+
#;(define-method* (describe (self <object>) #:key (port #t))
(format port "~S - instance of ~A~%"
self
diff --git a/g-golf/support/libg-golf.scm b/g-golf/support/libg-golf.scm
index 0e395bb..9985472 100644
--- a/g-golf/support/libg-golf.scm
+++ b/g-golf/support/libg-golf.scm
@@ -46,6 +46,7 @@
g_source_ref_count
;; GObject
+ g_type_from_class
g_value_size
g_object_type
#;g_object_type_name
@@ -54,6 +55,29 @@
g_closure_ref_count
g_param_spec_get_flags
+ g_type_param_boolean
+ g_type_param_char
+ g_type_param_uchar
+ g_type_param_int
+ g_type_param_uint
+ g_type_param_long
+ g_type_param_ulong
+ g_type_param_int64
+ g_type_param_uint64
+ g_type_param_float
+ g_type_param_double
+ g_type_param_enum
+ g_type_param_flags
+ g_type_param_string
+ g_type_param_param
+ g_type_param_boxed
+ g_type_param_pointer
+ g_type_param_object
+ g_type_param_unichar
+ g_type_param_override
+ g_type_param_gtype
+ g_type_param_variant
+
;; Callback
g_golf_callback_closure
@@ -136,6 +160,12 @@
;;; GObject
;;;
+(define g_type_from_class
+ (pointer->procedure size_t
+ (dynamic-func "g_type_from_class"
+ %libg-golf)
+ (list '*)))
+
(define g_value_size
(pointer->procedure size_t
(dynamic-func "g_value_size"
@@ -194,6 +224,138 @@ later.
%libg-golf)
(list '*)))
+(define g_type_param_boolean
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_boolean"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_char
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_char"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_uchar
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_uchar"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_int
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_int"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_uint
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_uint"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_long
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_long"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_ulong
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_ulong"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_int64
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_int64"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_uint64
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_uint64"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_float
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_float"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_double
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_double"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_enum
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_enum"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_flags
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_flags"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_string
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_string"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_param
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_param"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_boxed
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_boxed"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_pointer
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_pointer"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_object
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_object"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_unichar
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_unichar"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_override
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_override"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_gtype
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_gtype"
+ %libg-golf)
+ (list)))
+
+(define g_type_param_variant
+ (pointer->procedure size_t
+ (dynamic-func "g_type_param_variant"
+ %libg-golf)
+ (list)))
+
;;;
;;; Callback
diff --git a/g-golf/support/sxml.scm b/g-golf/support/sxml.scm
new file mode 100644
index 0000000..f5e639b
--- /dev/null
+++ b/g-golf/support/sxml.scm
@@ -0,0 +1,61 @@
+;; -*- mode: scheme; coding: utf-8 -*-
+
+;;;;
+;;;; Copyright (C) 2023
+;;;; Free Software Foundation, Inc.
+
+;;;; This file is part of GNU G-Golf
+
+;;;; GNU G-Golf 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 3 of the
+;;;; License, or (at your option) any later version.
+
+;;;; GNU G-Golf 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 GNU G-Golf. If not, see
+;;;; <https://www.gnu.org/licenses/lgpl.html>.
+;;;;
+
+;;; Commentary:
+
+;;; Code:
+
+
+(define-module (g-golf support sxml)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 receive)
+ #:use-module (ice-9 pretty-print)
+ #:use-module (sxml simple)
+ #:use-module (sxml transform)
+
+ #:export (ui->sxml
+ sxml->ui))
+
+
+;;;
+;;; sxml support for template and ui files
+;;; wip
+
+(define (ui->sxml filename)
+ (let* ((d-name (dirname filename))
+ (b-name (basename filename ".ui"))
+ (s-name (string-append d-name "/" b-name ".scm")))
+ (call-with-output-file s-name
+ (lambda (port)
+ (pretty-print (call-with-input-file filename
+ (lambda (port) (xml->sxml port #:trim-whitespace? #t)))
+ port)))))
+
+(define %xml-doctype
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+
+(define* (sxml->ui sxml
+ #:key (transform-rules '()))
+ (display %xml-doctype)
+ (sxml->xml sxml)
+ (display "\n"))
diff --git a/g-golf/support/utils.scm b/g-golf/support/utils.scm
index 1d0458e..1c57132 100644
--- a/g-golf/support/utils.scm
+++ b/g-golf/support/utils.scm
@@ -43,6 +43,7 @@
stow->alist
displayln
+ writeln
dimfi
warning
abort
@@ -112,6 +113,15 @@
(display msg)
(newline))))
+(define* (writeln msg #:optional (port #f))
+ (if port
+ (begin
+ (write msg port)
+ (newline port))
+ (begin
+ (write msg)
+ (newline))))
+
(define (dimfi . items)
;; if the first item is a port, we use it.
(if (port? (car items))
diff --git a/libg-golf/gg-gobject.c b/libg-golf/gg-gobject.c
index 079e5f1..13e084b 100644
--- a/libg-golf/gg-gobject.c
+++ b/libg-golf/gg-gobject.c
@@ -1,7 +1,7 @@
/* -*- mode: C; coding: utf-8 -*-
####
-#### Copyright (C) 2021
+#### Copyright (C) 2021 - 2023
#### Free Software Foundation, Inc.
#### This file is part of GNU G-Golf.
@@ -35,8 +35,22 @@
/*
+ * Type Information
+*/
+
+GType
+g_type_from_class (GTypeClass *g_class)
+{
+ GType type;
+
+ type = G_TYPE_FROM_CLASS(g_class);
+
+ return (type);
+}
+
+
+/*
* GObject
- *
*/
size_t
@@ -87,8 +101,154 @@ g_closure_ref_count (GClosure *closure)
return (closure->ref_count);
}
+
+/*
+ * GParamFlags
+ */
+
GParamFlags
g_param_spec_get_flags (GParamSpec *pspec)
{
return pspec->flags;
}
+
+
+/*
+ * Parameters and Values
+ * Types and Values
+ */
+
+GType
+g_type_param_boolean ()
+{
+ return G_TYPE_PARAM_BOOLEAN;
+}
+
+GType
+g_type_param_char ()
+{
+ return G_TYPE_PARAM_CHAR;
+}
+
+GType
+g_type_param_uchar ()
+{
+ return G_TYPE_PARAM_UCHAR;
+}
+
+GType
+g_type_param_int ()
+{
+ return G_TYPE_PARAM_INT;
+}
+
+GType
+g_type_param_uint ()
+{
+ return G_TYPE_PARAM_UINT;
+}
+
+GType
+g_type_param_long ()
+{
+ return G_TYPE_PARAM_LONG;
+}
+
+GType
+g_type_param_ulong ()
+{
+ return G_TYPE_PARAM_ULONG;
+}
+
+GType
+g_type_param_int64 ()
+{
+ return G_TYPE_PARAM_INT64;
+}
+
+GType
+g_type_param_uint64 ()
+{
+ return G_TYPE_PARAM_UINT64;
+}
+
+GType
+g_type_param_float ()
+{
+ return G_TYPE_PARAM_FLOAT;
+}
+
+GType
+g_type_param_double ()
+{
+ return G_TYPE_PARAM_DOUBLE;
+}
+
+GType
+g_type_param_enum ()
+{
+ return G_TYPE_PARAM_ENUM;
+}
+
+GType
+g_type_param_flags ()
+{
+ return G_TYPE_PARAM_FLAGS;
+}
+
+GType
+g_type_param_string ()
+{
+ return G_TYPE_PARAM_STRING;
+}
+/* G_VALUE_INTERNED_STRING */
+
+GType
+g_type_param_param ()
+{
+ return G_TYPE_PARAM_PARAM;
+}
+
+GType
+g_type_param_boxed ()
+{
+ return G_TYPE_PARAM_BOXED;
+}
+
+GType
+g_type_param_pointer ()
+{
+ return G_TYPE_PARAM_POINTER;
+}
+
+GType
+g_type_param_object ()
+{
+ return G_TYPE_PARAM_OBJECT;
+}
+
+GType
+g_type_param_unichar ()
+{
+ return G_TYPE_PARAM_UNICHAR;
+}
+
+/* G_TYPE_PARAM_VALUE_ARRAY deprecated in 2.32 */
+
+GType
+g_type_param_override ()
+{
+ return G_TYPE_PARAM_OVERRIDE;
+}
+
+GType
+g_type_param_gtype ()
+{
+ return G_TYPE_PARAM_GTYPE;
+}
+
+GType
+g_type_param_variant ()
+{
+ return G_TYPE_PARAM_VARIANT;
+}
diff --git a/libg-golf/gg-gobject.h b/libg-golf/gg-gobject.h
index 6ace0b5..dc39a44 100644
--- a/libg-golf/gg-gobject.h
+++ b/libg-golf/gg-gobject.h
@@ -1,7 +1,7 @@
/* -*- mode: C; coding: utf-8 -*-
####
-#### Copyright (C) 2021
+#### Copyright (C) 2021 - 2023
#### Free Software Foundation, Inc.
#### This file is part of GNU G-Golf.
@@ -35,8 +35,15 @@
/*
+ * Type Information
+*/
+
+GType
+g_type_from_class (GTypeClass *g_class);
+
+
+/*
* GObject
- *
*/
size_t
@@ -58,5 +65,84 @@ uint
g_closure_ref_count (GClosure *closure);
+/*
+ * GParamFlags
+ */
+
GParamFlags
g_param_spec_get_flags (GParamSpec *pspec);
+
+
+/*
+ * Parameters and Values
+ * Types and Values
+ */
+
+GType
+g_type_param_boolean ();
+
+GType
+g_type_param_char ();
+
+GType
+g_type_param_uchar ();
+
+GType
+g_type_param_int ();
+
+GType
+g_type_param_uint ();
+
+GType
+g_type_param_long ();
+
+GType
+g_type_param_ulong ();
+
+GType
+g_type_param_int64 ();
+
+GType
+g_type_param_uint64 ();
+
+GType
+g_type_param_float ();
+
+GType
+g_type_param_double ();
+
+GType
+g_type_param_enum ();
+
+GType
+g_type_param_flags ();
+
+GType
+g_type_param_string ();
+/* G_VALUE_INTERNED_STRING */
+
+GType
+g_type_param_param ();
+
+GType
+g_type_param_boxed ();
+
+GType
+g_type_param_pointer ();
+
+GType
+g_type_param_object ();
+
+GType
+g_type_param_unichar ();
+
+/* G_TYPE_PARAM_VALUE_ARRAY deprecated in 2.32 */
+
+GType
+g_type_param_override ();
+
+GType
+g_type_param_gtype ();
+
+GType
+g_type_param_variant ();
diff --git a/test-suite/tests/glib.scm b/test-suite/tests/glib.scm
index 23fbfae..e7f2d96 100644
--- a/test-suite/tests/glib.scm
+++ b/test-suite/tests/glib.scm
@@ -81,6 +81,11 @@
(assert (g-memdup mem 10))
(assert (g-memdup mem 20))))
+#!
+
+;; as discussed in #gtk, calling make-thread is the route for problems
+;; with the main context ... see (tests hl-api) for other none threaded
+;; tests of g-main-loop and related procedures,
(define-method (test-main-loop (self <g-golf-test-glib>))
(let* ((loop (assert (g-main-loop-new #f #f)))
@@ -90,6 +95,7 @@
(assert (g-main-loop-quit loop))
(cancel-thread thread)))
+!#
(define-method (test-main-context (self <g-golf-test-glib>))
(assert (g-main-context-new))
diff --git a/test-suite/tests/gobject.scm b/test-suite/tests/gobject.scm
index 8366dba..b492495 100644
--- a/test-suite/tests/gobject.scm
+++ b/test-suite/tests/gobject.scm
@@ -1,7 +1,7 @@
;; -*- mode: scheme; coding: utf-8 -*-
;;;;
-;;;; Copyright (C) 2016 - 2022
+;;;; Copyright (C) 2016 - 2023
;;;; Free Software Foundation, Inc.
;;;; This file is part of GNU G-Golf
@@ -250,6 +250,35 @@
;;;
+;;; Parameter and Values
+;;;
+
+(define-method (test-g-params-vals (self <g-golf-test-gobject>))
+ (assert (g-type-param-boolean))
+ (assert (g-type-param-char))
+ (assert (g-type-param-uchar))
+ (assert (g-type-param-int))
+ (assert (g-type-param-uint))
+ (assert (g-type-param-long))
+ (assert (g-type-param-ulong))
+ (assert (g-type-param-int64))
+ (assert (g-type-param-uint64))
+ (assert (g-type-param-float))
+ (assert (g-type-param-double))
+ (assert (g-type-param-enum))
+ (assert (g-type-param-flags))
+ (assert (g-type-param-string))
+ (assert (g-type-param-param))
+ (assert (g-type-param-boxed))
+ (assert (g-type-param-pointer))
+ (assert (g-type-param-object))
+ (assert (g-type-param-unichar))
+ (assert (g-type-param-override))
+ (assert (g-type-param-gtype))
+ (assert (g-type-param-variant)))
+
+
+;;;
;;; Param Spec
;;;
diff --git a/test-suite/tests/hl-api.scm b/test-suite/tests/hl-api.scm
index 2f9de63..d7cc7b7 100644
--- a/test-suite/tests/hl-api.scm
+++ b/test-suite/tests/hl-api.scm
@@ -273,6 +273,38 @@
(define-method (test-g-idle-add (self <g-golf-test-hl-api>))
(let* ((loop (g-main-loop-new #f #f))
(idle (assert (g-idle-add (lambda ()
+ (g-main-loop-quit loop)
+ #f)))))
+ (g-main-loop-run loop)))
+
+
+(define-method (test-g-timeout-add (self <g-golf-test-hl-api>))
+ (let* ((loop (g-main-loop-new #f #f))
+ (idle (assert (g-timeout-add 1000
+ (lambda ()
+ (g-main-loop-quit loop)
+ #f)))))
+ (g-main-loop-run loop)))
+
+
+(define-method (test-g-timeout-add-seconds (self <g-golf-test-hl-api>))
+ (let* ((loop (g-main-loop-new #f #f))
+ (idle (assert (g-timeout-add-seconds 1
+ (lambda ()
+ (g-main-loop-quit loop)
+ #f)))))
+ (g-main-loop-run loop)))
+
+
+#!
+
+;; as discussed in #gtk, calling make-thread is the route for problems
+;; with the main context ... or it cancels the thread before the timeout
+;; triggers or some other problem related to threads
+
+(define-method (test-g-idle-add (self <g-golf-test-hl-api>))
+ (let* ((loop (g-main-loop-new #f #f))
+ (idle (assert (g-idle-add (lambda ()
'ok
#f))))
(thread (make-thread g-main-loop-run loop)))
@@ -298,6 +330,8 @@
(thread (make-thread g-main-loop-run loop)))
(cancel-thread thread)))
+!#
+
;;;
;;; GList - GSList