[libgtkmusic] build: Build scripts updated to new autotools



commit 4e2d75b0061e4eadcf430e277e512e5b35616f6b
Author: Leandro Mattioli <leandro mattioli gmail com>
Date:   Tue Aug 13 22:12:23 2013 -0300

    build: Build scripts updated to new autotools
    
    Project updated with 'autoreconf --install'

 Makefile.am              |   32 +-
 Makefile.in              |  965 +++++++++++----
 aclocal.m4               |   74 +-
 build-aux/config.guess   |   49 +-
 build-aux/config.sub     |   74 +-
 build-aux/install-sh     |   29 +-
 build-aux/ltmain.sh      |   95 +-
 configure                |  428 +++----
 m4/ltversion.m4          |   10 +-
 src/GuitarWidget.c       | 3081 ++++++++++++++++++++++++++++++++++++++++++++++
 src/MusicalNotes.c       |  883 +++++++++++++
 src/PianoWidget.c        | 1864 ++++++++++++++++++++++++++++
 test/TestsGuitar.c       |   96 +-
 test/TestsMusicalNotes.c |    2 +-
 test/TestsPiano.c        |   56 +-
 test/TestsPiano.vala     |    2 +-
 16 files changed, 7005 insertions(+), 735 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 9fe25d2..72b0fb7 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -126,19 +126,19 @@ CLEANFILES += \
 ###############################################################################
 
 #TODO Find a more elegant way of doing this
-#bin_PROGRAMS = tests_notes tests_piano tests_guitar
-#COMMON_CFLAGS = $(LIBGTKMUSICDEPS_CFLAGS) `pkg-config --cflags gtkmusic-0.2`
-#COMMON_LIBS = $(LIBGTKMUSICDEPS_LIBS) `pkg-config --libs gtkmusic-0.2`
-#COMMON_VALAFLAGS = --pkg gee-0.8 --pkg gtkmusic-0.2 --pkg gtk+-3.0
-#tests_notes_SOURCES = $(srcdir)/test/TestsMusicalNotes.vala
-#tests_notes_VALAFLAGS = $(COMMON_VALAFLAGS)
-#tests_notes_CFLAGS= $(COMMON_CFLAGS)
-#tests_notes_LDFLAGS= $(COMMON_LIBS)
-#tests_piano_SOURCES = $(srcdir)/test/TestsPiano.vala
-#tests_piano_VALAFLAGS = $(COMMON_VALAFLAGS)
-#tests_piano_CFLAGS=$(COMMON_CFLAGS)
-#tests_piano_LDFLAGS=$(COMMON_LIBS)
-#tests_guitar_SOURCES = $(srcdir)/test/TestsGuitar.vala
-#tests_guitar_VALAFLAGS = $(COMMON_VALAFLAGS)
-#tests_guitar_CFLAGS=$(COMMON_CFLAGS)
-#tests_guitar_LDFLAGS=$(COMMON_LIBS)
+bin_PROGRAMS = tests_notes tests_piano tests_guitar
+COMMON_CFLAGS = $(LIBGTKMUSICDEPS_CFLAGS) `pkg-config --cflags gtkmusic-0.2`
+COMMON_LIBS = $(LIBGTKMUSICDEPS_LIBS) `pkg-config --libs gtkmusic-0.2`
+COMMON_VALAFLAGS = --pkg gee-0.8 --pkg gtkmusic-0.2 --pkg gtk+-3.0
+tests_notes_SOURCES = $(srcdir)/test/TestsMusicalNotes.vala
+tests_notes_VALAFLAGS = $(COMMON_VALAFLAGS)
+tests_notes_CFLAGS= $(COMMON_CFLAGS)
+tests_notes_LDFLAGS= $(COMMON_LIBS)
+tests_piano_SOURCES = $(srcdir)/test/TestsPiano.vala
+tests_piano_VALAFLAGS = $(COMMON_VALAFLAGS)
+tests_piano_CFLAGS=$(COMMON_CFLAGS)
+tests_piano_LDFLAGS=$(COMMON_LIBS)
+tests_guitar_SOURCES = $(srcdir)/test/TestsGuitar.vala
+tests_guitar_VALAFLAGS = $(COMMON_VALAFLAGS)
+tests_guitar_CFLAGS=$(COMMON_CFLAGS)
+tests_guitar_LDFLAGS=$(COMMON_LIBS)
diff --git a/Makefile.in b/Makefile.in
index e96dc53..3e41ff0 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.6 from Makefile.am.
 # @configure_input@
 
 # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -15,7 +15,27 @@
 
 @SET_MAKE@
 
+
+
+
 VPATH = @srcdir@
+am__make_dryrun = \
+  { \
+    am__dry=no; \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        echo 'am--echo: ; @echo "AM"  OK' | $(MAKE) -f - 2>/dev/null \
+          | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
+      *) \
+        for am__flg in $$MAKEFLAGS; do \
+          case $$am__flg in \
+            *=*|--*) ;; \
+            *n*) am__dry=yes; break;; \
+          esac; \
+        done;; \
+    esac; \
+    test $$am__dry = yes; \
+  }
 pkgdatadir = $(datadir)/@PACKAGE@
 pkgincludedir = $(includedir)/@PACKAGE@
 pkglibdir = $(libdir)/@PACKAGE@
@@ -34,15 +54,28 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
- ENABLE_GLADE_CATALOG_TRUE@am__append_1 = glade
+ ENABLE_GLADE_CATALOG_TRUE@am__append_1 = \
+ ENABLE_GLADE_CATALOG_TRUE@    $(catalog_DATA) \
+ ENABLE_GLADE_CATALOG_TRUE@    $(icons)
+
+bin_PROGRAMS = tests_notes$(EXEEXT) tests_piano$(EXEEXT) \
+       tests_guitar$(EXEEXT)
 subdir = .
 DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \
+       $(dist_vapi_DATA) $(gtkmusicinclude_HEADERS) \
        $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
        $(srcdir)/config.h.in $(srcdir)/gtkmusic-0.2.pc.in \
-       $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
-       build-aux/compile build-aux/config.guess build-aux/config.sub \
-       build-aux/depcomp build-aux/install-sh build-aux/ltmain.sh \
-       build-aux/missing
+       $(srcdir)/src/GuitarWidget.c $(srcdir)/src/MusicalNotes.c \
+       $(srcdir)/src/PianoWidget.c $(srcdir)/test/TestsGuitar.c \
+       $(srcdir)/test/TestsMusicalNotes.c $(srcdir)/test/TestsPiano.c \
+       $(top_srcdir)/configure AUTHORS COPYING ChangeLog \
+       GtkMusic-0.2.gir INSTALL NEWS build-aux/compile \
+       build-aux/config.guess build-aux/config.sub build-aux/depcomp \
+       build-aux/install-sh build-aux/ltmain.sh build-aux/missing \
+       gtkmusic-0.2.vapi gtkmusic-internals-0.2.vapi \
+       gtkmusic-internals.h gtkmusic.h libgtkmusic_0_2_la_vala.stamp \
+       tests_guitar_vala.stamp tests_notes_vala.stamp \
+       tests_piano_vala.stamp
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
        $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
@@ -56,15 +89,6 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES = gtkmusic-0.2.pc
 CONFIG_CLEAN_VPATH_FILES =
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-dvi-recursive install-exec-recursive \
-       install-html-recursive install-info-recursive \
-       install-pdf-recursive install-ps-recursive install-recursive \
-       installcheck-recursive installdirs-recursive pdf-recursive \
-       ps-recursive uninstall-recursive
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -86,51 +110,90 @@ am__nobase_list = $(am__nobase_strip_setup); \
 am__base_list = \
   sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
   sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
-am__installdirs = "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)"
-DATA = $(dist_doc_DATA) $(pkgconfig_DATA)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
-  distclean-recursive maintainer-clean-recursive
-AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
-       $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
-       distdir dist dist-all distcheck
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
+       "$(DESTDIR)$(catalogdir)" "$(DESTDIR)$(docdir)" \
+       "$(DESTDIR)$(vapidir)" "$(DESTDIR)$(girdir)" \
+       "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(typelibdir)" \
+       "$(DESTDIR)$(gtkmusicincludedir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libgtkmusic_0_2_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libgtkmusic_0_2_la_OBJECTS = libgtkmusic_0_2_la-GuitarWidget.lo \
+       libgtkmusic_0_2_la-PianoWidget.lo \
+       libgtkmusic_0_2_la-MusicalNotes.lo
+libgtkmusic_0_2_la_OBJECTS = $(am_libgtkmusic_0_2_la_OBJECTS)
+libgtkmusic_0_2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(libgtkmusic_0_2_la_LDFLAGS) $(LDFLAGS) -o $@
+PROGRAMS = $(bin_PROGRAMS)
+am_tests_guitar_OBJECTS = tests_guitar-TestsGuitar.$(OBJEXT)
+tests_guitar_OBJECTS = $(am_tests_guitar_OBJECTS)
+tests_guitar_LDADD = $(LDADD)
+tests_guitar_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tests_guitar_CFLAGS) \
+       $(CFLAGS) $(tests_guitar_LDFLAGS) $(LDFLAGS) -o $@
+am_tests_notes_OBJECTS = tests_notes-TestsMusicalNotes.$(OBJEXT)
+tests_notes_OBJECTS = $(am_tests_notes_OBJECTS)
+tests_notes_LDADD = $(LDADD)
+tests_notes_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tests_notes_CFLAGS) \
+       $(CFLAGS) $(tests_notes_LDFLAGS) $(LDFLAGS) -o $@
+am_tests_piano_OBJECTS = tests_piano-TestsPiano.$(OBJEXT)
+tests_piano_OBJECTS = $(am_tests_piano_OBJECTS)
+tests_piano_LDADD = $(LDADD)
+tests_piano_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(tests_piano_CFLAGS) \
+       $(CFLAGS) $(tests_piano_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I  am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+       $(LDFLAGS) -o $@
+VALACOMPILE = $(VALAC) $(AM_VALAFLAGS) $(VALAFLAGS)
+LTVALACOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
+       --mode=compile $(VALAC) $(AM_VALAFLAGS) $(VALAFLAGS)
+SOURCES = $(libgtkmusic_0_2_la_SOURCES) $(tests_guitar_SOURCES) \
+       $(tests_notes_SOURCES) $(tests_piano_SOURCES)
+DIST_SOURCES = $(libgtkmusic_0_2_la_SOURCES) $(tests_guitar_SOURCES) \
+       $(tests_notes_SOURCES) $(tests_piano_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DATA = $(catalog_DATA) $(dist_doc_DATA) $(dist_vapi_DATA) $(gir_DATA) \
+       $(pkgconfig_DATA) $(typelib_DATA)
+HEADERS = $(gtkmusicinclude_HEADERS)
 ETAGS = etags
 CTAGS = ctags
-DIST_SUBDIRS = src glade
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
 am__remove_distdir = \
-  { test ! -d "$(distdir)" \
-    || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr "$(distdir)"; }; }
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
 DIST_ARCHIVES = $(distdir).tar.gz
 GZIP_ENV = --best
 distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
 distcleancheck_listfiles = find . -type f -print
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -177,8 +240,6 @@ LD = @LD@
 LDFLAGS = @LDFLAGS@
 LIBGTKMUSICDEPS_CFLAGS = @LIBGTKMUSICDEPS_CFLAGS@
 LIBGTKMUSICDEPS_LIBS = @LIBGTKMUSICDEPS_LIBS@
-LIBGTKMUSIC_CFLAGS = @LIBGTKMUSIC_CFLAGS@
-LIBGTKMUSIC_LIBS = @LIBGTKMUSIC_LIBS@
 LIBGTKMUSIC_LT_VERSION = @LIBGTKMUSIC_LT_VERSION@
 LIBOBJS = @LIBOBJS@
 LIBS = @LIBS@
@@ -266,26 +327,88 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
+CLEANFILES = gtkmusic-0.2.vapi gtkmusic-internals-0.2.vapi \
+       GtkMusic-0.2.gir GtkMusic-0.2.typelib gtkmusic.h \
+       gtkmusic-internals.h
+EXTRA_DIST = gtkmusic-0.2.pc.in $(am__append_1)
+
+###############################################################################
+# root
+###############################################################################
 dist_doc_DATA = README
 ACLOCAL_AMFLAGS = -I m4
-
-#if ENABLE_DOC
-#DOC_SUBDIR = doc
-#endif
-
-#if ENABLE_BENCHMARK
-#BENCHMARK_SUBDIR = benchmark
-#endif
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = gtkmusic-0.2.pc
-EXTRA_DIST = gtkmusic-0.2.pc.in
-SUBDIRS = src $(DOC_SUBDIR) $(BENCHMARK_SUBDIR) $(am__append_1)
 DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
+
+###############################################################################
+# glade
+###############################################################################
+
+#Thanks vte for the example!
+ ENABLE_GLADE_CATALOG_TRUE@catalogdir = $(GLADE_CATALOG_DIR)
+ ENABLE_GLADE_CATALOG_TRUE@catalog_DATA = $(srcdir)/glade/gtkmusic-catalog.xml
+ ENABLE_GLADE_CATALOG_TRUE@icons = \
+ ENABLE_GLADE_CATALOG_TRUE@    $(srcdir)/glade/hicolor_actions_16x16_widget-gtkmusic-guitar.png \
+ ENABLE_GLADE_CATALOG_TRUE@    $(srcdir)/glade/hicolor_actions_22x22_widget-gtkmusic-guitar.png \
+ ENABLE_GLADE_CATALOG_TRUE@    $(srcdir)/glade/hicolor_actions_16x16_widget-gtkmusic-piano.png \
+ ENABLE_GLADE_CATALOG_TRUE@    $(srcdir)/glade/hicolor_actions_22x22_widget-gtkmusic-piano.png
+
+
+#MAINTAINERCLEANFILES = $(catalog_DATA) glade catalog is not autogenerated
+
+###############################################################################
+# src
+###############################################################################
+lib_LTLIBRARIES = libgtkmusic-0.2.la
+libgtkmusic_0_2_la_SOURCES = \
+       $(srcdir)/src/GuitarWidget.vala \
+       $(srcdir)/src/PianoWidget.vala \
+       $(srcdir)/src/MusicalNotes.vala
+
+libgtkmusic_0_2_la_VALAFLAGS = \
+       -H gtkmusic.h --vapi gtkmusic-0.2.vapi \
+       -h gtkmusic-internals.h \
+       --internal-vapi gtkmusic-internals-0.2.vapi \
+       --library gtkmusic-0.2 --gir GtkMusic-0.2.gir \
+       --pkg gtk+-3.0 --pkg gee-0.8 \
+       $(VALAFLAGS)
+
+libgtkmusic_0_2_la_CPPFLAGS = $(LIBGTKMUSICDEPS_CFLAGS)
+libgtkmusic_0_2_la_LIBADD = $(LIBGTKMUSICDEPS_LIBS)
+libgtkmusic_0_2_la_LDFLAGS = \
+       -version-info $(LIBGTKMUSIC_LT_VERSION) \
+       -no-undefined
+
+gtkmusicincludedir = $(includedir)/gtkmusic-0.2
+gtkmusicinclude_HEADERS = gtkmusic.h
+vapidir = $(datadir)/vala/vapi
+dist_vapi_DATA = gtkmusic-0.2.vapi
+ HAVE_INTROSPECTION_TRUE@girdir = @INTROSPECTION_GIRDIR@
+ HAVE_INTROSPECTION_TRUE@gir_DATA = GtkMusic-0.2.gir
+ HAVE_INTROSPECTION_TRUE@typelibdir = @INTROSPECTION_TYPELIBDIR@
+ HAVE_INTROSPECTION_TRUE@typelib_DATA = GtkMusic-0.2.typelib
+COMMON_CFLAGS = $(LIBGTKMUSICDEPS_CFLAGS) `pkg-config --cflags gtkmusic-0.2`
+COMMON_LIBS = $(LIBGTKMUSICDEPS_LIBS) `pkg-config --libs gtkmusic-0.2`
+COMMON_VALAFLAGS = --pkg gee-0.8 --pkg gtkmusic-0.2 --pkg gtk+-3.0
+tests_notes_SOURCES = $(srcdir)/test/TestsMusicalNotes.vala
+tests_notes_VALAFLAGS = $(COMMON_VALAFLAGS)
+tests_notes_CFLAGS = $(COMMON_CFLAGS)
+tests_notes_LDFLAGS = $(COMMON_LIBS)
+tests_piano_SOURCES = $(srcdir)/test/TestsPiano.vala
+tests_piano_VALAFLAGS = $(COMMON_VALAFLAGS)
+tests_piano_CFLAGS = $(COMMON_CFLAGS)
+tests_piano_LDFLAGS = $(COMMON_LIBS)
+tests_guitar_SOURCES = $(srcdir)/test/TestsGuitar.vala
+tests_guitar_VALAFLAGS = $(COMMON_VALAFLAGS)
+tests_guitar_CFLAGS = $(COMMON_CFLAGS)
+tests_guitar_LDFLAGS = $(COMMON_LIBS)
 all: config.h
-       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+       $(MAKE) $(AM_MAKEFLAGS) all-am
 
 .SUFFIXES:
-am--refresh:
+.SUFFIXES: .c .lo .o .obj
+am--refresh: Makefile
        @:
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
@@ -321,10 +444,8 @@ $(ACLOCAL_M4):  $(am__aclocal_m4_deps)
 $(am__aclocal_m4_deps):
 
 config.h: stamp-h1
-       @if test ! -f $@; then \
-         rm -f stamp-h1; \
-         $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
-       else :; fi
+       @if test ! -f $@; then rm -f stamp-h1; else :; fi
+       @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
 
 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
        @rm -f stamp-h1
@@ -338,6 +459,263 @@ distclean-hdr:
        -rm -f config.h stamp-h1
 gtkmusic-0.2.pc: $(top_builddir)/config.status $(srcdir)/gtkmusic-0.2.pc.in
        cd $(top_builddir) && $(SHELL) ./config.status $@
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+       @$(NORMAL_INSTALL)
+       @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+       list2=; for p in $$list; do \
+         if test -f $$p; then \
+           list2="$$list2 $$p"; \
+         else :; fi; \
+       done; \
+       test -z "$$list2" || { \
+         echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) 
$(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) 
$$list2 "$(DESTDIR)$(libdir)"; \
+       }
+
+uninstall-libLTLIBRARIES:
+       @$(NORMAL_UNINSTALL)
+       @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+       for p in $$list; do \
+         $(am__strip_dir) \
+         echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f 
'$(DESTDIR)$(libdir)/$$f'"; \
+         $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+       done
+
+clean-libLTLIBRARIES:
+       -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+       @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+         dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
+         test "$$dir" != "$$p" || dir=.; \
+         echo "rm -f \"$${dir}/so_locations\""; \
+         rm -f "$${dir}/so_locations"; \
+       done
+libgtkmusic-0.2.la: $(libgtkmusic_0_2_la_OBJECTS) $(libgtkmusic_0_2_la_DEPENDENCIES) 
$(EXTRA_libgtkmusic_0_2_la_DEPENDENCIES) 
+       $(libgtkmusic_0_2_la_LINK) -rpath $(libdir) $(libgtkmusic_0_2_la_OBJECTS) 
$(libgtkmusic_0_2_la_LIBADD) $(LIBS)
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p || test -f $$p1; \
+         then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+           echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install 
$(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+           $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install 
$(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+       ; done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+tests_guitar$(EXEEXT): $(tests_guitar_OBJECTS) $(tests_guitar_DEPENDENCIES) 
$(EXTRA_tests_guitar_DEPENDENCIES) 
+       @rm -f tests_guitar$(EXEEXT)
+       $(tests_guitar_LINK) $(tests_guitar_OBJECTS) $(tests_guitar_LDADD) $(LIBS)
+tests_notes$(EXEEXT): $(tests_notes_OBJECTS) $(tests_notes_DEPENDENCIES) $(EXTRA_tests_notes_DEPENDENCIES) 
+       @rm -f tests_notes$(EXEEXT)
+       $(tests_notes_LINK) $(tests_notes_OBJECTS) $(tests_notes_LDADD) $(LIBS)
+tests_piano$(EXEEXT): $(tests_piano_OBJECTS) $(tests_piano_DEPENDENCIES) $(EXTRA_tests_piano_DEPENDENCIES) 
+       @rm -f tests_piano$(EXEEXT)
+       $(tests_piano_LINK) $(tests_piano_OBJECTS) $(tests_piano_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+ AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/libgtkmusic_0_2_la-GuitarWidget Plo am__quote@
+ AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/libgtkmusic_0_2_la-MusicalNotes Plo am__quote@
+ AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/libgtkmusic_0_2_la-PianoWidget Plo am__quote@
+ AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/tests_guitar-TestsGuitar Po am__quote@
+ AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/tests_notes-TestsMusicalNotes Po am__quote@
+ AMDEP_TRUE@@am__include@ @am__quote  /$(DEPDIR)/tests_piano-TestsPiano Po am__quote@
+
+.c.o:
+ am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(COMPILE) -c $<
+
+.c.obj:
+ am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
+
+libgtkmusic_0_2_la-GuitarWidget.lo: $(srcdir)/src/GuitarWidget.c
+ am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libgtkmusic_0_2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT 
libgtkmusic_0_2_la-GuitarWidget.lo -MD -MP -MF $(DEPDIR)/libgtkmusic_0_2_la-GuitarWidget.Tpo -c -o 
libgtkmusic_0_2_la-GuitarWidget.lo `test -f '$(srcdir)/src/GuitarWidget.c' || echo 
'$(srcdir)/'`$(srcdir)/src/GuitarWidget.c
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libgtkmusic_0_2_la-GuitarWidget.Tpo 
$(DEPDIR)/libgtkmusic_0_2_la-GuitarWidget.Plo
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/src/GuitarWidget.c' 
object='libgtkmusic_0_2_la-GuitarWidget.lo' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libgtkmusic_0_2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o 
libgtkmusic_0_2_la-GuitarWidget.lo `test -f '$(srcdir)/src/GuitarWidget.c' || echo 
'$(srcdir)/'`$(srcdir)/src/GuitarWidget.c
+
+libgtkmusic_0_2_la-PianoWidget.lo: $(srcdir)/src/PianoWidget.c
+ am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libgtkmusic_0_2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT 
libgtkmusic_0_2_la-PianoWidget.lo -MD -MP -MF $(DEPDIR)/libgtkmusic_0_2_la-PianoWidget.Tpo -c -o 
libgtkmusic_0_2_la-PianoWidget.lo `test -f '$(srcdir)/src/PianoWidget.c' || echo 
'$(srcdir)/'`$(srcdir)/src/PianoWidget.c
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libgtkmusic_0_2_la-PianoWidget.Tpo 
$(DEPDIR)/libgtkmusic_0_2_la-PianoWidget.Plo
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/src/PianoWidget.c' 
object='libgtkmusic_0_2_la-PianoWidget.lo' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libgtkmusic_0_2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o 
libgtkmusic_0_2_la-PianoWidget.lo `test -f '$(srcdir)/src/PianoWidget.c' || echo 
'$(srcdir)/'`$(srcdir)/src/PianoWidget.c
+
+libgtkmusic_0_2_la-MusicalNotes.lo: $(srcdir)/src/MusicalNotes.c
+ am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libgtkmusic_0_2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT 
libgtkmusic_0_2_la-MusicalNotes.lo -MD -MP -MF $(DEPDIR)/libgtkmusic_0_2_la-MusicalNotes.Tpo -c -o 
libgtkmusic_0_2_la-MusicalNotes.lo `test -f '$(srcdir)/src/MusicalNotes.c' || echo 
'$(srcdir)/'`$(srcdir)/src/MusicalNotes.c
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libgtkmusic_0_2_la-MusicalNotes.Tpo 
$(DEPDIR)/libgtkmusic_0_2_la-MusicalNotes.Plo
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/src/MusicalNotes.c' 
object='libgtkmusic_0_2_la-MusicalNotes.lo' libtool=yes @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) 
$(DEFAULT_INCLUDES) $(INCLUDES) $(libgtkmusic_0_2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o 
libgtkmusic_0_2_la-MusicalNotes.lo `test -f '$(srcdir)/src/MusicalNotes.c' || echo 
'$(srcdir)/'`$(srcdir)/src/MusicalNotes.c
+
+tests_guitar-TestsGuitar.o: $(srcdir)/test/TestsGuitar.c
+ am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_guitar_CFLAGS) $(CFLAGS) -MT tests_guitar-TestsGuitar.o -MD -MP -MF 
$(DEPDIR)/tests_guitar-TestsGuitar.Tpo -c -o tests_guitar-TestsGuitar.o `test -f 
'$(srcdir)/test/TestsGuitar.c' || echo '$(srcdir)/'`$(srcdir)/test/TestsGuitar.c
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/tests_guitar-TestsGuitar.Tpo $(DEPDIR)/tests_guitar-TestsGuitar.Po
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/test/TestsGuitar.c' 
object='tests_guitar-TestsGuitar.o' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_guitar_CFLAGS) $(CFLAGS) -c -o tests_guitar-TestsGuitar.o `test -f '$(srcdir)/test/TestsGuitar.c' || 
echo '$(srcdir)/'`$(srcdir)/test/TestsGuitar.c
+
+tests_guitar-TestsGuitar.obj: $(srcdir)/test/TestsGuitar.c
+ am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_guitar_CFLAGS) $(CFLAGS) -MT tests_guitar-TestsGuitar.obj -MD -MP -MF 
$(DEPDIR)/tests_guitar-TestsGuitar.Tpo -c -o tests_guitar-TestsGuitar.obj `if test -f 
'$(srcdir)/test/TestsGuitar.c'; then $(CYGPATH_W) '$(srcdir)/test/TestsGuitar.c'; else $(CYGPATH_W) 
'$(srcdir)/$(srcdir)/test/TestsGuitar.c'; fi`
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/tests_guitar-TestsGuitar.Tpo $(DEPDIR)/tests_guitar-TestsGuitar.Po
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/test/TestsGuitar.c' 
object='tests_guitar-TestsGuitar.obj' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_guitar_CFLAGS) $(CFLAGS) -c -o tests_guitar-TestsGuitar.obj `if test -f 
'$(srcdir)/test/TestsGuitar.c'; then $(CYGPATH_W) '$(srcdir)/test/TestsGuitar.c'; else $(CYGPATH_W) 
'$(srcdir)/$(srcdir)/test/TestsGuitar.c'; fi`
+
+tests_notes-TestsMusicalNotes.o: $(srcdir)/test/TestsMusicalNotes.c
+ am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_notes_CFLAGS) $(CFLAGS) -MT tests_notes-TestsMusicalNotes.o -MD -MP -MF 
$(DEPDIR)/tests_notes-TestsMusicalNotes.Tpo -c -o tests_notes-TestsMusicalNotes.o `test -f 
'$(srcdir)/test/TestsMusicalNotes.c' || echo '$(srcdir)/'`$(srcdir)/test/TestsMusicalNotes.c
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/tests_notes-TestsMusicalNotes.Tpo 
$(DEPDIR)/tests_notes-TestsMusicalNotes.Po
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/test/TestsMusicalNotes.c' 
object='tests_notes-TestsMusicalNotes.o' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_notes_CFLAGS) $(CFLAGS) -c -o tests_notes-TestsMusicalNotes.o `test -f 
'$(srcdir)/test/TestsMusicalNotes.c' || echo '$(srcdir)/'`$(srcdir)/test/TestsMusicalNotes.c
+
+tests_notes-TestsMusicalNotes.obj: $(srcdir)/test/TestsMusicalNotes.c
+ am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_notes_CFLAGS) $(CFLAGS) -MT tests_notes-TestsMusicalNotes.obj -MD -MP -MF 
$(DEPDIR)/tests_notes-TestsMusicalNotes.Tpo -c -o tests_notes-TestsMusicalNotes.obj `if test -f 
'$(srcdir)/test/TestsMusicalNotes.c'; then $(CYGPATH_W) '$(srcdir)/test/TestsMusicalNotes.c'; else 
$(CYGPATH_W) '$(srcdir)/$(srcdir)/test/TestsMusicalNotes.c'; fi`
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/tests_notes-TestsMusicalNotes.Tpo 
$(DEPDIR)/tests_notes-TestsMusicalNotes.Po
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/test/TestsMusicalNotes.c' 
object='tests_notes-TestsMusicalNotes.obj' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_notes_CFLAGS) $(CFLAGS) -c -o tests_notes-TestsMusicalNotes.obj `if test -f 
'$(srcdir)/test/TestsMusicalNotes.c'; then $(CYGPATH_W) '$(srcdir)/test/TestsMusicalNotes.c'; else 
$(CYGPATH_W) '$(srcdir)/$(srcdir)/test/TestsMusicalNotes.c'; fi`
+
+tests_piano-TestsPiano.o: $(srcdir)/test/TestsPiano.c
+ am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_piano_CFLAGS) $(CFLAGS) -MT tests_piano-TestsPiano.o -MD -MP -MF $(DEPDIR)/tests_piano-TestsPiano.Tpo 
-c -o tests_piano-TestsPiano.o `test -f '$(srcdir)/test/TestsPiano.c' || echo 
'$(srcdir)/'`$(srcdir)/test/TestsPiano.c
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/tests_piano-TestsPiano.Tpo $(DEPDIR)/tests_piano-TestsPiano.Po
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/test/TestsPiano.c' 
object='tests_piano-TestsPiano.o' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_piano_CFLAGS) $(CFLAGS) -c -o tests_piano-TestsPiano.o `test -f '$(srcdir)/test/TestsPiano.c' || echo 
'$(srcdir)/'`$(srcdir)/test/TestsPiano.c
+
+tests_piano-TestsPiano.obj: $(srcdir)/test/TestsPiano.c
+ am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_piano_CFLAGS) $(CFLAGS) -MT tests_piano-TestsPiano.obj -MD -MP -MF 
$(DEPDIR)/tests_piano-TestsPiano.Tpo -c -o tests_piano-TestsPiano.obj `if test -f 
'$(srcdir)/test/TestsPiano.c'; then $(CYGPATH_W) '$(srcdir)/test/TestsPiano.c'; else $(CYGPATH_W) 
'$(srcdir)/$(srcdir)/test/TestsPiano.c'; fi`
+ am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/tests_piano-TestsPiano.Tpo $(DEPDIR)/tests_piano-TestsPiano.Po
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$(srcdir)/test/TestsPiano.c' 
object='tests_piano-TestsPiano.obj' libtool=no @AMDEPBACKSLASH@
+ AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) 
$(tests_piano_CFLAGS) $(CFLAGS) -c -o tests_piano-TestsPiano.obj `if test -f '$(srcdir)/test/TestsPiano.c'; 
then $(CYGPATH_W) '$(srcdir)/test/TestsPiano.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/test/TestsPiano.c'; 
fi`
+$(srcdir)/$(srcdir)/test/TestsMusicalNotes.c: $(srcdir)/tests_notes_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/tests_notes_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/tests_notes_vala.stamp; \
+       fi
+$(srcdir)/tests_notes_vala.stamp: $(srcdir)/test/TestsMusicalNotes.vala
+       rm -f $@ && echo stamp > $ -t
+       $(am__cd) $(srcdir) && $(VALAC) $(tests_notes_VALAFLAGS) $(VALAFLAGS) -C 
$(srcdir)/test/TestsMusicalNotes.vala
+       mv -f $ -t $@
+$(srcdir)/$(srcdir)/test/TestsGuitar.c: $(srcdir)/tests_guitar_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/tests_guitar_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/tests_guitar_vala.stamp; \
+       fi
+$(srcdir)/tests_guitar_vala.stamp: $(srcdir)/test/TestsGuitar.vala
+       rm -f $@ && echo stamp > $ -t
+       $(am__cd) $(srcdir) && $(VALAC) $(tests_guitar_VALAFLAGS) $(VALAFLAGS) -C 
$(srcdir)/test/TestsGuitar.vala
+       mv -f $ -t $@
+$(srcdir)/$(srcdir)/test/TestsPiano.c: $(srcdir)/tests_piano_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/tests_piano_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/tests_piano_vala.stamp; \
+       fi
+$(srcdir)/tests_piano_vala.stamp: $(srcdir)/test/TestsPiano.vala
+       rm -f $@ && echo stamp > $ -t
+       $(am__cd) $(srcdir) && $(VALAC) $(tests_piano_VALAFLAGS) $(VALAFLAGS) -C 
$(srcdir)/test/TestsPiano.vala
+       mv -f $ -t $@
+$(srcdir)/$(srcdir)/src/GuitarWidget.c: $(srcdir)/libgtkmusic_0_2_la_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/libgtkmusic_0_2_la_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/libgtkmusic_0_2_la_vala.stamp; \
+       fi
+$(srcdir)/$(srcdir)/src/PianoWidget.c: $(srcdir)/libgtkmusic_0_2_la_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/libgtkmusic_0_2_la_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/libgtkmusic_0_2_la_vala.stamp; \
+       fi
+$(srcdir)/$(srcdir)/src/MusicalNotes.c: $(srcdir)/libgtkmusic_0_2_la_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/libgtkmusic_0_2_la_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/libgtkmusic_0_2_la_vala.stamp; \
+       fi
+$(srcdir)/gtkmusic.h: $(srcdir)/libgtkmusic_0_2_la_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/libgtkmusic_0_2_la_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/libgtkmusic_0_2_la_vala.stamp; \
+       fi
+$(srcdir)/gtkmusic-0.2.vapi: $(srcdir)/libgtkmusic_0_2_la_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/libgtkmusic_0_2_la_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/libgtkmusic_0_2_la_vala.stamp; \
+       fi
+$(srcdir)/gtkmusic-internals.h: $(srcdir)/libgtkmusic_0_2_la_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/libgtkmusic_0_2_la_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/libgtkmusic_0_2_la_vala.stamp; \
+       fi
+$(srcdir)/gtkmusic-internals-0.2.vapi: $(srcdir)/libgtkmusic_0_2_la_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/libgtkmusic_0_2_la_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/libgtkmusic_0_2_la_vala.stamp; \
+       fi
+$(srcdir)/GtkMusic-0.2.gir: $(srcdir)/libgtkmusic_0_2_la_vala.stamp
+       @if test -f $@; then :; else rm -f $(srcdir)/libgtkmusic_0_2_la_vala.stamp; fi
+       @if test -f $@; then :; else \
+         $(MAKE) $(AM_MAKEFLAGS) $(srcdir)/libgtkmusic_0_2_la_vala.stamp; \
+       fi
+$(srcdir)/libgtkmusic_0_2_la_vala.stamp: $(srcdir)/src/GuitarWidget.vala $(srcdir)/src/PianoWidget.vala 
$(srcdir)/src/MusicalNotes.vala
+       rm -f $@ && echo stamp > $ -t
+       $(am__cd) $(srcdir) && $(VALAC) $(libgtkmusic_0_2_la_VALAFLAGS) $(VALAFLAGS) -C 
$(srcdir)/src/GuitarWidget.vala $(srcdir)/src/PianoWidget.vala $(srcdir)/src/MusicalNotes.vala
+       mv -f $ -t $@
 
 mostlyclean-libtool:
        -rm -f *.lo
@@ -347,10 +725,34 @@ clean-libtool:
 
 distclean-libtool:
        -rm -f libtool config.lt
+install-catalogDATA: $(catalog_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(catalog_DATA)'; test -n "$(catalogdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(catalogdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(catalogdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(catalogdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(catalogdir)" || exit $$?; \
+       done
+
+uninstall-catalogDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(catalog_DATA)'; test -n "$(catalogdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(catalogdir)'; $(am__uninstall_files_from_dir)
 install-dist_docDATA: $(dist_doc_DATA)
        @$(NORMAL_INSTALL)
-       test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
        @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -364,13 +766,56 @@ uninstall-dist_docDATA:
        @$(NORMAL_UNINSTALL)
        @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(docdir)" && rm -f $$files
+       dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
+install-dist_vapiDATA: $(dist_vapi_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_vapi_DATA)'; test -n "$(vapidir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(vapidir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(vapidir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(vapidir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(vapidir)" || exit $$?; \
+       done
+
+uninstall-dist_vapiDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_vapi_DATA)'; test -n "$(vapidir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(vapidir)'; $(am__uninstall_files_from_dir)
+install-girDATA: $(gir_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(girdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(girdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(girdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(girdir)" || exit $$?; \
+       done
+
+uninstall-girDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(gir_DATA)'; test -n "$(girdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(girdir)'; $(am__uninstall_files_from_dir)
 install-pkgconfigDATA: $(pkgconfig_DATA)
        @$(NORMAL_INSTALL)
-       test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
        @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+       fi; \
        for p in $$list; do \
          if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
          echo "$$d$$p"; \
@@ -384,80 +829,50 @@ uninstall-pkgconfigDATA:
        @$(NORMAL_UNINSTALL)
        @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
        files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
-       test -n "$$files" || exit 0; \
-       echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
-       cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run `make' without going through this Makefile.
-# To change the values of `make' variables: instead of editing Makefiles,
-# (1) if the variable is set in `config.status', edit `config.status'
-#     (which will cause the Makefiles to be regenerated when you run `make');
-# (2) otherwise, pass the desired values on the `make' command line.
-$(RECURSIVE_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           dot_seen=yes; \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done; \
-       if test "$$dot_seen" = "no"; then \
-         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-       fi; test -z "$$fail"
-
-$(RECURSIVE_CLEAN_TARGETS):
-       @fail= failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
+install-typelibDATA: $(typelib_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(typelib_DATA)'; test -n "$(typelibdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(typelibdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(typelibdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(typelibdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(typelibdir)" || exit $$?; \
        done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+
+uninstall-typelibDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(typelib_DATA)'; test -n "$(typelibdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(typelibdir)'; $(am__uninstall_files_from_dir)
+install-gtkmusicincludeHEADERS: $(gtkmusicinclude_HEADERS)
+       @$(NORMAL_INSTALL)
+       @list='$(gtkmusicinclude_HEADERS)'; test -n "$(gtkmusicincludedir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(gtkmusicincludedir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(gtkmusicincludedir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(gtkmusicincludedir)'"; \
+         $(INSTALL_HEADER) $$files "$(DESTDIR)$(gtkmusicincludedir)" || exit $$?; \
        done
 
+uninstall-gtkmusicincludeHEADERS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(gtkmusicinclude_HEADERS)'; test -n "$(gtkmusicincludedir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(gtkmusicincludedir)'; $(am__uninstall_files_from_dir)
+
 ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
@@ -468,23 +883,10 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
        mkid -fID $$unique
 tags: TAGS
 
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+TAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
        set x; \
        here=`pwd`; \
-       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-         include_option=--etags-include; \
-         empty_fix=.; \
-       else \
-         include_option=--include; \
-         empty_fix=; \
-       fi; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           test ! -f $$subdir/TAGS || \
-             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-         fi; \
-       done; \
        list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
            if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
@@ -503,7 +905,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
          fi; \
        fi
 ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+CTAGS:  $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
                $(TAGS_FILES) $(LISP)
        list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
        unique=`for i in $$list; do \
@@ -555,34 +957,6 @@ distdir: $(DISTFILES)
            || exit 1; \
          fi; \
        done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           test -d "$(distdir)/$$subdir" \
-           || $(MKDIR_P) "$(distdir)/$$subdir" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-           $(am__relativize); \
-           new_distdir=$$reldir; \
-           dir1=$$subdir; dir2="$(top_distdir)"; \
-           $(am__relativize); \
-           new_top_distdir=$$reldir; \
-           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" 
distdir="$$new_distdir" \\"; \
-           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-           ($(am__cd) $$subdir && \
-             $(MAKE) $(AM_MAKEFLAGS) \
-               top_distdir="$$new_top_distdir" \
-               distdir="$$new_distdir" \
-               am__remove_distdir=: \
-               am__skip_length_check=: \
-               am__skip_mode_fix=: \
-               distdir) \
-             || exit 1; \
-         fi; \
-       done
        -test -n "$(am__skip_mode_fix)" \
        || find "$(distdir)" -type d ! -perm -755 \
                -exec chmod u+rwx,go+rx {} \; -o \
@@ -595,7 +969,11 @@ dist-gzip: distdir
        $(am__remove_distdir)
 
 dist-bzip2: distdir
-       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-lzip: distdir
+       tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
        $(am__remove_distdir)
 
 dist-lzma: distdir
@@ -603,7 +981,7 @@ dist-lzma: distdir
        $(am__remove_distdir)
 
 dist-xz: distdir
-       tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
+       tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
        $(am__remove_distdir)
 
 dist-tarZ: distdir
@@ -634,6 +1012,8 @@ distcheck: dist
          bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
        *.tar.lzma*) \
          lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
+       *.tar.lz*) \
+         lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
        *.tar.xz*) \
          xz -dc $(distdir).tar.xz | $(am__untar) ;;\
        *.tar.Z*) \
@@ -643,7 +1023,7 @@ distcheck: dist
        *.zip*) \
          unzip $(distdir).zip ;;\
        esac
-       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       chmod -R a-w $(distdir); chmod u+w $(distdir)
        mkdir $(distdir)/_build
        mkdir $(distdir)/_inst
        chmod a-w $(distdir)
@@ -653,6 +1033,7 @@ distcheck: dist
          && am__cwd=`pwd` \
          && $(am__cd) $(distdir)/_build \
          && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(AM_DISTCHECK_CONFIGURE_FLAGS) \
            $(DISTCHECK_CONFIGURE_FLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) dvi \
@@ -681,8 +1062,16 @@ distcheck: dist
          list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
          sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
 distuninstallcheck:
-       @$(am__cd) '$(distuninstallcheck_dir)' \
-       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+       @test -n '$(distuninstallcheck_dir)' || { \
+         echo 'ERROR: trying to run $@ with an empty' \
+              '$$(distuninstallcheck_dir)' >&2; \
+         exit 1; \
+       }; \
+       $(am__cd) '$(distuninstallcheck_dir)' || { \
+         echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+         exit 1; \
+       }; \
+       test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
           || { echo "ERROR: files left after uninstall:" ; \
                if test -n "$(DESTDIR)"; then \
                  echo "  (check DESTDIR support)"; \
@@ -699,30 +1088,38 @@ distcleancheck: distclean
               $(distcleancheck_listfiles) ; \
               exit 1; } >&2
 check-am: all-am
-check: check-recursive
-all-am: Makefile $(DATA) config.h
-installdirs: installdirs-recursive
-installdirs-am:
-       for dir in "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)"; do \
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) \
+               config.h
+install-binPROGRAMS: install-libLTLIBRARIES
+
+installdirs:
+       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(catalogdir)" 
"$(DESTDIR)$(docdir)" "$(DESTDIR)$(vapidir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(pkgconfigdir)" 
"$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(gtkmusicincludedir)"; do \
          test -z "$$dir" || $(MKDIR_P) "$$dir"; \
        done
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
 
 install-am: all-am
        @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-installcheck: installcheck-recursive
+installcheck: installcheck-am
 install-strip:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
 mostlyclean-generic:
 
 clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -731,97 +1128,161 @@ distclean-generic:
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic clean-libtool mostlyclean-am
-
-distclean: distclean-recursive
+       -rm -f $(srcdir)/src/GuitarWidget.c
+       -rm -f $(srcdir)/src/MusicalNotes.c
+       -rm -f $(srcdir)/src/PianoWidget.c
+       -rm -f $(srcdir)/test/TestsGuitar.c
+       -rm -f $(srcdir)/test/TestsMusicalNotes.c
+       -rm -f $(srcdir)/test/TestsPiano.c
+       -rm -f GtkMusic-0.2.gir
+       -rm -f gtkmusic-0.2.vapi
+       -rm -f gtkmusic-internals-0.2.vapi
+       -rm -f gtkmusic-internals.h
+       -rm -f gtkmusic.h
+       -rm -f libgtkmusic_0_2_la_vala.stamp
+       -rm -f tests_guitar_vala.stamp
+       -rm -f tests_notes_vala.stamp
+       -rm -f tests_piano_vala.stamp
+ ENABLE_GLADE_CATALOG_FALSE@uninstall-local:
+ ENABLE_GLADE_CATALOG_FALSE@install-data-local:
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+       clean-libtool mostlyclean-am
+
+distclean: distclean-am
        -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf ./$(DEPDIR)
        -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr \
-       distclean-libtool distclean-tags
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-hdr distclean-libtool distclean-tags
 
-dvi: dvi-recursive
+dvi: dvi-am
 
 dvi-am:
 
-html: html-recursive
+html: html-am
 
 html-am:
 
-info: info-recursive
+info: info-am
 
 info-am:
 
-install-data-am: install-dist_docDATA install-pkgconfigDATA
+install-data-am: install-catalogDATA install-data-local \
+       install-dist_docDATA install-dist_vapiDATA install-girDATA \
+       install-gtkmusicincludeHEADERS install-pkgconfigDATA \
+       install-typelibDATA
 
-install-dvi: install-dvi-recursive
+install-dvi: install-dvi-am
 
 install-dvi-am:
 
-install-exec-am:
+install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
 
-install-html: install-html-recursive
+install-html: install-html-am
 
 install-html-am:
 
-install-info: install-info-recursive
+install-info: install-info-am
 
 install-info-am:
 
 install-man:
 
-install-pdf: install-pdf-recursive
+install-pdf: install-pdf-am
 
 install-pdf-am:
 
-install-ps: install-ps-recursive
+install-ps: install-ps-am
 
 install-ps-am:
 
 installcheck-am:
 
-maintainer-clean: maintainer-clean-recursive
+maintainer-clean: maintainer-clean-am
        -rm -f $(am__CONFIG_DISTCLEAN_FILES)
        -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -rf ./$(DEPDIR)
        -rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
-mostlyclean: mostlyclean-recursive
+mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
 
-pdf: pdf-recursive
+pdf: pdf-am
 
 pdf-am:
 
-ps: ps-recursive
+ps: ps-am
 
 ps-am:
 
-uninstall-am: uninstall-dist_docDATA uninstall-pkgconfigDATA
-
-.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
-       ctags-recursive install-am install-strip tags-recursive
-
-.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
-       all all-am am--refresh check check-am clean clean-generic \
-       clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
-       dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
-       distcheck distclean distclean-generic distclean-hdr \
-       distclean-libtool distclean-tags distcleancheck distdir \
-       distuninstallcheck dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am \
-       install-dist_docDATA install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-man install-pdf install-pdf-am \
+uninstall-am: uninstall-binPROGRAMS uninstall-catalogDATA \
+       uninstall-dist_docDATA uninstall-dist_vapiDATA \
+       uninstall-girDATA uninstall-gtkmusicincludeHEADERS \
+       uninstall-libLTLIBRARIES uninstall-local \
+       uninstall-pkgconfigDATA uninstall-typelibDATA
+
+.MAKE: all install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
+       clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
+       clean-libtool ctags dist dist-all dist-bzip2 dist-gzip \
+       dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
+       distcheck distclean distclean-compile distclean-generic \
+       distclean-hdr distclean-libtool distclean-tags distcleancheck \
+       distdir distuninstallcheck dvi dvi-am html html-am info \
+       info-am install install-am install-binPROGRAMS \
+       install-catalogDATA install-data install-data-am \
+       install-data-local install-dist_docDATA install-dist_vapiDATA \
+       install-dvi install-dvi-am install-exec install-exec-am \
+       install-girDATA install-gtkmusicincludeHEADERS install-html \
+       install-html-am install-info install-info-am \
+       install-libLTLIBRARIES install-man install-pdf install-pdf-am \
        install-pkgconfigDATA install-ps install-ps-am install-strip \
-       installcheck installcheck-am installdirs installdirs-am \
+       install-typelibDATA installcheck installcheck-am installdirs \
        maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-       tags tags-recursive uninstall uninstall-am \
-       uninstall-dist_docDATA uninstall-pkgconfigDATA
-
+       mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+       pdf pdf-am ps ps-am tags uninstall uninstall-am \
+       uninstall-binPROGRAMS uninstall-catalogDATA \
+       uninstall-dist_docDATA uninstall-dist_vapiDATA \
+       uninstall-girDATA uninstall-gtkmusicincludeHEADERS \
+       uninstall-libLTLIBRARIES uninstall-local \
+       uninstall-pkgconfigDATA uninstall-typelibDATA
+
+
+ ENABLE_GLADE_CATALOG_TRUE@install-icons:
+ ENABLE_GLADE_CATALOG_TRUE@    for icon in $(icons); do \
+ ENABLE_GLADE_CATALOG_TRUE@            THEME=`echo $$icon | cut -d_ -f1`; \
+ ENABLE_GLADE_CATALOG_TRUE@            CONTEXT=`echo $$icon | cut -d_ -f2`; \
+ ENABLE_GLADE_CATALOG_TRUE@            SIZE=`echo $$icon | cut -d_ -f3`; \
+ ENABLE_GLADE_CATALOG_TRUE@            ICONFILE=`echo $$icon | cut -d_ -f4`; \
+ ENABLE_GLADE_CATALOG_TRUE@            mkdir -p $(DESTDIR)$(GLADE_ICON_DIR)/$$THEME/$$SIZE/$$CONTEXT; \
+ ENABLE_GLADE_CATALOG_TRUE@            $(INSTALL_DATA) $$icon 
$(DESTDIR)$(GLADE_ICON_DIR)/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \
+ ENABLE_GLADE_CATALOG_TRUE@    done
+
+ ENABLE_GLADE_CATALOG_TRUE@uninstall-icons:
+ ENABLE_GLADE_CATALOG_TRUE@    -for icon in $(icons); do \
+ ENABLE_GLADE_CATALOG_TRUE@            THEME=`echo $$icon | cut -d_ -f1`; \
+ ENABLE_GLADE_CATALOG_TRUE@            CONTEXT=`echo $$icon | cut -d_ -f2`; \
+ ENABLE_GLADE_CATALOG_TRUE@            SIZE=`echo $$icon | cut -d_ -f3`; \
+ ENABLE_GLADE_CATALOG_TRUE@            ICONFILE=`echo $$icon | cut -d_ -f4`; \
+ ENABLE_GLADE_CATALOG_TRUE@            rm -f 
$(DESTDIR)$(GLADE_ICON_DIR)/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \
+ ENABLE_GLADE_CATALOG_TRUE@    done
+
+ ENABLE_GLADE_CATALOG_TRUE@validate: $(catalog_DATA)
+ ENABLE_GLADE_CATALOG_TRUE@    xmllint --dtdvalid $(srcdir)/glade/glade-catalog.dtd --noout $<
+
+ ENABLE_GLADE_CATALOG_TRUE@install-data-local: install-icons
+ ENABLE_GLADE_CATALOG_TRUE@uninstall-local: uninstall-icons
+
+ HAVE_INTROSPECTION_TRUE@GtkMusic-0.2.typelib: GtkMusic-0.2.gir
+ HAVE_INTROSPECTION_TRUE@      @INTROSPECTION_COMPILER@ --shared-library=libgtkmusic-0.2 -o $@ $^
+
+GtkMusic-0.2.gir gtkmusic-internals-0.2.vapi gtkmusic-0.2.vapi: libgtkmusic-0.2.la
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
diff --git a/aclocal.m4 b/aclocal.m4
index 2c4c5d8..6fd34ca 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,7 +1,8 @@
-# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.11.6 -*- Autoconf -*-
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
+# Inc.
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
@@ -13,8 +14,8 @@
 
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],,
-[m4_warning([this file was generated for autoconf 2.68.
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
 You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically `autoreconf'.])])
@@ -62,6 +63,8 @@ m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL],
     ],dnl
     [auto],[dnl
         PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no)
+       dnl Canonicalize enable_introspection
+       enable_introspection=$found_introspection
     ],dnl
     [dnl       
         AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of 
@<:@no/auto/yes@:>@])
@@ -274,12 +277,15 @@ else
 fi[]dnl
 ])# PKG_CHECK_MODULES
 
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_AUTOMAKE_VERSION(VERSION)
 # ----------------------------
 # Automake X.Y traces this macro to ensure aclocal.m4 has been
@@ -289,7 +295,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION],
 [am__api_version='1.11'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.11.1], [],
+m4_if([$1], [1.11.6], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -305,19 +311,21 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.1])dnl
+[AM_AUTOMAKE_VERSION([1.11.6])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
 # $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
 # `$srcdir', `$srcdir/..', or `$srcdir/../..'.
@@ -399,14 +407,14 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
+# 2010, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 10
+# serial 12
 
 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
 # written in clear, in which case automake, when reading aclocal.m4,
@@ -446,6 +454,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -510,7 +519,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
        break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -575,10 +584,13 @@ AC_DEFUN([AM_DEP_TRACK],
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
 AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
 AC_SUBST([AMDEPBACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
 ])
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
@@ -800,12 +812,15 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
+# Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_INSTALL_SH
 # ------------------
 # Define $install_sh.
@@ -972,12 +987,15 @@ else
 fi
 ])
 
-# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
+# Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_MKDIR_P
 # ---------------
 # Check for `mkdir -p'.
@@ -1000,13 +1018,14 @@ esac
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001, 2002, 2003, 2005, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
+# Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 4
+# serial 5
 
 # _AM_MANGLE_OPTION(NAME)
 # -----------------------
@@ -1014,13 +1033,13 @@ AC_DEFUN([_AM_MANGLE_OPTION],
 [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
 
 # _AM_SET_OPTION(NAME)
-# ------------------------------
+# --------------------
 # Set option NAME.  Presently that only means defining a flag for this option.
 AC_DEFUN([_AM_SET_OPTION],
 [m4_define(_AM_MANGLE_OPTION([$1]), 1)])
 
 # _AM_SET_OPTIONS(OPTIONS)
-# ----------------------------------
+# ------------------------
 # OPTIONS is a space-separated list of Automake options.
 AC_DEFUN([_AM_SET_OPTIONS],
 [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
@@ -1096,12 +1115,14 @@ Check your system clock])
 fi
 AC_MSG_RESULT(yes)])
 
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
+# serial 1
+
 # AM_PROG_INSTALL_STRIP
 # ---------------------
 # One issue with vendor `install' (even GNU) is that you can't
@@ -1124,13 +1145,13 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006, 2008  Free Software Foundation, Inc.
+# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 2
+# serial 3
 
 # _AM_SUBST_NOTMAKE(VARIABLE)
 # ---------------------------
@@ -1139,13 +1160,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
 AC_DEFUN([_AM_SUBST_NOTMAKE])
 
 # AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
+# --------------------------
 # Public sister of _AM_SUBST_NOTMAKE.
 AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1167,10 +1188,11 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 # a tarball read from stdin.
 #     $(am__untar) < result.tar
 AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.
-AM_MISSING_PROG([AMTAR], [tar])
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
 m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
      [m4_case([$1], [ustar],, [pax],,
               [m4_fatal([Unknown tar format])])
 AC_MSG_CHECKING([how to create a $1 tar archive])
diff --git a/build-aux/config.guess b/build-aux/config.guess
index 40eaed4..d622a44 100755
--- a/build-aux/config.guess
+++ b/build-aux/config.guess
@@ -2,9 +2,9 @@
 # Attempt to guess a canonical system name.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011 Free Software Foundation, Inc.
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2011-05-11'
+timestamp='2012-02-10'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,9 +17,7 @@ timestamp='2011-05-11'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -57,8 +55,8 @@ GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
-Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -145,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
        # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
        # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
        # switched to ELF, *-*-netbsd* would select the old
        # object file format.  This provides both forward
@@ -792,13 +790,12 @@ EOF
        echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
        exit ;;
     *:FreeBSD:*:*)
-       case ${UNAME_MACHINE} in
-           pc98)
-               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
+       case ${UNAME_PROCESSOR} in
            amd64)
                echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
            *)
-               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
        esac
        exit ;;
     i*:CYGWIN*:*)
@@ -807,6 +804,9 @@ EOF
     *:MINGW*:*)
        echo ${UNAME_MACHINE}-pc-mingw32
        exit ;;
+    i*:MSYS*:*)
+       echo ${UNAME_MACHINE}-pc-msys
+       exit ;;
     i*:windows32*:*)
        # uname -m includes "-pc" on this system.
        echo ${UNAME_MACHINE}-mingw32
@@ -861,6 +861,13 @@ EOF
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
        exit ;;
+    aarch64:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    aarch64_be:Linux:*:*)
+       UNAME_MACHINE=aarch64_be
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
     alpha:Linux:*:*)
        case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
          EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -895,13 +902,16 @@ EOF
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     cris:Linux:*:*)
-       echo cris-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-gnu
        exit ;;
     crisv32:Linux:*:*)
-       echo crisv32-axis-linux-gnu
+       echo ${UNAME_MACHINE}-axis-linux-gnu
        exit ;;
     frv:Linux:*:*)
-       echo frv-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
+       exit ;;
+    hexagon:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     i*86:Linux:*:*)
        LIBC=gnu
@@ -943,7 +953,7 @@ EOF
        test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
        ;;
     or32:Linux:*:*)
-       echo or32-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     padre:Linux:*:*)
        echo sparc-unknown-linux-gnu
@@ -978,13 +988,13 @@ EOF
        echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     tile*:Linux:*:*)
-       echo ${UNAME_MACHINE}-tilera-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     vax:Linux:*:*)
        echo ${UNAME_MACHINE}-dec-linux-gnu
        exit ;;
     x86_64:Linux:*:*)
-       echo x86_64-unknown-linux-gnu
+       echo ${UNAME_MACHINE}-unknown-linux-gnu
        exit ;;
     xtensa*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -1315,6 +1325,9 @@ EOF
     i*86:AROS:*:*)
        echo ${UNAME_MACHINE}-pc-aros
        exit ;;
+    x86_64:VMkernel:*:*)
+       echo ${UNAME_MACHINE}-unknown-esx
+       exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
diff --git a/build-aux/config.sub b/build-aux/config.sub
index 30fdca8..6205f84 100755
--- a/build-aux/config.sub
+++ b/build-aux/config.sub
@@ -2,9 +2,9 @@
 # Configuration validation subroutine script.
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011 Free Software Foundation, Inc.
+#   2011, 2012 Free Software Foundation, Inc.
 
-timestamp='2011-03-23'
+timestamp='2012-04-18'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,9 +21,7 @@ timestamp='2011-03-23'
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -76,8 +74,8 @@ version="\
 GNU config.sub ($timestamp)
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
-Software Foundation, Inc.
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -132,6 +130,10 @@ case $maybe_os in
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -223,6 +225,12 @@ case $os in
        -isc*)
                basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
                ;;
+       -lynx*178)
+               os=-lynxos178
+               ;;
+       -lynx*5)
+               os=-lynxos5
+               ;;
        -lynx*)
                os=-lynxos
                ;;
@@ -247,17 +255,22 @@ case $basic_machine in
        # Some are omitted here because they have special meanings below.
        1750a | 580 \
        | a29k \
+       | aarch64 | aarch64_be \
        | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
        | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
        | am33_2.0 \
        | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+        | be32 | be64 \
        | bfin \
        | c4x | clipper \
        | d10v | d30v | dlx | dsp16xx \
+       | epiphany \
        | fido | fr30 | frv \
        | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+       | hexagon \
        | i370 | i860 | i960 | ia64 \
        | ip2k | iq2000 \
+       | le32 | le64 \
        | lm32 \
        | m32c | m32r | m32rle | m68000 | m68k | m88k \
        | maxq | mb | microblaze | mcore | mep | metag \
@@ -291,7 +304,7 @@ case $basic_machine in
        | pdp10 | pdp11 | pj | pjl \
        | powerpc | powerpc64 | powerpc64le | powerpcle \
        | pyramid \
-       | rx \
+       | rl78 | rx \
        | score \
        | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele 
\
        | sh64 | sh64le \
@@ -300,7 +313,7 @@ case $basic_machine in
        | spu \
        | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
        | ubicom32 \
-       | v850 | v850e \
+       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
        | we32k \
        | x86 | xc16x | xstormy16 | xtensa \
        | z8k | z80)
@@ -315,8 +328,7 @@ case $basic_machine in
        c6x)
                basic_machine=tic6x-unknown
                ;;
-       m6811 | m68hc11 | m6812 | m68hc12 | picochip)
-               # Motorola 68HC11/12.
+       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
                basic_machine=$basic_machine-unknown
                os=-none
                ;;
@@ -329,7 +341,10 @@ case $basic_machine in
        strongarm | thumb | xscale)
                basic_machine=arm-unknown
                ;;
-
+       xgate)
+               basic_machine=$basic_machine-unknown
+               os=-none
+               ;;
        xscaleeb)
                basic_machine=armeb-unknown
                ;;
@@ -352,11 +367,13 @@ case $basic_machine in
        # Recognize the basic CPU types with company name.
        580-* \
        | a29k-* \
+       | aarch64-* | aarch64_be-* \
        | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
        | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
        | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
        | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
        | avr-* | avr32-* \
+       | be32-* | be64-* \
        | bfin-* | bs2000-* \
        | c[123]* | c30-* | [cjt]90-* | c4x-* \
        | clipper-* | craynv-* | cydra-* \
@@ -365,8 +382,10 @@ case $basic_machine in
        | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
        | h8300-* | h8500-* \
        | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+       | hexagon-* \
        | i*86-* | i860-* | i960-* | ia64-* \
        | ip2k-* | iq2000-* \
+       | le32-* | le64-* \
        | lm32-* \
        | m32c-* | m32r-* | m32rle-* \
        | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
@@ -400,7 +419,7 @@ case $basic_machine in
        | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
        | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
        | pyramid-* \
-       | romp-* | rs6000-* | rx-* \
+       | rl78-* | romp-* | rs6000-* | rx-* \
        | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
        | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
        | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
@@ -408,10 +427,11 @@ case $basic_machine in
        | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
        | tahoe-* \
        | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tile-* | tilegx-* \
+       | tile*-* \
        | tron-* \
        | ubicom32-* \
-       | v850-* | v850e-* | vax-* \
+       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+       | vax-* \
        | we32k-* \
        | x86-* | x86_64-* | xc16x-* | xps100-* \
        | xstormy16-* | xtensa*-* \
@@ -711,7 +731,6 @@ case $basic_machine in
        i370-ibm* | ibm*)
                basic_machine=i370-ibm
                ;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
        i*86v32)
                basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
                os=-sysv32
@@ -808,10 +827,18 @@ case $basic_machine in
        ms1-*)
                basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
                ;;
+       msys)
+               basic_machine=i386-pc
+               os=-msys
+               ;;
        mvs)
                basic_machine=i370-ibm
                os=-mvs
                ;;
+       nacl)
+               basic_machine=le32-unknown
+               os=-nacl
+               ;;
        ncr3000)
                basic_machine=i486-ncr
                os=-sysv4
@@ -1120,13 +1147,8 @@ case $basic_machine in
                basic_machine=t90-cray
                os=-unicos
                ;;
-       # This must be matched before tile*.
-       tilegx*)
-               basic_machine=tilegx-unknown
-               os=-linux-gnu
-               ;;
        tile*)
-               basic_machine=tile-unknown
+               basic_machine=$basic_machine-unknown
                os=-linux-gnu
                ;;
        tx39)
@@ -1336,7 +1358,7 @@ case $os in
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
              | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
              | -chorusos* | -chorusrdb* | -cegcc* \
-             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
              | -mingw32* | -linux-gnu* | -linux-android* \
              | -linux-newlib* | -linux-uclibc* \
              | -uxpv* | -beos* | -mpeix* | -udk* \
@@ -1521,6 +1543,9 @@ case $basic_machine in
        c4x-* | tic4x-*)
                os=-coff
                ;;
+       hexagon-*)
+               os=-elf
+               ;;
        tic54x-*)
                os=-coff
                ;;
@@ -1548,9 +1573,6 @@ case $basic_machine in
                ;;
        m68000-sun)
                os=-sunos3
-               # This also exists in the configure program, but was not the
-               # default.
-               # os=-sunos4
                ;;
        m68*-cisco)
                os=-aout
diff --git a/build-aux/install-sh b/build-aux/install-sh
index 6781b98..a9244eb 100755
--- a/build-aux/install-sh
+++ b/build-aux/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2009-04-28.21; # UTC
+scriptversion=2011-01-19.21; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -156,6 +156,10 @@ while test $# -ne 0; do
     -s) stripcmd=$stripprog;;
 
     -t) dst_arg=$2
+       # Protect names problematic for `test' and other utilities.
+       case $dst_arg in
+         -* | [=\(\)!]) dst_arg=./$dst_arg;;
+       esac
        shift;;
 
     -T) no_target_directory=true;;
@@ -186,6 +190,10 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     fi
     shift # arg
     dst_arg=$arg
+    # Protect names problematic for `test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
   done
 fi
 
@@ -200,7 +208,11 @@ if test $# -eq 0; then
 fi
 
 if test -z "$dir_arg"; then
-  trap '(exit $?); exit' 1 2 13 15
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
 
   # Set umask so as not to create temps with too-generous modes.
   # However, 'strip' requires both read and write access to temps.
@@ -228,9 +240,9 @@ fi
 
 for src
 do
-  # Protect names starting with `-'.
+  # Protect names problematic for `test' and other utilities.
   case $src in
-    -*) src=./$src;;
+    -* | [=\(\)!]) src=./$src;;
   esac
 
   if test -n "$dir_arg"; then
@@ -252,12 +264,7 @@ do
       echo "$0: no destination specified." >&2
       exit 1
     fi
-
     dst=$dst_arg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst;;
-    esac
 
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
@@ -385,7 +392,7 @@ do
 
       case $dstdir in
        /*) prefix='/';;
-       -*) prefix='./';;
+       [-=\(\)!]*) prefix='./';;
        *)  prefix='';;
       esac
 
@@ -403,7 +410,7 @@ do
 
       for d
       do
-       test -z "$d" && continue
+       test X"$d" = X && continue
 
        prefix=$prefix$d
        if test -d "$prefix"; then
diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh
old mode 100755
new mode 100644
index b4a3231..c2852d8
--- a/build-aux/ltmain.sh
+++ b/build-aux/ltmain.sh
@@ -1,9 +1,9 @@
 
-# libtool (GNU libtool) 2.4
+# libtool (GNU libtool) 2.4.2
 # Written by Gordon Matzigkeit <gord gnu ai mit edu>, 1996
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -41,6 +41,7 @@
 #       --quiet, --silent    don't print informational messages
 #       --no-quiet, --no-silent
 #                            print informational messages (default)
+#       --no-warn            don't display warning messages
 #       --tag=TAG            use configuration variables from tag TAG
 #   -v, --verbose            print more informational messages than default
 #       --no-verbose         don't print the extra informational messages
@@ -69,7 +70,7 @@
 #         compiler:            $LTCC
 #         compiler flags:              $LTCFLAGS
 #         linker:              $LD (gnu? $with_gnu_ld)
-#         $progname:   (GNU libtool) 2.4 Debian-2.4-2ubuntu1
+#         $progname:   (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1
 #         automake:    $automake_version
 #         autoconf:    $autoconf_version
 #
@@ -79,9 +80,9 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4 Debian-2.4-2ubuntu1"
+VERSION="2.4.2 Debian-2.4.2-1ubuntu1"
 TIMESTAMP=""
-package_revision=1.3293
+package_revision=1.3337
 
 # Be Bourne compatible
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
@@ -136,15 +137,10 @@ progpath="$0"
 
 : ${CP="cp -f"}
 test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
-: ${EGREP="/bin/grep -E"}
-: ${FGREP="/bin/grep -F"}
-: ${GREP="/bin/grep"}
-: ${LN_S="ln -s"}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
-: ${SED="/bin/sed"}
 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
 : ${Xsed="$SED -e 1s/^X//"}
 
@@ -387,7 +383,7 @@ case $progpath in
      ;;
   *)
      save_IFS="$IFS"
-     IFS=:
+     IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
        IFS="$save_IFS"
        test -x "$progdir/$progname" && break
@@ -771,8 +767,8 @@ func_help ()
        s*\$LTCFLAGS*'"$LTCFLAGS"'*
        s*\$LD*'"$LD"'*
        s/\$with_gnu_ld/'"$with_gnu_ld"'/
-       s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
-       s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
+       s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/
+       s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
        p
        d
      }
@@ -1052,6 +1048,7 @@ opt_finish=false
 opt_help=false
 opt_help_all=false
 opt_silent=:
+opt_warning=:
 opt_verbose=:
 opt_silent=false
 opt_verbose=false
@@ -1120,6 +1117,10 @@ esac
                        opt_silent=false
 func_append preserve_args " $opt"
                        ;;
+      --no-warning|--no-warn)
+                       opt_warning=false
+func_append preserve_args " $opt"
+                       ;;
       --no-verbose)
                        opt_verbose=false
 func_append preserve_args " $opt"
@@ -2059,7 +2060,7 @@ func_mode_compile ()
     *.[cCFSifmso] | \
     *.ada | *.adb | *.ads | *.asm | \
     *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
-    *.[fF][09]? | *.for | *.java | *.obj | *.sx | *.cu | *.cup)
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
       func_xform "$libobj"
       libobj=$func_xform_result
       ;;
@@ -3201,11 +3202,13 @@ func_mode_install ()
 
       # Set up the ranlib parameters.
       oldlib="$destdir/$name"
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
 
       func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
 
       if test -n "$stripme" && test -n "$old_striplib"; then
-       func_show_eval "$old_striplib $oldlib" 'exit $?'
+       func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
       fi
 
       # Do each command in the postinstall commands.
@@ -3470,7 +3473,7 @@ static const void *lt_preloaded_setup() {
          # linked before any other PIC object.  But we must not use
          # pic_flag when linking with -static.  The problem exists in
          # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
-         *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+         *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
            pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
          *-*-hpux*)
            pic_flag_for_symtable=" $pic_flag"  ;;
@@ -3982,14 +3985,17 @@ func_exec_program_core ()
 # launches target application with the remaining arguments.
 func_exec_program ()
 {
-  for lt_wr_arg
-  do
-    case \$lt_wr_arg in
-    --lt-*) ;;
-    *) set x \"\$ \" \"\$lt_wr_arg\"; shift;;
-    esac
-    shift
-  done
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$ \" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
   func_exec_program_core \${1+\"\$ \"}
 }
 
@@ -5057,9 +5063,15 @@ void lt_dump_script (FILE* f)
 {
 EOF
            func_emit_wrapper yes |
-              $SED -e 's/\([\\"]\)/\\\1/g' \
-                  -e 's/^/  fputs ("/' -e 's/$/\\n", f);/'
-
+             $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
             cat <<"EOF"
 }
 EOF
@@ -5643,7 +5655,8 @@ func_mode_link ()
        continue
        ;;
 
-      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
        func_append compiler_flags " $arg"
        func_append compile_command " $arg"
        func_append finalize_command " $arg"
@@ -6150,7 +6163,8 @@ func_mode_link ()
        lib=
        found=no
        case $deplib in
-       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
+       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
          if test "$linkmode,$pass" = "prog,link"; then
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
@@ -6834,7 +6848,7 @@ func_mode_link ()
                 test "$hardcode_direct_absolute" = no; then
                add="$dir/$linklib"
              elif test "$hardcode_minus_L" = yes; then
-               add_dir="-L$dir"
+               add_dir="-L$absdir"
                # Try looking first in the location we're being installed to.
                if test -n "$inst_prefix_dir"; then
                  case $libdir in
@@ -7319,6 +7333,7 @@ func_mode_link ()
          # which has an extra 1 added just for fun
          #
          case $version_type in
+         # correct linux to gnu/linux during the next big refactor
          darwin|linux|osf|windows|none)
            func_arith $number_major + $number_minor
            current=$func_arith_result
@@ -7438,7 +7453,7 @@ func_mode_link ()
          versuffix="$major.$revision"
          ;;
 
-       linux)
+       linux) # correct to gnu/linux during the next big refactor
          func_arith $current - $age
          major=.$func_arith_result
          versuffix="$major.$age.$revision"
@@ -8026,6 +8041,11 @@ EOF
 
       # Test again, we may have decided not to build it any more
       if test "$build_libtool_libs" = yes; then
+       # Remove ${wl} instances when linking with ld.
+       # FIXME: should test the right _cmds variable.
+       case $archive_cmds in
+         *\$LD\ *) wl= ;;
+        esac
        if test "$hardcode_into_libs" = yes; then
          # Hardcode the library paths
          hardcode_libdirs=
@@ -8056,7 +8076,7 @@ EOF
            elif test -n "$runpath_var"; then
              case "$perm_rpath " in
              *" $libdir "*) ;;
-             *) func_apped perm_rpath " $libdir" ;;
+             *) func_append perm_rpath " $libdir" ;;
              esac
            fi
          done
@@ -8064,11 +8084,7 @@ EOF
          if test -n "$hardcode_libdir_separator" &&
             test -n "$hardcode_libdirs"; then
            libdir="$hardcode_libdirs"
-           if test -n "$hardcode_libdir_flag_spec_ld"; then
-             eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
-           else
-             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-           fi
+           eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
          fi
          if test -n "$runpath_var" && test -n "$perm_rpath"; then
            # We should set the runpath_var.
@@ -9158,6 +9174,8 @@ EOF
            esac
          done
        fi
+       func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+       tool_oldlib=$func_to_tool_file_result
        eval cmds=\"$old_archive_cmds\"
 
        func_len " $cmds"
@@ -9267,7 +9285,8 @@ EOF
              *.la)
                func_basename "$deplib"
                name="$func_basename_result"
-               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+               func_resolve_sysroot "$deplib"
+               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
                test -z "$libdir" && \
                  func_fatal_error "\`$deplib' is not a valid libtool archive"
                func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
diff --git a/configure b/configure
index d954d08..5246112 100755
--- a/configure
+++ b/configure
@@ -1,13 +1,11 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for libgtkmusic 0.2.
+# Generated by GNU Autoconf 2.69 for libgtkmusic 0.21.
 #
 # Report bugs to <leandro mattioli gmail com>.
 #
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -136,6 +134,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -169,7 +192,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" 
as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -222,21 +246,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-       # neutralization value for shells without unset; and this also
-       # works around shells that cannot unset nonexistent variables.
-       # Preserve -v and -x to the replacement shell.
-       BASH_ENV=/dev/null
-       ENV=/dev/null
-       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-       export CONFIG_SHELL
-       case $- in # ((((
-         *v*x* | *x*v* ) as_opts=-vx ;;
-         *v* ) as_opts=-v ;;
-         *x* ) as_opts=-x ;;
-         * ) as_opts= ;;
-       esac
-       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -339,6 +367,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -460,6 +496,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -494,16 +534,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -515,28 +555,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -630,8 +650,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='libgtkmusic'
 PACKAGE_TARNAME='libgtkmusic'
-PACKAGE_VERSION='0.2'
-PACKAGE_STRING='libgtkmusic 0.2'
+PACKAGE_VERSION='0.21'
+PACKAGE_STRING='libgtkmusic 0.21'
 PACKAGE_BUGREPORT='leandro mattioli gmail com'
 PACKAGE_URL=''
 
@@ -692,8 +712,6 @@ INTROSPECTION_GIRDIR
 INTROSPECTION_GENERATE
 INTROSPECTION_COMPILER
 INTROSPECTION_SCANNER
-LIBGTKMUSIC_LIBS
-LIBGTKMUSIC_CFLAGS
 LIBGTKMUSICDEPS_LIBS
 LIBGTKMUSICDEPS_CFLAGS
 PKG_CONFIG_LIBDIR
@@ -723,6 +741,7 @@ SED
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
+am__nodep
 AMDEPBACKSLASH
 AMDEP_FALSE
 AMDEP_TRUE
@@ -834,9 +853,7 @@ PKG_CONFIG
 PKG_CONFIG_PATH
 PKG_CONFIG_LIBDIR
 LIBGTKMUSICDEPS_CFLAGS
-LIBGTKMUSICDEPS_LIBS
-LIBGTKMUSIC_CFLAGS
-LIBGTKMUSIC_LIBS'
+LIBGTKMUSICDEPS_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1292,8 +1309,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1379,7 +1394,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libgtkmusic 0.2 to adapt to many kinds of systems.
+\`configure' configures libgtkmusic 0.21 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1449,7 +1464,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libgtkmusic 0.2:";;
+     short | recursive ) echo "Configuration of libgtkmusic 0.21:";;
    esac
   cat <<\_ACEOF
 
@@ -1495,10 +1510,6 @@ Some influential environment variables:
               C compiler flags for LIBGTKMUSICDEPS, overriding pkg-config
   LIBGTKMUSICDEPS_LIBS
               linker flags for LIBGTKMUSICDEPS, overriding pkg-config
-  LIBGTKMUSIC_CFLAGS
-              C compiler flags for LIBGTKMUSIC, overriding pkg-config
-  LIBGTKMUSIC_LIBS
-              linker flags for LIBGTKMUSIC, overriding pkg-config
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1566,10 +1577,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libgtkmusic configure 0.2
-generated by GNU Autoconf 2.68
+libgtkmusic configure 0.21
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1645,7 +1656,7 @@ $as_echo "$ac_try_echo"; } >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
-        $as_test_x conftest$ac_exeext
+        test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -1844,8 +1855,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libgtkmusic $as_me 0.2, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+It was created by libgtkmusic $as_me 0.21, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2261,7 +2272,7 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
          if test $ac_prog = install &&
            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
@@ -2430,7 +2441,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2470,7 +2481,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2521,7 +2532,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_prog in mkdir gmkdir; do
         for ac_exec_ext in '' $ac_executable_extensions; do
-          { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || 
continue
+          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
           case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
             'mkdir (GNU coreutils) '* | \
             'mkdir (coreutils) '* | \
@@ -2574,7 +2585,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2660,7 +2671,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libgtkmusic'
- VERSION='0.2'
+ VERSION='0.21'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -2690,11 +2701,11 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 
 # We need awk for the "check" target.  The system "awk" is bad on
 # some platforms.
-# Always define AMTAR for backward compatibility.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
 
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
 
 
 
@@ -2722,7 +2733,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_VALAC="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2781,8 +2792,8 @@ esac
 
 
 
-macro_version='2.4'
-macro_revision='1.3293'
+macro_version='2.4.2'
+macro_revision='1.3337'
 
 
 
@@ -2990,6 +3001,7 @@ fi
 if test "x$enable_dependency_tracking" != xno; then
   am_depcomp="$ac_aux_dir/depcomp"
   AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
  if test "x$enable_dependency_tracking" != xno; then
   AMDEP_TRUE=
@@ -3022,7 +3034,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3062,7 +3074,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3115,7 +3127,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3156,7 +3168,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -3214,7 +3226,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3258,7 +3270,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3704,8 +3716,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -3803,6 +3814,7 @@ else
   # instance it was reported that on HP-UX the gcc test will end up
   # making a dummy file named `D' -- because `-MD' means `put the output
   # in D'.
+  rm -rf conftest.dir
   mkdir conftest.dir
   # Copy depcomp to subdir because otherwise we won't find it if we're
   # using a relative directory.
@@ -3862,7 +3874,7 @@ else
        break
       fi
       ;;
-    msvisualcpp | msvcmsys)
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
       # This compiler won't grok `-c -o', but also, the minuso test has
       # not run yet.  These depmodes are late enough in the game, and
       # so weak that their functioning should not be impacted.
@@ -3939,7 +3951,7 @@ do
     for ac_prog in sed gsed; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+      as_fn_executable_p "$ac_path_SED" || continue
 # Check for GNU ac_path_SED and select it if it is found.
   # Check for GNU $ac_path_SED
 case `"$ac_path_SED" --version 2>&1` in
@@ -4015,7 +4027,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4081,7 +4093,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4148,7 +4160,7 @@ do
     for ac_prog in fgrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+      as_fn_executable_p "$ac_path_FGREP" || continue
 # Check for GNU ac_path_FGREP and select it if it is found.
   # Check for GNU $ac_path_FGREP
 case `"$ac_path_FGREP" --version 2>&1` in
@@ -4404,7 +4416,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4448,7 +4460,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4867,7 +4879,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4907,7 +4919,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OBJDUMP="objdump"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5213,7 +5225,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5253,7 +5265,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DLLTOOL="dlltool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5357,7 +5369,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5401,7 +5413,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5526,7 +5538,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5566,7 +5578,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5625,7 +5637,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5665,7 +5677,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6300,7 +6312,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6340,7 +6352,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6420,7 +6432,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6460,7 +6472,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6512,7 +6524,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6552,7 +6564,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_NMEDIT="nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6604,7 +6616,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6644,7 +6656,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_LIPO="lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6696,7 +6708,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6736,7 +6748,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL="otool"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6788,7 +6800,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6828,7 +6840,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_OTOOL64="otool64"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11450,7 +11462,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11493,7 +11505,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -11559,12 +11571,12 @@ if test -n "$LIBGTKMUSICDEPS_CFLAGS"; then
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 > 2.28.0
        gobject-2.0 > 2.28.0
        gtk+-3.0 > 3.0.0
-       gee-1.0
+       gee-0.8
 \""; } >&5
   ($PKG_CONFIG --exists --print-errors "glib-2.0 > 2.28.0
        gobject-2.0 > 2.28.0
        gtk+-3.0 > 3.0.0
-       gee-1.0
+       gee-0.8
 ") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
@@ -11572,7 +11584,7 @@ if test -n "$LIBGTKMUSICDEPS_CFLAGS"; then
   pkg_cv_LIBGTKMUSICDEPS_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 > 2.28.0
        gobject-2.0 > 2.28.0
        gtk+-3.0 > 3.0.0
-       gee-1.0
+       gee-0.8
 " 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
@@ -11588,12 +11600,12 @@ if test -n "$LIBGTKMUSICDEPS_LIBS"; then
     { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 > 2.28.0
        gobject-2.0 > 2.28.0
        gtk+-3.0 > 3.0.0
-       gee-1.0
+       gee-0.8
 \""; } >&5
   ($PKG_CONFIG --exists --print-errors "glib-2.0 > 2.28.0
        gobject-2.0 > 2.28.0
        gtk+-3.0 > 3.0.0
-       gee-1.0
+       gee-0.8
 ") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
@@ -11601,7 +11613,7 @@ if test -n "$LIBGTKMUSICDEPS_LIBS"; then
   pkg_cv_LIBGTKMUSICDEPS_LIBS=`$PKG_CONFIG --libs "glib-2.0 > 2.28.0
        gobject-2.0 > 2.28.0
        gtk+-3.0 > 3.0.0
-       gee-1.0
+       gee-0.8
 " 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
@@ -11626,13 +11638,13 @@ fi
                LIBGTKMUSICDEPS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs 
"glib-2.0 > 2.28.0
        gobject-2.0 > 2.28.0
        gtk+-3.0 > 3.0.0
-       gee-1.0
+       gee-0.8
 " 2>&1`
         else
                LIBGTKMUSICDEPS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 > 2.28.0
        gobject-2.0 > 2.28.0
        gtk+-3.0 > 3.0.0
-       gee-1.0
+       gee-0.8
 " 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
@@ -11641,7 +11653,7 @@ fi
        as_fn_error $? "Package requirements (glib-2.0 > 2.28.0
        gobject-2.0 > 2.28.0
        gtk+-3.0 > 3.0.0
-       gee-1.0
+       gee-0.8
 ) were not met:
 
 $LIBGTKMUSICDEPS_PKG_ERRORS
@@ -11674,106 +11686,9 @@ else
 $as_echo "yes" >&6; }
 
 fi
-
-pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGTKMUSIC" >&5
-$as_echo_n "checking for LIBGTKMUSIC... " >&6; }
-
-if test -n "$LIBGTKMUSIC_CFLAGS"; then
-    pkg_cv_LIBGTKMUSIC_CFLAGS="$LIBGTKMUSIC_CFLAGS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkmusic-0.2
-\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtkmusic-0.2
-") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_LIBGTKMUSIC_CFLAGS=`$PKG_CONFIG --cflags "gtkmusic-0.2
-" 2>/dev/null`
-                     test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-if test -n "$LIBGTKMUSIC_LIBS"; then
-    pkg_cv_LIBGTKMUSIC_LIBS="$LIBGTKMUSIC_LIBS"
- elif test -n "$PKG_CONFIG"; then
-    if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkmusic-0.2
-\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtkmusic-0.2
-") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-  pkg_cv_LIBGTKMUSIC_LIBS=`$PKG_CONFIG --libs "gtkmusic-0.2
-" 2>/dev/null`
-                     test "x$?" != "x0" && pkg_failed=yes
-else
-  pkg_failed=yes
-fi
- else
-    pkg_failed=untried
-fi
-
-
-
-if test $pkg_failed = yes; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-        _pkg_short_errors_supported=yes
-else
-        _pkg_short_errors_supported=no
-fi
-        if test $_pkg_short_errors_supported = yes; then
-               LIBGTKMUSIC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs 
"gtkmusic-0.2
-" 2>&1`
-        else
-               LIBGTKMUSIC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtkmusic-0.2
-" 2>&1`
-        fi
-       # Put the nasty error message in config.log where it belongs
-       echo "$LIBGTKMUSIC_PKG_ERRORS" >&5
-
-       as_fn_error $? "Package requirements (gtkmusic-0.2
-) were not met:
-
-$LIBGTKMUSIC_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-Alternatively, you may set the environment variables LIBGTKMUSIC_CFLAGS
-and LIBGTKMUSIC_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details." "$LINENO" 5
-elif test $pkg_failed = untried; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-Alternatively, you may set the environment variables LIBGTKMUSIC_CFLAGS
-and LIBGTKMUSIC_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
-See \`config.log' for more details" "$LINENO" 5; }
-else
-       LIBGTKMUSIC_CFLAGS=$pkg_cv_LIBGTKMUSIC_CFLAGS
-       LIBGTKMUSIC_LIBS=$pkg_cv_LIBGTKMUSIC_LIBS
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-fi
+#PKG_CHECK_MODULES(LIBGTKMUSIC, Add for the tests
+#    gtkmusic-0.2
+#)
 
 
 
@@ -11825,6 +11740,7 @@ fi
 else
   found_introspection=no
 fi
+               enable_introspection=$found_introspection
      ;; #(
   *) :
                 as_fn_error $? "invalid argument passed to --enable-introspection, should be one of 
[no/auto/yes]" "$LINENO" 5
@@ -11929,7 +11845,7 @@ fi
 ###############################################################################
 ac_config_headers="$ac_config_headers config.h"
 
-ac_config_files="$ac_config_files Makefile src/Makefile glade/Makefile gtkmusic-0.2.pc"
+ac_config_files="$ac_config_files Makefile gtkmusic-0.2.pc"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -12362,16 +12278,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -12431,28 +12347,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -12473,8 +12377,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libgtkmusic $as_me 0.2, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+This file was extended by libgtkmusic $as_me 0.21, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -12539,11 +12443,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libgtkmusic config.status 0.2
-configured by $0, generated by GNU Autoconf 2.68,
+libgtkmusic config.status 0.21
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -12634,7 +12538,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
@@ -12949,8 +12853,6 @@ do
     "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
     "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-    "glade/Makefile") CONFIG_FILES="$CONFIG_FILES glade/Makefile" ;;
     "gtkmusic-0.2.pc") CONFIG_FILES="$CONFIG_FILES gtkmusic-0.2.pc" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
index 9c7b5d4..07a8602 100644
--- a/m4/ltversion.m4
+++ b/m4/ltversion.m4
@@ -9,15 +9,15 @@
 
 # @configure_input@
 
-# serial 3293 ltversion.m4
+# serial 3337 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.4])
-m4_define([LT_PACKAGE_REVISION], [1.3293])
+m4_define([LT_PACKAGE_VERSION], [2.4.2])
+m4_define([LT_PACKAGE_REVISION], [1.3337])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4'
-macro_revision='1.3293'
+[macro_version='2.4.2'
+macro_revision='1.3337'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
diff --git a/src/GuitarWidget.c b/src/GuitarWidget.c
new file mode 100644
index 0000000..78b4376
--- /dev/null
+++ b/src/GuitarWidget.c
@@ -0,0 +1,3081 @@
+/* GuitarWidget.c generated by valac 0.18.1, the Vala compiler
+ * generated from GuitarWidget.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <gtk/gtk.h>
+#include <gee.h>
+#include <gdk/gdk.h>
+#include <cairo.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define GTK_MUSIC_TYPE_GUITAR_STRING (gtk_music_guitar_string_get_type ())
+#define GTK_MUSIC_GUITAR_STRING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_MUSIC_TYPE_GUITAR_STRING, 
GtkMusicGuitarString))
+#define GTK_MUSIC_GUITAR_STRING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), 
GTK_MUSIC_TYPE_GUITAR_STRING, GtkMusicGuitarStringClass))
+#define GTK_MUSIC_IS_GUITAR_STRING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_MUSIC_TYPE_GUITAR_STRING))
+#define GTK_MUSIC_IS_GUITAR_STRING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GTK_MUSIC_TYPE_GUITAR_STRING))
+#define GTK_MUSIC_GUITAR_STRING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GTK_MUSIC_TYPE_GUITAR_STRING, GtkMusicGuitarStringClass))
+
+typedef struct _GtkMusicGuitarString GtkMusicGuitarString;
+typedef struct _GtkMusicGuitarStringClass GtkMusicGuitarStringClass;
+typedef struct _GtkMusicGuitarStringPrivate GtkMusicGuitarStringPrivate;
+#define _g_free0(var) (var = (g_free (var), NULL))
+typedef struct _GtkMusicParamSpecGuitarString GtkMusicParamSpecGuitarString;
+
+#define GTK_MUSIC_TYPE_GUITAR_FRET_MARK (gtk_music_guitar_fret_mark_get_type ())
+#define GTK_MUSIC_GUITAR_FRET_MARK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_MUSIC_TYPE_GUITAR_FRET_MARK, 
GtkMusicGuitarFretMark))
+#define GTK_MUSIC_GUITAR_FRET_MARK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), 
GTK_MUSIC_TYPE_GUITAR_FRET_MARK, GtkMusicGuitarFretMarkClass))
+#define GTK_MUSIC_IS_GUITAR_FRET_MARK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GTK_MUSIC_TYPE_GUITAR_FRET_MARK))
+#define GTK_MUSIC_IS_GUITAR_FRET_MARK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GTK_MUSIC_TYPE_GUITAR_FRET_MARK))
+#define GTK_MUSIC_GUITAR_FRET_MARK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GTK_MUSIC_TYPE_GUITAR_FRET_MARK, GtkMusicGuitarFretMarkClass))
+
+typedef struct _GtkMusicGuitarFretMark GtkMusicGuitarFretMark;
+typedef struct _GtkMusicGuitarFretMarkClass GtkMusicGuitarFretMarkClass;
+typedef struct _GtkMusicGuitarFretMarkPrivate GtkMusicGuitarFretMarkPrivate;
+
+#define GTK_MUSIC_GUITAR_FRET_MARK_TYPE_STYLE (gtk_music_guitar_fret_mark_style_get_type ())
+typedef struct _GtkMusicParamSpecGuitarFretMark GtkMusicParamSpecGuitarFretMark;
+
+#define GTK_MUSIC_TYPE_GUITAR_POSITION (gtk_music_guitar_position_get_type ())
+#define GTK_MUSIC_GUITAR_POSITION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_MUSIC_TYPE_GUITAR_POSITION, 
GtkMusicGuitarPosition))
+#define GTK_MUSIC_GUITAR_POSITION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), 
GTK_MUSIC_TYPE_GUITAR_POSITION, GtkMusicGuitarPositionClass))
+#define GTK_MUSIC_IS_GUITAR_POSITION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GTK_MUSIC_TYPE_GUITAR_POSITION))
+#define GTK_MUSIC_IS_GUITAR_POSITION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GTK_MUSIC_TYPE_GUITAR_POSITION))
+#define GTK_MUSIC_GUITAR_POSITION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GTK_MUSIC_TYPE_GUITAR_POSITION, GtkMusicGuitarPositionClass))
+
+typedef struct _GtkMusicGuitarPosition GtkMusicGuitarPosition;
+typedef struct _GtkMusicGuitarPositionClass GtkMusicGuitarPositionClass;
+typedef struct _GtkMusicGuitarPositionPrivate GtkMusicGuitarPositionPrivate;
+typedef struct _GtkMusicParamSpecGuitarPosition GtkMusicParamSpecGuitarPosition;
+
+#define GTK_MUSIC_TYPE_GUITAR (gtk_music_guitar_get_type ())
+#define GTK_MUSIC_GUITAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_MUSIC_TYPE_GUITAR, GtkMusicGuitar))
+#define GTK_MUSIC_GUITAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_MUSIC_TYPE_GUITAR, 
GtkMusicGuitarClass))
+#define GTK_MUSIC_IS_GUITAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_MUSIC_TYPE_GUITAR))
+#define GTK_MUSIC_IS_GUITAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_MUSIC_TYPE_GUITAR))
+#define GTK_MUSIC_GUITAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_MUSIC_TYPE_GUITAR, 
GtkMusicGuitarClass))
+
+typedef struct _GtkMusicGuitar GtkMusicGuitar;
+typedef struct _GtkMusicGuitarClass GtkMusicGuitarClass;
+typedef struct _GtkMusicGuitarPrivate GtkMusicGuitarPrivate;
+
+#define GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE (gtk_music_guitar_marked_note_style_get_type ())
+#define GTK_MUSIC_GUITAR_MARKED_NOTE_STYLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE, GtkMusicGuitarMarkedNoteStyle))
+#define GTK_MUSIC_GUITAR_MARKED_NOTE_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), 
GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE, GtkMusicGuitarMarkedNoteStyleClass))
+#define GTK_MUSIC_GUITAR_IS_MARKED_NOTE_STYLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE))
+#define GTK_MUSIC_GUITAR_IS_MARKED_NOTE_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE))
+#define GTK_MUSIC_GUITAR_MARKED_NOTE_STYLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE, GtkMusicGuitarMarkedNoteStyleClass))
+
+typedef struct _GtkMusicGuitarMarkedNoteStyle GtkMusicGuitarMarkedNoteStyle;
+typedef struct _GtkMusicGuitarMarkedNoteStyleClass GtkMusicGuitarMarkedNoteStyleClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _gtk_music_guitar_string_unref0(var) ((var == NULL) ? NULL : (var = (gtk_music_guitar_string_unref 
(var), NULL)))
+#define _gtk_music_guitar_fret_mark_unref0(var) ((var == NULL) ? NULL : (var = 
(gtk_music_guitar_fret_mark_unref (var), NULL)))
+#define _gtk_music_guitar_marked_note_style_unref0(var) ((var == NULL) ? NULL : (var = 
(gtk_music_guitar_marked_note_style_unref (var), NULL)))
+#define _gtk_music_guitar_position_unref0(var) ((var == NULL) ? NULL : (var = 
(gtk_music_guitar_position_unref (var), NULL)))
+typedef struct _GtkMusicGuitarMarkedNoteStylePrivate GtkMusicGuitarMarkedNoteStylePrivate;
+#define _cairo_region_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_region_destroy (var), NULL)))
+typedef struct _GtkMusicGuitarParamSpecMarkedNoteStyle GtkMusicGuitarParamSpecMarkedNoteStyle;
+
+struct _GtkMusicGuitarString {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       GtkMusicGuitarStringPrivate * priv;
+       gchar* note;
+       gboolean vibrate;
+       gdouble vibrateSeed;
+       gfloat* color;
+       gint color_length1;
+       gfloat* labelColor;
+       gint labelColor_length1;
+};
+
+struct _GtkMusicGuitarStringClass {
+       GTypeClass parent_class;
+       void (*finalize) (GtkMusicGuitarString *self);
+};
+
+struct _GtkMusicParamSpecGuitarString {
+       GParamSpec parent_instance;
+};
+
+typedef enum  {
+       GTK_MUSIC_GUITAR_FRET_MARK_STYLE_NONE,
+       GTK_MUSIC_GUITAR_FRET_MARK_STYLE_SOLID_CIRCLE,
+       GTK_MUSIC_GUITAR_FRET_MARK_STYLE_RECTANGLE,
+       GTK_MUSIC_GUITAR_FRET_MARK_STYLE_FANCY
+} GtkMusicGuitarFretMarkStyle;
+
+struct _GtkMusicGuitarFretMark {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       GtkMusicGuitarFretMarkPrivate * priv;
+       gushort position;
+       GtkMusicGuitarFretMarkStyle style;
+       gfloat* color;
+       gint color_length1;
+};
+
+struct _GtkMusicGuitarFretMarkClass {
+       GTypeClass parent_class;
+       void (*finalize) (GtkMusicGuitarFretMark *self);
+};
+
+struct _GtkMusicParamSpecGuitarFretMark {
+       GParamSpec parent_instance;
+};
+
+struct _GtkMusicGuitarPosition {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       GtkMusicGuitarPositionPrivate * priv;
+       gushort stringIndex;
+       gushort fretIndex;
+};
+
+struct _GtkMusicGuitarPositionClass {
+       GTypeClass parent_class;
+       void (*finalize) (GtkMusicGuitarPosition *self);
+};
+
+struct _GtkMusicParamSpecGuitarPosition {
+       GParamSpec parent_instance;
+};
+
+struct _GtkMusicGuitar {
+       GtkDrawingArea parent_instance;
+       GtkMusicGuitarPrivate * priv;
+       gboolean showLabels;
+       gboolean detailedLabels;
+       gboolean highlightFirstFret;
+       gboolean autoUpdate;
+       gushort fretNumber;
+       gfloat* gridBgColor;
+       gint gridBgColor_length1;
+       gfloat* fretColor;
+       gint fretColor_length1;
+       GeeArrayList* guitarStrings;
+       GeeHashSet* fretMarks;
+       GeeHashMap* markedNotes;
+};
+
+struct _GtkMusicGuitarClass {
+       GtkDrawingAreaClass parent_class;
+};
+
+struct _GtkMusicGuitarPrivate {
+       gboolean shouldAnimate;
+       gdouble width;
+       gdouble height;
+       gdouble gridWidth;
+       gdouble gridHeight;
+       gdouble gridX;
+       gdouble gridY;
+       gdouble stringSpacing;
+       gdouble fretSpacing;
+       gdouble fretMarkRadius;
+       gdouble markedNoteRadius;
+       gfloat animateInstant;
+       gchar** defaultStrings;
+       gint defaultStrings_length1;
+       gint _defaultStrings_size_;
+       gushort* defaultFretMarks;
+       gint defaultFretMarks_length1;
+       gint _defaultFretMarks_size_;
+};
+
+typedef enum  {
+       GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_NOTE,
+       GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_MIDI,
+       GTK_MUSIC_MUSICAL_NOTE_ERROR_ALREADY_COMPLETE
+} GtkMusicMusicalNoteError;
+#define GTK_MUSIC_MUSICAL_NOTE_ERROR gtk_music_musical_note_error_quark ()
+struct _GtkMusicGuitarMarkedNoteStyle {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       GtkMusicGuitarMarkedNoteStylePrivate * priv;
+       gfloat* color;
+       gint color_length1;
+};
+
+struct _GtkMusicGuitarMarkedNoteStyleClass {
+       GTypeClass parent_class;
+       void (*finalize) (GtkMusicGuitarMarkedNoteStyle *self);
+};
+
+struct _GtkMusicGuitarParamSpecMarkedNoteStyle {
+       GParamSpec parent_instance;
+};
+
+
+static gpointer gtk_music_guitar_string_parent_class = NULL;
+static gpointer gtk_music_guitar_fret_mark_parent_class = NULL;
+static gpointer gtk_music_guitar_position_parent_class = NULL;
+static gpointer gtk_music_guitar_parent_class = NULL;
+static gpointer gtk_music_guitar_marked_note_style_parent_class = NULL;
+
+gpointer gtk_music_guitar_string_ref (gpointer instance);
+void gtk_music_guitar_string_unref (gpointer instance);
+GParamSpec* gtk_music_param_spec_guitar_string (const gchar* name, const gchar* nick, const gchar* blurb, 
GType object_type, GParamFlags flags);
+void gtk_music_value_set_guitar_string (GValue* value, gpointer v_object);
+void gtk_music_value_take_guitar_string (GValue* value, gpointer v_object);
+gpointer gtk_music_value_get_guitar_string (const GValue* value);
+GType gtk_music_guitar_string_get_type (void) G_GNUC_CONST;
+enum  {
+       GTK_MUSIC_GUITAR_STRING_DUMMY_PROPERTY
+};
+GtkMusicGuitarString* gtk_music_guitar_string_new (const gchar* note);
+GtkMusicGuitarString* gtk_music_guitar_string_construct (GType object_type, const gchar* note);
+static void gtk_music_guitar_string_finalize (GtkMusicGuitarString* obj);
+gpointer gtk_music_guitar_fret_mark_ref (gpointer instance);
+void gtk_music_guitar_fret_mark_unref (gpointer instance);
+GParamSpec* gtk_music_param_spec_guitar_fret_mark (const gchar* name, const gchar* nick, const gchar* blurb, 
GType object_type, GParamFlags flags);
+void gtk_music_value_set_guitar_fret_mark (GValue* value, gpointer v_object);
+void gtk_music_value_take_guitar_fret_mark (GValue* value, gpointer v_object);
+gpointer gtk_music_value_get_guitar_fret_mark (const GValue* value);
+GType gtk_music_guitar_fret_mark_get_type (void) G_GNUC_CONST;
+GType gtk_music_guitar_fret_mark_style_get_type (void) G_GNUC_CONST;
+enum  {
+       GTK_MUSIC_GUITAR_FRET_MARK_DUMMY_PROPERTY
+};
+GtkMusicGuitarFretMark* gtk_music_guitar_fret_mark_new (gushort position);
+GtkMusicGuitarFretMark* gtk_music_guitar_fret_mark_construct (GType object_type, gushort position);
+static void gtk_music_guitar_fret_mark_finalize (GtkMusicGuitarFretMark* obj);
+gpointer gtk_music_guitar_position_ref (gpointer instance);
+void gtk_music_guitar_position_unref (gpointer instance);
+GParamSpec* gtk_music_param_spec_guitar_position (const gchar* name, const gchar* nick, const gchar* blurb, 
GType object_type, GParamFlags flags);
+void gtk_music_value_set_guitar_position (GValue* value, gpointer v_object);
+void gtk_music_value_take_guitar_position (GValue* value, gpointer v_object);
+gpointer gtk_music_value_get_guitar_position (const GValue* value);
+GType gtk_music_guitar_position_get_type (void) G_GNUC_CONST;
+enum  {
+       GTK_MUSIC_GUITAR_POSITION_DUMMY_PROPERTY
+};
+GtkMusicGuitarPosition* gtk_music_guitar_position_new (gushort stringIndex, gushort fretIndex);
+GtkMusicGuitarPosition* gtk_music_guitar_position_construct (GType object_type, gushort stringIndex, gushort 
fretIndex);
+guint gtk_music_guitar_position_hash_func (GtkMusicGuitarPosition* key);
+gboolean gtk_music_guitar_position_equal_func (GtkMusicGuitarPosition* a, GtkMusicGuitarPosition* b);
+static void gtk_music_guitar_position_finalize (GtkMusicGuitarPosition* obj);
+GType gtk_music_guitar_get_type (void) G_GNUC_CONST;
+gpointer gtk_music_guitar_marked_note_style_ref (gpointer instance);
+void gtk_music_guitar_marked_note_style_unref (gpointer instance);
+GParamSpec* gtk_music_guitar_param_spec_marked_note_style (const gchar* name, const gchar* nick, const 
gchar* blurb, GType object_type, GParamFlags flags);
+void gtk_music_guitar_value_set_marked_note_style (GValue* value, gpointer v_object);
+void gtk_music_guitar_value_take_marked_note_style (GValue* value, gpointer v_object);
+gpointer gtk_music_guitar_value_get_marked_note_style (const GValue* value);
+GType gtk_music_guitar_marked_note_style_get_type (void) G_GNUC_CONST;
+#define GTK_MUSIC_GUITAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_MUSIC_TYPE_GUITAR, 
GtkMusicGuitarPrivate))
+enum  {
+       GTK_MUSIC_GUITAR_DUMMY_PROPERTY
+};
+GtkMusicGuitar* gtk_music_guitar_new (void);
+GtkMusicGuitar* gtk_music_guitar_construct (GType object_type);
+void gtk_music_guitar_start_animation (GtkMusicGuitar* self);
+static gboolean gtk_music_guitar_update_animation (GtkMusicGuitar* self);
+static gboolean _gtk_music_guitar_update_animation_gsource_func (gpointer self);
+void gtk_music_guitar_stop_animation (GtkMusicGuitar* self);
+void gtk_music_guitar_redraw (GtkMusicGuitar* self);
+void gtk_music_guitar_mark_position (GtkMusicGuitar* self, gushort stringIndex, gushort fretIndex, gfloat* 
color, int color_length1);
+GtkMusicGuitarMarkedNoteStyle* gtk_music_guitar_marked_note_style_new (gfloat* color, int color_length1);
+GtkMusicGuitarMarkedNoteStyle* gtk_music_guitar_marked_note_style_construct (GType object_type, gfloat* 
color, int color_length1);
+void gtk_music_guitar_unmark_position (GtkMusicGuitar* self, gushort stringIndex, gushort fretIndex);
+void gtk_music_guitar_unmark_all (GtkMusicGuitar* self);
+void gtk_music_guitar_mark_note (GtkMusicGuitar* self, const gchar* note, gfloat* color, int color_length1);
+GeeHashSet* gtk_music_guitar_find_positions (GtkMusicGuitar* self, const gchar* note);
+void gtk_music_guitar_unmark_note (GtkMusicGuitar* self, const gchar* note);
+gshort gtk_music_guitar_note_position_in_string (GtkMusicGuitar* self, gushort stringIndex, const gchar* 
note);
+GQuark gtk_music_musical_note_error_quark (void);
+gushort gtk_music_musical_notes_get_note_as_midi_code (const gchar* note, GError** error);
+gboolean gtk_music_musical_notes_validate (const gchar* note);
+gboolean gtk_music_musical_notes_is_incomplete (const gchar* needle);
+GeeHashSet* gtk_music_musical_notes_make (const gchar* incompleteNote, GError** error);
+gushort gtk_music_guitar_position_to_midi (GtkMusicGuitar* self, GtkMusicGuitarPosition* position);
+gchar* gtk_music_guitar_position_to_note (GtkMusicGuitar* self, GtkMusicGuitarPosition* position);
+gchar* gtk_music_musical_notes_get_note_from_midi_code (gushort midi, GError** error);
+static GtkMusicGuitarPosition* gtk_music_guitar_point_to_position (GtkMusicGuitar* self, gdouble x, gdouble 
y);
+static gboolean gtk_music_guitar_real_button_press_event (GtkWidget* base, GdkEventButton* event);
+static gboolean gtk_music_guitar_real_button_release_event (GtkWidget* base, GdkEventButton* event);
+static gboolean gtk_music_guitar_real_draw (GtkWidget* base, cairo_t* cr);
+static void gtk_music_guitar_calculate_dimensions (GtkMusicGuitar* self, cairo_t* cr);
+static void gtk_music_guitar_draw_base (GtkMusicGuitar* self, cairo_t* cr);
+static void gtk_music_guitar_draw_fret_marks (GtkMusicGuitar* self, cairo_t* cr);
+static void gtk_music_guitar_draw_frets (GtkMusicGuitar* self, cairo_t* cr);
+static void gtk_music_guitar_draw_strings (GtkMusicGuitar* self, cairo_t* cr);
+static void gtk_music_guitar_draw_marked_notes (GtkMusicGuitar* self, cairo_t* cr);
+static void g_cclosure_user_marshal_VOID__OBJECT_POINTER_GTK_MUSIC_GUITAR_POSITION (GClosure * closure, 
GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer 
marshal_data);
+enum  {
+       GTK_MUSIC_GUITAR_MARKED_NOTE_STYLE_DUMMY_PROPERTY
+};
+static gfloat* _vala_array_dup1 (gfloat* self, int length);
+static void gtk_music_guitar_marked_note_style_finalize (GtkMusicGuitarMarkedNoteStyle* obj);
+static void gtk_music_guitar_finalize (GObject* obj);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+
+
+GtkMusicGuitarString* gtk_music_guitar_string_construct (GType object_type, const gchar* note) {
+       GtkMusicGuitarString* self = NULL;
+       const gchar* _tmp0_;
+       gchar* _tmp1_;
+       gdouble _tmp2_ = 0.0;
+       g_return_val_if_fail (note != NULL, NULL);
+       self = (GtkMusicGuitarString*) g_type_create_instance (object_type);
+       _tmp0_ = note;
+       _tmp1_ = g_strdup (_tmp0_);
+       _g_free0 (self->note);
+       self->note = _tmp1_;
+       _tmp2_ = g_random_double ();
+       self->vibrateSeed = _tmp2_;
+       return self;
+}
+
+
+GtkMusicGuitarString* gtk_music_guitar_string_new (const gchar* note) {
+       return gtk_music_guitar_string_construct (GTK_MUSIC_TYPE_GUITAR_STRING, note);
+}
+
+
+static void gtk_music_value_guitar_string_init (GValue* value) {
+       value->data[0].v_pointer = NULL;
+}
+
+
+static void gtk_music_value_guitar_string_free_value (GValue* value) {
+       if (value->data[0].v_pointer) {
+               gtk_music_guitar_string_unref (value->data[0].v_pointer);
+       }
+}
+
+
+static void gtk_music_value_guitar_string_copy_value (const GValue* src_value, GValue* dest_value) {
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = gtk_music_guitar_string_ref (src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+
+static gpointer gtk_music_value_guitar_string_peek_pointer (const GValue* value) {
+       return value->data[0].v_pointer;
+}
+
+
+static gchar* gtk_music_value_guitar_string_collect_value (GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       if (collect_values[0].v_pointer) {
+               GtkMusicGuitarString* object;
+               object = collect_values[0].v_pointer;
+               if (object->parent_instance.g_class == NULL) {
+                       return g_strconcat ("invalid unclassed object pointer for value type `", 
G_VALUE_TYPE_NAME (value), "'", NULL);
+               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE 
(object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               }
+               value->data[0].v_pointer = gtk_music_guitar_string_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+
+static gchar* gtk_music_value_guitar_string_lcopy_value (const GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       GtkMusicGuitarString** object_p;
+       object_p = collect_values[0].v_pointer;
+       if (!object_p) {
+               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+       }
+       if (!value->data[0].v_pointer) {
+               *object_p = NULL;
+       } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+               *object_p = value->data[0].v_pointer;
+       } else {
+               *object_p = gtk_music_guitar_string_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+
+GParamSpec* gtk_music_param_spec_guitar_string (const gchar* name, const gchar* nick, const gchar* blurb, 
GType object_type, GParamFlags flags) {
+       GtkMusicParamSpecGuitarString* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, GTK_MUSIC_TYPE_GUITAR_STRING), NULL);
+       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+       G_PARAM_SPEC (spec)->value_type = object_type;
+       return G_PARAM_SPEC (spec);
+}
+
+
+gpointer gtk_music_value_get_guitar_string (const GValue* value) {
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_GUITAR_STRING), NULL);
+       return value->data[0].v_pointer;
+}
+
+
+void gtk_music_value_set_guitar_string (GValue* value, gpointer v_object) {
+       GtkMusicGuitarString* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_GUITAR_STRING));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GTK_MUSIC_TYPE_GUITAR_STRING));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+               gtk_music_guitar_string_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_guitar_string_unref (old);
+       }
+}
+
+
+void gtk_music_value_take_guitar_string (GValue* value, gpointer v_object) {
+       GtkMusicGuitarString* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_GUITAR_STRING));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GTK_MUSIC_TYPE_GUITAR_STRING));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_guitar_string_unref (old);
+       }
+}
+
+
+static void gtk_music_guitar_string_class_init (GtkMusicGuitarStringClass * klass) {
+       gtk_music_guitar_string_parent_class = g_type_class_peek_parent (klass);
+       GTK_MUSIC_GUITAR_STRING_CLASS (klass)->finalize = gtk_music_guitar_string_finalize;
+}
+
+
+static void gtk_music_guitar_string_instance_init (GtkMusicGuitarString * self) {
+       gfloat* _tmp0_ = NULL;
+       gfloat* _tmp1_ = NULL;
+       self->vibrate = FALSE;
+       _tmp0_ = g_new0 (gfloat, 4);
+       _tmp0_[0] = 0.1f;
+       _tmp0_[1] = 0.1f;
+       _tmp0_[2] = 0.1f;
+       _tmp0_[3] = 1.0f;
+       self->color = _tmp0_;
+       self->color_length1 = 4;
+       _tmp1_ = g_new0 (gfloat, 4);
+       _tmp1_[0] = 0.0f;
+       _tmp1_[1] = 0.0f;
+       _tmp1_[2] = 0.0f;
+       _tmp1_[3] = 1.0f;
+       self->labelColor = _tmp1_;
+       self->labelColor_length1 = 4;
+       self->ref_count = 1;
+}
+
+
+static void gtk_music_guitar_string_finalize (GtkMusicGuitarString* obj) {
+       GtkMusicGuitarString * self;
+       self = G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_MUSIC_TYPE_GUITAR_STRING, GtkMusicGuitarString);
+       _g_free0 (self->note);
+       self->color = (g_free (self->color), NULL);
+       self->labelColor = (g_free (self->labelColor), NULL);
+}
+
+
+/**
+ * A guitar string with a particular tuning
+ **/
+GType gtk_music_guitar_string_get_type (void) {
+       static volatile gsize gtk_music_guitar_string_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_guitar_string_type_id__volatile)) {
+               static const GTypeValueTable g_define_type_value_table = { 
gtk_music_value_guitar_string_init, gtk_music_value_guitar_string_free_value, 
gtk_music_value_guitar_string_copy_value, gtk_music_value_guitar_string_peek_pointer, "p", 
gtk_music_value_guitar_string_collect_value, "p", gtk_music_value_guitar_string_lcopy_value };
+               static const GTypeInfo g_define_type_info = { sizeof (GtkMusicGuitarStringClass), 
(GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_music_guitar_string_class_init, 
(GClassFinalizeFunc) NULL, NULL, sizeof (GtkMusicGuitarString), 0, (GInstanceInitFunc) 
gtk_music_guitar_string_instance_init, &g_define_type_value_table };
+               static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | 
G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+               GType gtk_music_guitar_string_type_id;
+               gtk_music_guitar_string_type_id = g_type_register_fundamental (g_type_fundamental_next (), 
"GtkMusicGuitarString", &g_define_type_info, &g_define_type_fundamental_info, 0);
+               g_once_init_leave (&gtk_music_guitar_string_type_id__volatile, 
gtk_music_guitar_string_type_id);
+       }
+       return gtk_music_guitar_string_type_id__volatile;
+}
+
+
+gpointer gtk_music_guitar_string_ref (gpointer instance) {
+       GtkMusicGuitarString* self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+
+void gtk_music_guitar_string_unref (gpointer instance) {
+       GtkMusicGuitarString* self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               GTK_MUSIC_GUITAR_STRING_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+
+GType gtk_music_guitar_fret_mark_style_get_type (void) {
+       static volatile gsize gtk_music_guitar_fret_mark_style_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_guitar_fret_mark_style_type_id__volatile)) {
+               static const GEnumValue values[] = {{GTK_MUSIC_GUITAR_FRET_MARK_STYLE_NONE, 
"GTK_MUSIC_GUITAR_FRET_MARK_STYLE_NONE", "none"}, {GTK_MUSIC_GUITAR_FRET_MARK_STYLE_SOLID_CIRCLE, 
"GTK_MUSIC_GUITAR_FRET_MARK_STYLE_SOLID_CIRCLE", "solid-circle"}, 
{GTK_MUSIC_GUITAR_FRET_MARK_STYLE_RECTANGLE, "GTK_MUSIC_GUITAR_FRET_MARK_STYLE_RECTANGLE", "rectangle"}, 
{GTK_MUSIC_GUITAR_FRET_MARK_STYLE_FANCY, "GTK_MUSIC_GUITAR_FRET_MARK_STYLE_FANCY", "fancy"}, {0, NULL, NULL}};
+               GType gtk_music_guitar_fret_mark_style_type_id;
+               gtk_music_guitar_fret_mark_style_type_id = g_enum_register_static 
("GtkMusicGuitarFretMarkStyle", values);
+               g_once_init_leave (&gtk_music_guitar_fret_mark_style_type_id__volatile, 
gtk_music_guitar_fret_mark_style_type_id);
+       }
+       return gtk_music_guitar_fret_mark_style_type_id__volatile;
+}
+
+
+GtkMusicGuitarFretMark* gtk_music_guitar_fret_mark_construct (GType object_type, gushort position) {
+       GtkMusicGuitarFretMark* self = NULL;
+       gushort _tmp0_;
+       self = (GtkMusicGuitarFretMark*) g_type_create_instance (object_type);
+       _tmp0_ = position;
+       self->position = _tmp0_;
+       return self;
+}
+
+
+GtkMusicGuitarFretMark* gtk_music_guitar_fret_mark_new (gushort position) {
+       return gtk_music_guitar_fret_mark_construct (GTK_MUSIC_TYPE_GUITAR_FRET_MARK, position);
+}
+
+
+static void gtk_music_value_guitar_fret_mark_init (GValue* value) {
+       value->data[0].v_pointer = NULL;
+}
+
+
+static void gtk_music_value_guitar_fret_mark_free_value (GValue* value) {
+       if (value->data[0].v_pointer) {
+               gtk_music_guitar_fret_mark_unref (value->data[0].v_pointer);
+       }
+}
+
+
+static void gtk_music_value_guitar_fret_mark_copy_value (const GValue* src_value, GValue* dest_value) {
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = gtk_music_guitar_fret_mark_ref (src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+
+static gpointer gtk_music_value_guitar_fret_mark_peek_pointer (const GValue* value) {
+       return value->data[0].v_pointer;
+}
+
+
+static gchar* gtk_music_value_guitar_fret_mark_collect_value (GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       if (collect_values[0].v_pointer) {
+               GtkMusicGuitarFretMark* object;
+               object = collect_values[0].v_pointer;
+               if (object->parent_instance.g_class == NULL) {
+                       return g_strconcat ("invalid unclassed object pointer for value type `", 
G_VALUE_TYPE_NAME (value), "'", NULL);
+               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE 
(object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               }
+               value->data[0].v_pointer = gtk_music_guitar_fret_mark_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+
+static gchar* gtk_music_value_guitar_fret_mark_lcopy_value (const GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       GtkMusicGuitarFretMark** object_p;
+       object_p = collect_values[0].v_pointer;
+       if (!object_p) {
+               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+       }
+       if (!value->data[0].v_pointer) {
+               *object_p = NULL;
+       } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+               *object_p = value->data[0].v_pointer;
+       } else {
+               *object_p = gtk_music_guitar_fret_mark_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+
+GParamSpec* gtk_music_param_spec_guitar_fret_mark (const gchar* name, const gchar* nick, const gchar* blurb, 
GType object_type, GParamFlags flags) {
+       GtkMusicParamSpecGuitarFretMark* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, GTK_MUSIC_TYPE_GUITAR_FRET_MARK), NULL);
+       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+       G_PARAM_SPEC (spec)->value_type = object_type;
+       return G_PARAM_SPEC (spec);
+}
+
+
+gpointer gtk_music_value_get_guitar_fret_mark (const GValue* value) {
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_GUITAR_FRET_MARK), NULL);
+       return value->data[0].v_pointer;
+}
+
+
+void gtk_music_value_set_guitar_fret_mark (GValue* value, gpointer v_object) {
+       GtkMusicGuitarFretMark* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_GUITAR_FRET_MARK));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GTK_MUSIC_TYPE_GUITAR_FRET_MARK));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+               gtk_music_guitar_fret_mark_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_guitar_fret_mark_unref (old);
+       }
+}
+
+
+void gtk_music_value_take_guitar_fret_mark (GValue* value, gpointer v_object) {
+       GtkMusicGuitarFretMark* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_GUITAR_FRET_MARK));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GTK_MUSIC_TYPE_GUITAR_FRET_MARK));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_guitar_fret_mark_unref (old);
+       }
+}
+
+
+static void gtk_music_guitar_fret_mark_class_init (GtkMusicGuitarFretMarkClass * klass) {
+       gtk_music_guitar_fret_mark_parent_class = g_type_class_peek_parent (klass);
+       GTK_MUSIC_GUITAR_FRET_MARK_CLASS (klass)->finalize = gtk_music_guitar_fret_mark_finalize;
+}
+
+
+static void gtk_music_guitar_fret_mark_instance_init (GtkMusicGuitarFretMark * self) {
+       gfloat* _tmp0_ = NULL;
+       _tmp0_ = g_new0 (gfloat, 4);
+       _tmp0_[0] = 0.8f;
+       _tmp0_[1] = 0.8f;
+       _tmp0_[2] = 0.8f;
+       _tmp0_[3] = 1.0f;
+       self->color = _tmp0_;
+       self->color_length1 = 4;
+       self->ref_count = 1;
+}
+
+
+static void gtk_music_guitar_fret_mark_finalize (GtkMusicGuitarFretMark* obj) {
+       GtkMusicGuitarFretMark * self;
+       self = G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_MUSIC_TYPE_GUITAR_FRET_MARK, GtkMusicGuitarFretMark);
+       self->color = (g_free (self->color), NULL);
+}
+
+
+/**
+ * A fret mark used to highlight a fret
+ **/
+GType gtk_music_guitar_fret_mark_get_type (void) {
+       static volatile gsize gtk_music_guitar_fret_mark_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_guitar_fret_mark_type_id__volatile)) {
+               static const GTypeValueTable g_define_type_value_table = { 
gtk_music_value_guitar_fret_mark_init, gtk_music_value_guitar_fret_mark_free_value, 
gtk_music_value_guitar_fret_mark_copy_value, gtk_music_value_guitar_fret_mark_peek_pointer, "p", 
gtk_music_value_guitar_fret_mark_collect_value, "p", gtk_music_value_guitar_fret_mark_lcopy_value };
+               static const GTypeInfo g_define_type_info = { sizeof (GtkMusicGuitarFretMarkClass), 
(GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_music_guitar_fret_mark_class_init, 
(GClassFinalizeFunc) NULL, NULL, sizeof (GtkMusicGuitarFretMark), 0, (GInstanceInitFunc) 
gtk_music_guitar_fret_mark_instance_init, &g_define_type_value_table };
+               static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | 
G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+               GType gtk_music_guitar_fret_mark_type_id;
+               gtk_music_guitar_fret_mark_type_id = g_type_register_fundamental (g_type_fundamental_next (), 
"GtkMusicGuitarFretMark", &g_define_type_info, &g_define_type_fundamental_info, 0);
+               g_once_init_leave (&gtk_music_guitar_fret_mark_type_id__volatile, 
gtk_music_guitar_fret_mark_type_id);
+       }
+       return gtk_music_guitar_fret_mark_type_id__volatile;
+}
+
+
+gpointer gtk_music_guitar_fret_mark_ref (gpointer instance) {
+       GtkMusicGuitarFretMark* self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+
+void gtk_music_guitar_fret_mark_unref (gpointer instance) {
+       GtkMusicGuitarFretMark* self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               GTK_MUSIC_GUITAR_FRET_MARK_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+
+GtkMusicGuitarPosition* gtk_music_guitar_position_construct (GType object_type, gushort stringIndex, gushort 
fretIndex) {
+       GtkMusicGuitarPosition* self = NULL;
+       gushort _tmp0_;
+       gushort _tmp1_;
+       self = (GtkMusicGuitarPosition*) g_type_create_instance (object_type);
+       _tmp0_ = stringIndex;
+       self->stringIndex = _tmp0_;
+       _tmp1_ = fretIndex;
+       self->fretIndex = _tmp1_;
+       return self;
+}
+
+
+GtkMusicGuitarPosition* gtk_music_guitar_position_new (gushort stringIndex, gushort fretIndex) {
+       return gtk_music_guitar_position_construct (GTK_MUSIC_TYPE_GUITAR_POSITION, stringIndex, fretIndex);
+}
+
+
+guint gtk_music_guitar_position_hash_func (GtkMusicGuitarPosition* key) {
+       guint result = 0U;
+       GtkMusicGuitarPosition* _tmp0_;
+       gushort _tmp1_;
+       GtkMusicGuitarPosition* _tmp2_;
+       gushort _tmp3_;
+       g_return_val_if_fail (key != NULL, 0U);
+       _tmp0_ = key;
+       _tmp1_ = _tmp0_->stringIndex;
+       _tmp2_ = key;
+       _tmp3_ = _tmp2_->fretIndex;
+       result = (guint) (((13 + _tmp1_) * 23) + _tmp3_);
+       return result;
+}
+
+
+gboolean gtk_music_guitar_position_equal_func (GtkMusicGuitarPosition* a, GtkMusicGuitarPosition* b) {
+       gboolean result = FALSE;
+       gboolean _tmp0_ = FALSE;
+       GtkMusicGuitarPosition* _tmp1_;
+       gushort _tmp2_;
+       GtkMusicGuitarPosition* _tmp3_;
+       gushort _tmp4_;
+       gboolean _tmp9_;
+       g_return_val_if_fail (a != NULL, FALSE);
+       g_return_val_if_fail (b != NULL, FALSE);
+       _tmp1_ = a;
+       _tmp2_ = _tmp1_->stringIndex;
+       _tmp3_ = b;
+       _tmp4_ = _tmp3_->stringIndex;
+       if (_tmp2_ == _tmp4_) {
+               GtkMusicGuitarPosition* _tmp5_;
+               gushort _tmp6_;
+               GtkMusicGuitarPosition* _tmp7_;
+               gushort _tmp8_;
+               _tmp5_ = a;
+               _tmp6_ = _tmp5_->fretIndex;
+               _tmp7_ = b;
+               _tmp8_ = _tmp7_->fretIndex;
+               _tmp0_ = _tmp6_ == _tmp8_;
+       } else {
+               _tmp0_ = FALSE;
+       }
+       _tmp9_ = _tmp0_;
+       if (_tmp9_) {
+               result = TRUE;
+               return result;
+       }
+       result = FALSE;
+       return result;
+}
+
+
+static void gtk_music_value_guitar_position_init (GValue* value) {
+       value->data[0].v_pointer = NULL;
+}
+
+
+static void gtk_music_value_guitar_position_free_value (GValue* value) {
+       if (value->data[0].v_pointer) {
+               gtk_music_guitar_position_unref (value->data[0].v_pointer);
+       }
+}
+
+
+static void gtk_music_value_guitar_position_copy_value (const GValue* src_value, GValue* dest_value) {
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = gtk_music_guitar_position_ref (src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+
+static gpointer gtk_music_value_guitar_position_peek_pointer (const GValue* value) {
+       return value->data[0].v_pointer;
+}
+
+
+static gchar* gtk_music_value_guitar_position_collect_value (GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       if (collect_values[0].v_pointer) {
+               GtkMusicGuitarPosition* object;
+               object = collect_values[0].v_pointer;
+               if (object->parent_instance.g_class == NULL) {
+                       return g_strconcat ("invalid unclassed object pointer for value type `", 
G_VALUE_TYPE_NAME (value), "'", NULL);
+               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE 
(object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               }
+               value->data[0].v_pointer = gtk_music_guitar_position_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+
+static gchar* gtk_music_value_guitar_position_lcopy_value (const GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       GtkMusicGuitarPosition** object_p;
+       object_p = collect_values[0].v_pointer;
+       if (!object_p) {
+               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+       }
+       if (!value->data[0].v_pointer) {
+               *object_p = NULL;
+       } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+               *object_p = value->data[0].v_pointer;
+       } else {
+               *object_p = gtk_music_guitar_position_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+
+GParamSpec* gtk_music_param_spec_guitar_position (const gchar* name, const gchar* nick, const gchar* blurb, 
GType object_type, GParamFlags flags) {
+       GtkMusicParamSpecGuitarPosition* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, GTK_MUSIC_TYPE_GUITAR_POSITION), NULL);
+       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+       G_PARAM_SPEC (spec)->value_type = object_type;
+       return G_PARAM_SPEC (spec);
+}
+
+
+gpointer gtk_music_value_get_guitar_position (const GValue* value) {
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_GUITAR_POSITION), NULL);
+       return value->data[0].v_pointer;
+}
+
+
+void gtk_music_value_set_guitar_position (GValue* value, gpointer v_object) {
+       GtkMusicGuitarPosition* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_GUITAR_POSITION));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GTK_MUSIC_TYPE_GUITAR_POSITION));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+               gtk_music_guitar_position_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_guitar_position_unref (old);
+       }
+}
+
+
+void gtk_music_value_take_guitar_position (GValue* value, gpointer v_object) {
+       GtkMusicGuitarPosition* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_GUITAR_POSITION));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GTK_MUSIC_TYPE_GUITAR_POSITION));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_guitar_position_unref (old);
+       }
+}
+
+
+static void gtk_music_guitar_position_class_init (GtkMusicGuitarPositionClass * klass) {
+       gtk_music_guitar_position_parent_class = g_type_class_peek_parent (klass);
+       GTK_MUSIC_GUITAR_POSITION_CLASS (klass)->finalize = gtk_music_guitar_position_finalize;
+}
+
+
+static void gtk_music_guitar_position_instance_init (GtkMusicGuitarPosition * self) {
+       self->ref_count = 1;
+}
+
+
+static void gtk_music_guitar_position_finalize (GtkMusicGuitarPosition* obj) {
+       GtkMusicGuitarPosition * self;
+       self = G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_MUSIC_TYPE_GUITAR_POSITION, GtkMusicGuitarPosition);
+}
+
+
+/**
+ * A guitar position, composed by the string index and the fret index
+ **/
+GType gtk_music_guitar_position_get_type (void) {
+       static volatile gsize gtk_music_guitar_position_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_guitar_position_type_id__volatile)) {
+               static const GTypeValueTable g_define_type_value_table = { 
gtk_music_value_guitar_position_init, gtk_music_value_guitar_position_free_value, 
gtk_music_value_guitar_position_copy_value, gtk_music_value_guitar_position_peek_pointer, "p", 
gtk_music_value_guitar_position_collect_value, "p", gtk_music_value_guitar_position_lcopy_value };
+               static const GTypeInfo g_define_type_info = { sizeof (GtkMusicGuitarPositionClass), 
(GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_music_guitar_position_class_init, 
(GClassFinalizeFunc) NULL, NULL, sizeof (GtkMusicGuitarPosition), 0, (GInstanceInitFunc) 
gtk_music_guitar_position_instance_init, &g_define_type_value_table };
+               static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | 
G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+               GType gtk_music_guitar_position_type_id;
+               gtk_music_guitar_position_type_id = g_type_register_fundamental (g_type_fundamental_next (), 
"GtkMusicGuitarPosition", &g_define_type_info, &g_define_type_fundamental_info, 0);
+               g_once_init_leave (&gtk_music_guitar_position_type_id__volatile, 
gtk_music_guitar_position_type_id);
+       }
+       return gtk_music_guitar_position_type_id__volatile;
+}
+
+
+gpointer gtk_music_guitar_position_ref (gpointer instance) {
+       GtkMusicGuitarPosition* self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+
+void gtk_music_guitar_position_unref (gpointer instance) {
+       GtkMusicGuitarPosition* self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               GTK_MUSIC_GUITAR_POSITION_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+
+/**
+    * Creates a new Guitar widget, which minimum size is defined to 170x60
+    **/
+GtkMusicGuitar* gtk_music_guitar_construct (GType object_type) {
+       GtkMusicGuitar * self = NULL;
+       GeeArrayList* _tmp0_;
+       GeeHashSet* _tmp1_;
+       GeeHashMap* _tmp2_;
+       gchar** _tmp3_;
+       gint _tmp3__length1;
+       gushort* _tmp9_;
+       gint _tmp9__length1;
+       self = (GtkMusicGuitar*) g_object_new (object_type, NULL);
+       gtk_widget_add_events ((GtkWidget*) self, (gint) (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK));
+       gtk_widget_set_size_request ((GtkWidget*) self, 170, 60);
+       _tmp0_ = gee_array_list_new (GTK_MUSIC_TYPE_GUITAR_STRING, (GBoxedCopyFunc) 
gtk_music_guitar_string_ref, gtk_music_guitar_string_unref, NULL, NULL, NULL);
+       _g_object_unref0 (self->guitarStrings);
+       self->guitarStrings = _tmp0_;
+       _tmp1_ = gee_hash_set_new (GTK_MUSIC_TYPE_GUITAR_FRET_MARK, (GBoxedCopyFunc) 
gtk_music_guitar_fret_mark_ref, gtk_music_guitar_fret_mark_unref, NULL, NULL, NULL, NULL, NULL, NULL);
+       _g_object_unref0 (self->fretMarks);
+       self->fretMarks = _tmp1_;
+       _tmp2_ = gee_hash_map_new (GTK_MUSIC_TYPE_GUITAR_POSITION, (GBoxedCopyFunc) 
gtk_music_guitar_position_ref, gtk_music_guitar_position_unref, GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE, 
(GBoxedCopyFunc) gtk_music_guitar_marked_note_style_ref, gtk_music_guitar_marked_note_style_unref, 
(GeeHashDataFunc) gtk_music_guitar_position_hash_func, NULL, NULL, (GeeEqualDataFunc) 
gtk_music_guitar_position_equal_func, NULL, NULL, NULL, NULL, NULL);
+       _g_object_unref0 (self->markedNotes);
+       self->markedNotes = _tmp2_;
+       _tmp3_ = self->priv->defaultStrings;
+       _tmp3__length1 = self->priv->defaultStrings_length1;
+       {
+               gchar** s_collection = NULL;
+               gint s_collection_length1 = 0;
+               gint _s_collection_size_ = 0;
+               gint s_it = 0;
+               s_collection = _tmp3_;
+               s_collection_length1 = _tmp3__length1;
+               for (s_it = 0; s_it < _tmp3__length1; s_it = s_it + 1) {
+                       gchar* _tmp4_;
+                       gchar* s = NULL;
+                       _tmp4_ = g_strdup (s_collection[s_it]);
+                       s = _tmp4_;
+                       {
+                               GeeArrayList* _tmp5_;
+                               const gchar* _tmp6_;
+                               GtkMusicGuitarString* _tmp7_;
+                               GtkMusicGuitarString* _tmp8_;
+                               _tmp5_ = self->guitarStrings;
+                               _tmp6_ = s;
+                               _tmp7_ = gtk_music_guitar_string_new (_tmp6_);
+                               _tmp8_ = _tmp7_;
+                               gee_abstract_collection_add ((GeeAbstractCollection*) _tmp5_, _tmp8_);
+                               _gtk_music_guitar_string_unref0 (_tmp8_);
+                               _g_free0 (s);
+                       }
+               }
+       }
+       _tmp9_ = self->priv->defaultFretMarks;
+       _tmp9__length1 = self->priv->defaultFretMarks_length1;
+       {
+               gushort* i_collection = NULL;
+               gint i_collection_length1 = 0;
+               gint _i_collection_size_ = 0;
+               gint i_it = 0;
+               i_collection = _tmp9_;
+               i_collection_length1 = _tmp9__length1;
+               for (i_it = 0; i_it < _tmp9__length1; i_it = i_it + 1) {
+                       gushort i = 0U;
+                       i = i_collection[i_it];
+                       {
+                               GeeHashSet* _tmp10_;
+                               gushort _tmp11_;
+                               GtkMusicGuitarFretMark* _tmp12_;
+                               GtkMusicGuitarFretMark* _tmp13_;
+                               _tmp10_ = self->fretMarks;
+                               _tmp11_ = i;
+                               _tmp12_ = gtk_music_guitar_fret_mark_new (_tmp11_);
+                               _tmp13_ = _tmp12_;
+                               gee_abstract_collection_add ((GeeAbstractCollection*) _tmp10_, _tmp13_);
+                               _gtk_music_guitar_fret_mark_unref0 (_tmp13_);
+                       }
+               }
+       }
+       return self;
+}
+
+
+GtkMusicGuitar* gtk_music_guitar_new (void) {
+       return gtk_music_guitar_construct (GTK_MUSIC_TYPE_GUITAR);
+}
+
+
+static gboolean _gtk_music_guitar_update_animation_gsource_func (gpointer self) {
+       gboolean result;
+       result = gtk_music_guitar_update_animation (self);
+       return result;
+}
+
+
+void gtk_music_guitar_start_animation (GtkMusicGuitar* self) {
+       g_return_if_fail (self != NULL);
+       self->priv->shouldAnimate = TRUE;
+       g_timeout_add_full (G_PRIORITY_DEFAULT, (guint) 10, _gtk_music_guitar_update_animation_gsource_func, 
g_object_ref (self), g_object_unref);
+}
+
+
+void gtk_music_guitar_stop_animation (GtkMusicGuitar* self) {
+       g_return_if_fail (self != NULL);
+       self->priv->shouldAnimate = FALSE;
+       self->priv->animateInstant = (gfloat) 0;
+}
+
+
+static gboolean gtk_music_guitar_update_animation (GtkMusicGuitar* self) {
+       gboolean result = FALSE;
+       gfloat _tmp0_;
+       gboolean _tmp1_;
+       g_return_val_if_fail (self != NULL, FALSE);
+       _tmp0_ = self->priv->animateInstant;
+       self->priv->animateInstant = _tmp0_ + 0.3f;
+       gtk_music_guitar_redraw (self);
+       _tmp1_ = self->priv->shouldAnimate;
+       result = _tmp1_;
+       return result;
+}
+
+
+/**
+    * Highlights a position (string and fret) in the instrument
+    * @param stringIndex The string number (top string equals to 0)
+    * @param fretIndex The fret number
+    **/
+void gtk_music_guitar_mark_position (GtkMusicGuitar* self, gushort stringIndex, gushort fretIndex, gfloat* 
color, int color_length1) {
+       gushort _tmp0_;
+       gushort _tmp1_;
+       GtkMusicGuitarPosition* _tmp2_;
+       GtkMusicGuitarPosition* key;
+       GeeHashMap* _tmp3_;
+       GtkMusicGuitarPosition* _tmp4_;
+       gfloat* _tmp5_;
+       gint _tmp5__length1;
+       GtkMusicGuitarMarkedNoteStyle* _tmp6_;
+       GtkMusicGuitarMarkedNoteStyle* _tmp7_;
+       gboolean _tmp8_;
+       g_return_if_fail (self != NULL);
+       _tmp0_ = stringIndex;
+       _tmp1_ = fretIndex;
+       _tmp2_ = gtk_music_guitar_position_new (_tmp0_, _tmp1_);
+       key = _tmp2_;
+       _tmp3_ = self->markedNotes;
+       _tmp4_ = key;
+       _tmp5_ = color;
+       _tmp5__length1 = color_length1;
+       _tmp6_ = gtk_music_guitar_marked_note_style_new (_tmp5_, _tmp5__length1);
+       _tmp7_ = _tmp6_;
+       gee_abstract_map_set ((GeeAbstractMap*) _tmp3_, _tmp4_, _tmp7_);
+       _gtk_music_guitar_marked_note_style_unref0 (_tmp7_);
+       _tmp8_ = self->autoUpdate;
+       if (_tmp8_) {
+               gtk_music_guitar_redraw (self);
+       }
+       _gtk_music_guitar_position_unref0 (key);
+}
+
+
+/**
+    * Removes the mark of a position (string and fret) in the instrument
+    * @param stringIndex The string number (top string equals to 0)
+    * @param fretIndex The fret number
+    **/
+void gtk_music_guitar_unmark_position (GtkMusicGuitar* self, gushort stringIndex, gushort fretIndex) {
+       gushort _tmp0_;
+       gushort _tmp1_;
+       GtkMusicGuitarPosition* _tmp2_;
+       GtkMusicGuitarPosition* key;
+       GeeHashMap* _tmp3_;
+       GtkMusicGuitarPosition* _tmp4_;
+       gboolean _tmp5_ = FALSE;
+       gboolean _tmp8_;
+       g_return_if_fail (self != NULL);
+       _tmp0_ = stringIndex;
+       _tmp1_ = fretIndex;
+       _tmp2_ = gtk_music_guitar_position_new (_tmp0_, _tmp1_);
+       key = _tmp2_;
+       _tmp3_ = self->markedNotes;
+       _tmp4_ = key;
+       _tmp5_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp3_, _tmp4_);
+       if (_tmp5_) {
+               GeeHashMap* _tmp6_;
+               GtkMusicGuitarPosition* _tmp7_;
+               _tmp6_ = self->markedNotes;
+               _tmp7_ = key;
+               gee_abstract_map_unset ((GeeAbstractMap*) _tmp6_, _tmp7_, NULL);
+       }
+       _tmp8_ = self->autoUpdate;
+       if (_tmp8_) {
+               gtk_music_guitar_redraw (self);
+       }
+       _gtk_music_guitar_position_unref0 (key);
+}
+
+
+/**
+    * Removes all marked notes in the Guitar view
+    **/
+void gtk_music_guitar_unmark_all (GtkMusicGuitar* self) {
+       GeeHashMap* _tmp0_;
+       gboolean _tmp1_;
+       g_return_if_fail (self != NULL);
+       _tmp0_ = self->markedNotes;
+       gee_abstract_map_clear ((GeeAbstractMap*) _tmp0_);
+       _tmp1_ = self->autoUpdate;
+       if (_tmp1_) {
+               gtk_music_guitar_redraw (self);
+       }
+}
+
+
+/**
+    * Highlights all positions corresponding to a note
+    * @param note A musical note in scientific notation (examples: F#4 , C)
+    **/
+void gtk_music_guitar_mark_note (GtkMusicGuitar* self, const gchar* note, gfloat* color, int color_length1) {
+       gboolean _tmp0_;
+       gboolean oldAutoUpdate;
+       const gchar* _tmp1_;
+       GeeHashSet* _tmp2_ = NULL;
+       GeeHashSet* positions;
+       GeeHashSet* _tmp3_;
+       gboolean _tmp15_;
+       gboolean _tmp16_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (note != NULL);
+       _tmp0_ = self->autoUpdate;
+       oldAutoUpdate = _tmp0_;
+       _tmp1_ = note;
+       _tmp2_ = gtk_music_guitar_find_positions (self, _tmp1_);
+       positions = _tmp2_;
+       _tmp3_ = positions;
+       if (_tmp3_ == NULL) {
+               _g_object_unref0 (positions);
+               return;
+       }
+       {
+               GeeHashSet* _tmp4_;
+               GeeIterator* _tmp5_ = NULL;
+               GeeIterator* _k_it;
+               _tmp4_ = positions;
+               _tmp5_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) _tmp4_);
+               _k_it = _tmp5_;
+               while (TRUE) {
+                       GeeIterator* _tmp6_;
+                       gboolean _tmp7_ = FALSE;
+                       GeeIterator* _tmp8_;
+                       gpointer _tmp9_ = NULL;
+                       GtkMusicGuitarPosition* k;
+                       GtkMusicGuitarPosition* _tmp10_;
+                       gushort _tmp11_;
+                       GtkMusicGuitarPosition* _tmp12_;
+                       gushort _tmp13_;
+                       gfloat* _tmp14_;
+                       gint _tmp14__length1;
+                       _tmp6_ = _k_it;
+                       _tmp7_ = gee_iterator_next (_tmp6_);
+                       if (!_tmp7_) {
+                               break;
+                       }
+                       _tmp8_ = _k_it;
+                       _tmp9_ = gee_iterator_get (_tmp8_);
+                       k = (GtkMusicGuitarPosition*) _tmp9_;
+                       _tmp10_ = k;
+                       _tmp11_ = _tmp10_->stringIndex;
+                       _tmp12_ = k;
+                       _tmp13_ = _tmp12_->fretIndex;
+                       _tmp14_ = color;
+                       _tmp14__length1 = color_length1;
+                       gtk_music_guitar_mark_position (self, _tmp11_, _tmp13_, _tmp14_, _tmp14__length1);
+                       _gtk_music_guitar_position_unref0 (k);
+               }
+               _g_object_unref0 (_k_it);
+       }
+       _tmp15_ = oldAutoUpdate;
+       self->autoUpdate = _tmp15_;
+       _tmp16_ = self->autoUpdate;
+       if (_tmp16_) {
+               gtk_music_guitar_redraw (self);
+       }
+       _g_object_unref0 (positions);
+}
+
+
+/**
+    * Removes the marks in all positions corresponding to a note
+    * @param note A musical note in scientific notation (examples: F#4 , C)
+    **/
+void gtk_music_guitar_unmark_note (GtkMusicGuitar* self, const gchar* note) {
+       gboolean _tmp0_;
+       gboolean oldAutoUpdate;
+       const gchar* _tmp1_;
+       GeeHashSet* _tmp2_ = NULL;
+       GeeHashSet* positions;
+       GeeHashSet* _tmp3_;
+       gboolean _tmp14_;
+       gboolean _tmp15_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (note != NULL);
+       _tmp0_ = self->autoUpdate;
+       oldAutoUpdate = _tmp0_;
+       _tmp1_ = note;
+       _tmp2_ = gtk_music_guitar_find_positions (self, _tmp1_);
+       positions = _tmp2_;
+       _tmp3_ = positions;
+       if (_tmp3_ == NULL) {
+               _g_object_unref0 (positions);
+               return;
+       }
+       {
+               GeeHashSet* _tmp4_;
+               GeeIterator* _tmp5_ = NULL;
+               GeeIterator* _k_it;
+               _tmp4_ = positions;
+               _tmp5_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) _tmp4_);
+               _k_it = _tmp5_;
+               while (TRUE) {
+                       GeeIterator* _tmp6_;
+                       gboolean _tmp7_ = FALSE;
+                       GeeIterator* _tmp8_;
+                       gpointer _tmp9_ = NULL;
+                       GtkMusicGuitarPosition* k;
+                       GtkMusicGuitarPosition* _tmp10_;
+                       gushort _tmp11_;
+                       GtkMusicGuitarPosition* _tmp12_;
+                       gushort _tmp13_;
+                       _tmp6_ = _k_it;
+                       _tmp7_ = gee_iterator_next (_tmp6_);
+                       if (!_tmp7_) {
+                               break;
+                       }
+                       _tmp8_ = _k_it;
+                       _tmp9_ = gee_iterator_get (_tmp8_);
+                       k = (GtkMusicGuitarPosition*) _tmp9_;
+                       _tmp10_ = k;
+                       _tmp11_ = _tmp10_->stringIndex;
+                       _tmp12_ = k;
+                       _tmp13_ = _tmp12_->fretIndex;
+                       gtk_music_guitar_unmark_position (self, _tmp11_, _tmp13_);
+                       _gtk_music_guitar_position_unref0 (k);
+               }
+               _g_object_unref0 (_k_it);
+       }
+       _tmp14_ = oldAutoUpdate;
+       self->autoUpdate = _tmp14_;
+       _tmp15_ = self->autoUpdate;
+       if (_tmp15_) {
+               gtk_music_guitar_redraw (self);
+       }
+       _g_object_unref0 (positions);
+}
+
+
+/**
+     * Computes the fret index to accomplish a given note in a given string
+     * @param stringIndex The guitar string index
+     * @param note The musical note in scientific notation
+     * @return The position where the note can be found or -1
+     **/
+gshort gtk_music_guitar_note_position_in_string (GtkMusicGuitar* self, gushort stringIndex, const gchar* 
note) {
+       gshort result = 0;
+       GeeArrayList* _tmp0_;
+       gushort _tmp1_;
+       gpointer _tmp2_ = NULL;
+       GtkMusicGuitarString* _tmp3_;
+       const gchar* _tmp4_;
+       gchar* _tmp5_;
+       gchar* _tmp6_;
+       gchar* firstNote;
+       const gchar* _tmp7_;
+       gushort _tmp8_ = 0U;
+       gushort midiA;
+       const gchar* _tmp9_;
+       gushort _tmp10_ = 0U;
+       gushort midiB;
+       gushort _tmp11_;
+       gushort _tmp12_;
+       gshort _result_;
+       gshort _tmp13_;
+       gushort _tmp14_;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (self != NULL, 0);
+       g_return_val_if_fail (note != NULL, 0);
+       _tmp0_ = self->guitarStrings;
+       _tmp1_ = stringIndex;
+       _tmp2_ = gee_abstract_list_get ((GeeAbstractList*) _tmp0_, (gint) _tmp1_);
+       _tmp3_ = (GtkMusicGuitarString*) _tmp2_;
+       _tmp4_ = _tmp3_->note;
+       _tmp5_ = g_strdup (_tmp4_);
+       _tmp6_ = _tmp5_;
+       _gtk_music_guitar_string_unref0 (_tmp3_);
+       firstNote = _tmp6_;
+       _tmp7_ = firstNote;
+       _tmp8_ = gtk_music_musical_notes_get_note_as_midi_code (_tmp7_, &_inner_error_);
+       midiA = _tmp8_;
+       if (_inner_error_ != NULL) {
+               _g_free0 (firstNote);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return 0;
+       }
+       _tmp9_ = note;
+       _tmp10_ = gtk_music_musical_notes_get_note_as_midi_code (_tmp9_, &_inner_error_);
+       midiB = _tmp10_;
+       if (_inner_error_ != NULL) {
+               _g_free0 (firstNote);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return 0;
+       }
+       _tmp11_ = midiB;
+       _tmp12_ = midiA;
+       _result_ = (gshort) (_tmp11_ - _tmp12_);
+       _tmp13_ = _result_;
+       _tmp14_ = self->fretNumber;
+       if (((gushort) _tmp13_) > _tmp14_) {
+               result = (gshort) (-1);
+               _g_free0 (firstNote);
+               return result;
+       }
+       result = _result_;
+       _g_free0 (firstNote);
+       return result;
+}
+
+
+/**
+    * Finds all positions of a given note
+    * @param note The note with or without the octave component (e.g: A#, D4)
+    **/
+GeeHashSet* gtk_music_guitar_find_positions (GtkMusicGuitar* self, const gchar* note) {
+       GeeHashSet* result = NULL;
+       gboolean _tmp0_ = FALSE;
+       const gchar* _tmp1_;
+       gboolean _tmp2_ = FALSE;
+       gboolean _tmp5_;
+       gshort fretIndex = 0;
+       GeeHashSet* notesWithOctaves = NULL;
+       GeeHashSet* _tmp6_;
+       GeeHashSet* validPositions;
+       const gchar* _tmp7_;
+       gboolean _tmp8_ = FALSE;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (self != NULL, NULL);
+       g_return_val_if_fail (note != NULL, NULL);
+       _tmp1_ = note;
+       _tmp2_ = gtk_music_musical_notes_validate (_tmp1_);
+       if (!_tmp2_) {
+               const gchar* _tmp3_;
+               gboolean _tmp4_ = FALSE;
+               _tmp3_ = note;
+               _tmp4_ = gtk_music_musical_notes_is_incomplete (_tmp3_);
+               _tmp0_ = !_tmp4_;
+       } else {
+               _tmp0_ = FALSE;
+       }
+       _tmp5_ = _tmp0_;
+       if (_tmp5_) {
+               result = NULL;
+               return result;
+       }
+       _tmp6_ = gee_hash_set_new (GTK_MUSIC_TYPE_GUITAR_POSITION, (GBoxedCopyFunc) 
gtk_music_guitar_position_ref, gtk_music_guitar_position_unref, (GeeHashDataFunc) 
gtk_music_guitar_position_hash_func, NULL, NULL, (GeeEqualDataFunc) gtk_music_guitar_position_equal_func, 
NULL, NULL);
+       validPositions = _tmp6_;
+       _tmp7_ = note;
+       _tmp8_ = gtk_music_musical_notes_is_incomplete (_tmp7_);
+       if (!_tmp8_) {
+               GeeHashSet* _tmp9_;
+               GeeHashSet* _tmp10_;
+               const gchar* _tmp11_;
+               _tmp9_ = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, 
NULL, NULL, NULL, NULL);
+               _g_object_unref0 (notesWithOctaves);
+               notesWithOctaves = _tmp9_;
+               _tmp10_ = notesWithOctaves;
+               _tmp11_ = note;
+               gee_abstract_collection_add ((GeeAbstractCollection*) _tmp10_, _tmp11_);
+       } else {
+               const gchar* _tmp12_;
+               GeeHashSet* _tmp13_ = NULL;
+               GeeHashSet* _tmp14_;
+               _tmp12_ = note;
+               _tmp13_ = gtk_music_musical_notes_make (_tmp12_, &_inner_error_);
+               _tmp14_ = _tmp13_;
+               if (_inner_error_ != NULL) {
+                       _g_object_unref0 (validPositions);
+                       _g_object_unref0 (notesWithOctaves);
+                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return NULL;
+               }
+               _g_object_unref0 (notesWithOctaves);
+               notesWithOctaves = _tmp14_;
+       }
+       {
+               GeeHashSet* _tmp15_;
+               GeeIterator* _tmp16_ = NULL;
+               GeeIterator* _n_it;
+               _tmp15_ = notesWithOctaves;
+               _tmp16_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) _tmp15_);
+               _n_it = _tmp16_;
+               while (TRUE) {
+                       GeeIterator* _tmp17_;
+                       gboolean _tmp18_ = FALSE;
+                       GeeIterator* _tmp19_;
+                       gpointer _tmp20_ = NULL;
+                       gchar* n;
+                       _tmp17_ = _n_it;
+                       _tmp18_ = gee_iterator_next (_tmp17_);
+                       if (!_tmp18_) {
+                               break;
+                       }
+                       _tmp19_ = _n_it;
+                       _tmp20_ = gee_iterator_get (_tmp19_);
+                       n = (gchar*) _tmp20_;
+                       {
+                               gint s;
+                               s = 0;
+                               {
+                                       gboolean _tmp21_;
+                                       _tmp21_ = TRUE;
+                                       while (TRUE) {
+                                               gboolean _tmp22_;
+                                               gint _tmp24_;
+                                               GeeArrayList* _tmp25_;
+                                               gint _tmp26_;
+                                               gint _tmp27_;
+                                               gint _tmp28_;
+                                               const gchar* _tmp29_;
+                                               gshort _tmp30_ = 0;
+                                               gshort _tmp31_;
+                                               _tmp22_ = _tmp21_;
+                                               if (!_tmp22_) {
+                                                       gint _tmp23_;
+                                                       _tmp23_ = s;
+                                                       s = _tmp23_ + 1;
+                                               }
+                                               _tmp21_ = FALSE;
+                                               _tmp24_ = s;
+                                               _tmp25_ = self->guitarStrings;
+                                               _tmp26_ = gee_abstract_collection_get_size ((GeeCollection*) 
_tmp25_);
+                                               _tmp27_ = _tmp26_;
+                                               if (!(_tmp24_ < _tmp27_)) {
+                                                       break;
+                                               }
+                                               _tmp28_ = s;
+                                               _tmp29_ = n;
+                                               _tmp30_ = gtk_music_guitar_note_position_in_string (self, 
(gushort) _tmp28_, _tmp29_);
+                                               fretIndex = _tmp30_;
+                                               _tmp31_ = fretIndex;
+                                               if (((gint) _tmp31_) >= 0) {
+                                                       GeeHashSet* _tmp32_;
+                                                       gint _tmp33_;
+                                                       gshort _tmp34_;
+                                                       GtkMusicGuitarPosition* _tmp35_;
+                                                       GtkMusicGuitarPosition* _tmp36_;
+                                                       _tmp32_ = validPositions;
+                                                       _tmp33_ = s;
+                                                       _tmp34_ = fretIndex;
+                                                       _tmp35_ = gtk_music_guitar_position_new ((gushort) 
_tmp33_, (gushort) _tmp34_);
+                                                       _tmp36_ = _tmp35_;
+                                                       gee_abstract_collection_add ((GeeAbstractCollection*) 
_tmp32_, _tmp36_);
+                                                       _gtk_music_guitar_position_unref0 (_tmp36_);
+                                               }
+                                       }
+                               }
+                       }
+                       _g_free0 (n);
+               }
+               _g_object_unref0 (_n_it);
+       }
+       result = validPositions;
+       _g_object_unref0 (notesWithOctaves);
+       return result;
+}
+
+
+/**
+    * Gets a MIDI code from a guitar position
+    **/
+gushort gtk_music_guitar_position_to_midi (GtkMusicGuitar* self, GtkMusicGuitarPosition* position) {
+       gushort result = 0U;
+       GeeArrayList* _tmp0_;
+       GtkMusicGuitarPosition* _tmp1_;
+       gushort _tmp2_;
+       gpointer _tmp3_ = NULL;
+       GtkMusicGuitarString* _tmp4_;
+       const gchar* _tmp5_;
+       gchar* _tmp6_;
+       gchar* _tmp7_;
+       gchar* first_note;
+       gushort _tmp8_ = 0U;
+       gushort midi;
+       gushort _tmp9_;
+       GtkMusicGuitarPosition* _tmp10_;
+       gushort _tmp11_;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (self != NULL, 0U);
+       g_return_val_if_fail (position != NULL, 0U);
+       _tmp0_ = self->guitarStrings;
+       _tmp1_ = position;
+       _tmp2_ = _tmp1_->stringIndex;
+       _tmp3_ = gee_abstract_list_get ((GeeAbstractList*) _tmp0_, (gint) _tmp2_);
+       _tmp4_ = (GtkMusicGuitarString*) _tmp3_;
+       _tmp5_ = _tmp4_->note;
+       _tmp6_ = g_strdup (_tmp5_);
+       _tmp7_ = _tmp6_;
+       _gtk_music_guitar_string_unref0 (_tmp4_);
+       first_note = _tmp7_;
+       _tmp8_ = gtk_music_musical_notes_get_note_as_midi_code (first_note, &_inner_error_);
+       midi = _tmp8_;
+       if (_inner_error_ != NULL) {
+               _g_free0 (first_note);
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return 0U;
+       }
+       _tmp9_ = midi;
+       _tmp10_ = position;
+       _tmp11_ = _tmp10_->fretIndex;
+       midi = _tmp9_ + _tmp11_;
+       result = midi;
+       _g_free0 (first_note);
+       return result;
+}
+
+
+/**
+    * Convenient function for getting a note name from a guitar position
+    **/
+gchar* gtk_music_guitar_position_to_note (GtkMusicGuitar* self, GtkMusicGuitarPosition* position) {
+       gchar* result = NULL;
+       GtkMusicGuitarPosition* _tmp0_;
+       gushort _tmp1_ = 0U;
+       gushort midi;
+       gchar* _tmp2_ = NULL;
+       gchar* _tmp3_;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (self != NULL, NULL);
+       g_return_val_if_fail (position != NULL, NULL);
+       _tmp0_ = position;
+       _tmp1_ = gtk_music_guitar_position_to_midi (self, _tmp0_);
+       midi = _tmp1_;
+       _tmp2_ = gtk_music_musical_notes_get_note_from_midi_code (midi, &_inner_error_);
+       _tmp3_ = _tmp2_;
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return NULL;
+       }
+       result = _tmp3_;
+       return result;
+}
+
+
+/**
+     * Finds the guitar position associated to a point
+     * @param x The x coordinate of the point
+     * @param y The y coordinate of the point
+     **/
+static GtkMusicGuitarPosition* gtk_music_guitar_point_to_position (GtkMusicGuitar* self, gdouble x, gdouble 
y) {
+       GtkMusicGuitarPosition* result = NULL;
+       gfloat x_tolerance;
+       gfloat y_tolerance;
+       gdouble _tmp0_;
+       gdouble _tmp1_;
+       gdouble _tmp2_;
+       gdouble _tmp3_;
+       gdouble _tmp4_;
+       gdouble _tmp5_;
+       gdouble _tmp6_;
+       gdouble fretOffset;
+       gdouble _tmp7_;
+       gdouble _tmp8_;
+       gdouble _tmp9_;
+       gdouble stringOffset;
+       gboolean _tmp10_ = FALSE;
+       gdouble _tmp11_;
+       gdouble _tmp12_ = 0.0;
+       gfloat _tmp13_;
+       gboolean _tmp20_;
+       gdouble _tmp21_;
+       gdouble _tmp22_;
+       gushort fretIndex;
+       gdouble _tmp23_;
+       gdouble _tmp24_;
+       gushort stringIndex;
+       gdouble _tmp25_;
+       gfloat _tmp26_;
+       gushort _tmp28_;
+       gushort _tmp29_;
+       GtkMusicGuitarPosition* _tmp30_;
+       g_return_val_if_fail (self != NULL, NULL);
+       x_tolerance = 0.4f;
+       y_tolerance = 0.2f;
+       _tmp0_ = x;
+       _tmp1_ = self->priv->gridX;
+       x = _tmp0_ - _tmp1_;
+       _tmp2_ = y;
+       _tmp3_ = self->priv->gridY;
+       y = _tmp2_ - _tmp3_;
+       _tmp4_ = x;
+       _tmp5_ = self->priv->fretSpacing;
+       _tmp6_ = self->priv->fretSpacing;
+       fretOffset = ((gdouble) fmod (_tmp4_, _tmp5_)) / _tmp6_;
+       _tmp7_ = y;
+       _tmp8_ = self->priv->stringSpacing;
+       _tmp9_ = self->priv->stringSpacing;
+       stringOffset = ((gdouble) fmod (_tmp7_, _tmp8_)) / _tmp9_;
+       _tmp11_ = fretOffset;
+       _tmp12_ = fabs (_tmp11_ - 0.5);
+       _tmp13_ = x_tolerance;
+       if (_tmp12_ > ((gdouble) _tmp13_)) {
+               _tmp10_ = TRUE;
+       } else {
+               gboolean _tmp14_ = FALSE;
+               gdouble _tmp15_;
+               gfloat _tmp16_;
+               gboolean _tmp19_;
+               _tmp15_ = stringOffset;
+               _tmp16_ = y_tolerance;
+               if (_tmp15_ < ((gdouble) (1 - _tmp16_))) {
+                       gdouble _tmp17_;
+                       gfloat _tmp18_;
+                       _tmp17_ = stringOffset;
+                       _tmp18_ = y_tolerance;
+                       _tmp14_ = _tmp17_ > ((gdouble) _tmp18_);
+               } else {
+                       _tmp14_ = FALSE;
+               }
+               _tmp19_ = _tmp14_;
+               _tmp10_ = _tmp19_;
+       }
+       _tmp20_ = _tmp10_;
+       if (_tmp20_) {
+               result = NULL;
+               return result;
+       }
+       _tmp21_ = x;
+       _tmp22_ = self->priv->fretSpacing;
+       fretIndex = (gushort) (_tmp21_ / _tmp22_);
+       _tmp23_ = y;
+       _tmp24_ = self->priv->stringSpacing;
+       stringIndex = (gushort) (_tmp23_ / _tmp24_);
+       _tmp25_ = stringOffset;
+       _tmp26_ = y_tolerance;
+       if (_tmp25_ > ((gdouble) (1 - _tmp26_))) {
+               gushort _tmp27_;
+               _tmp27_ = stringIndex;
+               stringIndex = (gushort) (_tmp27_ + 1);
+       }
+       _tmp28_ = stringIndex;
+       _tmp29_ = fretIndex;
+       _tmp30_ = gtk_music_guitar_position_new (_tmp28_, _tmp29_);
+       result = _tmp30_;
+       return result;
+}
+
+
+/**
+    * Customized button_press_event
+    *
+    * Adds the current position and note to the standard button-press event and
+    * emits a note_pressed signal.
+    **/
+static gboolean gtk_music_guitar_real_button_press_event (GtkWidget* base, GdkEventButton* event) {
+       GtkMusicGuitar * self;
+       gboolean result = FALSE;
+       GdkEventButton _tmp0_;
+       gdouble _tmp1_;
+       GdkEventButton _tmp2_;
+       gdouble _tmp3_;
+       GtkMusicGuitarPosition* _tmp4_ = NULL;
+       GtkMusicGuitarPosition* pos;
+       GtkMusicGuitarPosition* _tmp5_;
+       self = (GtkMusicGuitar*) base;
+       g_return_val_if_fail (event != NULL, FALSE);
+       _tmp0_ = *event;
+       _tmp1_ = _tmp0_.x;
+       _tmp2_ = *event;
+       _tmp3_ = _tmp2_.y;
+       _tmp4_ = gtk_music_guitar_point_to_position (self, _tmp1_, _tmp3_);
+       pos = _tmp4_;
+       _tmp5_ = pos;
+       if (_tmp5_ != NULL) {
+               GdkEventButton _tmp6_;
+               GtkMusicGuitarPosition* _tmp7_;
+               _tmp6_ = *event;
+               _tmp7_ = pos;
+               g_signal_emit_by_name (self, "note-pressed", (GtkWidget*) self, &_tmp6_, _tmp7_);
+       }
+       result = TRUE;
+       _gtk_music_guitar_position_unref0 (pos);
+       return result;
+}
+
+
+/**
+    * Customized button_released_event
+    *
+    * Adds the current position and note to the standard button-release event 
+    * and emits a note_released signal.
+    **/
+static gboolean gtk_music_guitar_real_button_release_event (GtkWidget* base, GdkEventButton* event) {
+       GtkMusicGuitar * self;
+       gboolean result = FALSE;
+       GdkEventButton _tmp0_;
+       gdouble _tmp1_;
+       GdkEventButton _tmp2_;
+       gdouble _tmp3_;
+       GtkMusicGuitarPosition* _tmp4_ = NULL;
+       GtkMusicGuitarPosition* pos;
+       GtkMusicGuitarPosition* _tmp5_;
+       self = (GtkMusicGuitar*) base;
+       g_return_val_if_fail (event != NULL, FALSE);
+       _tmp0_ = *event;
+       _tmp1_ = _tmp0_.x;
+       _tmp2_ = *event;
+       _tmp3_ = _tmp2_.y;
+       _tmp4_ = gtk_music_guitar_point_to_position (self, _tmp1_, _tmp3_);
+       pos = _tmp4_;
+       _tmp5_ = pos;
+       if (_tmp5_ != NULL) {
+               GdkEventButton _tmp6_;
+               GtkMusicGuitarPosition* _tmp7_;
+               _tmp6_ = *event;
+               _tmp7_ = pos;
+               g_signal_emit_by_name (self, "note-released", (GtkWidget*) self, &_tmp6_, _tmp7_);
+       }
+       result = TRUE;
+       _gtk_music_guitar_position_unref0 (pos);
+       return result;
+}
+
+
+/**
+    * Draws a guitar widget
+    *
+    * @param cr The drawing context for the widget
+    * @return Whether the event should be propagated (TODO Confirm this theory)
+    **/
+static gboolean gtk_music_guitar_real_draw (GtkWidget* base, cairo_t* cr) {
+       GtkMusicGuitar * self;
+       gboolean result = FALSE;
+       cairo_t* _tmp0_;
+       cairo_t* _tmp1_;
+       cairo_t* _tmp2_;
+       cairo_t* _tmp3_;
+       cairo_t* _tmp4_;
+       cairo_t* _tmp5_;
+       self = (GtkMusicGuitar*) base;
+       g_return_val_if_fail (cr != NULL, FALSE);
+       _tmp0_ = cr;
+       gtk_music_guitar_calculate_dimensions (self, _tmp0_);
+       _tmp1_ = cr;
+       gtk_music_guitar_draw_base (self, _tmp1_);
+       _tmp2_ = cr;
+       gtk_music_guitar_draw_fret_marks (self, _tmp2_);
+       _tmp3_ = cr;
+       gtk_music_guitar_draw_frets (self, _tmp3_);
+       _tmp4_ = cr;
+       gtk_music_guitar_draw_strings (self, _tmp4_);
+       _tmp5_ = cr;
+       gtk_music_guitar_draw_marked_notes (self, _tmp5_);
+       result = FALSE;
+       return result;
+}
+
+
+/**
+    * Calculate some drawing dimensions
+    * @param cr The drawing context for the widget
+    **/
+static void gtk_music_guitar_calculate_dimensions (GtkMusicGuitar* self, cairo_t* cr) {
+       gint _tmp0_ = 0;
+       gint _tmp1_ = 0;
+       gdouble _tmp2_;
+       gboolean _tmp3_;
+       gdouble _tmp9_;
+       gdouble _tmp10_;
+       gdouble _tmp11_;
+       gdouble _tmp12_;
+       gdouble _tmp13_;
+       GeeArrayList* _tmp14_;
+       gint _tmp15_;
+       gint _tmp16_;
+       gdouble _tmp17_;
+       gushort _tmp18_;
+       gdouble _tmp19_;
+       gdouble _tmp20_;
+       gdouble _tmp21_ = 0.0;
+       gdouble _tmp22_;
+       gdouble _tmp23_;
+       gdouble _tmp24_ = 0.0;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (cr != NULL);
+       _tmp0_ = gtk_widget_get_allocated_width ((GtkWidget*) self);
+       self->priv->width = (gdouble) _tmp0_;
+       _tmp1_ = gtk_widget_get_allocated_height ((GtkWidget*) self);
+       self->priv->height = (gdouble) _tmp1_;
+       _tmp2_ = self->priv->height;
+       self->priv->gridHeight = 0.8 * _tmp2_;
+       _tmp3_ = self->showLabels;
+       if (_tmp3_) {
+               gdouble _tmp4_;
+               cairo_t* _tmp5_;
+               cairo_t* _tmp6_;
+               gdouble _tmp7_;
+               _tmp4_ = self->priv->width;
+               self->priv->gridWidth = 0.95 * _tmp4_;
+               _tmp5_ = cr;
+               cairo_select_font_face (_tmp5_, "monospace", CAIRO_FONT_SLANT_NORMAL, 
CAIRO_FONT_WEIGHT_NORMAL);
+               _tmp6_ = cr;
+               _tmp7_ = self->priv->width;
+               cairo_set_font_size (_tmp6_, 0.05 * _tmp7_);
+       } else {
+               gdouble _tmp8_;
+               _tmp8_ = self->priv->width;
+               self->priv->gridWidth = _tmp8_;
+       }
+       _tmp9_ = self->priv->width;
+       _tmp10_ = self->priv->gridWidth;
+       self->priv->gridX = _tmp9_ - _tmp10_;
+       _tmp11_ = self->priv->height;
+       _tmp12_ = self->priv->gridHeight;
+       self->priv->gridY = (_tmp11_ - _tmp12_) / 2;
+       _tmp13_ = self->priv->gridHeight;
+       _tmp14_ = self->guitarStrings;
+       _tmp15_ = gee_abstract_collection_get_size ((GeeCollection*) _tmp14_);
+       _tmp16_ = _tmp15_;
+       self->priv->stringSpacing = _tmp13_ / (_tmp16_ - 1);
+       _tmp17_ = self->priv->gridWidth;
+       _tmp18_ = self->fretNumber;
+       self->priv->fretSpacing = _tmp17_ / _tmp18_;
+       _tmp19_ = self->priv->fretSpacing;
+       _tmp20_ = self->priv->stringSpacing;
+       _tmp21_ = fmin (_tmp19_ / 2, _tmp20_ / 2);
+       self->priv->fretMarkRadius = 0.5 * _tmp21_;
+       _tmp22_ = self->priv->fretSpacing;
+       _tmp23_ = self->priv->stringSpacing;
+       _tmp24_ = fmin (_tmp22_ / 2, _tmp23_ / 2);
+       self->priv->markedNoteRadius = 0.7 * _tmp24_;
+}
+
+
+/**
+    * Draw grid background and theme-related stuff
+    * @param cr The drawing context for the widget
+    **/
+static void gtk_music_guitar_draw_base (GtkMusicGuitar* self, cairo_t* cr) {
+       cairo_t* _tmp0_;
+       cairo_t* _tmp1_;
+       gfloat* _tmp2_;
+       gint _tmp2__length1;
+       gfloat _tmp3_;
+       gfloat* _tmp4_;
+       gint _tmp4__length1;
+       gfloat _tmp5_;
+       gfloat* _tmp6_;
+       gint _tmp6__length1;
+       gfloat _tmp7_;
+       gfloat* _tmp8_;
+       gint _tmp8__length1;
+       gfloat _tmp9_;
+       cairo_t* _tmp10_;
+       gdouble _tmp11_;
+       gdouble _tmp12_;
+       gdouble _tmp13_;
+       gdouble _tmp14_;
+       gdouble _tmp15_;
+       cairo_t* _tmp16_;
+       cairo_t* _tmp17_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (cr != NULL);
+       _tmp0_ = cr;
+       cairo_save (_tmp0_);
+       _tmp1_ = cr;
+       _tmp2_ = self->gridBgColor;
+       _tmp2__length1 = self->gridBgColor_length1;
+       _tmp3_ = _tmp2_[0];
+       _tmp4_ = self->gridBgColor;
+       _tmp4__length1 = self->gridBgColor_length1;
+       _tmp5_ = _tmp4_[1];
+       _tmp6_ = self->gridBgColor;
+       _tmp6__length1 = self->gridBgColor_length1;
+       _tmp7_ = _tmp6_[2];
+       _tmp8_ = self->gridBgColor;
+       _tmp8__length1 = self->gridBgColor_length1;
+       _tmp9_ = _tmp8_[3];
+       cairo_set_source_rgba (_tmp1_, (gdouble) _tmp3_, (gdouble) _tmp5_, (gdouble) _tmp7_, (gdouble) 
_tmp9_);
+       _tmp10_ = cr;
+       _tmp11_ = self->priv->gridX;
+       _tmp12_ = self->priv->fretSpacing;
+       _tmp13_ = self->priv->gridY;
+       _tmp14_ = self->priv->gridWidth;
+       _tmp15_ = self->priv->gridHeight;
+       cairo_rectangle (_tmp10_, _tmp11_ + _tmp12_, _tmp13_, _tmp14_, _tmp15_);
+       _tmp16_ = cr;
+       cairo_fill (_tmp16_);
+       _tmp17_ = cr;
+       cairo_restore (_tmp17_);
+}
+
+
+/**
+    * Draw guitar strings according to its style properties
+    * @param cr The drawing context for the widget
+    **/
+static gchar* string_slice (const gchar* self, glong start, glong end) {
+       gchar* result = NULL;
+       gint _tmp0_;
+       gint _tmp1_;
+       glong string_length;
+       glong _tmp2_;
+       glong _tmp5_;
+       gboolean _tmp8_ = FALSE;
+       glong _tmp9_;
+       gboolean _tmp12_;
+       gboolean _tmp13_ = FALSE;
+       glong _tmp14_;
+       gboolean _tmp17_;
+       glong _tmp18_;
+       glong _tmp19_;
+       glong _tmp20_;
+       glong _tmp21_;
+       glong _tmp22_;
+       gchar* _tmp23_ = NULL;
+       g_return_val_if_fail (self != NULL, NULL);
+       _tmp0_ = strlen (self);
+       _tmp1_ = _tmp0_;
+       string_length = (glong) _tmp1_;
+       _tmp2_ = start;
+       if (_tmp2_ < ((glong) 0)) {
+               glong _tmp3_;
+               glong _tmp4_;
+               _tmp3_ = string_length;
+               _tmp4_ = start;
+               start = _tmp3_ + _tmp4_;
+       }
+       _tmp5_ = end;
+       if (_tmp5_ < ((glong) 0)) {
+               glong _tmp6_;
+               glong _tmp7_;
+               _tmp6_ = string_length;
+               _tmp7_ = end;
+               end = _tmp6_ + _tmp7_;
+       }
+       _tmp9_ = start;
+       if (_tmp9_ >= ((glong) 0)) {
+               glong _tmp10_;
+               glong _tmp11_;
+               _tmp10_ = start;
+               _tmp11_ = string_length;
+               _tmp8_ = _tmp10_ <= _tmp11_;
+       } else {
+               _tmp8_ = FALSE;
+       }
+       _tmp12_ = _tmp8_;
+       g_return_val_if_fail (_tmp12_, NULL);
+       _tmp14_ = end;
+       if (_tmp14_ >= ((glong) 0)) {
+               glong _tmp15_;
+               glong _tmp16_;
+               _tmp15_ = end;
+               _tmp16_ = string_length;
+               _tmp13_ = _tmp15_ <= _tmp16_;
+       } else {
+               _tmp13_ = FALSE;
+       }
+       _tmp17_ = _tmp13_;
+       g_return_val_if_fail (_tmp17_, NULL);
+       _tmp18_ = start;
+       _tmp19_ = end;
+       g_return_val_if_fail (_tmp18_ <= _tmp19_, NULL);
+       _tmp20_ = start;
+       _tmp21_ = end;
+       _tmp22_ = start;
+       _tmp23_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) (_tmp21_ - _tmp22_));
+       result = _tmp23_;
+       return result;
+}
+
+
+static void gtk_music_guitar_draw_strings (GtkMusicGuitar* self, cairo_t* cr) {
+       GtkMusicGuitarString* str = NULL;
+       gchar* stringLabel = NULL;
+       cairo_t* _tmp0_;
+       cairo_t* _tmp1_;
+       cairo_t* _tmp88_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (cr != NULL);
+       _tmp0_ = cr;
+       cairo_set_line_width (_tmp0_, (gdouble) 2);
+       _tmp1_ = cr;
+       cairo_save (_tmp1_);
+       {
+               gint i;
+               i = 0;
+               {
+                       gboolean _tmp2_;
+                       _tmp2_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp3_;
+                               gint _tmp5_;
+                               GeeArrayList* _tmp6_;
+                               gint _tmp7_;
+                               gint _tmp8_;
+                               GeeArrayList* _tmp9_;
+                               gint _tmp10_;
+                               gpointer _tmp11_ = NULL;
+                               cairo_t* _tmp12_;
+                               GtkMusicGuitarString* _tmp13_;
+                               gfloat* _tmp14_;
+                               gint _tmp14__length1;
+                               gfloat _tmp15_;
+                               GtkMusicGuitarString* _tmp16_;
+                               gfloat* _tmp17_;
+                               gint _tmp17__length1;
+                               gfloat _tmp18_;
+                               GtkMusicGuitarString* _tmp19_;
+                               gfloat* _tmp20_;
+                               gint _tmp20__length1;
+                               gfloat _tmp21_;
+                               GtkMusicGuitarString* _tmp22_;
+                               gfloat* _tmp23_;
+                               gint _tmp23__length1;
+                               gfloat _tmp24_;
+                               gdouble _tmp25_;
+                               gint _tmp26_;
+                               gdouble _tmp27_;
+                               gdouble stringY;
+                               cairo_t* _tmp28_;
+                               gdouble _tmp29_;
+                               gdouble _tmp30_;
+                               gboolean _tmp31_ = FALSE;
+                               GtkMusicGuitarString* _tmp32_;
+                               gboolean _tmp33_;
+                               gboolean _tmp35_;
+                               cairo_t* _tmp57_;
+                               cairo_t* _tmp58_;
+                               cairo_text_extents_t te = {0};
+                               gboolean _tmp59_;
+                               _tmp3_ = _tmp2_;
+                               if (!_tmp3_) {
+                                       gint _tmp4_;
+                                       _tmp4_ = i;
+                                       i = _tmp4_ + 1;
+                               }
+                               _tmp2_ = FALSE;
+                               _tmp5_ = i;
+                               _tmp6_ = self->guitarStrings;
+                               _tmp7_ = gee_abstract_collection_get_size ((GeeCollection*) _tmp6_);
+                               _tmp8_ = _tmp7_;
+                               if (!(_tmp5_ < _tmp8_)) {
+                                       break;
+                               }
+                               _tmp9_ = self->guitarStrings;
+                               _tmp10_ = i;
+                               _tmp11_ = gee_abstract_list_get ((GeeAbstractList*) _tmp9_, _tmp10_);
+                               _gtk_music_guitar_string_unref0 (str);
+                               str = (GtkMusicGuitarString*) _tmp11_;
+                               _tmp12_ = cr;
+                               _tmp13_ = str;
+                               _tmp14_ = _tmp13_->color;
+                               _tmp14__length1 = _tmp13_->color_length1;
+                               _tmp15_ = _tmp14_[0];
+                               _tmp16_ = str;
+                               _tmp17_ = _tmp16_->color;
+                               _tmp17__length1 = _tmp16_->color_length1;
+                               _tmp18_ = _tmp17_[1];
+                               _tmp19_ = str;
+                               _tmp20_ = _tmp19_->color;
+                               _tmp20__length1 = _tmp19_->color_length1;
+                               _tmp21_ = _tmp20_[2];
+                               _tmp22_ = str;
+                               _tmp23_ = _tmp22_->color;
+                               _tmp23__length1 = _tmp22_->color_length1;
+                               _tmp24_ = _tmp23_[3];
+                               cairo_set_source_rgba (_tmp12_, (gdouble) _tmp15_, (gdouble) _tmp18_, 
(gdouble) _tmp21_, (gdouble) _tmp24_);
+                               _tmp25_ = self->priv->gridY;
+                               _tmp26_ = i;
+                               _tmp27_ = self->priv->stringSpacing;
+                               stringY = _tmp25_ + (_tmp26_ * _tmp27_);
+                               _tmp28_ = cr;
+                               _tmp29_ = self->priv->gridX;
+                               _tmp30_ = stringY;
+                               cairo_move_to (_tmp28_, _tmp29_, _tmp30_);
+                               _tmp32_ = str;
+                               _tmp33_ = _tmp32_->vibrate;
+                               if (!_tmp33_) {
+                                       _tmp31_ = TRUE;
+                               } else {
+                                       gboolean _tmp34_;
+                                       _tmp34_ = self->priv->shouldAnimate;
+                                       _tmp31_ = !_tmp34_;
+                               }
+                               _tmp35_ = _tmp31_;
+                               if (_tmp35_) {
+                                       cairo_t* _tmp36_;
+                                       gdouble _tmp37_;
+                                       gdouble _tmp38_;
+                                       gdouble _tmp39_;
+                                       _tmp36_ = cr;
+                                       _tmp37_ = self->priv->gridX;
+                                       _tmp38_ = self->priv->width;
+                                       _tmp39_ = stringY;
+                                       cairo_line_to (_tmp36_, _tmp37_ + _tmp38_, _tmp39_);
+                               } else {
+                                       gfloat _tmp40_;
+                                       GtkMusicGuitarString* _tmp41_;
+                                       gdouble _tmp42_;
+                                       gdouble _tmp43_ = 0.0;
+                                       gdouble instant;
+                                       gdouble _tmp44_;
+                                       gdouble _tmp45_;
+                                       gdouble amplitude;
+                                       cairo_t* _tmp46_;
+                                       gdouble _tmp47_;
+                                       gdouble _tmp48_;
+                                       gdouble _tmp49_;
+                                       gdouble _tmp50_;
+                                       gdouble _tmp51_;
+                                       gdouble _tmp52_;
+                                       gdouble _tmp53_;
+                                       gdouble _tmp54_;
+                                       gdouble _tmp55_;
+                                       gdouble _tmp56_;
+                                       _tmp40_ = self->priv->animateInstant;
+                                       _tmp41_ = str;
+                                       _tmp42_ = _tmp41_->vibrateSeed;
+                                       _tmp43_ = sin (_tmp40_ + (4 * _tmp42_));
+                                       instant = _tmp43_;
+                                       _tmp44_ = instant;
+                                       _tmp45_ = self->priv->stringSpacing;
+                                       amplitude = (_tmp44_ * 0.1) * _tmp45_;
+                                       _tmp46_ = cr;
+                                       _tmp47_ = self->priv->gridX;
+                                       _tmp48_ = stringY;
+                                       _tmp49_ = amplitude;
+                                       _tmp50_ = self->priv->gridX;
+                                       _tmp51_ = self->priv->width;
+                                       _tmp52_ = stringY;
+                                       _tmp53_ = amplitude;
+                                       _tmp54_ = self->priv->gridX;
+                                       _tmp55_ = self->priv->width;
+                                       _tmp56_ = stringY;
+                                       cairo_curve_to (_tmp46_, _tmp47_, _tmp48_ + _tmp49_, _tmp50_ + 
_tmp51_, _tmp52_ + _tmp53_, _tmp54_ + _tmp55_, _tmp56_);
+                               }
+                               _tmp57_ = cr;
+                               cairo_stroke (_tmp57_);
+                               _tmp58_ = cr;
+                               cairo_set_source_rgba (_tmp58_, 0.0, 0.0, 0.0, 1.0);
+                               _tmp59_ = self->showLabels;
+                               if (_tmp59_) {
+                                       GeeArrayList* _tmp60_;
+                                       gint _tmp61_;
+                                       gpointer _tmp62_ = NULL;
+                                       GtkMusicGuitarString* _tmp63_;
+                                       const gchar* _tmp64_;
+                                       gchar* _tmp65_;
+                                       gboolean _tmp66_;
+                                       cairo_t* _tmp72_;
+                                       const gchar* _tmp73_;
+                                       cairo_text_extents_t _tmp74_ = {0};
+                                       cairo_t* _tmp75_;
+                                       gdouble _tmp76_;
+                                       cairo_text_extents_t _tmp77_;
+                                       gdouble _tmp78_;
+                                       cairo_text_extents_t _tmp79_;
+                                       gdouble _tmp80_;
+                                       gdouble _tmp81_;
+                                       cairo_text_extents_t _tmp82_;
+                                       gdouble _tmp83_;
+                                       cairo_text_extents_t _tmp84_;
+                                       gdouble _tmp85_;
+                                       cairo_t* _tmp86_;
+                                       const gchar* _tmp87_;
+                                       _tmp60_ = self->guitarStrings;
+                                       _tmp61_ = i;
+                                       _tmp62_ = gee_abstract_list_get ((GeeAbstractList*) _tmp60_, _tmp61_);
+                                       _tmp63_ = (GtkMusicGuitarString*) _tmp62_;
+                                       _tmp64_ = _tmp63_->note;
+                                       _tmp65_ = g_strdup (_tmp64_);
+                                       _g_free0 (stringLabel);
+                                       stringLabel = _tmp65_;
+                                       _gtk_music_guitar_string_unref0 (_tmp63_);
+                                       _tmp66_ = self->detailedLabels;
+                                       if (!_tmp66_) {
+                                               const gchar* _tmp67_;
+                                               const gchar* _tmp68_;
+                                               gint _tmp69_;
+                                               gint _tmp70_;
+                                               gchar* _tmp71_ = NULL;
+                                               _tmp67_ = stringLabel;
+                                               _tmp68_ = stringLabel;
+                                               _tmp69_ = strlen (_tmp68_);
+                                               _tmp70_ = _tmp69_;
+                                               _tmp71_ = string_slice (_tmp67_, (glong) 0, (glong) (_tmp70_ 
- 1));
+                                               _g_free0 (stringLabel);
+                                               stringLabel = _tmp71_;
+                                       }
+                                       _tmp72_ = cr;
+                                       _tmp73_ = stringLabel;
+                                       cairo_text_extents (_tmp72_, _tmp73_, &_tmp74_);
+                                       te = _tmp74_;
+                                       _tmp75_ = cr;
+                                       _tmp76_ = self->priv->gridX;
+                                       _tmp77_ = te;
+                                       _tmp78_ = _tmp77_.x_bearing;
+                                       _tmp79_ = te;
+                                       _tmp80_ = _tmp79_.width;
+                                       _tmp81_ = stringY;
+                                       _tmp82_ = te;
+                                       _tmp83_ = _tmp82_.y_bearing;
+                                       _tmp84_ = te;
+                                       _tmp85_ = _tmp84_.height;
+                                       cairo_move_to (_tmp75_, ((_tmp76_ - 0.5) - _tmp78_) - _tmp80_, 
((_tmp81_ + 0.5) - _tmp83_) - (_tmp85_ / 2));
+                                       _tmp86_ = cr;
+                                       _tmp87_ = stringLabel;
+                                       cairo_show_text (_tmp86_, _tmp87_);
+                               }
+                       }
+               }
+       }
+       _tmp88_ = cr;
+       cairo_restore (_tmp88_);
+       _g_free0 (stringLabel);
+       _gtk_music_guitar_string_unref0 (str);
+}
+
+
+/**
+    * Draw guitar frets
+    * @param cr The drawing context for the widget
+    **/
+static void gtk_music_guitar_draw_frets (GtkMusicGuitar* self, cairo_t* cr) {
+       cairo_t* _tmp0_;
+       cairo_t* _tmp1_;
+       gfloat* _tmp2_;
+       gint _tmp2__length1;
+       gfloat _tmp3_;
+       gfloat* _tmp4_;
+       gint _tmp4__length1;
+       gfloat _tmp5_;
+       gfloat* _tmp6_;
+       gint _tmp6__length1;
+       gfloat _tmp7_;
+       gfloat* _tmp8_;
+       gint _tmp8__length1;
+       gfloat _tmp9_;
+       cairo_t* _tmp25_;
+       cairo_t* _tmp26_;
+       gboolean _tmp27_;
+       cairo_t* _tmp28_;
+       cairo_t* _tmp29_;
+       gdouble _tmp30_;
+       cairo_t* _tmp31_;
+       gdouble _tmp32_;
+       gdouble _tmp33_;
+       gdouble _tmp34_;
+       cairo_t* _tmp35_;
+       gdouble _tmp36_;
+       gdouble _tmp37_;
+       gdouble _tmp38_;
+       gdouble _tmp39_;
+       cairo_t* _tmp40_;
+       cairo_t* _tmp41_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (cr != NULL);
+       _tmp0_ = cr;
+       cairo_save (_tmp0_);
+       _tmp1_ = cr;
+       _tmp2_ = self->fretColor;
+       _tmp2__length1 = self->fretColor_length1;
+       _tmp3_ = _tmp2_[0];
+       _tmp4_ = self->fretColor;
+       _tmp4__length1 = self->fretColor_length1;
+       _tmp5_ = _tmp4_[1];
+       _tmp6_ = self->fretColor;
+       _tmp6__length1 = self->fretColor_length1;
+       _tmp7_ = _tmp6_[2];
+       _tmp8_ = self->fretColor;
+       _tmp8__length1 = self->fretColor_length1;
+       _tmp9_ = _tmp8_[3];
+       cairo_set_source_rgba (_tmp1_, (gdouble) _tmp3_, (gdouble) _tmp5_, (gdouble) _tmp7_, (gdouble) 
_tmp9_);
+       {
+               gint j;
+               j = 1;
+               {
+                       gboolean _tmp10_;
+                       _tmp10_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp11_;
+                               gint _tmp13_;
+                               gushort _tmp14_;
+                               gdouble _tmp15_;
+                               gint _tmp16_;
+                               gdouble _tmp17_;
+                               gdouble fretX;
+                               cairo_t* _tmp18_;
+                               gdouble _tmp19_;
+                               gdouble _tmp20_;
+                               cairo_t* _tmp21_;
+                               gdouble _tmp22_;
+                               gdouble _tmp23_;
+                               gdouble _tmp24_;
+                               _tmp11_ = _tmp10_;
+                               if (!_tmp11_) {
+                                       gint _tmp12_;
+                                       _tmp12_ = j;
+                                       j = _tmp12_ + 1;
+                               }
+                               _tmp10_ = FALSE;
+                               _tmp13_ = j;
+                               _tmp14_ = self->fretNumber;
+                               if (!(_tmp13_ < ((gint) _tmp14_))) {
+                                       break;
+                               }
+                               _tmp15_ = self->priv->gridX;
+                               _tmp16_ = j;
+                               _tmp17_ = self->priv->fretSpacing;
+                               fretX = _tmp15_ + (_tmp16_ * _tmp17_);
+                               _tmp18_ = cr;
+                               _tmp19_ = fretX;
+                               _tmp20_ = self->priv->gridY;
+                               cairo_move_to (_tmp18_, _tmp19_, _tmp20_);
+                               _tmp21_ = cr;
+                               _tmp22_ = fretX;
+                               _tmp23_ = self->priv->gridY;
+                               _tmp24_ = self->priv->gridHeight;
+                               cairo_line_to (_tmp21_, _tmp22_, _tmp23_ + _tmp24_);
+                       }
+               }
+       }
+       _tmp25_ = cr;
+       cairo_stroke (_tmp25_);
+       _tmp26_ = cr;
+       cairo_restore (_tmp26_);
+       _tmp27_ = self->highlightFirstFret;
+       if (!_tmp27_) {
+               return;
+       }
+       _tmp28_ = cr;
+       cairo_save (_tmp28_);
+       _tmp29_ = cr;
+       _tmp30_ = self->priv->fretSpacing;
+       cairo_set_line_width (_tmp29_, 0.1 * _tmp30_);
+       _tmp31_ = cr;
+       _tmp32_ = self->priv->gridX;
+       _tmp33_ = self->priv->fretSpacing;
+       _tmp34_ = self->priv->gridY;
+       cairo_move_to (_tmp31_, _tmp32_ + (0.9 * _tmp33_), _tmp34_);
+       _tmp35_ = cr;
+       _tmp36_ = self->priv->gridX;
+       _tmp37_ = self->priv->fretSpacing;
+       _tmp38_ = self->priv->gridY;
+       _tmp39_ = self->priv->gridHeight;
+       cairo_line_to (_tmp35_, _tmp36_ + (0.9 * _tmp37_), _tmp38_ + _tmp39_);
+       _tmp40_ = cr;
+       cairo_stroke (_tmp40_);
+       _tmp41_ = cr;
+       cairo_restore (_tmp41_);
+}
+
+
+/**
+    * Draw fret marks
+    * @param cr The drawing context for the widget
+    **/
+static void gtk_music_guitar_draw_fret_marks (GtkMusicGuitar* self, cairo_t* cr) {
+       GeeHashSet* _tmp0_;
+       gint _tmp1_;
+       gint _tmp2_;
+       cairo_t* _tmp3_;
+       cairo_t* _tmp32_;
+       cairo_t* _tmp33_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (cr != NULL);
+       _tmp0_ = self->fretMarks;
+       _tmp1_ = gee_abstract_collection_get_size ((GeeCollection*) _tmp0_);
+       _tmp2_ = _tmp1_;
+       if (_tmp2_ == 0) {
+               return;
+       }
+       _tmp3_ = cr;
+       cairo_save (_tmp3_);
+       {
+               GeeHashSet* _tmp4_;
+               GeeIterator* _tmp5_ = NULL;
+               GeeIterator* _fm_it;
+               _tmp4_ = self->fretMarks;
+               _tmp5_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) _tmp4_);
+               _fm_it = _tmp5_;
+               while (TRUE) {
+                       GeeIterator* _tmp6_;
+                       gboolean _tmp7_ = FALSE;
+                       GeeIterator* _tmp8_;
+                       gpointer _tmp9_ = NULL;
+                       GtkMusicGuitarFretMark* fm;
+                       GtkMusicGuitarFretMark* _tmp10_;
+                       gushort _tmp11_;
+                       gushort p;
+                       cairo_t* _tmp12_;
+                       GtkMusicGuitarFretMark* _tmp13_;
+                       gfloat* _tmp14_;
+                       gint _tmp14__length1;
+                       gfloat _tmp15_;
+                       GtkMusicGuitarFretMark* _tmp16_;
+                       gfloat* _tmp17_;
+                       gint _tmp17__length1;
+                       gfloat _tmp18_;
+                       GtkMusicGuitarFretMark* _tmp19_;
+                       gfloat* _tmp20_;
+                       gint _tmp20__length1;
+                       gfloat _tmp21_;
+                       GtkMusicGuitarFretMark* _tmp22_;
+                       gfloat* _tmp23_;
+                       gint _tmp23__length1;
+                       gfloat _tmp24_;
+                       cairo_t* _tmp25_;
+                       gdouble _tmp26_;
+                       gushort _tmp27_;
+                       gdouble _tmp28_;
+                       gdouble _tmp29_;
+                       gdouble _tmp30_;
+                       gdouble _tmp31_;
+                       _tmp6_ = _fm_it;
+                       _tmp7_ = gee_iterator_next (_tmp6_);
+                       if (!_tmp7_) {
+                               break;
+                       }
+                       _tmp8_ = _fm_it;
+                       _tmp9_ = gee_iterator_get (_tmp8_);
+                       fm = (GtkMusicGuitarFretMark*) _tmp9_;
+                       _tmp10_ = fm;
+                       _tmp11_ = _tmp10_->position;
+                       p = _tmp11_;
+                       _tmp12_ = cr;
+                       _tmp13_ = fm;
+                       _tmp14_ = _tmp13_->color;
+                       _tmp14__length1 = _tmp13_->color_length1;
+                       _tmp15_ = _tmp14_[0];
+                       _tmp16_ = fm;
+                       _tmp17_ = _tmp16_->color;
+                       _tmp17__length1 = _tmp16_->color_length1;
+                       _tmp18_ = _tmp17_[1];
+                       _tmp19_ = fm;
+                       _tmp20_ = _tmp19_->color;
+                       _tmp20__length1 = _tmp19_->color_length1;
+                       _tmp21_ = _tmp20_[2];
+                       _tmp22_ = fm;
+                       _tmp23_ = _tmp22_->color;
+                       _tmp23__length1 = _tmp22_->color_length1;
+                       _tmp24_ = _tmp23_[3];
+                       cairo_set_source_rgba (_tmp12_, (gdouble) _tmp15_, (gdouble) _tmp18_, (gdouble) 
_tmp21_, (gdouble) _tmp24_);
+                       _tmp25_ = cr;
+                       _tmp26_ = self->priv->gridX;
+                       _tmp27_ = p;
+                       _tmp28_ = self->priv->fretSpacing;
+                       _tmp29_ = self->priv->gridY;
+                       _tmp30_ = self->priv->gridHeight;
+                       _tmp31_ = self->priv->fretMarkRadius;
+                       cairo_arc (_tmp25_, _tmp26_ + ((_tmp27_ + 0.5) * _tmp28_), _tmp29_ + (_tmp30_ / 2), 
_tmp31_, (gdouble) 0, 2 * G_PI);
+                       _gtk_music_guitar_fret_mark_unref0 (fm);
+               }
+               _g_object_unref0 (_fm_it);
+       }
+       _tmp32_ = cr;
+       cairo_fill (_tmp32_);
+       _tmp33_ = cr;
+       cairo_restore (_tmp33_);
+}
+
+
+/**
+    * Draw marked notes
+    * @param cr The drawing context for the widget
+    **/
+static gpointer _gtk_music_guitar_position_ref0 (gpointer self) {
+       return self ? gtk_music_guitar_position_ref (self) : NULL;
+}
+
+
+static gpointer _gtk_music_guitar_marked_note_style_ref0 (gpointer self) {
+       return self ? gtk_music_guitar_marked_note_style_ref (self) : NULL;
+}
+
+
+static void gtk_music_guitar_draw_marked_notes (GtkMusicGuitar* self, cairo_t* cr) {
+       GeeHashMap* _tmp0_;
+       gint _tmp1_;
+       gint _tmp2_;
+       cairo_t* _tmp3_;
+       cairo_t* _tmp51_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (cr != NULL);
+       _tmp0_ = self->markedNotes;
+       _tmp1_ = gee_abstract_map_get_size ((GeeMap*) _tmp0_);
+       _tmp2_ = _tmp1_;
+       if (_tmp2_ == 0) {
+               return;
+       }
+       _tmp3_ = cr;
+       cairo_save (_tmp3_);
+       {
+               GeeHashMap* _tmp4_;
+               GeeSet* _tmp5_;
+               GeeSet* _tmp6_;
+               GeeSet* _tmp7_;
+               GeeIterator* _tmp8_ = NULL;
+               GeeIterator* _tmp9_;
+               GeeIterator* _entry_it;
+               _tmp4_ = self->markedNotes;
+               _tmp5_ = gee_abstract_map_get_entries ((GeeMap*) _tmp4_);
+               _tmp6_ = _tmp5_;
+               _tmp7_ = _tmp6_;
+               _tmp8_ = gee_iterable_iterator ((GeeIterable*) _tmp7_);
+               _tmp9_ = _tmp8_;
+               _g_object_unref0 (_tmp7_);
+               _entry_it = _tmp9_;
+               while (TRUE) {
+                       GeeIterator* _tmp10_;
+                       gboolean _tmp11_ = FALSE;
+                       GeeIterator* _tmp12_;
+                       gpointer _tmp13_ = NULL;
+                       GeeMapEntry* entry;
+                       GeeMapEntry* _tmp14_;
+                       gconstpointer _tmp15_;
+                       GtkMusicGuitarPosition* _tmp16_;
+                       GtkMusicGuitarPosition* _tmp17_;
+                       GtkMusicGuitarPosition* k;
+                       GeeMapEntry* _tmp18_;
+                       gconstpointer _tmp19_;
+                       GtkMusicGuitarMarkedNoteStyle* _tmp20_;
+                       GtkMusicGuitarMarkedNoteStyle* _tmp21_;
+                       GtkMusicGuitarMarkedNoteStyle* v;
+                       cairo_t* _tmp22_;
+                       GtkMusicGuitarMarkedNoteStyle* _tmp23_;
+                       gfloat* _tmp24_;
+                       gint _tmp24__length1;
+                       gfloat _tmp25_;
+                       GtkMusicGuitarMarkedNoteStyle* _tmp26_;
+                       gfloat* _tmp27_;
+                       gint _tmp27__length1;
+                       gfloat _tmp28_;
+                       GtkMusicGuitarMarkedNoteStyle* _tmp29_;
+                       gfloat* _tmp30_;
+                       gint _tmp30__length1;
+                       gfloat _tmp31_;
+                       GtkMusicGuitarMarkedNoteStyle* _tmp32_;
+                       gfloat* _tmp33_;
+                       gint _tmp33__length1;
+                       gfloat _tmp34_;
+                       gdouble _tmp35_;
+                       GtkMusicGuitarPosition* _tmp36_;
+                       gushort _tmp37_;
+                       gdouble _tmp38_;
+                       gdouble x;
+                       gdouble _tmp39_;
+                       GtkMusicGuitarPosition* _tmp40_;
+                       gushort _tmp41_;
+                       gdouble _tmp42_;
+                       gdouble y;
+                       cairo_t* _tmp43_;
+                       gdouble _tmp44_;
+                       gdouble _tmp45_;
+                       cairo_t* _tmp46_;
+                       gdouble _tmp47_;
+                       gdouble _tmp48_;
+                       gdouble _tmp49_;
+                       cairo_t* _tmp50_;
+                       _tmp10_ = _entry_it;
+                       _tmp11_ = gee_iterator_next (_tmp10_);
+                       if (!_tmp11_) {
+                               break;
+                       }
+                       _tmp12_ = _entry_it;
+                       _tmp13_ = gee_iterator_get (_tmp12_);
+                       entry = (GeeMapEntry*) _tmp13_;
+                       _tmp14_ = entry;
+                       _tmp15_ = gee_map_entry_get_key (_tmp14_);
+                       _tmp16_ = _tmp15_;
+                       _tmp17_ = _gtk_music_guitar_position_ref0 ((GtkMusicGuitarPosition*) _tmp16_);
+                       k = _tmp17_;
+                       _tmp18_ = entry;
+                       _tmp19_ = gee_map_entry_get_value (_tmp18_);
+                       _tmp20_ = _tmp19_;
+                       _tmp21_ = _gtk_music_guitar_marked_note_style_ref0 ((GtkMusicGuitarMarkedNoteStyle*) 
_tmp20_);
+                       v = _tmp21_;
+                       _tmp22_ = cr;
+                       _tmp23_ = v;
+                       _tmp24_ = _tmp23_->color;
+                       _tmp24__length1 = _tmp23_->color_length1;
+                       _tmp25_ = _tmp24_[0];
+                       _tmp26_ = v;
+                       _tmp27_ = _tmp26_->color;
+                       _tmp27__length1 = _tmp26_->color_length1;
+                       _tmp28_ = _tmp27_[1];
+                       _tmp29_ = v;
+                       _tmp30_ = _tmp29_->color;
+                       _tmp30__length1 = _tmp29_->color_length1;
+                       _tmp31_ = _tmp30_[2];
+                       _tmp32_ = v;
+                       _tmp33_ = _tmp32_->color;
+                       _tmp33__length1 = _tmp32_->color_length1;
+                       _tmp34_ = _tmp33_[3];
+                       cairo_set_source_rgba (_tmp22_, (gdouble) _tmp25_, (gdouble) _tmp28_, (gdouble) 
_tmp31_, (gdouble) _tmp34_);
+                       _tmp35_ = self->priv->gridX;
+                       _tmp36_ = k;
+                       _tmp37_ = _tmp36_->fretIndex;
+                       _tmp38_ = self->priv->fretSpacing;
+                       x = _tmp35_ + ((_tmp37_ + 0.5) * _tmp38_);
+                       _tmp39_ = self->priv->gridY;
+                       _tmp40_ = k;
+                       _tmp41_ = _tmp40_->stringIndex;
+                       _tmp42_ = self->priv->stringSpacing;
+                       y = _tmp39_ + (_tmp41_ * _tmp42_);
+                       _tmp43_ = cr;
+                       _tmp44_ = x;
+                       _tmp45_ = y;
+                       cairo_move_to (_tmp43_, _tmp44_, _tmp45_);
+                       _tmp46_ = cr;
+                       _tmp47_ = x;
+                       _tmp48_ = y;
+                       _tmp49_ = self->priv->markedNoteRadius;
+                       cairo_arc (_tmp46_, _tmp47_, _tmp48_, _tmp49_, (gdouble) 0, 2 * G_PI);
+                       _tmp50_ = cr;
+                       cairo_fill (_tmp50_);
+                       _gtk_music_guitar_marked_note_style_unref0 (v);
+                       _gtk_music_guitar_position_unref0 (k);
+                       _g_object_unref0 (entry);
+               }
+               _g_object_unref0 (_entry_it);
+       }
+       _tmp51_ = cr;
+       cairo_restore (_tmp51_);
+}
+
+
+/**
+    * Forces a complete redraw of the widget
+    *
+    * This function will invalidate all the region corresponding to the
+    * widget's GDK window and ask for updates, forcing a complete redraw.
+    *
+    **/
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+void gtk_music_guitar_redraw (GtkMusicGuitar* self) {
+       GdkWindow* _tmp0_ = NULL;
+       GdkWindow* _tmp1_;
+       GdkWindow* window;
+       GdkWindow* _tmp2_;
+       GdkWindow* _tmp3_;
+       cairo_region_t* _tmp4_ = NULL;
+       cairo_region_t* region;
+       GdkWindow* _tmp5_;
+       cairo_region_t* _tmp6_;
+       GdkWindow* _tmp7_;
+       g_return_if_fail (self != NULL);
+       _tmp0_ = gtk_widget_get_window ((GtkWidget*) self);
+       _tmp1_ = _g_object_ref0 (_tmp0_);
+       window = _tmp1_;
+       _tmp2_ = window;
+       if (NULL == _tmp2_) {
+               _g_object_unref0 (window);
+               return;
+       }
+       _tmp3_ = window;
+       _tmp4_ = gdk_window_get_clip_region (_tmp3_);
+       region = _tmp4_;
+       _tmp5_ = window;
+       _tmp6_ = region;
+       gdk_window_invalidate_region (_tmp5_, _tmp6_, TRUE);
+       _tmp7_ = window;
+       gdk_window_process_updates (_tmp7_, TRUE);
+       _cairo_region_destroy0 (region);
+       _g_object_unref0 (window);
+}
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_POINTER_GTK_MUSIC_GUITAR_POSITION (GClosure * closure, 
GValue * return_value, guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer 
marshal_data) {
+       typedef void (*GMarshalFunc_VOID__OBJECT_POINTER_GTK_MUSIC_GUITAR_POSITION) (gpointer data1, gpointer 
arg_1, gpointer arg_2, gpointer arg_3, gpointer data2);
+       register GMarshalFunc_VOID__OBJECT_POINTER_GTK_MUSIC_GUITAR_POSITION callback;
+       register GCClosure * cc;
+       register gpointer data1;
+       register gpointer data2;
+       cc = (GCClosure *) closure;
+       g_return_if_fail (n_param_values == 4);
+       if (G_CCLOSURE_SWAP_DATA (closure)) {
+               data1 = closure->data;
+               data2 = param_values->data[0].v_pointer;
+       } else {
+               data1 = param_values->data[0].v_pointer;
+               data2 = closure->data;
+       }
+       callback = (GMarshalFunc_VOID__OBJECT_POINTER_GTK_MUSIC_GUITAR_POSITION) (marshal_data ? marshal_data 
: cc->callback);
+       callback (data1, g_value_get_object (param_values + 1), g_value_get_pointer (param_values + 2), 
gtk_music_value_get_guitar_position (param_values + 3), data2);
+}
+
+
+static gfloat* _vala_array_dup1 (gfloat* self, int length) {
+       return g_memdup (self, length * sizeof (gfloat));
+}
+
+
+GtkMusicGuitarMarkedNoteStyle* gtk_music_guitar_marked_note_style_construct (GType object_type, gfloat* 
color, int color_length1) {
+       GtkMusicGuitarMarkedNoteStyle* self = NULL;
+       gfloat* _tmp0_;
+       gint _tmp0__length1;
+       gfloat* _tmp1_;
+       gint _tmp1__length1;
+       self = (GtkMusicGuitarMarkedNoteStyle*) g_type_create_instance (object_type);
+       _tmp0_ = color;
+       _tmp0__length1 = color_length1;
+       _tmp1_ = (_tmp0_ != NULL) ? _vala_array_dup1 (_tmp0_, _tmp0__length1) : ((gpointer) _tmp0_);
+       _tmp1__length1 = _tmp0__length1;
+       self->color = (g_free (self->color), NULL);
+       self->color = _tmp1_;
+       self->color_length1 = _tmp1__length1;
+       return self;
+}
+
+
+GtkMusicGuitarMarkedNoteStyle* gtk_music_guitar_marked_note_style_new (gfloat* color, int color_length1) {
+       return gtk_music_guitar_marked_note_style_construct (GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE, color, 
color_length1);
+}
+
+
+static void gtk_music_guitar_value_marked_note_style_init (GValue* value) {
+       value->data[0].v_pointer = NULL;
+}
+
+
+static void gtk_music_guitar_value_marked_note_style_free_value (GValue* value) {
+       if (value->data[0].v_pointer) {
+               gtk_music_guitar_marked_note_style_unref (value->data[0].v_pointer);
+       }
+}
+
+
+static void gtk_music_guitar_value_marked_note_style_copy_value (const GValue* src_value, GValue* 
dest_value) {
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = gtk_music_guitar_marked_note_style_ref 
(src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+
+static gpointer gtk_music_guitar_value_marked_note_style_peek_pointer (const GValue* value) {
+       return value->data[0].v_pointer;
+}
+
+
+static gchar* gtk_music_guitar_value_marked_note_style_collect_value (GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       if (collect_values[0].v_pointer) {
+               GtkMusicGuitarMarkedNoteStyle* object;
+               object = collect_values[0].v_pointer;
+               if (object->parent_instance.g_class == NULL) {
+                       return g_strconcat ("invalid unclassed object pointer for value type `", 
G_VALUE_TYPE_NAME (value), "'", NULL);
+               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE 
(object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               }
+               value->data[0].v_pointer = gtk_music_guitar_marked_note_style_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+
+static gchar* gtk_music_guitar_value_marked_note_style_lcopy_value (const GValue* value, guint 
n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+       GtkMusicGuitarMarkedNoteStyle** object_p;
+       object_p = collect_values[0].v_pointer;
+       if (!object_p) {
+               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+       }
+       if (!value->data[0].v_pointer) {
+               *object_p = NULL;
+       } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+               *object_p = value->data[0].v_pointer;
+       } else {
+               *object_p = gtk_music_guitar_marked_note_style_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+
+GParamSpec* gtk_music_guitar_param_spec_marked_note_style (const gchar* name, const gchar* nick, const 
gchar* blurb, GType object_type, GParamFlags flags) {
+       GtkMusicGuitarParamSpecMarkedNoteStyle* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE), NULL);
+       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+       G_PARAM_SPEC (spec)->value_type = object_type;
+       return G_PARAM_SPEC (spec);
+}
+
+
+gpointer gtk_music_guitar_value_get_marked_note_style (const GValue* value) {
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE), NULL);
+       return value->data[0].v_pointer;
+}
+
+
+void gtk_music_guitar_value_set_marked_note_style (GValue* value, gpointer v_object) {
+       GtkMusicGuitarMarkedNoteStyle* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, 
GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+               gtk_music_guitar_marked_note_style_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_guitar_marked_note_style_unref (old);
+       }
+}
+
+
+void gtk_music_guitar_value_take_marked_note_style (GValue* value, gpointer v_object) {
+       GtkMusicGuitarMarkedNoteStyle* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, 
GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_guitar_marked_note_style_unref (old);
+       }
+}
+
+
+static void gtk_music_guitar_marked_note_style_class_init (GtkMusicGuitarMarkedNoteStyleClass * klass) {
+       gtk_music_guitar_marked_note_style_parent_class = g_type_class_peek_parent (klass);
+       GTK_MUSIC_GUITAR_MARKED_NOTE_STYLE_CLASS (klass)->finalize = 
gtk_music_guitar_marked_note_style_finalize;
+}
+
+
+static void gtk_music_guitar_marked_note_style_instance_init (GtkMusicGuitarMarkedNoteStyle * self) {
+       gfloat* _tmp0_ = NULL;
+       _tmp0_ = g_new0 (gfloat, 4);
+       _tmp0_[0] = 0.0f;
+       _tmp0_[1] = 0.0f;
+       _tmp0_[2] = 0.0f;
+       _tmp0_[3] = 1.0f;
+       self->color = _tmp0_;
+       self->color_length1 = 4;
+       self->ref_count = 1;
+}
+
+
+static void gtk_music_guitar_marked_note_style_finalize (GtkMusicGuitarMarkedNoteStyle* obj) {
+       GtkMusicGuitarMarkedNoteStyle * self;
+       self = G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_MUSIC_GUITAR_TYPE_MARKED_NOTE_STYLE, 
GtkMusicGuitarMarkedNoteStyle);
+       self->color = (g_free (self->color), NULL);
+}
+
+
+GType gtk_music_guitar_marked_note_style_get_type (void) {
+       static volatile gsize gtk_music_guitar_marked_note_style_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_guitar_marked_note_style_type_id__volatile)) {
+               static const GTypeValueTable g_define_type_value_table = { 
gtk_music_guitar_value_marked_note_style_init, gtk_music_guitar_value_marked_note_style_free_value, 
gtk_music_guitar_value_marked_note_style_copy_value, gtk_music_guitar_value_marked_note_style_peek_pointer, 
"p", gtk_music_guitar_value_marked_note_style_collect_value, "p", 
gtk_music_guitar_value_marked_note_style_lcopy_value };
+               static const GTypeInfo g_define_type_info = { sizeof (GtkMusicGuitarMarkedNoteStyleClass), 
(GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) 
gtk_music_guitar_marked_note_style_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof 
(GtkMusicGuitarMarkedNoteStyle), 0, (GInstanceInitFunc) gtk_music_guitar_marked_note_style_instance_init, 
&g_define_type_value_table };
+               static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | 
G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+               GType gtk_music_guitar_marked_note_style_type_id;
+               gtk_music_guitar_marked_note_style_type_id = g_type_register_fundamental 
(g_type_fundamental_next (), "GtkMusicGuitarMarkedNoteStyle", &g_define_type_info, 
&g_define_type_fundamental_info, 0);
+               g_once_init_leave (&gtk_music_guitar_marked_note_style_type_id__volatile, 
gtk_music_guitar_marked_note_style_type_id);
+       }
+       return gtk_music_guitar_marked_note_style_type_id__volatile;
+}
+
+
+gpointer gtk_music_guitar_marked_note_style_ref (gpointer instance) {
+       GtkMusicGuitarMarkedNoteStyle* self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+
+void gtk_music_guitar_marked_note_style_unref (gpointer instance) {
+       GtkMusicGuitarMarkedNoteStyle* self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               GTK_MUSIC_GUITAR_MARKED_NOTE_STYLE_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+
+static void gtk_music_guitar_class_init (GtkMusicGuitarClass * klass) {
+       gtk_music_guitar_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (GtkMusicGuitarPrivate));
+       GTK_WIDGET_CLASS (klass)->button_press_event = gtk_music_guitar_real_button_press_event;
+       GTK_WIDGET_CLASS (klass)->button_release_event = gtk_music_guitar_real_button_release_event;
+       GTK_WIDGET_CLASS (klass)->draw = gtk_music_guitar_real_draw;
+       G_OBJECT_CLASS (klass)->finalize = gtk_music_guitar_finalize;
+       g_signal_new ("note_pressed", GTK_MUSIC_TYPE_GUITAR, G_SIGNAL_RUN_LAST, 0, NULL, NULL, 
g_cclosure_user_marshal_VOID__OBJECT_POINTER_GTK_MUSIC_GUITAR_POSITION, G_TYPE_NONE, 3, GTK_TYPE_WIDGET, 
G_TYPE_POINTER, GTK_MUSIC_TYPE_GUITAR_POSITION);
+       g_signal_new ("note_released", GTK_MUSIC_TYPE_GUITAR, G_SIGNAL_RUN_LAST, 0, NULL, NULL, 
g_cclosure_user_marshal_VOID__OBJECT_POINTER_GTK_MUSIC_GUITAR_POSITION, G_TYPE_NONE, 3, GTK_TYPE_WIDGET, 
G_TYPE_POINTER, GTK_MUSIC_TYPE_GUITAR_POSITION);
+}
+
+
+static void gtk_music_guitar_instance_init (GtkMusicGuitar * self) {
+       gfloat* _tmp0_ = NULL;
+       gfloat* _tmp1_ = NULL;
+       gchar* _tmp2_;
+       gchar* _tmp3_;
+       gchar* _tmp4_;
+       gchar* _tmp5_;
+       gchar* _tmp6_;
+       gchar* _tmp7_;
+       gchar** _tmp8_ = NULL;
+       gushort* _tmp9_ = NULL;
+       self->priv = GTK_MUSIC_GUITAR_GET_PRIVATE (self);
+       self->showLabels = TRUE;
+       self->detailedLabels = FALSE;
+       self->highlightFirstFret = TRUE;
+       self->autoUpdate = TRUE;
+       self->priv->shouldAnimate = FALSE;
+       self->fretNumber = (gushort) 17;
+       _tmp0_ = g_new0 (gfloat, 4);
+       _tmp0_[0] = 0.486f;
+       _tmp0_[1] = 0.309f;
+       _tmp0_[2] = 0.251f;
+       _tmp0_[3] = 1.0f;
+       self->gridBgColor = _tmp0_;
+       self->gridBgColor_length1 = 4;
+       _tmp1_ = g_new0 (gfloat, 4);
+       _tmp1_[0] = 0.6f;
+       _tmp1_[1] = 0.6f;
+       _tmp1_[2] = 0.6f;
+       _tmp1_[3] = 1.0f;
+       self->fretColor = _tmp1_;
+       self->fretColor_length1 = 4;
+       self->priv->animateInstant = (gfloat) 0;
+       _tmp2_ = g_strdup ("E2");
+       _tmp3_ = g_strdup ("A2");
+       _tmp4_ = g_strdup ("D3");
+       _tmp5_ = g_strdup ("G3");
+       _tmp6_ = g_strdup ("B3");
+       _tmp7_ = g_strdup ("E4");
+       _tmp8_ = g_new0 (gchar*, 6 + 1);
+       _tmp8_[0] = _tmp2_;
+       _tmp8_[1] = _tmp3_;
+       _tmp8_[2] = _tmp4_;
+       _tmp8_[3] = _tmp5_;
+       _tmp8_[4] = _tmp6_;
+       _tmp8_[5] = _tmp7_;
+       self->priv->defaultStrings = _tmp8_;
+       self->priv->defaultStrings_length1 = 6;
+       self->priv->_defaultStrings_size_ = self->priv->defaultStrings_length1;
+       _tmp9_ = g_new0 (gushort, 8);
+       _tmp9_[0] = (gushort) 1;
+       _tmp9_[1] = (gushort) 3;
+       _tmp9_[2] = (gushort) 5;
+       _tmp9_[3] = (gushort) 7;
+       _tmp9_[4] = (gushort) 9;
+       _tmp9_[5] = (gushort) 12;
+       _tmp9_[6] = (gushort) 15;
+       _tmp9_[7] = (gushort) 17;
+       self->priv->defaultFretMarks = _tmp9_;
+       self->priv->defaultFretMarks_length1 = 8;
+       self->priv->_defaultFretMarks_size_ = self->priv->defaultFretMarks_length1;
+}
+
+
+static void gtk_music_guitar_finalize (GObject* obj) {
+       GtkMusicGuitar * self;
+       self = G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_MUSIC_TYPE_GUITAR, GtkMusicGuitar);
+       self->gridBgColor = (g_free (self->gridBgColor), NULL);
+       self->fretColor = (g_free (self->fretColor), NULL);
+       _g_object_unref0 (self->guitarStrings);
+       _g_object_unref0 (self->fretMarks);
+       _g_object_unref0 (self->markedNotes);
+       self->priv->defaultStrings = (_vala_array_free (self->priv->defaultStrings, 
self->priv->defaultStrings_length1, (GDestroyNotify) g_free), NULL);
+       self->priv->defaultFretMarks = (g_free (self->priv->defaultFretMarks), NULL);
+       G_OBJECT_CLASS (gtk_music_guitar_parent_class)->finalize (obj);
+}
+
+
+/**
+ * The Guitar widget
+ **/
+GType gtk_music_guitar_get_type (void) {
+       static volatile gsize gtk_music_guitar_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_guitar_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (GtkMusicGuitarClass), (GBaseInitFunc) 
NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_music_guitar_class_init, (GClassFinalizeFunc) NULL, 
NULL, sizeof (GtkMusicGuitar), 0, (GInstanceInitFunc) gtk_music_guitar_instance_init, NULL };
+               GType gtk_music_guitar_type_id;
+               gtk_music_guitar_type_id = g_type_register_static (GTK_TYPE_DRAWING_AREA, "GtkMusicGuitar", 
&g_define_type_info, 0);
+               g_once_init_leave (&gtk_music_guitar_type_id__volatile, gtk_music_guitar_type_id);
+       }
+       return gtk_music_guitar_type_id__volatile;
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       if ((array != NULL) && (destroy_func != NULL)) {
+               int i;
+               for (i = 0; i < array_length; i = i + 1) {
+                       if (((gpointer*) array)[i] != NULL) {
+                               destroy_func (((gpointer*) array)[i]);
+                       }
+               }
+       }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+       _vala_array_destroy (array, array_length, destroy_func);
+       g_free (array);
+}
+
+
+
diff --git a/src/MusicalNotes.c b/src/MusicalNotes.c
new file mode 100644
index 0000000..ca902ab
--- /dev/null
+++ b/src/MusicalNotes.c
@@ -0,0 +1,883 @@
+/* MusicalNotes.c generated by valac 0.18.1, the Vala compiler
+ * generated from MusicalNotes.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gee.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define GTK_MUSIC_TYPE_MUSICAL_NOTES (gtk_music_musical_notes_get_type ())
+#define GTK_MUSIC_MUSICAL_NOTES(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_MUSIC_TYPE_MUSICAL_NOTES, 
GtkMusicMusicalNotes))
+#define GTK_MUSIC_MUSICAL_NOTES_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), 
GTK_MUSIC_TYPE_MUSICAL_NOTES, GtkMusicMusicalNotesClass))
+#define GTK_MUSIC_IS_MUSICAL_NOTES(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_MUSIC_TYPE_MUSICAL_NOTES))
+#define GTK_MUSIC_IS_MUSICAL_NOTES_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GTK_MUSIC_TYPE_MUSICAL_NOTES))
+#define GTK_MUSIC_MUSICAL_NOTES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GTK_MUSIC_TYPE_MUSICAL_NOTES, GtkMusicMusicalNotesClass))
+
+typedef struct _GtkMusicMusicalNotes GtkMusicMusicalNotes;
+typedef struct _GtkMusicMusicalNotesClass GtkMusicMusicalNotesClass;
+typedef struct _GtkMusicMusicalNotesPrivate GtkMusicMusicalNotesPrivate;
+
+#define GTK_MUSIC_MUSICAL_NOTES_TYPE_DIATONIC_INTERVALS (gtk_music_musical_notes_diatonic_intervals_get_type 
())
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+typedef struct _GtkMusicParamSpecMusicalNotes GtkMusicParamSpecMusicalNotes;
+
+/**
+ * Exception for invalid notes
+ **/
+typedef enum  {
+       GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_NOTE,
+       GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_MIDI,
+       GTK_MUSIC_MUSICAL_NOTE_ERROR_ALREADY_COMPLETE
+} GtkMusicMusicalNoteError;
+#define GTK_MUSIC_MUSICAL_NOTE_ERROR gtk_music_musical_note_error_quark ()
+struct _GtkMusicMusicalNotes {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       GtkMusicMusicalNotesPrivate * priv;
+};
+
+struct _GtkMusicMusicalNotesClass {
+       GTypeClass parent_class;
+       void (*finalize) (GtkMusicMusicalNotes *self);
+};
+
+typedef enum  {
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_UNISON,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_SECOND,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_SECOND,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_THIRD,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_THIRD,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_PERFECT_FOURTH,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_DIMINISHED_FIFTH,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_PERFECT_FIFTH,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_SIXTH,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_SIXTH,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_SEVENTH,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_SEVENTH,
+       GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_PERFECT_OCTAVE
+} GtkMusicMusicalNotesDiatonicIntervals;
+
+struct _GtkMusicParamSpecMusicalNotes {
+       GParamSpec parent_instance;
+};
+
+
+static gpointer gtk_music_musical_notes_parent_class = NULL;
+
+GQuark gtk_music_musical_note_error_quark (void);
+gpointer gtk_music_musical_notes_ref (gpointer instance);
+void gtk_music_musical_notes_unref (gpointer instance);
+GParamSpec* gtk_music_param_spec_musical_notes (const gchar* name, const gchar* nick, const gchar* blurb, 
GType object_type, GParamFlags flags);
+void gtk_music_value_set_musical_notes (GValue* value, gpointer v_object);
+void gtk_music_value_take_musical_notes (GValue* value, gpointer v_object);
+gpointer gtk_music_value_get_musical_notes (const GValue* value);
+GType gtk_music_musical_notes_get_type (void) G_GNUC_CONST;
+enum  {
+       GTK_MUSIC_MUSICAL_NOTES_DUMMY_PROPERTY
+};
+GType gtk_music_musical_notes_diatonic_intervals_get_type (void) G_GNUC_CONST;
+gboolean gtk_music_musical_notes_validate (const gchar* note);
+gushort gtk_music_musical_notes_get_note_as_midi_code (const gchar* note, GError** error);
+gboolean gtk_music_musical_notes_is_incomplete (const gchar* needle);
+GeeHashSet* gtk_music_musical_notes_make (const gchar* incompleteNote, GError** error);
+gchar* gtk_music_musical_notes_get_note_from_midi_code (gushort midi, GError** error);
+gboolean gtk_music_musical_notes_midi_is_accident (gushort midi);
+gboolean gtk_music_musical_notes_midi_can_have_accident (gushort midi);
+GtkMusicMusicalNotes* gtk_music_musical_notes_new (void);
+GtkMusicMusicalNotes* gtk_music_musical_notes_construct (GType object_type);
+static void gtk_music_musical_notes_finalize (GtkMusicMusicalNotes* obj);
+
+const gchar* GTK_MUSIC_MUSICAL_NOTES_note_names[12] = {"C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", 
"A#", "B"};
+
+GQuark gtk_music_musical_note_error_quark (void) {
+       return g_quark_from_static_string ("gtk_music_musical_note_error-quark");
+}
+
+
+/**
+     * All standard diatonic intervals, in order.
+     **/
+GType gtk_music_musical_notes_diatonic_intervals_get_type (void) {
+       static volatile gsize gtk_music_musical_notes_diatonic_intervals_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_musical_notes_diatonic_intervals_type_id__volatile)) {
+               static const GEnumValue values[] = {{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_UNISON, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_UNISON", "unison"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_SECOND, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_SECOND", "minor-second"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_SECOND, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_SECOND", "major-second"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_THIRD, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_THIRD", "minor-third"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_THIRD, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_THIRD", "major-third"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_PERFECT_FOURTH, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_PERFECT_FOURTH", "perfect-fourth"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_DIMINISHED_FIFTH, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_DIMINISHED_FIFTH", "diminished-fifth"}, {GTK_MUSIC_MUSICAL_
 NOTES_DIATONIC_INTERVALS_PERFECT_FIFTH, "GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_PERFECT_FIFTH", 
"perfect-fifth"}, {GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_SIXTH, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_SIXTH", "minor-sixth"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_SIXTH, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_SIXTH", "major-sixth"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_SEVENTH, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MINOR_SEVENTH", "minor-seventh"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_SEVENTH, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_MAJOR_SEVENTH", "major-seventh"}, 
{GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_PERFECT_OCTAVE, 
"GTK_MUSIC_MUSICAL_NOTES_DIATONIC_INTERVALS_PERFECT_OCTAVE", "perfect-octave"}, {0, NULL, NULL}};
+               GType gtk_music_musical_notes_diatonic_intervals_type_id;
+               gtk_music_musical_notes_diatonic_intervals_type_id = g_enum_register_static 
("GtkMusicMusicalNotesDiatonicIntervals", values);
+               g_once_init_leave (&gtk_music_musical_notes_diatonic_intervals_type_id__volatile, 
gtk_music_musical_notes_diatonic_intervals_type_id);
+       }
+       return gtk_music_musical_notes_diatonic_intervals_type_id__volatile;
+}
+
+
+/**
+    * Checks whether a note is valid
+    * @param note The note in scientific notation (as in E3)
+    * @return True if the note is valid or false otherwise
+    **/
+gboolean gtk_music_musical_notes_validate (const gchar* note) {
+       gboolean result = FALSE;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (note != NULL, FALSE);
+       {
+               const gchar* _tmp0_;
+               _tmp0_ = note;
+               gtk_music_musical_notes_get_note_as_midi_code (_tmp0_, &_inner_error_);
+               if (_inner_error_ != NULL) {
+                       if (_inner_error_->domain == GTK_MUSIC_MUSICAL_NOTE_ERROR) {
+                               goto __catch0_gtk_music_musical_note_error;
+                       }
+                       g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return FALSE;
+               }
+               result = TRUE;
+               return result;
+       }
+       goto __finally0;
+       __catch0_gtk_music_musical_note_error:
+       {
+               GError* e = NULL;
+               e = _inner_error_;
+               _inner_error_ = NULL;
+               result = FALSE;
+               _g_error_free0 (e);
+               return result;
+       }
+       __finally0:
+       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+       g_clear_error (&_inner_error_);
+       return FALSE;
+}
+
+
+/**
+    * Checks whether a string represents a note without octave
+    * @param needle The string to be checked
+    * @return True if it's a note without octave or false otherwise
+    **/
+gboolean gtk_music_musical_notes_is_incomplete (const gchar* needle) {
+       gboolean result = FALSE;
+       g_return_val_if_fail (needle != NULL, FALSE);
+       {
+               gint i;
+               i = 0;
+               {
+                       gboolean _tmp0_;
+                       _tmp0_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp1_;
+                               gint _tmp3_;
+                               gint _tmp4_;
+                               const gchar* _tmp5_;
+                               const gchar* _tmp6_;
+                               _tmp1_ = _tmp0_;
+                               if (!_tmp1_) {
+                                       gint _tmp2_;
+                                       _tmp2_ = i;
+                                       i = _tmp2_ + 1;
+                               }
+                               _tmp0_ = FALSE;
+                               _tmp3_ = i;
+                               if (!(_tmp3_ < G_N_ELEMENTS (GTK_MUSIC_MUSICAL_NOTES_note_names))) {
+                                       break;
+                               }
+                               _tmp4_ = i;
+                               _tmp5_ = GTK_MUSIC_MUSICAL_NOTES_note_names[_tmp4_];
+                               _tmp6_ = needle;
+                               if (g_strcmp0 (_tmp5_, _tmp6_) == 0) {
+                                       result = TRUE;
+                                       return result;
+                               }
+                       }
+               }
+       }
+       result = FALSE;
+       return result;
+}
+
+
+/**
+     * Returns all notes with a given name (map C to => C0, C1, C2, ...);
+     * @param incompleteNote A note without its octave component
+     * @return A set of all possible notes with this name
+     **/
+GeeHashSet* gtk_music_musical_notes_make (const gchar* incompleteNote, GError** error) {
+       GeeHashSet* result = NULL;
+       const gchar* _tmp0_;
+       gboolean _tmp1_ = FALSE;
+       gushort start;
+       gushort end;
+       const gchar* _tmp3_;
+       GeeHashSet* _tmp11_;
+       GeeHashSet* notes;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (incompleteNote != NULL, NULL);
+       _tmp0_ = incompleteNote;
+       _tmp1_ = gtk_music_musical_notes_is_incomplete (_tmp0_);
+       if (!_tmp1_) {
+               GError* _tmp2_;
+               _tmp2_ = g_error_new_literal (GTK_MUSIC_MUSICAL_NOTE_ERROR, 
GTK_MUSIC_MUSICAL_NOTE_ERROR_ALREADY_COMPLETE, "Note is complete!");
+               _inner_error_ = _tmp2_;
+               if (_inner_error_->domain == GTK_MUSIC_MUSICAL_NOTE_ERROR) {
+                       g_propagate_error (error, _inner_error_);
+                       return NULL;
+               } else {
+                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return NULL;
+               }
+       }
+       start = (gushort) 1;
+       end = (gushort) 7;
+       _tmp3_ = incompleteNote;
+       if (g_strcmp0 (_tmp3_, "C") == 0) {
+               end = (gushort) 8;
+       } else {
+               gboolean _tmp4_ = FALSE;
+               gboolean _tmp5_ = FALSE;
+               const gchar* _tmp6_;
+               gboolean _tmp8_;
+               gboolean _tmp10_;
+               _tmp6_ = incompleteNote;
+               if (g_strcmp0 (_tmp6_, "A") == 0) {
+                       _tmp5_ = TRUE;
+               } else {
+                       const gchar* _tmp7_;
+                       _tmp7_ = incompleteNote;
+                       _tmp5_ = g_strcmp0 (_tmp7_, "A#") == 0;
+               }
+               _tmp8_ = _tmp5_;
+               if (_tmp8_) {
+                       _tmp4_ = TRUE;
+               } else {
+                       const gchar* _tmp9_;
+                       _tmp9_ = incompleteNote;
+                       _tmp4_ = g_strcmp0 (_tmp9_, "B") == 0;
+               }
+               _tmp10_ = _tmp4_;
+               if (_tmp10_) {
+                       start = (gushort) 0;
+               }
+       }
+       _tmp11_ = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, NULL, NULL, NULL, NULL, 
NULL, NULL);
+       notes = _tmp11_;
+       {
+               gushort _tmp12_;
+               gushort i;
+               _tmp12_ = start;
+               i = _tmp12_;
+               {
+                       gboolean _tmp13_;
+                       _tmp13_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp14_;
+                               gushort _tmp16_;
+                               gushort _tmp17_;
+                               GeeHashSet* _tmp18_;
+                               const gchar* _tmp19_;
+                               gushort _tmp20_;
+                               gchar* _tmp21_ = NULL;
+                               gchar* _tmp22_;
+                               gchar* _tmp23_;
+                               gchar* _tmp24_;
+                               _tmp14_ = _tmp13_;
+                               if (!_tmp14_) {
+                                       gushort _tmp15_;
+                                       _tmp15_ = i;
+                                       i = _tmp15_ + 1;
+                               }
+                               _tmp13_ = FALSE;
+                               _tmp16_ = i;
+                               _tmp17_ = end;
+                               if (!(_tmp16_ <= _tmp17_)) {
+                                       break;
+                               }
+                               _tmp18_ = notes;
+                               _tmp19_ = incompleteNote;
+                               _tmp20_ = i;
+                               _tmp21_ = g_strdup_printf ("%hu", _tmp20_);
+                               _tmp22_ = _tmp21_;
+                               _tmp23_ = g_strconcat (_tmp19_, _tmp22_, NULL);
+                               _tmp24_ = _tmp23_;
+                               gee_abstract_collection_add ((GeeAbstractCollection*) _tmp18_, _tmp24_);
+                               _g_free0 (_tmp24_);
+                               _g_free0 (_tmp22_);
+                       }
+               }
+       }
+       result = notes;
+       return result;
+}
+
+
+/**
+    * Gets the note's MIDI code
+    *
+    * Algorithm:
+    * A note, such as C#3 is decomposed into:
+    *  - the octave (3)
+    *  - the note name (C#)
+    * Each note name receives an index in the range 0..11 .
+    * The index is used as the "LSB" part of the note number and the octave
+    * is used as the "MSB" part of the number.
+    * An offset (12) is added so that A0=21
+    * A constraint is added so that the note is between 21 (A0) and 108 (C8)
+    *
+    * @param note The note in scientific notation (with octave)
+    * @return The associated MIDI code
+    **/
+static gchar string_get (const gchar* self, glong index) {
+       gchar result = '\0';
+       glong _tmp0_;
+       gchar _tmp1_;
+       g_return_val_if_fail (self != NULL, '\0');
+       _tmp0_ = index;
+       _tmp1_ = ((gchar*) self)[_tmp0_];
+       result = _tmp1_;
+       return result;
+}
+
+
+static gchar* string_slice (const gchar* self, glong start, glong end) {
+       gchar* result = NULL;
+       gint _tmp0_;
+       gint _tmp1_;
+       glong string_length;
+       glong _tmp2_;
+       glong _tmp5_;
+       gboolean _tmp8_ = FALSE;
+       glong _tmp9_;
+       gboolean _tmp12_;
+       gboolean _tmp13_ = FALSE;
+       glong _tmp14_;
+       gboolean _tmp17_;
+       glong _tmp18_;
+       glong _tmp19_;
+       glong _tmp20_;
+       glong _tmp21_;
+       glong _tmp22_;
+       gchar* _tmp23_ = NULL;
+       g_return_val_if_fail (self != NULL, NULL);
+       _tmp0_ = strlen (self);
+       _tmp1_ = _tmp0_;
+       string_length = (glong) _tmp1_;
+       _tmp2_ = start;
+       if (_tmp2_ < ((glong) 0)) {
+               glong _tmp3_;
+               glong _tmp4_;
+               _tmp3_ = string_length;
+               _tmp4_ = start;
+               start = _tmp3_ + _tmp4_;
+       }
+       _tmp5_ = end;
+       if (_tmp5_ < ((glong) 0)) {
+               glong _tmp6_;
+               glong _tmp7_;
+               _tmp6_ = string_length;
+               _tmp7_ = end;
+               end = _tmp6_ + _tmp7_;
+       }
+       _tmp9_ = start;
+       if (_tmp9_ >= ((glong) 0)) {
+               glong _tmp10_;
+               glong _tmp11_;
+               _tmp10_ = start;
+               _tmp11_ = string_length;
+               _tmp8_ = _tmp10_ <= _tmp11_;
+       } else {
+               _tmp8_ = FALSE;
+       }
+       _tmp12_ = _tmp8_;
+       g_return_val_if_fail (_tmp12_, NULL);
+       _tmp14_ = end;
+       if (_tmp14_ >= ((glong) 0)) {
+               glong _tmp15_;
+               glong _tmp16_;
+               _tmp15_ = end;
+               _tmp16_ = string_length;
+               _tmp13_ = _tmp15_ <= _tmp16_;
+       } else {
+               _tmp13_ = FALSE;
+       }
+       _tmp17_ = _tmp13_;
+       g_return_val_if_fail (_tmp17_, NULL);
+       _tmp18_ = start;
+       _tmp19_ = end;
+       g_return_val_if_fail (_tmp18_ <= _tmp19_, NULL);
+       _tmp20_ = start;
+       _tmp21_ = end;
+       _tmp22_ = start;
+       _tmp23_ = g_strndup (((gchar*) self) + _tmp20_, (gsize) (_tmp21_ - _tmp22_));
+       result = _tmp23_;
+       return result;
+}
+
+
+gushort gtk_music_musical_notes_get_note_as_midi_code (const gchar* note, GError** error) {
+       gushort result = 0U;
+       gshort high;
+       gshort low;
+       gchar octave = '\0';
+       gchar* note_name = NULL;
+       const gchar* _tmp0_;
+       gint _tmp1_;
+       gint _tmp2_;
+       const gchar* _tmp4_;
+       const gchar* _tmp5_;
+       gint _tmp6_;
+       gint _tmp7_;
+       gchar _tmp8_ = '\0';
+       gchar _tmp9_;
+       gboolean _tmp10_ = FALSE;
+       gchar _tmp12_;
+       gint _tmp13_ = 0;
+       const gchar* _tmp14_;
+       const gchar* _tmp15_;
+       gint _tmp16_;
+       gint _tmp17_;
+       gchar* _tmp18_ = NULL;
+       gshort _tmp27_;
+       gshort _tmp28_;
+       gshort _tmp29_;
+       gint midi_code;
+       gboolean _tmp30_ = FALSE;
+       gint _tmp31_;
+       gboolean _tmp33_;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (note != NULL, 0U);
+       high = (gshort) (-1);
+       low = (gshort) (-1);
+       _tmp0_ = note;
+       _tmp1_ = strlen (_tmp0_);
+       _tmp2_ = _tmp1_;
+       if (_tmp2_ < 2) {
+               GError* _tmp3_;
+               _tmp3_ = g_error_new_literal (GTK_MUSIC_MUSICAL_NOTE_ERROR, 
GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_NOTE, "Invalid note length!");
+               _inner_error_ = _tmp3_;
+               if (_inner_error_->domain == GTK_MUSIC_MUSICAL_NOTE_ERROR) {
+                       g_propagate_error (error, _inner_error_);
+                       _g_free0 (note_name);
+                       return 0U;
+               } else {
+                       _g_free0 (note_name);
+                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return 0U;
+               }
+       }
+       _tmp4_ = note;
+       _tmp5_ = note;
+       _tmp6_ = strlen (_tmp5_);
+       _tmp7_ = _tmp6_;
+       _tmp8_ = string_get (_tmp4_, (glong) (_tmp7_ - 1));
+       octave = _tmp8_;
+       _tmp9_ = octave;
+       _tmp10_ = g_ascii_isdigit (_tmp9_);
+       if (!_tmp10_) {
+               GError* _tmp11_;
+               _tmp11_ = g_error_new_literal (GTK_MUSIC_MUSICAL_NOTE_ERROR, 
GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_NOTE, "Invalid octave!");
+               _inner_error_ = _tmp11_;
+               if (_inner_error_->domain == GTK_MUSIC_MUSICAL_NOTE_ERROR) {
+                       g_propagate_error (error, _inner_error_);
+                       _g_free0 (note_name);
+                       return 0U;
+               } else {
+                       _g_free0 (note_name);
+                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return 0U;
+               }
+       }
+       _tmp12_ = octave;
+       _tmp13_ = g_ascii_digit_value (_tmp12_);
+       high = (gshort) _tmp13_;
+       _tmp14_ = note;
+       _tmp15_ = note;
+       _tmp16_ = strlen (_tmp15_);
+       _tmp17_ = _tmp16_;
+       _tmp18_ = string_slice (_tmp14_, (glong) 0, (glong) (_tmp17_ - 1));
+       _g_free0 (note_name);
+       note_name = _tmp18_;
+       {
+               gint i;
+               i = 0;
+               {
+                       gboolean _tmp19_;
+                       _tmp19_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp20_;
+                               gint _tmp22_;
+                               gint _tmp23_;
+                               const gchar* _tmp24_;
+                               const gchar* _tmp25_;
+                               _tmp20_ = _tmp19_;
+                               if (!_tmp20_) {
+                                       gint _tmp21_;
+                                       _tmp21_ = i;
+                                       i = _tmp21_ + 1;
+                               }
+                               _tmp19_ = FALSE;
+                               _tmp22_ = i;
+                               if (!(_tmp22_ < G_N_ELEMENTS (GTK_MUSIC_MUSICAL_NOTES_note_names))) {
+                                       break;
+                               }
+                               _tmp23_ = i;
+                               _tmp24_ = GTK_MUSIC_MUSICAL_NOTES_note_names[_tmp23_];
+                               _tmp25_ = note_name;
+                               if (g_strcmp0 (_tmp24_, _tmp25_) == 0) {
+                                       gint _tmp26_;
+                                       _tmp26_ = i;
+                                       low = (gshort) _tmp26_;
+                                       break;
+                               }
+                       }
+               }
+       }
+       _tmp27_ = low;
+       if (((gint) _tmp27_) == (-1)) {
+               result = (gushort) (-1);
+               _g_free0 (note_name);
+               return result;
+       }
+       _tmp28_ = high;
+       _tmp29_ = low;
+       midi_code = ((_tmp28_ * 12) + _tmp29_) + 12;
+       _tmp31_ = midi_code;
+       if (_tmp31_ > 108) {
+               _tmp30_ = TRUE;
+       } else {
+               gint _tmp32_;
+               _tmp32_ = midi_code;
+               _tmp30_ = _tmp32_ < 21;
+       }
+       _tmp33_ = _tmp30_;
+       if (_tmp33_) {
+               GError* _tmp34_;
+               _tmp34_ = g_error_new_literal (GTK_MUSIC_MUSICAL_NOTE_ERROR, 
GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_NOTE, "Out of range (A0 --> C8)");
+               _inner_error_ = _tmp34_;
+               if (_inner_error_->domain == GTK_MUSIC_MUSICAL_NOTE_ERROR) {
+                       g_propagate_error (error, _inner_error_);
+                       _g_free0 (note_name);
+                       return 0U;
+               } else {
+                       _g_free0 (note_name);
+                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return 0U;
+               }
+       }
+       result = (gushort) midi_code;
+       _g_free0 (note_name);
+       return result;
+}
+
+
+/**
+    * Gets the note's string from its MIDI code
+    *
+    * This functions performs the inverse procedure of getting a MIDI code from
+    * a scientific notation note string:
+    * 
+    * 1. Subtract 18 from the MIDI code
+    * 2. Get the integer part of the division by 12 as the octave
+    * 3. Get the modulus division as the note index
+    * 4. Construct note indexing the note_names list and adding the octave
+    *
+    * @param note The note valid MIDI code
+    * @return The note as a string or ""
+    **/
+gchar* gtk_music_musical_notes_get_note_from_midi_code (gushort midi, GError** error) {
+       gchar* result = NULL;
+       gboolean _tmp0_ = FALSE;
+       gushort _tmp1_;
+       gboolean _tmp3_;
+       gushort _tmp5_;
+       gushort _tmp6_;
+       gushort octave;
+       gushort _tmp7_;
+       gushort note_index;
+       const gchar* _tmp8_;
+       gchar* _tmp9_;
+       gchar* note;
+       const gchar* _tmp10_;
+       gchar* _tmp11_ = NULL;
+       gchar* _tmp12_;
+       gchar* _tmp13_;
+       GError * _inner_error_ = NULL;
+       _tmp1_ = midi;
+       if (((gint) _tmp1_) > 108) {
+               _tmp0_ = TRUE;
+       } else {
+               gushort _tmp2_;
+               _tmp2_ = midi;
+               _tmp0_ = ((gint) _tmp2_) < 21;
+       }
+       _tmp3_ = _tmp0_;
+       if (_tmp3_) {
+               GError* _tmp4_;
+               _tmp4_ = g_error_new_literal (GTK_MUSIC_MUSICAL_NOTE_ERROR, 
GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_MIDI, "Not in range 21..108");
+               _inner_error_ = _tmp4_;
+               if (_inner_error_->domain == GTK_MUSIC_MUSICAL_NOTE_ERROR) {
+                       g_propagate_error (error, _inner_error_);
+                       return NULL;
+               } else {
+                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return NULL;
+               }
+       }
+       _tmp5_ = midi;
+       midi = (gushort) (_tmp5_ - 12);
+       _tmp6_ = midi;
+       octave = (gushort) (_tmp6_ / 12);
+       _tmp7_ = midi;
+       note_index = (gushort) (_tmp7_ % 12);
+       _tmp8_ = GTK_MUSIC_MUSICAL_NOTES_note_names[note_index];
+       _tmp9_ = g_strdup (_tmp8_);
+       note = _tmp9_;
+       _tmp10_ = note;
+       _tmp11_ = g_strdup_printf ("%hu", octave);
+       _tmp12_ = _tmp11_;
+       _tmp13_ = g_strconcat (_tmp10_, _tmp12_, NULL);
+       _g_free0 (note);
+       note = _tmp13_;
+       _g_free0 (_tmp12_);
+       result = note;
+       return result;
+}
+
+
+/**
+     * Checks whether a given MIDI code is an accidental note (C#, D#, ...)
+     * @param midi The MIDI code of a note
+     * @return Whether the note has an accidental
+     **/
+gboolean gtk_music_musical_notes_midi_is_accident (gushort midi) {
+       gboolean result = FALSE;
+       gushort _tmp0_;
+       _tmp0_ = midi;
+       switch (_tmp0_ % 12) {
+               case 1:
+               case 3:
+               case 6:
+               case 8:
+               case 10:
+               {
+                       result = TRUE;
+                       return result;
+               }
+               default:
+               {
+                       result = FALSE;
+                       return result;
+               }
+       }
+}
+
+
+/**
+     * Checks whether a given MIDI code is different of E or B
+     * @param midi The MIDI code of a note
+     * @return Whether the note can have an accident (thus, neither E nor B)
+     **/
+gboolean gtk_music_musical_notes_midi_can_have_accident (gushort midi) {
+       gboolean result = FALSE;
+       gushort _tmp0_;
+       gushort norm_midi;
+       gboolean _tmp1_ = FALSE;
+       gushort _tmp2_;
+       gboolean _tmp4_;
+       _tmp0_ = midi;
+       norm_midi = (gushort) (_tmp0_ % 12);
+       _tmp2_ = norm_midi;
+       if (((gint) _tmp2_) != 4) {
+               gushort _tmp3_;
+               _tmp3_ = norm_midi;
+               _tmp1_ = ((gint) _tmp3_) != 11;
+       } else {
+               _tmp1_ = FALSE;
+       }
+       _tmp4_ = _tmp1_;
+       result = _tmp4_;
+       return result;
+}
+
+
+GtkMusicMusicalNotes* gtk_music_musical_notes_construct (GType object_type) {
+       GtkMusicMusicalNotes* self = NULL;
+       self = (GtkMusicMusicalNotes*) g_type_create_instance (object_type);
+       return self;
+}
+
+
+GtkMusicMusicalNotes* gtk_music_musical_notes_new (void) {
+       return gtk_music_musical_notes_construct (GTK_MUSIC_TYPE_MUSICAL_NOTES);
+}
+
+
+static void gtk_music_value_musical_notes_init (GValue* value) {
+       value->data[0].v_pointer = NULL;
+}
+
+
+static void gtk_music_value_musical_notes_free_value (GValue* value) {
+       if (value->data[0].v_pointer) {
+               gtk_music_musical_notes_unref (value->data[0].v_pointer);
+       }
+}
+
+
+static void gtk_music_value_musical_notes_copy_value (const GValue* src_value, GValue* dest_value) {
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = gtk_music_musical_notes_ref (src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+
+static gpointer gtk_music_value_musical_notes_peek_pointer (const GValue* value) {
+       return value->data[0].v_pointer;
+}
+
+
+static gchar* gtk_music_value_musical_notes_collect_value (GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       if (collect_values[0].v_pointer) {
+               GtkMusicMusicalNotes* object;
+               object = collect_values[0].v_pointer;
+               if (object->parent_instance.g_class == NULL) {
+                       return g_strconcat ("invalid unclassed object pointer for value type `", 
G_VALUE_TYPE_NAME (value), "'", NULL);
+               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE 
(object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               }
+               value->data[0].v_pointer = gtk_music_musical_notes_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+
+static gchar* gtk_music_value_musical_notes_lcopy_value (const GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       GtkMusicMusicalNotes** object_p;
+       object_p = collect_values[0].v_pointer;
+       if (!object_p) {
+               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+       }
+       if (!value->data[0].v_pointer) {
+               *object_p = NULL;
+       } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+               *object_p = value->data[0].v_pointer;
+       } else {
+               *object_p = gtk_music_musical_notes_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+
+GParamSpec* gtk_music_param_spec_musical_notes (const gchar* name, const gchar* nick, const gchar* blurb, 
GType object_type, GParamFlags flags) {
+       GtkMusicParamSpecMusicalNotes* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, GTK_MUSIC_TYPE_MUSICAL_NOTES), NULL);
+       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+       G_PARAM_SPEC (spec)->value_type = object_type;
+       return G_PARAM_SPEC (spec);
+}
+
+
+gpointer gtk_music_value_get_musical_notes (const GValue* value) {
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_MUSICAL_NOTES), NULL);
+       return value->data[0].v_pointer;
+}
+
+
+void gtk_music_value_set_musical_notes (GValue* value, gpointer v_object) {
+       GtkMusicMusicalNotes* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_MUSICAL_NOTES));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GTK_MUSIC_TYPE_MUSICAL_NOTES));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+               gtk_music_musical_notes_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_musical_notes_unref (old);
+       }
+}
+
+
+void gtk_music_value_take_musical_notes (GValue* value, gpointer v_object) {
+       GtkMusicMusicalNotes* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_TYPE_MUSICAL_NOTES));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, GTK_MUSIC_TYPE_MUSICAL_NOTES));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_musical_notes_unref (old);
+       }
+}
+
+
+static void gtk_music_musical_notes_class_init (GtkMusicMusicalNotesClass * klass) {
+       gtk_music_musical_notes_parent_class = g_type_class_peek_parent (klass);
+       GTK_MUSIC_MUSICAL_NOTES_CLASS (klass)->finalize = gtk_music_musical_notes_finalize;
+}
+
+
+static void gtk_music_musical_notes_instance_init (GtkMusicMusicalNotes * self) {
+       self->ref_count = 1;
+}
+
+
+static void gtk_music_musical_notes_finalize (GtkMusicMusicalNotes* obj) {
+       GtkMusicMusicalNotes * self;
+       self = G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_MUSIC_TYPE_MUSICAL_NOTES, GtkMusicMusicalNotes);
+}
+
+
+GType gtk_music_musical_notes_get_type (void) {
+       static volatile gsize gtk_music_musical_notes_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_musical_notes_type_id__volatile)) {
+               static const GTypeValueTable g_define_type_value_table = { 
gtk_music_value_musical_notes_init, gtk_music_value_musical_notes_free_value, 
gtk_music_value_musical_notes_copy_value, gtk_music_value_musical_notes_peek_pointer, "p", 
gtk_music_value_musical_notes_collect_value, "p", gtk_music_value_musical_notes_lcopy_value };
+               static const GTypeInfo g_define_type_info = { sizeof (GtkMusicMusicalNotesClass), 
(GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_music_musical_notes_class_init, 
(GClassFinalizeFunc) NULL, NULL, sizeof (GtkMusicMusicalNotes), 0, (GInstanceInitFunc) 
gtk_music_musical_notes_instance_init, &g_define_type_value_table };
+               static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | 
G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+               GType gtk_music_musical_notes_type_id;
+               gtk_music_musical_notes_type_id = g_type_register_fundamental (g_type_fundamental_next (), 
"GtkMusicMusicalNotes", &g_define_type_info, &g_define_type_fundamental_info, 0);
+               g_once_init_leave (&gtk_music_musical_notes_type_id__volatile, 
gtk_music_musical_notes_type_id);
+       }
+       return gtk_music_musical_notes_type_id__volatile;
+}
+
+
+gpointer gtk_music_musical_notes_ref (gpointer instance) {
+       GtkMusicMusicalNotes* self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+
+void gtk_music_musical_notes_unref (gpointer instance) {
+       GtkMusicMusicalNotes* self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               GTK_MUSIC_MUSICAL_NOTES_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+
+
diff --git a/src/PianoWidget.c b/src/PianoWidget.c
new file mode 100644
index 0000000..cbe4664
--- /dev/null
+++ b/src/PianoWidget.c
@@ -0,0 +1,1864 @@
+/* PianoWidget.c generated by valac 0.18.1, the Vala compiler
+ * generated from PianoWidget.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gtk/gtk.h>
+#include <float.h>
+#include <math.h>
+#include <gee.h>
+#include <gdk/gdk.h>
+#include <stdlib.h>
+#include <string.h>
+#include <cairo.h>
+#include <gobject/gvaluecollector.h>
+
+
+#define GTK_MUSIC_TYPE_PIANO (gtk_music_piano_get_type ())
+#define GTK_MUSIC_PIANO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_MUSIC_TYPE_PIANO, GtkMusicPiano))
+#define GTK_MUSIC_PIANO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_MUSIC_TYPE_PIANO, 
GtkMusicPianoClass))
+#define GTK_MUSIC_IS_PIANO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_MUSIC_TYPE_PIANO))
+#define GTK_MUSIC_IS_PIANO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_MUSIC_TYPE_PIANO))
+#define GTK_MUSIC_PIANO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_MUSIC_TYPE_PIANO, 
GtkMusicPianoClass))
+
+typedef struct _GtkMusicPiano GtkMusicPiano;
+typedef struct _GtkMusicPianoClass GtkMusicPianoClass;
+typedef struct _GtkMusicPianoPrivate GtkMusicPianoPrivate;
+
+#define GTK_MUSIC_PIANO_TYPE_LABEL_POSITION (gtk_music_piano_label_position_get_type ())
+
+#define GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE (gtk_music_piano_marked_note_style_get_type ())
+#define GTK_MUSIC_PIANO_MARKED_NOTE_STYLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE, GtkMusicPianoMarkedNoteStyle))
+#define GTK_MUSIC_PIANO_MARKED_NOTE_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), 
GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE, GtkMusicPianoMarkedNoteStyleClass))
+#define GTK_MUSIC_PIANO_IS_MARKED_NOTE_STYLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE))
+#define GTK_MUSIC_PIANO_IS_MARKED_NOTE_STYLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE))
+#define GTK_MUSIC_PIANO_MARKED_NOTE_STYLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), 
GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE, GtkMusicPianoMarkedNoteStyleClass))
+
+typedef struct _GtkMusicPianoMarkedNoteStyle GtkMusicPianoMarkedNoteStyle;
+typedef struct _GtkMusicPianoMarkedNoteStyleClass GtkMusicPianoMarkedNoteStyleClass;
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+#define _gtk_music_piano_marked_note_style_unref0(var) ((var == NULL) ? NULL : (var = 
(gtk_music_piano_marked_note_style_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _cairo_region_destroy0(var) ((var == NULL) ? NULL : (var = (cairo_region_destroy (var), NULL)))
+typedef struct _GtkMusicPianoMarkedNoteStylePrivate GtkMusicPianoMarkedNoteStylePrivate;
+typedef struct _GtkMusicPianoParamSpecMarkedNoteStyle GtkMusicPianoParamSpecMarkedNoteStyle;
+
+typedef enum  {
+       GTK_MUSIC_PIANO_ERROR_INVALID_COORDINATES
+} GtkMusicPianoError;
+#define GTK_MUSIC_PIANO_ERROR gtk_music_piano_error_quark ()
+typedef enum  {
+       GTK_MUSIC_PIANO_LABEL_POSITION_UP,
+       GTK_MUSIC_PIANO_LABEL_POSITION_DOWN
+} GtkMusicPianoLabelPosition;
+
+struct _GtkMusicPiano {
+       GtkDrawingArea parent_instance;
+       GtkMusicPianoPrivate * priv;
+       gboolean autoUpdate;
+       gushort key_count;
+       gushort firstNote;
+       gfloat* nat_key_color;
+       gint nat_key_color_length1;
+       gfloat* accident_key_color;
+       gint accident_key_color_length1;
+       gboolean showLabels;
+       gboolean detailedLabels;
+       GtkMusicPianoLabelPosition labelsPosition;
+       GeeHashMap* markedNotes;
+};
+
+struct _GtkMusicPianoClass {
+       GtkDrawingAreaClass parent_class;
+};
+
+struct _GtkMusicPianoPrivate {
+       gushort h_padding;
+       gushort v_padding;
+       gfloat accident_key_height;
+       gfloat accident_key_width;
+       gfloat x_min_natk_dist;
+       gushort nat_keys;
+       gdouble piano_width;
+       gdouble piano_height;
+       gdouble piano_x;
+       gdouble piano_y;
+       gdouble width;
+       gdouble height;
+       gdouble key_width;
+};
+
+typedef enum  {
+       GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_NOTE,
+       GTK_MUSIC_MUSICAL_NOTE_ERROR_INVALID_MIDI,
+       GTK_MUSIC_MUSICAL_NOTE_ERROR_ALREADY_COMPLETE
+} GtkMusicMusicalNoteError;
+#define GTK_MUSIC_MUSICAL_NOTE_ERROR gtk_music_musical_note_error_quark ()
+struct _GtkMusicPianoMarkedNoteStyle {
+       GTypeInstance parent_instance;
+       volatile int ref_count;
+       GtkMusicPianoMarkedNoteStylePrivate * priv;
+       gfloat* color;
+       gint color_length1;
+};
+
+struct _GtkMusicPianoMarkedNoteStyleClass {
+       GTypeClass parent_class;
+       void (*finalize) (GtkMusicPianoMarkedNoteStyle *self);
+};
+
+struct _GtkMusicPianoParamSpecMarkedNoteStyle {
+       GParamSpec parent_instance;
+};
+
+
+static gpointer gtk_music_piano_parent_class = NULL;
+static gpointer gtk_music_piano_marked_note_style_parent_class = NULL;
+
+GQuark gtk_music_piano_error_quark (void);
+GType gtk_music_piano_get_type (void) G_GNUC_CONST;
+GType gtk_music_piano_label_position_get_type (void) G_GNUC_CONST;
+gpointer gtk_music_piano_marked_note_style_ref (gpointer instance);
+void gtk_music_piano_marked_note_style_unref (gpointer instance);
+GParamSpec* gtk_music_piano_param_spec_marked_note_style (const gchar* name, const gchar* nick, const gchar* 
blurb, GType object_type, GParamFlags flags);
+void gtk_music_piano_value_set_marked_note_style (GValue* value, gpointer v_object);
+void gtk_music_piano_value_take_marked_note_style (GValue* value, gpointer v_object);
+gpointer gtk_music_piano_value_get_marked_note_style (const GValue* value);
+GType gtk_music_piano_marked_note_style_get_type (void) G_GNUC_CONST;
+#define GTK_MUSIC_PIANO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_MUSIC_TYPE_PIANO, 
GtkMusicPianoPrivate))
+enum  {
+       GTK_MUSIC_PIANO_DUMMY_PROPERTY
+};
+GtkMusicPiano* gtk_music_piano_new (void);
+GtkMusicPiano* gtk_music_piano_construct (GType object_type);
+void gtk_music_piano_mark_midi (GtkMusicPiano* self, gushort midi_note, gfloat* color, int color_length1);
+GtkMusicPianoMarkedNoteStyle* gtk_music_piano_marked_note_style_new (gfloat* color, int color_length1);
+GtkMusicPianoMarkedNoteStyle* gtk_music_piano_marked_note_style_construct (GType object_type, gfloat* color, 
int color_length1);
+void gtk_music_piano_redraw (GtkMusicPiano* self);
+void gtk_music_piano_unmark_midi (GtkMusicPiano* self, gushort midi_note);
+void gtk_music_piano_mark_note (GtkMusicPiano* self, const gchar* note, gfloat* color, int color_length1);
+GeeHashSet* gtk_music_piano_find_positions (GtkMusicPiano* self, const gchar* note);
+void gtk_music_piano_unmark_note (GtkMusicPiano* self, const gchar* note);
+void gtk_music_piano_unmark_all (GtkMusicPiano* self);
+gushort gtk_music_piano_point_to_midi (GtkMusicPiano* self, gdouble x, gdouble y, GError** error);
+gdouble gtk_music_piano_midi_to_x (GtkMusicPiano* self, gushort midi_code);
+gboolean gtk_music_musical_notes_midi_is_accident (gushort midi);
+gboolean gtk_music_musical_notes_validate (const gchar* note);
+gboolean gtk_music_musical_notes_is_incomplete (const gchar* needle);
+GQuark gtk_music_musical_note_error_quark (void);
+GeeHashSet* gtk_music_musical_notes_make (const gchar* incompleteNote, GError** error);
+gushort gtk_music_musical_notes_get_note_as_midi_code (const gchar* note, GError** error);
+static gushort gtk_music_piano_get_natural_keys_count (GtkMusicPiano* self);
+static gboolean gtk_music_piano_real_button_press_event (GtkWidget* base, GdkEventButton* event);
+static gboolean gtk_music_piano_real_button_release_event (GtkWidget* base, GdkEventButton* event);
+static gboolean gtk_music_piano_real_draw (GtkWidget* base, cairo_t* cr);
+static void gtk_music_piano_calculate_dimensions (GtkMusicPiano* self, cairo_t* cr);
+static void gtk_music_piano_draw_natural_keys (GtkMusicPiano* self, cairo_t* cr);
+static void gtk_music_piano_draw_accident_keys (GtkMusicPiano* self, cairo_t* cr);
+static void g_cclosure_user_marshal_VOID__OBJECT_POINTER_INT (GClosure * closure, GValue * return_value, 
guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data);
+enum  {
+       GTK_MUSIC_PIANO_MARKED_NOTE_STYLE_DUMMY_PROPERTY
+};
+static gfloat* _vala_array_dup2 (gfloat* self, int length);
+static void gtk_music_piano_marked_note_style_finalize (GtkMusicPianoMarkedNoteStyle* obj);
+static void gtk_music_piano_finalize (GObject* obj);
+
+
+GQuark gtk_music_piano_error_quark (void) {
+       return g_quark_from_static_string ("gtk_music_piano_error-quark");
+}
+
+
+GType gtk_music_piano_label_position_get_type (void) {
+       static volatile gsize gtk_music_piano_label_position_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_piano_label_position_type_id__volatile)) {
+               static const GEnumValue values[] = {{GTK_MUSIC_PIANO_LABEL_POSITION_UP, 
"GTK_MUSIC_PIANO_LABEL_POSITION_UP", "up"}, {GTK_MUSIC_PIANO_LABEL_POSITION_DOWN, 
"GTK_MUSIC_PIANO_LABEL_POSITION_DOWN", "down"}, {0, NULL, NULL}};
+               GType gtk_music_piano_label_position_type_id;
+               gtk_music_piano_label_position_type_id = g_enum_register_static 
("GtkMusicPianoLabelPosition", values);
+               g_once_init_leave (&gtk_music_piano_label_position_type_id__volatile, 
gtk_music_piano_label_position_type_id);
+       }
+       return gtk_music_piano_label_position_type_id__volatile;
+}
+
+
+/**
+    * Creates a new Piano widget, which minimum size is defined to 120x40
+    **/
+GtkMusicPiano* gtk_music_piano_construct (GType object_type) {
+       GtkMusicPiano * self = NULL;
+       GeeHashMap* _tmp0_;
+       self = (GtkMusicPiano*) g_object_new (object_type, NULL);
+       gtk_widget_add_events ((GtkWidget*) self, (gint) (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK));
+       gtk_widget_set_size_request ((GtkWidget*) self, 120, 40);
+       _tmp0_ = gee_hash_map_new (G_TYPE_INVALID, NULL, NULL, GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE, 
(GBoxedCopyFunc) gtk_music_piano_marked_note_style_ref, gtk_music_piano_marked_note_style_unref, NULL, NULL, 
NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+       _g_object_unref0 (self->markedNotes);
+       self->markedNotes = _tmp0_;
+       return self;
+}
+
+
+GtkMusicPiano* gtk_music_piano_new (void) {
+       return gtk_music_piano_construct (GTK_MUSIC_TYPE_PIANO);
+}
+
+
+/**
+    * Highlights a key corresponding to a MIDI code
+    * @param midi_note A valid MIDI code (in range: 21 .. 108)
+    * @param color The color (in RGBA []) to fill the marked key (default: blue)
+    **/
+void gtk_music_piano_mark_midi (GtkMusicPiano* self, gushort midi_note, gfloat* color, int color_length1) {
+       GeeHashMap* _tmp0_;
+       gushort _tmp1_;
+       gfloat* _tmp2_;
+       gint _tmp2__length1;
+       GtkMusicPianoMarkedNoteStyle* _tmp3_;
+       GtkMusicPianoMarkedNoteStyle* _tmp4_;
+       gboolean _tmp5_;
+       g_return_if_fail (self != NULL);
+       _tmp0_ = self->markedNotes;
+       _tmp1_ = midi_note;
+       _tmp2_ = color;
+       _tmp2__length1 = color_length1;
+       _tmp3_ = gtk_music_piano_marked_note_style_new (_tmp2_, _tmp2__length1);
+       _tmp4_ = _tmp3_;
+       gee_abstract_map_set ((GeeAbstractMap*) _tmp0_, (gpointer) ((guintptr) _tmp1_), _tmp4_);
+       _gtk_music_piano_marked_note_style_unref0 (_tmp4_);
+       _tmp5_ = self->autoUpdate;
+       if (_tmp5_) {
+               gtk_music_piano_redraw (self);
+       }
+}
+
+
+/**
+    * Removes the mark of a position (string and fret) in the instrument
+    * @param midi_note A valid MIDI code (in range: 21 .. 108)
+    **/
+void gtk_music_piano_unmark_midi (GtkMusicPiano* self, gushort midi_note) {
+       GeeHashMap* _tmp0_;
+       gushort _tmp1_;
+       gboolean _tmp2_ = FALSE;
+       gboolean _tmp5_;
+       g_return_if_fail (self != NULL);
+       _tmp0_ = self->markedNotes;
+       _tmp1_ = midi_note;
+       _tmp2_ = gee_abstract_map_has_key ((GeeAbstractMap*) _tmp0_, (gpointer) ((guintptr) _tmp1_));
+       if (_tmp2_) {
+               GeeHashMap* _tmp3_;
+               gushort _tmp4_;
+               _tmp3_ = self->markedNotes;
+               _tmp4_ = midi_note;
+               gee_abstract_map_unset ((GeeAbstractMap*) _tmp3_, (gpointer) ((guintptr) _tmp4_), NULL);
+       }
+       _tmp5_ = self->autoUpdate;
+       if (_tmp5_) {
+               gtk_music_piano_redraw (self);
+       }
+}
+
+
+/**
+    * Highlights all positions corresponding to a note
+    * @param note A musical note in scientific notation (examples: F#4 , C)
+    **/
+void gtk_music_piano_mark_note (GtkMusicPiano* self, const gchar* note, gfloat* color, int color_length1) {
+       gboolean _tmp0_;
+       gboolean oldAutoUpdate;
+       const gchar* _tmp1_;
+       GeeHashSet* _tmp2_ = NULL;
+       GeeHashSet* positions;
+       GeeHashSet* _tmp3_;
+       gboolean _tmp15_;
+       gboolean _tmp16_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (note != NULL);
+       _tmp0_ = self->autoUpdate;
+       oldAutoUpdate = _tmp0_;
+       _tmp1_ = note;
+       _tmp2_ = gtk_music_piano_find_positions (self, _tmp1_);
+       positions = _tmp2_;
+       _tmp3_ = positions;
+       if (_tmp3_ == NULL) {
+               _g_object_unref0 (positions);
+               return;
+       }
+       {
+               GeeHashSet* _tmp4_;
+               GeeIterator* _tmp5_ = NULL;
+               GeeIterator* _u_it;
+               _tmp4_ = positions;
+               _tmp5_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) _tmp4_);
+               _u_it = _tmp5_;
+               while (TRUE) {
+                       GeeIterator* _tmp6_;
+                       gboolean _tmp7_ = FALSE;
+                       GeeIterator* _tmp8_;
+                       gpointer _tmp9_ = NULL;
+                       gushort u;
+                       GeeHashMap* _tmp10_;
+                       gushort _tmp11_;
+                       gfloat* _tmp12_;
+                       gint _tmp12__length1;
+                       GtkMusicPianoMarkedNoteStyle* _tmp13_;
+                       GtkMusicPianoMarkedNoteStyle* _tmp14_;
+                       _tmp6_ = _u_it;
+                       _tmp7_ = gee_iterator_next (_tmp6_);
+                       if (!_tmp7_) {
+                               break;
+                       }
+                       _tmp8_ = _u_it;
+                       _tmp9_ = gee_iterator_get (_tmp8_);
+                       u = (gushort) ((guintptr) _tmp9_);
+                       _tmp10_ = self->markedNotes;
+                       _tmp11_ = u;
+                       _tmp12_ = color;
+                       _tmp12__length1 = color_length1;
+                       _tmp13_ = gtk_music_piano_marked_note_style_new (_tmp12_, _tmp12__length1);
+                       _tmp14_ = _tmp13_;
+                       gee_abstract_map_set ((GeeAbstractMap*) _tmp10_, (gpointer) ((guintptr) _tmp11_), 
_tmp14_);
+                       _gtk_music_piano_marked_note_style_unref0 (_tmp14_);
+               }
+               _g_object_unref0 (_u_it);
+       }
+       _tmp15_ = oldAutoUpdate;
+       self->autoUpdate = _tmp15_;
+       _tmp16_ = self->autoUpdate;
+       if (_tmp16_) {
+               gtk_music_piano_redraw (self);
+       }
+       _g_object_unref0 (positions);
+}
+
+
+/**
+    * Removes the marks in all positions corresponding to a note
+    * @param note A musical note in scientific notation (examples: F#4 , C)
+    **/
+void gtk_music_piano_unmark_note (GtkMusicPiano* self, const gchar* note) {
+       gboolean _tmp0_;
+       gboolean oldAutoUpdate;
+       const gchar* _tmp1_;
+       GeeHashSet* _tmp2_ = NULL;
+       GeeHashSet* positions;
+       GeeHashSet* _tmp3_;
+       gboolean _tmp12_;
+       gboolean _tmp13_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (note != NULL);
+       _tmp0_ = self->autoUpdate;
+       oldAutoUpdate = _tmp0_;
+       _tmp1_ = note;
+       _tmp2_ = gtk_music_piano_find_positions (self, _tmp1_);
+       positions = _tmp2_;
+       _tmp3_ = positions;
+       if (_tmp3_ == NULL) {
+               _g_object_unref0 (positions);
+               return;
+       }
+       {
+               GeeHashSet* _tmp4_;
+               GeeIterator* _tmp5_ = NULL;
+               GeeIterator* _u_it;
+               _tmp4_ = positions;
+               _tmp5_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) _tmp4_);
+               _u_it = _tmp5_;
+               while (TRUE) {
+                       GeeIterator* _tmp6_;
+                       gboolean _tmp7_ = FALSE;
+                       GeeIterator* _tmp8_;
+                       gpointer _tmp9_ = NULL;
+                       gushort u;
+                       GeeHashMap* _tmp10_;
+                       gushort _tmp11_;
+                       _tmp6_ = _u_it;
+                       _tmp7_ = gee_iterator_next (_tmp6_);
+                       if (!_tmp7_) {
+                               break;
+                       }
+                       _tmp8_ = _u_it;
+                       _tmp9_ = gee_iterator_get (_tmp8_);
+                       u = (gushort) ((guintptr) _tmp9_);
+                       _tmp10_ = self->markedNotes;
+                       _tmp11_ = u;
+                       gee_abstract_map_unset ((GeeAbstractMap*) _tmp10_, (gpointer) ((guintptr) _tmp11_), 
NULL);
+               }
+               _g_object_unref0 (_u_it);
+       }
+       _tmp12_ = oldAutoUpdate;
+       self->autoUpdate = _tmp12_;
+       _tmp13_ = self->autoUpdate;
+       if (_tmp13_) {
+               gtk_music_piano_redraw (self);
+       }
+       _g_object_unref0 (positions);
+}
+
+
+/**
+    * Removes all marked notes in the Piano view
+    **/
+void gtk_music_piano_unmark_all (GtkMusicPiano* self) {
+       GeeHashMap* _tmp0_;
+       gboolean _tmp1_;
+       g_return_if_fail (self != NULL);
+       _tmp0_ = self->markedNotes;
+       gee_abstract_map_clear ((GeeAbstractMap*) _tmp0_);
+       _tmp1_ = self->autoUpdate;
+       if (_tmp1_) {
+               gtk_music_piano_redraw (self);
+       }
+}
+
+
+/**
+     * Gets the MIDI code corresponding to a point (x,y) in the widget
+     * @param x Valid x coordinate
+     * @param y Valid y coordinate
+     **/
+gushort gtk_music_piano_point_to_midi (GtkMusicPiano* self, gdouble x, gdouble y, GError** error) {
+       gushort result = 0U;
+       gdouble delta_x = 0.0;
+       gfloat _tmp0_;
+       gdouble _tmp1_;
+       gdouble ak_sep;
+       gfloat _tmp2_;
+       gdouble _tmp3_;
+       gdouble ak_height;
+       gushort r1_key = 0U;
+       gushort r2_key = 0U;
+       gushort r3_key = 0U;
+       gboolean curr_accident = FALSE;
+       gboolean next_accident = FALSE;
+       GError* _tmp56_;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (self != NULL, 0U);
+       _tmp0_ = self->priv->accident_key_width;
+       _tmp1_ = self->priv->key_width;
+       ak_sep = (_tmp0_ * _tmp1_) / 2;
+       _tmp2_ = self->priv->accident_key_height;
+       _tmp3_ = self->priv->piano_height;
+       ak_height = _tmp2_ * _tmp3_;
+       {
+               gushort _tmp4_;
+               gushort i;
+               _tmp4_ = self->firstNote;
+               i = _tmp4_;
+               {
+                       gboolean _tmp5_;
+                       _tmp5_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp6_;
+                               gushort _tmp8_;
+                               gushort _tmp9_;
+                               gushort _tmp10_;
+                               gdouble _tmp11_;
+                               gushort _tmp12_;
+                               gdouble _tmp13_ = 0.0;
+                               gdouble _tmp14_;
+                               gdouble _tmp15_;
+                               _tmp6_ = _tmp5_;
+                               if (!_tmp6_) {
+                                       gushort _tmp7_;
+                                       _tmp7_ = i;
+                                       i = _tmp7_ + 1;
+                               }
+                               _tmp5_ = FALSE;
+                               _tmp8_ = i;
+                               _tmp9_ = self->firstNote;
+                               _tmp10_ = self->key_count;
+                               if (!(_tmp8_ < (_tmp9_ + _tmp10_))) {
+                                       break;
+                               }
+                               _tmp11_ = x;
+                               _tmp12_ = i;
+                               _tmp13_ = gtk_music_piano_midi_to_x (self, _tmp12_);
+                               delta_x = _tmp11_ - _tmp13_;
+                               _tmp14_ = delta_x;
+                               _tmp15_ = self->priv->key_width;
+                               if (_tmp14_ < _tmp15_) {
+                                       gushort _tmp16_;
+                                       gboolean _tmp17_ = FALSE;
+                                       gboolean _tmp18_;
+                                       gushort _tmp23_;
+                                       gboolean _tmp24_;
+                                       gboolean _tmp27_ = FALSE;
+                                       gboolean _tmp28_;
+                                       gboolean _tmp30_;
+                                       gboolean _tmp43_ = FALSE;
+                                       gdouble _tmp44_;
+                                       gdouble _tmp45_;
+                                       gboolean _tmp48_;
+                                       _tmp16_ = i;
+                                       _tmp17_ = gtk_music_musical_notes_midi_is_accident (_tmp16_);
+                                       curr_accident = _tmp17_;
+                                       _tmp18_ = curr_accident;
+                                       if (_tmp18_) {
+                                               gushort _tmp19_;
+                                               gboolean _tmp20_ = FALSE;
+                                               _tmp19_ = i;
+                                               _tmp20_ = gtk_music_musical_notes_midi_is_accident ((gushort) 
(_tmp19_ + 2));
+                                               next_accident = _tmp20_;
+                                       } else {
+                                               gushort _tmp21_;
+                                               gboolean _tmp22_ = FALSE;
+                                               _tmp21_ = i;
+                                               _tmp22_ = gtk_music_musical_notes_midi_is_accident ((gushort) 
(_tmp21_ + 1));
+                                               next_accident = _tmp22_;
+                                       }
+                                       _tmp23_ = i;
+                                       r1_key = _tmp23_;
+                                       _tmp24_ = curr_accident;
+                                       if (_tmp24_) {
+                                               gushort _tmp25_;
+                                               _tmp25_ = i;
+                                               r2_key = (gushort) (_tmp25_ + 1);
+                                       } else {
+                                               gushort _tmp26_;
+                                               _tmp26_ = i;
+                                               r2_key = _tmp26_;
+                                       }
+                                       _tmp28_ = curr_accident;
+                                       if (_tmp28_) {
+                                               gboolean _tmp29_;
+                                               _tmp29_ = next_accident;
+                                               _tmp27_ = _tmp29_;
+                                       } else {
+                                               _tmp27_ = FALSE;
+                                       }
+                                       _tmp30_ = _tmp27_;
+                                       if (_tmp30_) {
+                                               gushort _tmp31_;
+                                               _tmp31_ = i;
+                                               r3_key = (gushort) (_tmp31_ + 2);
+                                       } else {
+                                               gboolean _tmp32_ = FALSE;
+                                               gboolean _tmp33_;
+                                               gboolean _tmp35_;
+                                               _tmp33_ = curr_accident;
+                                               if (_tmp33_) {
+                                                       gboolean _tmp34_;
+                                                       _tmp34_ = next_accident;
+                                                       _tmp32_ = !_tmp34_;
+                                               } else {
+                                                       _tmp32_ = FALSE;
+                                               }
+                                               _tmp35_ = _tmp32_;
+                                               if (_tmp35_) {
+                                                       gushort _tmp36_;
+                                                       _tmp36_ = i;
+                                                       r3_key = (gushort) (_tmp36_ + 1);
+                                               } else {
+                                                       gboolean _tmp37_ = FALSE;
+                                                       gboolean _tmp38_;
+                                                       gboolean _tmp40_;
+                                                       _tmp38_ = curr_accident;
+                                                       if (!_tmp38_) {
+                                                               gboolean _tmp39_;
+                                                               _tmp39_ = next_accident;
+                                                               _tmp37_ = _tmp39_;
+                                                       } else {
+                                                               _tmp37_ = FALSE;
+                                                       }
+                                                       _tmp40_ = _tmp37_;
+                                                       if (_tmp40_) {
+                                                               gushort _tmp41_;
+                                                               _tmp41_ = i;
+                                                               r3_key = (gushort) (_tmp41_ + 1);
+                                                       } else {
+                                                               gushort _tmp42_;
+                                                               _tmp42_ = i;
+                                                               r3_key = _tmp42_;
+                                                       }
+                                               }
+                                       }
+                                       _tmp44_ = delta_x;
+                                       _tmp45_ = ak_sep;
+                                       if (_tmp44_ < _tmp45_) {
+                                               gdouble _tmp46_;
+                                               gdouble _tmp47_;
+                                               _tmp46_ = y;
+                                               _tmp47_ = ak_height;
+                                               _tmp43_ = _tmp46_ < _tmp47_;
+                                       } else {
+                                               _tmp43_ = FALSE;
+                                       }
+                                       _tmp48_ = _tmp43_;
+                                       if (_tmp48_) {
+                                               result = r1_key;
+                                               return result;
+                                       } else {
+                                               gboolean _tmp49_ = FALSE;
+                                               gdouble _tmp50_;
+                                               gdouble _tmp51_;
+                                               gdouble _tmp52_;
+                                               gboolean _tmp55_;
+                                               _tmp50_ = delta_x;
+                                               _tmp51_ = self->priv->key_width;
+                                               _tmp52_ = ak_sep;
+                                               if (_tmp50_ > (_tmp51_ - _tmp52_)) {
+                                                       gdouble _tmp53_;
+                                                       gdouble _tmp54_;
+                                                       _tmp53_ = y;
+                                                       _tmp54_ = ak_height;
+                                                       _tmp49_ = _tmp53_ < _tmp54_;
+                                               } else {
+                                                       _tmp49_ = FALSE;
+                                               }
+                                               _tmp55_ = _tmp49_;
+                                               if (_tmp55_) {
+                                                       result = r3_key;
+                                                       return result;
+                                               } else {
+                                                       result = r2_key;
+                                                       return result;
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+       _tmp56_ = g_error_new_literal (GTK_MUSIC_PIANO_ERROR, GTK_MUSIC_PIANO_ERROR_INVALID_COORDINATES, 
"Invalid coordinates!");
+       _inner_error_ = _tmp56_;
+       if (_inner_error_->domain == GTK_MUSIC_PIANO_ERROR) {
+               g_propagate_error (error, _inner_error_);
+               return 0U;
+       } else {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return 0U;
+       }
+}
+
+
+/**
+     * Gets the x coordinate of the key associated to a given MIDI code
+     * @param midi_code A valid MIDI code, present in the piano range
+     **/
+gdouble gtk_music_piano_midi_to_x (GtkMusicPiano* self, gushort midi_code) {
+       gdouble result = 0.0;
+       gushort _tmp0_;
+       gushort _tmp1_;
+       gushort norm_key;
+       gboolean _tmp2_ = FALSE;
+       gushort _tmp3_;
+       gboolean _tmp7_;
+       gdouble _tmp8_;
+       gdouble x;
+       gdouble _tmp9_;
+       gushort _tmp10_;
+       gdouble _tmp11_;
+       gboolean last_was_nkey;
+       g_return_val_if_fail (self != NULL, 0.0);
+       _tmp0_ = midi_code;
+       _tmp1_ = self->firstNote;
+       norm_key = _tmp0_ - _tmp1_;
+       _tmp3_ = norm_key;
+       if (((gint) _tmp3_) < 0) {
+               _tmp2_ = TRUE;
+       } else {
+               gushort _tmp4_;
+               gushort _tmp5_;
+               gushort _tmp6_;
+               _tmp4_ = norm_key;
+               _tmp5_ = self->firstNote;
+               _tmp6_ = self->key_count;
+               _tmp2_ = _tmp4_ > (_tmp5_ + _tmp6_);
+       }
+       _tmp7_ = _tmp2_;
+       if (_tmp7_) {
+               result = (gdouble) (-1);
+               return result;
+       }
+       _tmp8_ = self->priv->piano_x;
+       x = _tmp8_;
+       _tmp9_ = x;
+       _tmp10_ = norm_key;
+       _tmp11_ = self->priv->key_width;
+       x = _tmp9_ + ((((gint) (_tmp10_ / 12)) * 7) * _tmp11_);
+       last_was_nkey = FALSE;
+       {
+               gint i;
+               i = 0;
+               {
+                       gboolean _tmp12_;
+                       _tmp12_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp13_;
+                               gint _tmp15_;
+                               gushort _tmp16_;
+                               gboolean _tmp17_;
+                               gint _tmp20_;
+                               gboolean _tmp21_ = FALSE;
+                               _tmp13_ = _tmp12_;
+                               if (!_tmp13_) {
+                                       gint _tmp14_;
+                                       _tmp14_ = i;
+                                       i = _tmp14_ + 1;
+                               }
+                               _tmp12_ = FALSE;
+                               _tmp15_ = i;
+                               _tmp16_ = norm_key;
+                               if (!(_tmp15_ < ((_tmp16_ % 12) + 1))) {
+                                       break;
+                               }
+                               _tmp17_ = last_was_nkey;
+                               if (_tmp17_) {
+                                       gdouble _tmp18_;
+                                       gdouble _tmp19_;
+                                       _tmp18_ = x;
+                                       _tmp19_ = self->priv->key_width;
+                                       x = _tmp18_ + _tmp19_;
+                               }
+                               _tmp20_ = i;
+                               _tmp21_ = gtk_music_musical_notes_midi_is_accident ((gushort) _tmp20_);
+                               last_was_nkey = !_tmp21_;
+                       }
+               }
+       }
+       result = x;
+       return result;
+}
+
+
+/**
+    * Finds all MIDI codes for a given note
+    * @param note The note with or without the octave component (e.g: A#, D4)
+    **/
+GeeHashSet* gtk_music_piano_find_positions (GtkMusicPiano* self, const gchar* note) {
+       GeeHashSet* result = NULL;
+       gboolean _tmp0_ = FALSE;
+       const gchar* _tmp1_;
+       gboolean _tmp2_ = FALSE;
+       gboolean _tmp5_;
+       GeeHashSet* _tmp6_;
+       GeeHashSet* midi_codes;
+       const gchar* _tmp7_;
+       gboolean _tmp8_ = FALSE;
+       GError * _inner_error_ = NULL;
+       g_return_val_if_fail (self != NULL, NULL);
+       g_return_val_if_fail (note != NULL, NULL);
+       _tmp1_ = note;
+       _tmp2_ = gtk_music_musical_notes_validate (_tmp1_);
+       if (!_tmp2_) {
+               const gchar* _tmp3_;
+               gboolean _tmp4_ = FALSE;
+               _tmp3_ = note;
+               _tmp4_ = gtk_music_musical_notes_is_incomplete (_tmp3_);
+               _tmp0_ = !_tmp4_;
+       } else {
+               _tmp0_ = FALSE;
+       }
+       _tmp5_ = _tmp0_;
+       if (_tmp5_) {
+               result = NULL;
+               return result;
+       }
+       _tmp6_ = gee_hash_set_new (G_TYPE_INVALID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+       midi_codes = _tmp6_;
+       _tmp7_ = note;
+       _tmp8_ = gtk_music_musical_notes_is_incomplete (_tmp7_);
+       if (_tmp8_) {
+               const gchar* _tmp9_;
+               GeeHashSet* _tmp10_ = NULL;
+               GeeHashSet* _tmp11_;
+               _tmp9_ = note;
+               _tmp10_ = gtk_music_musical_notes_make (_tmp9_, &_inner_error_);
+               _tmp11_ = _tmp10_;
+               if (_inner_error_ != NULL) {
+                       _g_object_unref0 (midi_codes);
+                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return NULL;
+               }
+               {
+                       GeeHashSet* _tmp12_;
+                       GeeIterator* _tmp13_ = NULL;
+                       GeeIterator* _tmp14_;
+                       GeeIterator* _s_it;
+                       _tmp12_ = _tmp11_;
+                       _tmp13_ = gee_abstract_collection_iterator ((GeeAbstractCollection*) _tmp12_);
+                       _tmp14_ = _tmp13_;
+                       _g_object_unref0 (_tmp12_);
+                       _s_it = _tmp14_;
+                       while (TRUE) {
+                               GeeIterator* _tmp15_;
+                               gboolean _tmp16_ = FALSE;
+                               GeeIterator* _tmp17_;
+                               gpointer _tmp18_ = NULL;
+                               gchar* s;
+                               const gchar* _tmp19_;
+                               gushort _tmp20_ = 0U;
+                               gushort _tmp21_;
+                               GeeHashSet* _tmp22_;
+                               _tmp15_ = _s_it;
+                               _tmp16_ = gee_iterator_next (_tmp15_);
+                               if (!_tmp16_) {
+                                       break;
+                               }
+                               _tmp17_ = _s_it;
+                               _tmp18_ = gee_iterator_get (_tmp17_);
+                               s = (gchar*) _tmp18_;
+                               _tmp19_ = s;
+                               _tmp20_ = gtk_music_musical_notes_get_note_as_midi_code (_tmp19_, 
&_inner_error_);
+                               _tmp21_ = _tmp20_;
+                               if (_inner_error_ != NULL) {
+                                       _g_free0 (s);
+                                       _g_object_unref0 (_s_it);
+                                       _g_object_unref0 (midi_codes);
+                                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", 
__FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                                       g_clear_error (&_inner_error_);
+                                       return NULL;
+                               }
+                               _tmp22_ = midi_codes;
+                               gee_abstract_collection_add ((GeeAbstractCollection*) _tmp22_, (gpointer) 
((guintptr) ((gushort) _tmp21_)));
+                               _g_free0 (s);
+                       }
+                       _g_object_unref0 (_s_it);
+               }
+       } else {
+               const gchar* _tmp23_;
+               gushort _tmp24_ = 0U;
+               gushort _tmp25_;
+               GeeHashSet* _tmp26_;
+               _tmp23_ = note;
+               _tmp24_ = gtk_music_musical_notes_get_note_as_midi_code (_tmp23_, &_inner_error_);
+               _tmp25_ = _tmp24_;
+               if (_inner_error_ != NULL) {
+                       _g_object_unref0 (midi_codes);
+                       g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+                       g_clear_error (&_inner_error_);
+                       return NULL;
+               }
+               _tmp26_ = midi_codes;
+               gee_abstract_collection_add ((GeeAbstractCollection*) _tmp26_, (gpointer) ((guintptr) 
((gushort) _tmp25_)));
+       }
+       result = midi_codes;
+       return result;
+}
+
+
+/**
+     * Returns the number of natural keys for the current instance parameters
+     * @return The number of natural keys
+     **/
+static gushort gtk_music_piano_get_natural_keys_count (GtkMusicPiano* self) {
+       gushort result = 0U;
+       gushort _tmp0_;
+       gushort complete_octaves;
+       gushort _tmp1_;
+       gushort incomplete_octave;
+       gushort _tmp2_;
+       gushort nat_keys;
+       gushort tmp_note = 0U;
+       g_return_val_if_fail (self != NULL, 0U);
+       _tmp0_ = self->key_count;
+       complete_octaves = (gushort) (_tmp0_ / 12);
+       _tmp1_ = self->key_count;
+       incomplete_octave = (gushort) (_tmp1_ % 12);
+       _tmp2_ = complete_octaves;
+       nat_keys = (gushort) (_tmp2_ * 7);
+       {
+               gint i;
+               i = 0;
+               {
+                       gboolean _tmp3_;
+                       _tmp3_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp4_;
+                               gint _tmp6_;
+                               gushort _tmp7_;
+                               gushort _tmp8_;
+                               gint _tmp9_;
+                               gushort _tmp10_;
+                               gboolean _tmp11_ = FALSE;
+                               _tmp4_ = _tmp3_;
+                               if (!_tmp4_) {
+                                       gint _tmp5_;
+                                       _tmp5_ = i;
+                                       i = _tmp5_ + 1;
+                               }
+                               _tmp3_ = FALSE;
+                               _tmp6_ = i;
+                               _tmp7_ = incomplete_octave;
+                               if (!(_tmp6_ < ((gint) _tmp7_))) {
+                                       break;
+                               }
+                               _tmp8_ = self->firstNote;
+                               _tmp9_ = i;
+                               tmp_note = (gushort) ((_tmp8_ + _tmp9_) % 12);
+                               _tmp10_ = tmp_note;
+                               _tmp11_ = gtk_music_musical_notes_midi_is_accident (_tmp10_);
+                               if (!_tmp11_) {
+                                       gushort _tmp12_;
+                                       _tmp12_ = nat_keys;
+                                       nat_keys = (gushort) (_tmp12_ + 1);
+                               }
+                       }
+               }
+       }
+       result = nat_keys;
+       return result;
+}
+
+
+static gboolean gtk_music_piano_real_button_press_event (GtkWidget* base, GdkEventButton* event) {
+       GtkMusicPiano * self;
+       gboolean result = FALSE;
+       GdkEventButton _tmp0_;
+       gdouble _tmp1_;
+       GdkEventButton _tmp2_;
+       gdouble _tmp3_;
+       gushort _tmp4_ = 0U;
+       gushort _tmp5_;
+       GdkEventButton _tmp6_;
+       GError * _inner_error_ = NULL;
+       self = (GtkMusicPiano*) base;
+       g_return_val_if_fail (event != NULL, FALSE);
+       _tmp0_ = *event;
+       _tmp1_ = _tmp0_.x;
+       _tmp2_ = *event;
+       _tmp3_ = _tmp2_.y;
+       _tmp4_ = gtk_music_piano_point_to_midi (self, _tmp1_, _tmp3_, &_inner_error_);
+       _tmp5_ = _tmp4_;
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return FALSE;
+       }
+       _tmp6_ = *event;
+       g_signal_emit_by_name (self, "note-pressed", (GtkWidget*) self, &_tmp6_, (gint) _tmp5_);
+       result = TRUE;
+       return result;
+}
+
+
+static gboolean gtk_music_piano_real_button_release_event (GtkWidget* base, GdkEventButton* event) {
+       GtkMusicPiano * self;
+       gboolean result = FALSE;
+       GdkEventButton _tmp0_;
+       gdouble _tmp1_;
+       GdkEventButton _tmp2_;
+       gdouble _tmp3_;
+       gushort _tmp4_ = 0U;
+       gushort _tmp5_;
+       GdkEventButton _tmp6_;
+       GError * _inner_error_ = NULL;
+       self = (GtkMusicPiano*) base;
+       g_return_val_if_fail (event != NULL, FALSE);
+       _tmp0_ = *event;
+       _tmp1_ = _tmp0_.x;
+       _tmp2_ = *event;
+       _tmp3_ = _tmp2_.y;
+       _tmp4_ = gtk_music_piano_point_to_midi (self, _tmp1_, _tmp3_, &_inner_error_);
+       _tmp5_ = _tmp4_;
+       if (_inner_error_ != NULL) {
+               g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, 
_inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+               g_clear_error (&_inner_error_);
+               return FALSE;
+       }
+       _tmp6_ = *event;
+       g_signal_emit_by_name (self, "note-released", (GtkWidget*) self, &_tmp6_, (gint) _tmp5_);
+       result = TRUE;
+       return result;
+}
+
+
+/**
+    * Draws a guitar widget
+    *
+    * @param cr The drawing context for the widget
+    * @return Whether the event should be propagated (TODO Confirm this theory)
+    **/
+static gboolean gtk_music_piano_real_draw (GtkWidget* base, cairo_t* cr) {
+       GtkMusicPiano * self;
+       gboolean result = FALSE;
+       cairo_t* _tmp0_;
+       cairo_t* _tmp1_;
+       cairo_t* _tmp2_;
+       self = (GtkMusicPiano*) base;
+       g_return_val_if_fail (cr != NULL, FALSE);
+       _tmp0_ = cr;
+       gtk_music_piano_calculate_dimensions (self, _tmp0_);
+       _tmp1_ = cr;
+       gtk_music_piano_draw_natural_keys (self, _tmp1_);
+       _tmp2_ = cr;
+       gtk_music_piano_draw_accident_keys (self, _tmp2_);
+       result = FALSE;
+       return result;
+}
+
+
+/**
+    * Forces a complete redraw of the widget
+    *
+    * This function will invalidate all the region corresponding to the
+    * widget's GDK window and ask for updates, forcing a complete redraw.
+    *
+    **/
+static gpointer _g_object_ref0 (gpointer self) {
+       return self ? g_object_ref (self) : NULL;
+}
+
+
+void gtk_music_piano_redraw (GtkMusicPiano* self) {
+       GdkWindow* _tmp0_ = NULL;
+       GdkWindow* _tmp1_;
+       GdkWindow* window;
+       GdkWindow* _tmp2_;
+       GdkWindow* _tmp3_;
+       cairo_region_t* _tmp4_ = NULL;
+       cairo_region_t* region;
+       GdkWindow* _tmp5_;
+       cairo_region_t* _tmp6_;
+       GdkWindow* _tmp7_;
+       g_return_if_fail (self != NULL);
+       _tmp0_ = gtk_widget_get_window ((GtkWidget*) self);
+       _tmp1_ = _g_object_ref0 (_tmp0_);
+       window = _tmp1_;
+       _tmp2_ = window;
+       if (NULL == _tmp2_) {
+               _g_object_unref0 (window);
+               return;
+       }
+       _tmp3_ = window;
+       _tmp4_ = gdk_window_get_clip_region (_tmp3_);
+       region = _tmp4_;
+       _tmp5_ = window;
+       _tmp6_ = region;
+       gdk_window_invalidate_region (_tmp5_, _tmp6_, TRUE);
+       _tmp7_ = window;
+       gdk_window_process_updates (_tmp7_, TRUE);
+       _cairo_region_destroy0 (region);
+       _g_object_unref0 (window);
+}
+
+
+/**
+    * Calculate some drawing dimensions
+    * @param cr The drawing context for the widget
+    **/
+static void gtk_music_piano_calculate_dimensions (GtkMusicPiano* self, cairo_t* cr) {
+       gint _tmp0_ = 0;
+       gint _tmp1_ = 0;
+       gboolean _tmp2_;
+       gdouble _tmp10_;
+       gushort _tmp11_;
+       gushort _tmp12_;
+       gdouble _tmp13_;
+       gdouble _tmp14_;
+       gushort _tmp15_;
+       gushort _tmp16_ = 0U;
+       gdouble _tmp17_;
+       gushort _tmp18_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (cr != NULL);
+       _tmp0_ = gtk_widget_get_allocated_width ((GtkWidget*) self);
+       self->priv->width = (gdouble) _tmp0_;
+       _tmp1_ = gtk_widget_get_allocated_height ((GtkWidget*) self);
+       self->priv->height = (gdouble) _tmp1_;
+       _tmp2_ = self->showLabels;
+       if (_tmp2_) {
+               gdouble _tmp3_;
+               gushort _tmp4_;
+               cairo_t* _tmp5_;
+               cairo_t* _tmp6_;
+               gdouble _tmp7_;
+               _tmp3_ = self->priv->height;
+               _tmp4_ = self->priv->v_padding;
+               self->priv->piano_height = (0.8 * _tmp3_) - (2 * _tmp4_);
+               _tmp5_ = cr;
+               cairo_select_font_face (_tmp5_, "monospace", CAIRO_FONT_SLANT_NORMAL, 
CAIRO_FONT_WEIGHT_NORMAL);
+               _tmp6_ = cr;
+               _tmp7_ = self->priv->width;
+               cairo_set_font_size (_tmp6_, 0.05 * _tmp7_);
+       } else {
+               gdouble _tmp8_;
+               gushort _tmp9_;
+               _tmp8_ = self->priv->height;
+               _tmp9_ = self->priv->v_padding;
+               self->priv->piano_height = _tmp8_ - (2 * _tmp9_);
+       }
+       _tmp10_ = self->priv->width;
+       _tmp11_ = self->priv->h_padding;
+       self->priv->piano_width = _tmp10_ - (2 * _tmp11_);
+       _tmp12_ = self->priv->h_padding;
+       self->priv->piano_x = (gdouble) _tmp12_;
+       _tmp13_ = self->priv->height;
+       _tmp14_ = self->priv->piano_height;
+       _tmp15_ = self->priv->v_padding;
+       self->priv->piano_y = (_tmp13_ - _tmp14_) - _tmp15_;
+       _tmp16_ = gtk_music_piano_get_natural_keys_count (self);
+       self->priv->nat_keys = _tmp16_;
+       _tmp17_ = self->priv->piano_width;
+       _tmp18_ = self->priv->nat_keys;
+       self->priv->key_width = _tmp17_ / _tmp18_;
+}
+
+
+/**
+    * Draw natural notes (C, D, E, F, G, A, B)
+    * @param cr The drawing context for the widget
+    **/
+static void gtk_music_piano_draw_natural_keys (GtkMusicPiano* self, cairo_t* cr) {
+       gdouble _tmp0_;
+       gdouble x;
+       gdouble _tmp1_;
+       gdouble y;
+       cairo_t* _tmp2_;
+       cairo_t* _tmp15_;
+       cairo_t* _tmp16_;
+       gfloat* _tmp17_;
+       gint _tmp17__length1;
+       gfloat _tmp18_;
+       gfloat* _tmp19_;
+       gint _tmp19__length1;
+       gfloat _tmp20_;
+       gfloat* _tmp21_;
+       gint _tmp21__length1;
+       gfloat _tmp22_;
+       gfloat* _tmp23_;
+       gint _tmp23__length1;
+       gfloat _tmp24_;
+       cairo_t* _tmp25_;
+       cairo_t* _tmp26_;
+       cairo_t* _tmp27_;
+       cairo_t* _tmp75_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (cr != NULL);
+       _tmp0_ = self->priv->piano_x;
+       x = _tmp0_;
+       _tmp1_ = self->priv->piano_y;
+       y = _tmp1_;
+       _tmp2_ = cr;
+       cairo_save (_tmp2_);
+       {
+               gint i;
+               i = 0;
+               {
+                       gboolean _tmp3_;
+                       _tmp3_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp4_;
+                               gint _tmp6_;
+                               gushort _tmp7_;
+                               cairo_t* _tmp8_;
+                               gdouble _tmp9_;
+                               gint _tmp10_;
+                               gdouble _tmp11_;
+                               gdouble _tmp12_;
+                               gdouble _tmp13_;
+                               gdouble _tmp14_;
+                               _tmp4_ = _tmp3_;
+                               if (!_tmp4_) {
+                                       gint _tmp5_;
+                                       _tmp5_ = i;
+                                       i = _tmp5_ + 1;
+                               }
+                               _tmp3_ = FALSE;
+                               _tmp6_ = i;
+                               _tmp7_ = self->priv->nat_keys;
+                               if (!(_tmp6_ < ((gint) _tmp7_))) {
+                                       break;
+                               }
+                               _tmp8_ = cr;
+                               _tmp9_ = x;
+                               _tmp10_ = i;
+                               _tmp11_ = self->priv->key_width;
+                               _tmp12_ = self->priv->piano_y;
+                               _tmp13_ = self->priv->key_width;
+                               _tmp14_ = self->priv->piano_height;
+                               cairo_rectangle (_tmp8_, _tmp9_ + (_tmp10_ * _tmp11_), _tmp12_, _tmp13_, 
_tmp14_);
+                       }
+               }
+       }
+       _tmp15_ = cr;
+       cairo_stroke_preserve (_tmp15_);
+       _tmp16_ = cr;
+       _tmp17_ = self->nat_key_color;
+       _tmp17__length1 = self->nat_key_color_length1;
+       _tmp18_ = _tmp17_[0];
+       _tmp19_ = self->nat_key_color;
+       _tmp19__length1 = self->nat_key_color_length1;
+       _tmp20_ = _tmp19_[1];
+       _tmp21_ = self->nat_key_color;
+       _tmp21__length1 = self->nat_key_color_length1;
+       _tmp22_ = _tmp21_[2];
+       _tmp23_ = self->nat_key_color;
+       _tmp23__length1 = self->nat_key_color_length1;
+       _tmp24_ = _tmp23_[3];
+       cairo_set_source_rgba (_tmp16_, (gdouble) _tmp18_, (gdouble) _tmp20_, (gdouble) _tmp22_, (gdouble) 
_tmp24_);
+       _tmp25_ = cr;
+       cairo_fill_preserve (_tmp25_);
+       _tmp26_ = cr;
+       cairo_set_source_rgba (_tmp26_, (gdouble) 0.0f, (gdouble) 0.0f, (gdouble) 0.0f, (gdouble) 1.0f);
+       _tmp27_ = cr;
+       cairo_stroke (_tmp27_);
+       {
+               GeeHashMap* _tmp28_;
+               GeeSet* _tmp29_;
+               GeeSet* _tmp30_;
+               GeeSet* _tmp31_;
+               GeeIterator* _tmp32_ = NULL;
+               GeeIterator* _tmp33_;
+               GeeIterator* _entry_it;
+               _tmp28_ = self->markedNotes;
+               _tmp29_ = gee_abstract_map_get_entries ((GeeMap*) _tmp28_);
+               _tmp30_ = _tmp29_;
+               _tmp31_ = _tmp30_;
+               _tmp32_ = gee_iterable_iterator ((GeeIterable*) _tmp31_);
+               _tmp33_ = _tmp32_;
+               _g_object_unref0 (_tmp31_);
+               _entry_it = _tmp33_;
+               while (TRUE) {
+                       GeeIterator* _tmp34_;
+                       gboolean _tmp35_ = FALSE;
+                       GeeIterator* _tmp36_;
+                       gpointer _tmp37_ = NULL;
+                       GeeMapEntry* entry;
+                       GeeMapEntry* _tmp38_;
+                       gconstpointer _tmp39_;
+                       gushort _tmp40_;
+                       gboolean _tmp41_ = FALSE;
+                       _tmp34_ = _entry_it;
+                       _tmp35_ = gee_iterator_next (_tmp34_);
+                       if (!_tmp35_) {
+                               break;
+                       }
+                       _tmp36_ = _entry_it;
+                       _tmp37_ = gee_iterator_get (_tmp36_);
+                       entry = (GeeMapEntry*) _tmp37_;
+                       _tmp38_ = entry;
+                       _tmp39_ = gee_map_entry_get_key (_tmp38_);
+                       _tmp40_ = _tmp39_;
+                       _tmp41_ = gtk_music_musical_notes_midi_is_accident ((gushort) ((guintptr) _tmp40_));
+                       if (!_tmp41_) {
+                               GeeMapEntry* _tmp42_;
+                               gconstpointer _tmp43_;
+                               gushort _tmp44_;
+                               gdouble _tmp45_ = 0.0;
+                               cairo_t* _tmp46_;
+                               gdouble _tmp47_;
+                               gdouble _tmp48_;
+                               gdouble _tmp49_;
+                               gdouble _tmp50_;
+                               cairo_t* _tmp51_;
+                               GeeMapEntry* _tmp52_;
+                               gconstpointer _tmp53_;
+                               GtkMusicPianoMarkedNoteStyle* _tmp54_;
+                               gfloat* _tmp55_;
+                               gint _tmp55__length1;
+                               gfloat _tmp56_;
+                               GeeMapEntry* _tmp57_;
+                               gconstpointer _tmp58_;
+                               GtkMusicPianoMarkedNoteStyle* _tmp59_;
+                               gfloat* _tmp60_;
+                               gint _tmp60__length1;
+                               gfloat _tmp61_;
+                               GeeMapEntry* _tmp62_;
+                               gconstpointer _tmp63_;
+                               GtkMusicPianoMarkedNoteStyle* _tmp64_;
+                               gfloat* _tmp65_;
+                               gint _tmp65__length1;
+                               gfloat _tmp66_;
+                               GeeMapEntry* _tmp67_;
+                               gconstpointer _tmp68_;
+                               GtkMusicPianoMarkedNoteStyle* _tmp69_;
+                               gfloat* _tmp70_;
+                               gint _tmp70__length1;
+                               gfloat _tmp71_;
+                               cairo_t* _tmp72_;
+                               cairo_t* _tmp73_;
+                               cairo_t* _tmp74_;
+                               _tmp42_ = entry;
+                               _tmp43_ = gee_map_entry_get_key (_tmp42_);
+                               _tmp44_ = _tmp43_;
+                               _tmp45_ = gtk_music_piano_midi_to_x (self, (gushort) ((guintptr) _tmp44_));
+                               x = _tmp45_;
+                               _tmp46_ = cr;
+                               _tmp47_ = x;
+                               _tmp48_ = y;
+                               _tmp49_ = self->priv->key_width;
+                               _tmp50_ = self->priv->piano_height;
+                               cairo_rectangle (_tmp46_, _tmp47_, _tmp48_, _tmp49_, _tmp50_);
+                               _tmp51_ = cr;
+                               _tmp52_ = entry;
+                               _tmp53_ = gee_map_entry_get_value (_tmp52_);
+                               _tmp54_ = _tmp53_;
+                               _tmp55_ = ((GtkMusicPianoMarkedNoteStyle*) _tmp54_)->color;
+                               _tmp55__length1 = ((GtkMusicPianoMarkedNoteStyle*) _tmp54_)->color_length1;
+                               _tmp56_ = _tmp55_[0];
+                               _tmp57_ = entry;
+                               _tmp58_ = gee_map_entry_get_value (_tmp57_);
+                               _tmp59_ = _tmp58_;
+                               _tmp60_ = ((GtkMusicPianoMarkedNoteStyle*) _tmp59_)->color;
+                               _tmp60__length1 = ((GtkMusicPianoMarkedNoteStyle*) _tmp59_)->color_length1;
+                               _tmp61_ = _tmp60_[1];
+                               _tmp62_ = entry;
+                               _tmp63_ = gee_map_entry_get_value (_tmp62_);
+                               _tmp64_ = _tmp63_;
+                               _tmp65_ = ((GtkMusicPianoMarkedNoteStyle*) _tmp64_)->color;
+                               _tmp65__length1 = ((GtkMusicPianoMarkedNoteStyle*) _tmp64_)->color_length1;
+                               _tmp66_ = _tmp65_[2];
+                               _tmp67_ = entry;
+                               _tmp68_ = gee_map_entry_get_value (_tmp67_);
+                               _tmp69_ = _tmp68_;
+                               _tmp70_ = ((GtkMusicPianoMarkedNoteStyle*) _tmp69_)->color;
+                               _tmp70__length1 = ((GtkMusicPianoMarkedNoteStyle*) _tmp69_)->color_length1;
+                               _tmp71_ = _tmp70_[3];
+                               cairo_set_source_rgba (_tmp51_, (gdouble) _tmp56_, (gdouble) _tmp61_, 
(gdouble) _tmp66_, (gdouble) _tmp71_);
+                               _tmp72_ = cr;
+                               cairo_fill_preserve (_tmp72_);
+                               _tmp73_ = cr;
+                               cairo_set_source_rgba (_tmp73_, (gdouble) 0.0f, (gdouble) 0.0f, (gdouble) 
0.0f, (gdouble) 1.0f);
+                               _tmp74_ = cr;
+                               cairo_stroke (_tmp74_);
+                       }
+                       _g_object_unref0 (entry);
+               }
+               _g_object_unref0 (_entry_it);
+       }
+       _tmp75_ = cr;
+       cairo_restore (_tmp75_);
+}
+
+
+/**
+    * Draw natural notes (C#, D#, F#, G#, A#)
+    * @param cr The drawing context for the widget
+    **/
+static void gtk_music_piano_draw_accident_keys (GtkMusicPiano* self, cairo_t* cr) {
+       gdouble _tmp0_;
+       gdouble x;
+       gdouble _tmp1_;
+       gdouble y;
+       gfloat _tmp2_;
+       gdouble _tmp3_;
+       gdouble w;
+       gfloat _tmp4_;
+       gdouble _tmp5_;
+       gdouble h;
+       cairo_t* _tmp6_;
+       cairo_t* _tmp7_;
+       gfloat* _tmp8_;
+       gint _tmp8__length1;
+       gfloat _tmp9_;
+       gfloat* _tmp10_;
+       gint _tmp10__length1;
+       gfloat _tmp11_;
+       gfloat* _tmp12_;
+       gint _tmp12__length1;
+       gfloat _tmp13_;
+       gfloat* _tmp14_;
+       gint _tmp14__length1;
+       gfloat _tmp15_;
+       cairo_t* _tmp33_;
+       cairo_t* _tmp34_;
+       cairo_t* _tmp35_;
+       cairo_t* _tmp84_;
+       g_return_if_fail (self != NULL);
+       g_return_if_fail (cr != NULL);
+       _tmp0_ = self->priv->piano_x;
+       x = _tmp0_;
+       _tmp1_ = self->priv->piano_y;
+       y = _tmp1_;
+       _tmp2_ = self->priv->accident_key_width;
+       _tmp3_ = self->priv->key_width;
+       w = _tmp2_ * _tmp3_;
+       _tmp4_ = self->priv->accident_key_height;
+       _tmp5_ = self->priv->piano_height;
+       h = _tmp4_ * _tmp5_;
+       _tmp6_ = cr;
+       cairo_save (_tmp6_);
+       _tmp7_ = cr;
+       _tmp8_ = self->accident_key_color;
+       _tmp8__length1 = self->accident_key_color_length1;
+       _tmp9_ = _tmp8_[0];
+       _tmp10_ = self->accident_key_color;
+       _tmp10__length1 = self->accident_key_color_length1;
+       _tmp11_ = _tmp10_[1];
+       _tmp12_ = self->accident_key_color;
+       _tmp12__length1 = self->accident_key_color_length1;
+       _tmp13_ = _tmp12_[2];
+       _tmp14_ = self->accident_key_color;
+       _tmp14__length1 = self->accident_key_color_length1;
+       _tmp15_ = _tmp14_[3];
+       cairo_set_source_rgba (_tmp7_, (gdouble) _tmp9_, (gdouble) _tmp11_, (gdouble) _tmp13_, (gdouble) 
_tmp15_);
+       {
+               gushort _tmp16_;
+               gushort i;
+               _tmp16_ = self->firstNote;
+               i = _tmp16_;
+               {
+                       gboolean _tmp17_;
+                       _tmp17_ = TRUE;
+                       while (TRUE) {
+                               gboolean _tmp18_;
+                               gushort _tmp20_;
+                               gushort _tmp21_;
+                               gushort _tmp22_;
+                               gushort _tmp23_;
+                               gboolean _tmp24_ = FALSE;
+                               _tmp18_ = _tmp17_;
+                               if (!_tmp18_) {
+                                       gushort _tmp19_;
+                                       _tmp19_ = i;
+                                       i = _tmp19_ + 1;
+                               }
+                               _tmp17_ = FALSE;
+                               _tmp20_ = i;
+                               _tmp21_ = self->firstNote;
+                               _tmp22_ = self->key_count;
+                               if (!(_tmp20_ < (_tmp21_ + _tmp22_))) {
+                                       break;
+                               }
+                               _tmp23_ = i;
+                               _tmp24_ = gtk_music_musical_notes_midi_is_accident (_tmp23_);
+                               if (_tmp24_) {
+                                       cairo_t* _tmp25_;
+                                       gdouble _tmp26_;
+                                       gdouble _tmp27_;
+                                       gdouble _tmp28_;
+                                       gdouble _tmp29_;
+                                       gdouble _tmp30_;
+                                       _tmp25_ = cr;
+                                       _tmp26_ = x;
+                                       _tmp27_ = w;
+                                       _tmp28_ = y;
+                                       _tmp29_ = w;
+                                       _tmp30_ = h;
+                                       cairo_rectangle (_tmp25_, _tmp26_ - (_tmp27_ / 2), _tmp28_, _tmp29_, 
_tmp30_);
+                               } else {
+                                       gdouble _tmp31_;
+                                       gdouble _tmp32_;
+                                       _tmp31_ = x;
+                                       _tmp32_ = self->priv->key_width;
+                                       x = _tmp31_ + _tmp32_;
+                               }
+                       }
+               }
+       }
+       _tmp33_ = cr;
+       cairo_fill_preserve (_tmp33_);
+       _tmp34_ = cr;
+       cairo_set_source_rgba (_tmp34_, (gdouble) 0.0f, (gdouble) 0.0f, (gdouble) 0.0f, (gdouble) 1.0f);
+       _tmp35_ = cr;
+       cairo_stroke (_tmp35_);
+       {
+               GeeHashMap* _tmp36_;
+               GeeSet* _tmp37_;
+               GeeSet* _tmp38_;
+               GeeSet* _tmp39_;
+               GeeIterator* _tmp40_ = NULL;
+               GeeIterator* _tmp41_;
+               GeeIterator* _entry_it;
+               _tmp36_ = self->markedNotes;
+               _tmp37_ = gee_abstract_map_get_entries ((GeeMap*) _tmp36_);
+               _tmp38_ = _tmp37_;
+               _tmp39_ = _tmp38_;
+               _tmp40_ = gee_iterable_iterator ((GeeIterable*) _tmp39_);
+               _tmp41_ = _tmp40_;
+               _g_object_unref0 (_tmp39_);
+               _entry_it = _tmp41_;
+               while (TRUE) {
+                       GeeIterator* _tmp42_;
+                       gboolean _tmp43_ = FALSE;
+                       GeeIterator* _tmp44_;
+                       gpointer _tmp45_ = NULL;
+                       GeeMapEntry* entry;
+                       GeeMapEntry* _tmp46_;
+                       gconstpointer _tmp47_;
+                       gushort _tmp48_;
+                       gboolean _tmp49_ = FALSE;
+                       _tmp42_ = _entry_it;
+                       _tmp43_ = gee_iterator_next (_tmp42_);
+                       if (!_tmp43_) {
+                               break;
+                       }
+                       _tmp44_ = _entry_it;
+                       _tmp45_ = gee_iterator_get (_tmp44_);
+                       entry = (GeeMapEntry*) _tmp45_;
+                       _tmp46_ = entry;
+                       _tmp47_ = gee_map_entry_get_key (_tmp46_);
+                       _tmp48_ = _tmp47_;
+                       _tmp49_ = gtk_music_musical_notes_midi_is_accident ((gushort) ((guintptr) _tmp48_));
+                       if (_tmp49_) {
+                               GeeMapEntry* _tmp50_;
+                               gconstpointer _tmp51_;
+                               gushort _tmp52_;
+                               gdouble _tmp53_ = 0.0;
+                               cairo_t* _tmp54_;
+                               gdouble _tmp55_;
+                               gdouble _tmp56_;
+                               gdouble _tmp57_;
+                               gdouble _tmp58_;
+                               gdouble _tmp59_;
+                               cairo_t* _tmp60_;
+                               GeeMapEntry* _tmp61_;
+                               gconstpointer _tmp62_;
+                               GtkMusicPianoMarkedNoteStyle* _tmp63_;
+                               gfloat* _tmp64_;
+                               gint _tmp64__length1;
+                               gfloat _tmp65_;
+                               GeeMapEntry* _tmp66_;
+                               gconstpointer _tmp67_;
+                               GtkMusicPianoMarkedNoteStyle* _tmp68_;
+                               gfloat* _tmp69_;
+                               gint _tmp69__length1;
+                               gfloat _tmp70_;
+                               GeeMapEntry* _tmp71_;
+                               gconstpointer _tmp72_;
+                               GtkMusicPianoMarkedNoteStyle* _tmp73_;
+                               gfloat* _tmp74_;
+                               gint _tmp74__length1;
+                               gfloat _tmp75_;
+                               GeeMapEntry* _tmp76_;
+                               gconstpointer _tmp77_;
+                               GtkMusicPianoMarkedNoteStyle* _tmp78_;
+                               gfloat* _tmp79_;
+                               gint _tmp79__length1;
+                               gfloat _tmp80_;
+                               cairo_t* _tmp81_;
+                               cairo_t* _tmp82_;
+                               cairo_t* _tmp83_;
+                               _tmp50_ = entry;
+                               _tmp51_ = gee_map_entry_get_key (_tmp50_);
+                               _tmp52_ = _tmp51_;
+                               _tmp53_ = gtk_music_piano_midi_to_x (self, (gushort) ((guintptr) _tmp52_));
+                               x = _tmp53_;
+                               _tmp54_ = cr;
+                               _tmp55_ = x;
+                               _tmp56_ = w;
+                               _tmp57_ = y;
+                               _tmp58_ = w;
+                               _tmp59_ = h;
+                               cairo_rectangle (_tmp54_, _tmp55_ - (_tmp56_ / 2), _tmp57_, _tmp58_, _tmp59_);
+                               _tmp60_ = cr;
+                               _tmp61_ = entry;
+                               _tmp62_ = gee_map_entry_get_value (_tmp61_);
+                               _tmp63_ = _tmp62_;
+                               _tmp64_ = ((GtkMusicPianoMarkedNoteStyle*) _tmp63_)->color;
+                               _tmp64__length1 = ((GtkMusicPianoMarkedNoteStyle*) _tmp63_)->color_length1;
+                               _tmp65_ = _tmp64_[0];
+                               _tmp66_ = entry;
+                               _tmp67_ = gee_map_entry_get_value (_tmp66_);
+                               _tmp68_ = _tmp67_;
+                               _tmp69_ = ((GtkMusicPianoMarkedNoteStyle*) _tmp68_)->color;
+                               _tmp69__length1 = ((GtkMusicPianoMarkedNoteStyle*) _tmp68_)->color_length1;
+                               _tmp70_ = _tmp69_[1];
+                               _tmp71_ = entry;
+                               _tmp72_ = gee_map_entry_get_value (_tmp71_);
+                               _tmp73_ = _tmp72_;
+                               _tmp74_ = ((GtkMusicPianoMarkedNoteStyle*) _tmp73_)->color;
+                               _tmp74__length1 = ((GtkMusicPianoMarkedNoteStyle*) _tmp73_)->color_length1;
+                               _tmp75_ = _tmp74_[2];
+                               _tmp76_ = entry;
+                               _tmp77_ = gee_map_entry_get_value (_tmp76_);
+                               _tmp78_ = _tmp77_;
+                               _tmp79_ = ((GtkMusicPianoMarkedNoteStyle*) _tmp78_)->color;
+                               _tmp79__length1 = ((GtkMusicPianoMarkedNoteStyle*) _tmp78_)->color_length1;
+                               _tmp80_ = _tmp79_[3];
+                               cairo_set_source_rgba (_tmp60_, (gdouble) _tmp65_, (gdouble) _tmp70_, 
(gdouble) _tmp75_, (gdouble) _tmp80_);
+                               _tmp81_ = cr;
+                               cairo_fill_preserve (_tmp81_);
+                               _tmp82_ = cr;
+                               cairo_set_source_rgba (_tmp82_, (gdouble) 0.0f, (gdouble) 0.0f, (gdouble) 
0.0f, (gdouble) 1.0f);
+                               _tmp83_ = cr;
+                               cairo_stroke (_tmp83_);
+                       }
+                       _g_object_unref0 (entry);
+               }
+               _g_object_unref0 (_entry_it);
+       }
+       _tmp84_ = cr;
+       cairo_restore (_tmp84_);
+}
+
+
+static void g_cclosure_user_marshal_VOID__OBJECT_POINTER_INT (GClosure * closure, GValue * return_value, 
guint n_param_values, const GValue * param_values, gpointer invocation_hint, gpointer marshal_data) {
+       typedef void (*GMarshalFunc_VOID__OBJECT_POINTER_INT) (gpointer data1, gpointer arg_1, gpointer 
arg_2, gint arg_3, gpointer data2);
+       register GMarshalFunc_VOID__OBJECT_POINTER_INT callback;
+       register GCClosure * cc;
+       register gpointer data1;
+       register gpointer data2;
+       cc = (GCClosure *) closure;
+       g_return_if_fail (n_param_values == 4);
+       if (G_CCLOSURE_SWAP_DATA (closure)) {
+               data1 = closure->data;
+               data2 = param_values->data[0].v_pointer;
+       } else {
+               data1 = param_values->data[0].v_pointer;
+               data2 = closure->data;
+       }
+       callback = (GMarshalFunc_VOID__OBJECT_POINTER_INT) (marshal_data ? marshal_data : cc->callback);
+       callback (data1, g_value_get_object (param_values + 1), g_value_get_pointer (param_values + 2), 
g_value_get_int (param_values + 3), data2);
+}
+
+
+static gfloat* _vala_array_dup2 (gfloat* self, int length) {
+       return g_memdup (self, length * sizeof (gfloat));
+}
+
+
+GtkMusicPianoMarkedNoteStyle* gtk_music_piano_marked_note_style_construct (GType object_type, gfloat* color, 
int color_length1) {
+       GtkMusicPianoMarkedNoteStyle* self = NULL;
+       gfloat* _tmp0_;
+       gint _tmp0__length1;
+       gfloat* _tmp1_;
+       gint _tmp1__length1;
+       self = (GtkMusicPianoMarkedNoteStyle*) g_type_create_instance (object_type);
+       _tmp0_ = color;
+       _tmp0__length1 = color_length1;
+       _tmp1_ = (_tmp0_ != NULL) ? _vala_array_dup2 (_tmp0_, _tmp0__length1) : ((gpointer) _tmp0_);
+       _tmp1__length1 = _tmp0__length1;
+       self->color = (g_free (self->color), NULL);
+       self->color = _tmp1_;
+       self->color_length1 = _tmp1__length1;
+       return self;
+}
+
+
+GtkMusicPianoMarkedNoteStyle* gtk_music_piano_marked_note_style_new (gfloat* color, int color_length1) {
+       return gtk_music_piano_marked_note_style_construct (GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE, color, 
color_length1);
+}
+
+
+static void gtk_music_piano_value_marked_note_style_init (GValue* value) {
+       value->data[0].v_pointer = NULL;
+}
+
+
+static void gtk_music_piano_value_marked_note_style_free_value (GValue* value) {
+       if (value->data[0].v_pointer) {
+               gtk_music_piano_marked_note_style_unref (value->data[0].v_pointer);
+       }
+}
+
+
+static void gtk_music_piano_value_marked_note_style_copy_value (const GValue* src_value, GValue* dest_value) 
{
+       if (src_value->data[0].v_pointer) {
+               dest_value->data[0].v_pointer = gtk_music_piano_marked_note_style_ref 
(src_value->data[0].v_pointer);
+       } else {
+               dest_value->data[0].v_pointer = NULL;
+       }
+}
+
+
+static gpointer gtk_music_piano_value_marked_note_style_peek_pointer (const GValue* value) {
+       return value->data[0].v_pointer;
+}
+
+
+static gchar* gtk_music_piano_value_marked_note_style_collect_value (GValue* value, guint n_collect_values, 
GTypeCValue* collect_values, guint collect_flags) {
+       if (collect_values[0].v_pointer) {
+               GtkMusicPianoMarkedNoteStyle* object;
+               object = collect_values[0].v_pointer;
+               if (object->parent_instance.g_class == NULL) {
+                       return g_strconcat ("invalid unclassed object pointer for value type `", 
G_VALUE_TYPE_NAME (value), "'", NULL);
+               } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
+                       return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE 
(object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
+               }
+               value->data[0].v_pointer = gtk_music_piano_marked_note_style_ref (object);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       return NULL;
+}
+
+
+static gchar* gtk_music_piano_value_marked_note_style_lcopy_value (const GValue* value, guint 
n_collect_values, GTypeCValue* collect_values, guint collect_flags) {
+       GtkMusicPianoMarkedNoteStyle** object_p;
+       object_p = collect_values[0].v_pointer;
+       if (!object_p) {
+               return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
+       }
+       if (!value->data[0].v_pointer) {
+               *object_p = NULL;
+       } else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
+               *object_p = value->data[0].v_pointer;
+       } else {
+               *object_p = gtk_music_piano_marked_note_style_ref (value->data[0].v_pointer);
+       }
+       return NULL;
+}
+
+
+GParamSpec* gtk_music_piano_param_spec_marked_note_style (const gchar* name, const gchar* nick, const gchar* 
blurb, GType object_type, GParamFlags flags) {
+       GtkMusicPianoParamSpecMarkedNoteStyle* spec;
+       g_return_val_if_fail (g_type_is_a (object_type, GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE), NULL);
+       spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
+       G_PARAM_SPEC (spec)->value_type = object_type;
+       return G_PARAM_SPEC (spec);
+}
+
+
+gpointer gtk_music_piano_value_get_marked_note_style (const GValue* value) {
+       g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE), NULL);
+       return value->data[0].v_pointer;
+}
+
+
+void gtk_music_piano_value_set_marked_note_style (GValue* value, gpointer v_object) {
+       GtkMusicPianoMarkedNoteStyle* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, 
GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+               gtk_music_piano_marked_note_style_ref (value->data[0].v_pointer);
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_piano_marked_note_style_unref (old);
+       }
+}
+
+
+void gtk_music_piano_value_take_marked_note_style (GValue* value, gpointer v_object) {
+       GtkMusicPianoMarkedNoteStyle* old;
+       g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE));
+       old = value->data[0].v_pointer;
+       if (v_object) {
+               g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, 
GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE));
+               g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE 
(value)));
+               value->data[0].v_pointer = v_object;
+       } else {
+               value->data[0].v_pointer = NULL;
+       }
+       if (old) {
+               gtk_music_piano_marked_note_style_unref (old);
+       }
+}
+
+
+static void gtk_music_piano_marked_note_style_class_init (GtkMusicPianoMarkedNoteStyleClass * klass) {
+       gtk_music_piano_marked_note_style_parent_class = g_type_class_peek_parent (klass);
+       GTK_MUSIC_PIANO_MARKED_NOTE_STYLE_CLASS (klass)->finalize = 
gtk_music_piano_marked_note_style_finalize;
+}
+
+
+static void gtk_music_piano_marked_note_style_instance_init (GtkMusicPianoMarkedNoteStyle * self) {
+       gfloat* _tmp0_ = NULL;
+       _tmp0_ = g_new0 (gfloat, 4);
+       _tmp0_[0] = 0.0f;
+       _tmp0_[1] = 0.0f;
+       _tmp0_[2] = 0.0f;
+       _tmp0_[3] = 1.0f;
+       self->color = _tmp0_;
+       self->color_length1 = 4;
+       self->ref_count = 1;
+}
+
+
+static void gtk_music_piano_marked_note_style_finalize (GtkMusicPianoMarkedNoteStyle* obj) {
+       GtkMusicPianoMarkedNoteStyle * self;
+       self = G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_MUSIC_PIANO_TYPE_MARKED_NOTE_STYLE, 
GtkMusicPianoMarkedNoteStyle);
+       self->color = (g_free (self->color), NULL);
+}
+
+
+GType gtk_music_piano_marked_note_style_get_type (void) {
+       static volatile gsize gtk_music_piano_marked_note_style_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_piano_marked_note_style_type_id__volatile)) {
+               static const GTypeValueTable g_define_type_value_table = { 
gtk_music_piano_value_marked_note_style_init, gtk_music_piano_value_marked_note_style_free_value, 
gtk_music_piano_value_marked_note_style_copy_value, gtk_music_piano_value_marked_note_style_peek_pointer, 
"p", gtk_music_piano_value_marked_note_style_collect_value, "p", 
gtk_music_piano_value_marked_note_style_lcopy_value };
+               static const GTypeInfo g_define_type_info = { sizeof (GtkMusicPianoMarkedNoteStyleClass), 
(GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) 
gtk_music_piano_marked_note_style_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof 
(GtkMusicPianoMarkedNoteStyle), 0, (GInstanceInitFunc) gtk_music_piano_marked_note_style_instance_init, 
&g_define_type_value_table };
+               static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | 
G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
+               GType gtk_music_piano_marked_note_style_type_id;
+               gtk_music_piano_marked_note_style_type_id = g_type_register_fundamental 
(g_type_fundamental_next (), "GtkMusicPianoMarkedNoteStyle", &g_define_type_info, 
&g_define_type_fundamental_info, 0);
+               g_once_init_leave (&gtk_music_piano_marked_note_style_type_id__volatile, 
gtk_music_piano_marked_note_style_type_id);
+       }
+       return gtk_music_piano_marked_note_style_type_id__volatile;
+}
+
+
+gpointer gtk_music_piano_marked_note_style_ref (gpointer instance) {
+       GtkMusicPianoMarkedNoteStyle* self;
+       self = instance;
+       g_atomic_int_inc (&self->ref_count);
+       return instance;
+}
+
+
+void gtk_music_piano_marked_note_style_unref (gpointer instance) {
+       GtkMusicPianoMarkedNoteStyle* self;
+       self = instance;
+       if (g_atomic_int_dec_and_test (&self->ref_count)) {
+               GTK_MUSIC_PIANO_MARKED_NOTE_STYLE_GET_CLASS (self)->finalize (self);
+               g_type_free_instance ((GTypeInstance *) self);
+       }
+}
+
+
+static void gtk_music_piano_class_init (GtkMusicPianoClass * klass) {
+       gtk_music_piano_parent_class = g_type_class_peek_parent (klass);
+       g_type_class_add_private (klass, sizeof (GtkMusicPianoPrivate));
+       GTK_WIDGET_CLASS (klass)->button_press_event = gtk_music_piano_real_button_press_event;
+       GTK_WIDGET_CLASS (klass)->button_release_event = gtk_music_piano_real_button_release_event;
+       GTK_WIDGET_CLASS (klass)->draw = gtk_music_piano_real_draw;
+       G_OBJECT_CLASS (klass)->finalize = gtk_music_piano_finalize;
+       g_signal_new ("note_pressed", GTK_MUSIC_TYPE_PIANO, G_SIGNAL_RUN_LAST, 0, NULL, NULL, 
g_cclosure_user_marshal_VOID__OBJECT_POINTER_INT, G_TYPE_NONE, 3, GTK_TYPE_WIDGET, G_TYPE_POINTER, 
G_TYPE_INT);
+       g_signal_new ("note_released", GTK_MUSIC_TYPE_PIANO, G_SIGNAL_RUN_LAST, 0, NULL, NULL, 
g_cclosure_user_marshal_VOID__OBJECT_POINTER_INT, G_TYPE_NONE, 3, GTK_TYPE_WIDGET, G_TYPE_POINTER, 
G_TYPE_INT);
+}
+
+
+static void gtk_music_piano_instance_init (GtkMusicPiano * self) {
+       gfloat* _tmp0_ = NULL;
+       gfloat* _tmp1_ = NULL;
+       self->priv = GTK_MUSIC_PIANO_GET_PRIVATE (self);
+       self->autoUpdate = TRUE;
+       self->key_count = (gushort) 24;
+       self->firstNote = (gushort) 36;
+       _tmp0_ = g_new0 (gfloat, 4);
+       _tmp0_[0] = 1.0f;
+       _tmp0_[1] = 1.0f;
+       _tmp0_[2] = 1.0f;
+       _tmp0_[3] = 1.0f;
+       self->nat_key_color = _tmp0_;
+       self->nat_key_color_length1 = 4;
+       _tmp1_ = g_new0 (gfloat, 4);
+       _tmp1_[0] = 0.0f;
+       _tmp1_[1] = 0.0f;
+       _tmp1_[2] = 0.0f;
+       _tmp1_[3] = 1.0f;
+       self->accident_key_color = _tmp1_;
+       self->accident_key_color_length1 = 4;
+       self->showLabels = FALSE;
+       self->detailedLabels = FALSE;
+       self->labelsPosition = GTK_MUSIC_PIANO_LABEL_POSITION_UP;
+       self->priv->h_padding = (gushort) 2;
+       self->priv->v_padding = (gushort) 2;
+       self->priv->accident_key_height = 0.7f;
+       self->priv->accident_key_width = 0.4f;
+       self->priv->x_min_natk_dist = 0.1f;
+}
+
+
+static void gtk_music_piano_finalize (GObject* obj) {
+       GtkMusicPiano * self;
+       self = G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_MUSIC_TYPE_PIANO, GtkMusicPiano);
+       self->nat_key_color = (g_free (self->nat_key_color), NULL);
+       self->accident_key_color = (g_free (self->accident_key_color), NULL);
+       _g_object_unref0 (self->markedNotes);
+       G_OBJECT_CLASS (gtk_music_piano_parent_class)->finalize (obj);
+}
+
+
+/**
+ * Piano widget
+ **/
+GType gtk_music_piano_get_type (void) {
+       static volatile gsize gtk_music_piano_type_id__volatile = 0;
+       if (g_once_init_enter (&gtk_music_piano_type_id__volatile)) {
+               static const GTypeInfo g_define_type_info = { sizeof (GtkMusicPianoClass), (GBaseInitFunc) 
NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gtk_music_piano_class_init, (GClassFinalizeFunc) NULL, NULL, 
sizeof (GtkMusicPiano), 0, (GInstanceInitFunc) gtk_music_piano_instance_init, NULL };
+               GType gtk_music_piano_type_id;
+               gtk_music_piano_type_id = g_type_register_static (GTK_TYPE_DRAWING_AREA, "GtkMusicPiano", 
&g_define_type_info, 0);
+               g_once_init_leave (&gtk_music_piano_type_id__volatile, gtk_music_piano_type_id);
+       }
+       return gtk_music_piano_type_id__volatile;
+}
+
+
+
diff --git a/test/TestsGuitar.c b/test/TestsGuitar.c
index a749128..008f097 100644
--- a/test/TestsGuitar.c
+++ b/test/TestsGuitar.c
@@ -1,4 +1,4 @@
-/* TestsGuitar.c generated by valac 0.17.1, the Vala compiler
+/* TestsGuitar.c generated by valac 0.18.1, the Vala compiler
  * generated from TestsGuitar.vala, do not modify */
 
 
@@ -47,7 +47,7 @@ void note_pressed_callback (GtkWidget* widget, GdkEventButton* event, GtkMusicGu
        g_return_if_fail (event != NULL);
        g_return_if_fail (pos != NULL);
        _tmp0_ = widget;
-       _tmp1_ = _g_object_ref0 (GTK_MUSIC_IS_GUITAR (_tmp0_) ? ((GtkMusicGuitar*) _tmp0_) : NULL);
+       _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, GTK_MUSIC_TYPE_GUITAR) ? 
((GtkMusicGuitar*) _tmp0_) : NULL);
        guitar = _tmp1_;
        _tmp2_ = stdout;
        _tmp3_ = guitar;
@@ -113,17 +113,18 @@ static void _gtk_main_quit_gtk_widget_destroy (GtkWidget* _sender, gpointer self
 gint _vala_main (gchar** args, int args_length1) {
        gint result = 0;
        GtkWindow* _tmp0_;
-       GtkWindow* _tmp1_;
        GtkWindow* window;
-       GtkMusicGuitar* _tmp2_;
-       GtkMusicGuitar* _tmp3_;
+       GtkMusicGuitar* _tmp1_;
        GtkMusicGuitar* guitar;
-       GeeArrayList* _tmp4_;
-       gpointer _tmp5_ = NULL;
-       GtkMusicGuitarString* _tmp6_;
-       GeeArrayList* _tmp7_;
-       gpointer _tmp8_ = NULL;
-       GtkMusicGuitarString* _tmp9_;
+       GeeArrayList* _tmp2_;
+       gpointer _tmp3_ = NULL;
+       GtkMusicGuitarString* _tmp4_;
+       GeeArrayList* _tmp5_;
+       gpointer _tmp6_ = NULL;
+       GtkMusicGuitarString* _tmp7_;
+       gfloat* _tmp8_ = NULL;
+       gfloat* _tmp9_;
+       gint _tmp9__length1;
        gfloat* _tmp10_ = NULL;
        gfloat* _tmp11_;
        gint _tmp11__length1;
@@ -142,36 +143,42 @@ gint _vala_main (gchar** args, int args_length1) {
        gfloat* _tmp20_ = NULL;
        gfloat* _tmp21_;
        gint _tmp21__length1;
-       gfloat* _tmp22_ = NULL;
-       gfloat* _tmp23_;
-       gint _tmp23__length1;
        gtk_init (&args_length1, &args);
        _tmp0_ = (GtkWindow*) gtk_window_new (GTK_WINDOW_TOPLEVEL);
-       _tmp1_ = g_object_ref_sink (_tmp0_);
-       window = _tmp1_;
-       _tmp2_ = gtk_music_guitar_new ();
-       _tmp3_ = g_object_ref_sink (_tmp2_);
-       guitar = _tmp3_;
+       g_object_ref_sink (_tmp0_);
+       window = _tmp0_;
+       _tmp1_ = gtk_music_guitar_new ();
+       g_object_ref_sink (_tmp1_);
+       guitar = _tmp1_;
        g_signal_connect (guitar, "note-pressed", (GCallback) 
_note_pressed_callback_gtk_music_guitar_note_pressed, NULL);
-       _tmp4_ = guitar->guitarStrings;
-       _tmp5_ = gee_abstract_list_get ((GeeAbstractList*) _tmp4_, 0);
-       _tmp6_ = (GtkMusicGuitarString*) _tmp5_;
-       _tmp6_->vibrate = TRUE;
-       _gtk_music_guitar_string_unref0 (_tmp6_);
-       _tmp7_ = guitar->guitarStrings;
-       _tmp8_ = gee_abstract_list_get ((GeeAbstractList*) _tmp7_, 5);
-       _tmp9_ = (GtkMusicGuitarString*) _tmp8_;
-       _tmp9_->vibrate = TRUE;
-       _gtk_music_guitar_string_unref0 (_tmp9_);
+       _tmp2_ = guitar->guitarStrings;
+       _tmp3_ = gee_abstract_list_get ((GeeAbstractList*) _tmp2_, 0);
+       _tmp4_ = (GtkMusicGuitarString*) _tmp3_;
+       _tmp4_->vibrate = TRUE;
+       _gtk_music_guitar_string_unref0 (_tmp4_);
+       _tmp5_ = guitar->guitarStrings;
+       _tmp6_ = gee_abstract_list_get ((GeeAbstractList*) _tmp5_, 5);
+       _tmp7_ = (GtkMusicGuitarString*) _tmp6_;
+       _tmp7_->vibrate = TRUE;
+       _gtk_music_guitar_string_unref0 (_tmp7_);
        gtk_music_guitar_start_animation (guitar);
+       _tmp8_ = g_new0 (gfloat, 4);
+       _tmp8_[0] = 0.4f;
+       _tmp8_[1] = 0.0f;
+       _tmp8_[2] = 0.0f;
+       _tmp8_[3] = 1.0f;
+       _tmp9_ = _tmp8_;
+       _tmp9__length1 = 4;
+       gtk_music_guitar_mark_position (guitar, (gushort) 0, (gushort) 0, _tmp9_, 4);
+       _tmp9_ = (g_free (_tmp9_), NULL);
        _tmp10_ = g_new0 (gfloat, 4);
-       _tmp10_[0] = 0.4f;
+       _tmp10_[0] = 0.0f;
        _tmp10_[1] = 0.0f;
        _tmp10_[2] = 0.0f;
        _tmp10_[3] = 1.0f;
        _tmp11_ = _tmp10_;
        _tmp11__length1 = 4;
-       gtk_music_guitar_mark_position (guitar, (gushort) 0, (gushort) 0, _tmp11_, 4);
+       gtk_music_guitar_mark_position (guitar, (gushort) 1, (gushort) 1, _tmp11_, 4);
        _tmp11_ = (g_free (_tmp11_), NULL);
        _tmp12_ = g_new0 (gfloat, 4);
        _tmp12_[0] = 0.0f;
@@ -180,7 +187,7 @@ gint _vala_main (gchar** args, int args_length1) {
        _tmp12_[3] = 1.0f;
        _tmp13_ = _tmp12_;
        _tmp13__length1 = 4;
-       gtk_music_guitar_mark_position (guitar, (gushort) 1, (gushort) 1, _tmp13_, 4);
+       gtk_music_guitar_mark_position (guitar, (gushort) 2, (gushort) 1, _tmp13_, 4);
        _tmp13_ = (g_free (_tmp13_), NULL);
        _tmp14_ = g_new0 (gfloat, 4);
        _tmp14_[0] = 0.0f;
@@ -189,7 +196,7 @@ gint _vala_main (gchar** args, int args_length1) {
        _tmp14_[3] = 1.0f;
        _tmp15_ = _tmp14_;
        _tmp15__length1 = 4;
-       gtk_music_guitar_mark_position (guitar, (gushort) 2, (gushort) 1, _tmp15_, 4);
+       gtk_music_guitar_mark_position (guitar, (gushort) 3, (gushort) 0, _tmp15_, 4);
        _tmp15_ = (g_free (_tmp15_), NULL);
        _tmp16_ = g_new0 (gfloat, 4);
        _tmp16_[0] = 0.0f;
@@ -198,35 +205,26 @@ gint _vala_main (gchar** args, int args_length1) {
        _tmp16_[3] = 1.0f;
        _tmp17_ = _tmp16_;
        _tmp17__length1 = 4;
-       gtk_music_guitar_mark_position (guitar, (gushort) 3, (gushort) 0, _tmp17_, 4);
+       gtk_music_guitar_mark_position (guitar, (gushort) 5, (gushort) 3, _tmp17_, 4);
        _tmp17_ = (g_free (_tmp17_), NULL);
        _tmp18_ = g_new0 (gfloat, 4);
        _tmp18_[0] = 0.0f;
-       _tmp18_[1] = 0.0f;
+       _tmp18_[1] = 0.4f;
        _tmp18_[2] = 0.0f;
        _tmp18_[3] = 1.0f;
        _tmp19_ = _tmp18_;
        _tmp19__length1 = 4;
-       gtk_music_guitar_mark_position (guitar, (gushort) 5, (gushort) 3, _tmp19_, 4);
+       gtk_music_guitar_mark_note (guitar, "A3", _tmp19_, 4);
        _tmp19_ = (g_free (_tmp19_), NULL);
        _tmp20_ = g_new0 (gfloat, 4);
        _tmp20_[0] = 0.0f;
-       _tmp20_[1] = 0.4f;
-       _tmp20_[2] = 0.0f;
-       _tmp20_[3] = 1.0f;
+       _tmp20_[1] = 0.0f;
+       _tmp20_[2] = 0.4f;
+       _tmp20_[3] = 0.7f;
        _tmp21_ = _tmp20_;
        _tmp21__length1 = 4;
-       gtk_music_guitar_mark_note (guitar, "A3", _tmp21_, 4);
+       gtk_music_guitar_mark_note (guitar, "C", _tmp21_, 4);
        _tmp21_ = (g_free (_tmp21_), NULL);
-       _tmp22_ = g_new0 (gfloat, 4);
-       _tmp22_[0] = 0.0f;
-       _tmp22_[1] = 0.0f;
-       _tmp22_[2] = 0.4f;
-       _tmp22_[3] = 0.7f;
-       _tmp23_ = _tmp22_;
-       _tmp23__length1 = 4;
-       gtk_music_guitar_mark_note (guitar, "C", _tmp23_, 4);
-       _tmp23_ = (g_free (_tmp23_), NULL);
        gtk_container_add ((GtkContainer*) window, (GtkWidget*) guitar);
        g_signal_connect ((GtkWidget*) window, "destroy", (GCallback) _gtk_main_quit_gtk_widget_destroy, 
NULL);
        gtk_widget_show_all ((GtkWidget*) window);
diff --git a/test/TestsMusicalNotes.c b/test/TestsMusicalNotes.c
index 2abd902..c8f2299 100644
--- a/test/TestsMusicalNotes.c
+++ b/test/TestsMusicalNotes.c
@@ -1,4 +1,4 @@
-/* TestsMusicalNotes.c generated by valac 0.17.1, the Vala compiler
+/* TestsMusicalNotes.c generated by valac 0.18.1, the Vala compiler
  * generated from TestsMusicalNotes.vala, do not modify */
 
 
diff --git a/test/TestsPiano.c b/test/TestsPiano.c
index bf63dbb..1821c8d 100644
--- a/test/TestsPiano.c
+++ b/test/TestsPiano.c
@@ -1,4 +1,4 @@
-/* TestsPiano.c generated by valac 0.17.1, the Vala compiler
+/* TestsPiano.c generated by valac 0.18.1, the Vala compiler
  * generated from TestsPiano.vala, do not modify */
 
 
@@ -40,7 +40,7 @@ void note_pressed_callback (GtkWidget* widget, GdkEventButton* event, gint key)
        g_return_if_fail (widget != NULL);
        g_return_if_fail (event != NULL);
        _tmp0_ = widget;
-       _tmp1_ = _g_object_ref0 (GTK_MUSIC_IS_PIANO (_tmp0_) ? ((GtkMusicPiano*) _tmp0_) : NULL);
+       _tmp1_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_TYPE (_tmp0_, GTK_MUSIC_TYPE_PIANO) ? 
((GtkMusicPiano*) _tmp0_) : NULL);
        piano = _tmp1_;
        _tmp2_ = stdout;
        _tmp3_ = key;
@@ -90,11 +90,12 @@ static void _gtk_main_quit_gtk_widget_destroy (GtkWidget* _sender, gpointer self
 gint _vala_main (gchar** args, int args_length1) {
        gint result = 0;
        GtkWindow* _tmp0_;
-       GtkWindow* _tmp1_;
        GtkWindow* window;
-       GtkMusicPiano* _tmp2_;
-       GtkMusicPiano* _tmp3_;
+       GtkMusicPiano* _tmp1_;
        GtkMusicPiano* piano;
+       gfloat* _tmp2_ = NULL;
+       gfloat* _tmp3_;
+       gint _tmp3__length1;
        gfloat* _tmp4_ = NULL;
        gfloat* _tmp5_;
        gint _tmp5__length1;
@@ -104,34 +105,40 @@ gint _vala_main (gchar** args, int args_length1) {
        gfloat* _tmp8_ = NULL;
        gfloat* _tmp9_;
        gint _tmp9__length1;
-       gfloat* _tmp10_ = NULL;
-       gfloat* _tmp11_;
-       gint _tmp11__length1;
        gtk_init (&args_length1, &args);
        _tmp0_ = (GtkWindow*) gtk_window_new (GTK_WINDOW_TOPLEVEL);
-       _tmp1_ = g_object_ref_sink (_tmp0_);
-       window = _tmp1_;
-       _tmp2_ = gtk_music_piano_new ();
-       _tmp3_ = g_object_ref_sink (_tmp2_);
-       piano = _tmp3_;
+       g_object_ref_sink (_tmp0_);
+       window = _tmp0_;
+       _tmp1_ = gtk_music_piano_new ();
+       g_object_ref_sink (_tmp1_);
+       piano = _tmp1_;
        g_signal_connect (piano, "note-pressed", (GCallback) 
_note_pressed_callback_gtk_music_piano_note_pressed, NULL);
+       _tmp2_ = g_new0 (gfloat, 4);
+       _tmp2_[0] = 0.0f;
+       _tmp2_[1] = 0.0f;
+       _tmp2_[2] = 0.5f;
+       _tmp2_[3] = 1.0f;
+       _tmp3_ = _tmp2_;
+       _tmp3__length1 = 4;
+       gtk_music_piano_mark_midi (piano, (gushort) 50, _tmp3_, 4);
+       _tmp3_ = (g_free (_tmp3_), NULL);
        _tmp4_ = g_new0 (gfloat, 4);
-       _tmp4_[0] = 0.0f;
+       _tmp4_[0] = 0.4f;
        _tmp4_[1] = 0.0f;
-       _tmp4_[2] = 0.5f;
+       _tmp4_[2] = 0.0f;
        _tmp4_[3] = 1.0f;
        _tmp5_ = _tmp4_;
        _tmp5__length1 = 4;
-       gtk_music_piano_mark_midi (piano, (gushort) 50, _tmp5_, 4);
+       gtk_music_piano_mark_midi (piano, (gushort) 51, _tmp5_, 4);
        _tmp5_ = (g_free (_tmp5_), NULL);
        _tmp6_ = g_new0 (gfloat, 4);
-       _tmp6_[0] = 0.4f;
+       _tmp6_[0] = 0.0f;
        _tmp6_[1] = 0.0f;
-       _tmp6_[2] = 0.0f;
+       _tmp6_[2] = 0.5f;
        _tmp6_[3] = 1.0f;
        _tmp7_ = _tmp6_;
        _tmp7__length1 = 4;
-       gtk_music_piano_mark_midi (piano, (gushort) 51, _tmp7_, 4);
+       gtk_music_piano_mark_midi (piano, (gushort) 36, _tmp7_, 4);
        _tmp7_ = (g_free (_tmp7_), NULL);
        _tmp8_ = g_new0 (gfloat, 4);
        _tmp8_[0] = 0.0f;
@@ -140,17 +147,8 @@ gint _vala_main (gchar** args, int args_length1) {
        _tmp8_[3] = 1.0f;
        _tmp9_ = _tmp8_;
        _tmp9__length1 = 4;
-       gtk_music_piano_mark_midi (piano, (gushort) 36, _tmp9_, 4);
+       gtk_music_piano_mark_midi (piano, (gushort) 59, _tmp9_, 4);
        _tmp9_ = (g_free (_tmp9_), NULL);
-       _tmp10_ = g_new0 (gfloat, 4);
-       _tmp10_[0] = 0.0f;
-       _tmp10_[1] = 0.0f;
-       _tmp10_[2] = 0.5f;
-       _tmp10_[3] = 1.0f;
-       _tmp11_ = _tmp10_;
-       _tmp11__length1 = 4;
-       gtk_music_piano_mark_midi (piano, (gushort) 59, _tmp11_, 4);
-       _tmp11_ = (g_free (_tmp11_), NULL);
        gtk_container_add ((GtkContainer*) window, (GtkWidget*) piano);
        g_signal_connect ((GtkWidget*) window, "destroy", (GCallback) _gtk_main_quit_gtk_widget_destroy, 
NULL);
        gtk_widget_show_all ((GtkWidget*) window);
diff --git a/test/TestsPiano.vala b/test/TestsPiano.vala
index f484240..7fbb743 100644
--- a/test/TestsPiano.vala
+++ b/test/TestsPiano.vala
@@ -3,7 +3,7 @@ using GtkMusic;
 
 void note_pressed_callback(Widget widget, Gdk.EventButton event, int key) {
     var piano = widget as Piano;
-    stdout.printf("You clicked key %d  ", key); stdout.flush();
+    stdout.printf("You clicked key %d  \n", key); stdout.flush();
     if(event.button == 1)
         piano.mark_midi((ushort) key);
     else


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