[SCM] gsequencer/upstream: fully seekable

jkraehemann-guest at users.alioth.debian.org jkraehemann-guest at users.alioth.debian.org
Sun Jun 14 16:07:06 UTC 2015


The following commit has been merged in the upstream branch:
commit 1de82c405b336e5bc8e454e675e0610449b5cd44
Author: Joël Krähemann <weedlight at gmail.com>
Date:   Thu Jun 11 20:44:08 2015 +0200

    fully seekable

diff --git a/.deps/ags-ags_count_beats_audio_run.Po b/.deps/ags-ags_count_beats_audio_run.Po
index 5f6e491..e6b8381 100644
--- a/.deps/ags-ags_count_beats_audio_run.Po
+++ b/.deps/ags-ags_count_beats_audio_run.Po
@@ -659,6 +659,7 @@ ags-ags_count_beats_audio_run.o: \
  src/ags/widget/ags_dial.h src/ags/widget/ags_cartesian.h \
  src/ags/file/ags_file_id_ref.h src/ags/file/ags_file_lookup.h \
  src/ags/audio/ags_recall_container.h \
+ src/ags/audio/recall/ags_delay_audio.h \
  src/ags/audio/recall/ags_stream_channel_run.h \
  src/ags/audio/ags_recall_channel_run.h \
  src/ags/audio/ags_recall_channel.h \
@@ -2220,6 +2221,8 @@ src/ags/file/ags_file_lookup.h:
 
 src/ags/audio/ags_recall_container.h:
 
+src/ags/audio/recall/ags_delay_audio.h:
+
 src/ags/audio/recall/ags_stream_channel_run.h:
 
 src/ags/audio/ags_recall_channel_run.h:
diff --git a/.deps/ags-ags_navigation.Po b/.deps/ags-ags_navigation.Po
index ee434c4..f7e2854 100644
--- a/.deps/ags-ags_navigation.Po
+++ b/.deps/ags-ags_navigation.Po
@@ -622,7 +622,20 @@ ags-ags_navigation.o: src/ags/X/ags_navigation.c \
  /usr/include/libxml2/libxml/xlink.h /usr/include/libxml2/libxml/SAX2.h \
  src/ags/thread/ags_timestamp_thread.h src/ags/audio/ags_timestamp.h \
  src/ags/audio/ags_note.h src/ags/X/ags_navigation_callbacks.h \
- src/ags-lib/object/ags_connectable.h src/ags/X/ags_window.h \
+ src/ags/main.h src/ags/lib/ags_log.h src/ags/server/ags_server.h \
+ /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \
+ /usr/include/x86_64-linux-gnu/sys/uio.h \
+ /usr/include/x86_64-linux-gnu/bits/uio.h \
+ /usr/include/x86_64-linux-gnu/bits/socket.h \
+ /usr/include/x86_64-linux-gnu/bits/socket_type.h \
+ /usr/include/x86_64-linux-gnu/bits/sockaddr.h \
+ /usr/include/x86_64-linux-gnu/asm/socket.h \
+ /usr/include/asm-generic/socket.h \
+ /usr/include/x86_64-linux-gnu/asm/sockios.h \
+ /usr/include/asm-generic/sockios.h \
+ /usr/include/x86_64-linux-gnu/bits/in.h src/ags/server/ags_registry.h \
+ src/ags/file/ags_file.h src/ags/server/ags_remote_task.h \
+ src/ags/audio/ags_config.h src/ags/X/ags_window.h \
  src/ags/X/ags_menu_bar.h src/ags/X/ags_machine.h \
  src/ags/audio/ags_audio.h src/ags/X/ags_editor.h \
  src/ags/X/editor/ags_toolbar.h src/ags/X/editor/ags_machine_selector.h \
@@ -631,7 +644,8 @@ ags-ags_navigation.o: src/ags/X/ags_navigation.c \
  src/ags/X/ags_export_window.h src/ags/X/ags_preferences.h \
  src/ags/X/ags_generic_preferences.h src/ags/X/ags_audio_preferences.h \
  src/ags/X/ags_performance_preferences.h \
- src/ags/X/ags_server_preferences.h
+ src/ags/X/ags_server_preferences.h src/ags-lib/object/ags_connectable.h \
+ src/ags/audio/task/ags_seek_devout.h
 
 /usr/include/stdc-predef.h:
 
@@ -2075,7 +2089,43 @@ src/ags/audio/ags_note.h:
 
 src/ags/X/ags_navigation_callbacks.h:
 
-src/ags-lib/object/ags_connectable.h:
+src/ags/main.h:
+
+src/ags/lib/ags_log.h:
+
+src/ags/server/ags_server.h:
+
+/usr/include/netinet/in.h:
+
+/usr/include/x86_64-linux-gnu/sys/socket.h:
+
+/usr/include/x86_64-linux-gnu/sys/uio.h:
+
+/usr/include/x86_64-linux-gnu/bits/uio.h:
+
+/usr/include/x86_64-linux-gnu/bits/socket.h:
+
+/usr/include/x86_64-linux-gnu/bits/socket_type.h:
+
+/usr/include/x86_64-linux-gnu/bits/sockaddr.h:
+
+/usr/include/x86_64-linux-gnu/asm/socket.h:
+
+/usr/include/asm-generic/socket.h:
+
+/usr/include/x86_64-linux-gnu/asm/sockios.h:
+
+/usr/include/asm-generic/sockios.h:
+
+/usr/include/x86_64-linux-gnu/bits/in.h:
+
+src/ags/server/ags_registry.h:
+
+src/ags/file/ags_file.h:
+
+src/ags/server/ags_remote_task.h:
+
+src/ags/audio/ags_config.h:
 
 src/ags/X/ags_window.h:
 
@@ -2110,3 +2160,7 @@ src/ags/X/ags_audio_preferences.h:
 src/ags/X/ags_performance_preferences.h:
 
 src/ags/X/ags_server_preferences.h:
+
+src/ags-lib/object/ags_connectable.h:
+
+src/ags/audio/task/ags_seek_devout.h:
diff --git a/.deps/ags-ags_append_channel.Po b/.deps/ags-ags_seek_devout.Po
similarity index 99%
copy from .deps/ags-ags_append_channel.Po
copy to .deps/ags-ags_seek_devout.Po
index 1aad080..8a713c3 100644
--- a/.deps/ags-ags_append_channel.Po
+++ b/.deps/ags-ags_seek_devout.Po
@@ -1,5 +1,5 @@
-ags-ags_append_channel.o: src/ags/audio/task/ags_append_channel.c \
- /usr/include/stdc-predef.h src/ags/audio/task/ags_append_channel.h \
+ags-ags_seek_devout.o: src/ags/audio/task/ags_seek_devout.c \
+ /usr/include/stdc-predef.h src/ags/audio/task/ags_seek_devout.h \
  /usr/include/glib-2.0/glib.h /usr/include/glib-2.0/glib/galloca.h \
  /usr/include/glib-2.0/glib/gtypes.h \
  /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h \
@@ -622,8 +622,9 @@ ags-ags_append_channel.o: src/ags/audio/task/ags_append_channel.c \
  /usr/include/libxml2/libxml/xlink.h /usr/include/libxml2/libxml/SAX2.h \
  src/ags/thread/ags_timestamp_thread.h src/ags/audio/ags_timestamp.h \
  src/ags/audio/ags_note.h src/ags-lib/object/ags_connectable.h \
- src/ags/main.h src/ags/lib/ags_log.h src/ags/server/ags_server.h \
- /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \
+ src/ags/object/ags_seekable.h src/ags/main.h src/ags/lib/ags_log.h \
+ src/ags/server/ags_server.h /usr/include/netinet/in.h \
+ /usr/include/x86_64-linux-gnu/sys/socket.h \
  /usr/include/x86_64-linux-gnu/sys/uio.h \
  /usr/include/x86_64-linux-gnu/bits/uio.h \
  /usr/include/x86_64-linux-gnu/bits/socket.h \
@@ -649,7 +650,7 @@ ags-ags_append_channel.o: src/ags/audio/task/ags_append_channel.c \
 
 /usr/include/stdc-predef.h:
 
-src/ags/audio/task/ags_append_channel.h:
+src/ags/audio/task/ags_seek_devout.h:
 
 /usr/include/glib-2.0/glib.h:
 
@@ -2089,6 +2090,8 @@ src/ags/audio/ags_note.h:
 
 src/ags-lib/object/ags_connectable.h:
 
+src/ags/object/ags_seekable.h:
+
 src/ags/main.h:
 
 src/ags/lib/ags_log.h:
diff --git a/Makefile b/Makefile
index 5b7c5c6..0c8a232 100644
--- a/Makefile
+++ b/Makefile
@@ -16,6 +16,7 @@
 
 
 
+
 am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
 am__make_running_with_option = \
   case $${target_option-} in \
@@ -95,7 +96,7 @@ CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
-am__installdirs = "$(DESTDIR)$(bindir)"
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(appdatadir)"
 PROGRAMS = $(bin_PROGRAMS)
 am_ags_OBJECTS = ags-ags_connectable.$(OBJEXT) \
 	ags-ags_combo_box_text.$(OBJEXT) ags-ags_list.$(OBJEXT) \
@@ -210,7 +211,7 @@ am_ags_OBJECTS = ags-ags_connectable.$(OBJEXT) \
 	ags-ags_unref_audio_signal.$(OBJEXT) \
 	ags-ags_remove_region_from_selection.$(OBJEXT) \
 	ags-ags_remove_recall_container.$(OBJEXT) \
-	ags-ags_remove_recall.$(OBJEXT) \
+	ags-ags_remove_recall.$(OBJEXT) ags-ags_seek_devout.$(OBJEXT) \
 	ags-ags_append_recall.$(OBJEXT) \
 	ags-ags_add_recall_container.$(OBJEXT) \
 	ags-ags_add_recall.$(OBJEXT) ags-ags_export_output.$(OBJEXT) \
@@ -379,6 +380,34 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+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; }; \
+  }
+DATA = $(appdata_DATA)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
 	$(LISP)config.h.in
 # Read a list of newline-separated strings from the standard input,
@@ -538,6 +567,8 @@ AUTOMAKE_OPTIONS = foreign
 # this lists the binaries to produce, the (non-PHONY, binary) targets in
 # the previous manual Makefile
 noinst_LIBRARIES = 
+EXTRA_DIST = ags.desktop.in
+CLEANFILES = $(appdata_DATA)
 
 # library
 libags_a_CFLAGS = $(GOBJECT_CFLAGS) $(LIBXML2_CFLAGS) 
@@ -547,6 +578,8 @@ libags_a_SOURCES =
 ags_CFLAGS = $(CFLAGS) $(UUID_CFLAGS) $(LIBASOUND2_CFLAGS) $(LIBAO_CFLAGS) $(LIBXML2_CFLAGS) $(OPENSSL_CFLAGS) $(SNDFILE_CFLAGS) $(LIBINSTPATCH_CFLAGS) $(GOBJECT_CFLAGS) $(GDKPIXBUF_CFLAGS) $(CAIRO_CFLAGS) $(GTK_CFLAGS) $(XMLRPC_CFLAGS) $(XMLRPC_UTIL_CFLAGS) $(XMLRPC_SERVER_ABYSS_CFLAGS) $(XMLRPC_SERVER_CGI_CFLAGS) $(XMLRPC_SERVER_CFLAGS) $(PTH_FLAGS)
 ags_LDFLAGS = -ldl $(LDFLAGS) $(UUID_LIBS) $(LIBASOUND2_LIBS) $(LIBAO_LIBS) $(LIBXML2_LIBS) $(OPENSSL_LIBS) $(SNDFILE_LIBS) $(LIBINSTPATCH_LIBS) $(GOBJECT_LIBS) $(GDKPIXBUF_LIBS) $(CAIRO_LIBS) $(GTK_LIBS) $(XMLRPC_LIBS) $(XMLRPC_UTIL_LIBS) $(XMLRPC_SERVER_ABYSS_LIBS) $(XMLRPC_SERVER_CGI_LIBS) $(XMLRPC_SERVER_LIBS) -lm -lrt -lX11 -pthread
 ags_LDADD = 
+appdatadir = $(datadir)/applications
+appdata_DATA = ags.desktop
 ags_SOURCES = ./src/ags-lib/object/ags_connectable.c \
 	./src/ags-lib/object/ags_connectable.h \
 	src/ags/lib/ags_combo_box_text.c src/ags/lib/ags_list.c \
@@ -778,6 +811,7 @@ ags_SOURCES = ./src/ags-lib/object/ags_connectable.c \
 	src/ags/audio/task/ags_append_audio_threaded.h \
 	src/ags/audio/task/ags_cancel_channel.h \
 	src/ags/audio/task/ags_apply_synth.h \
+	src/ags/audio/task/ags_seek_devout.h \
 	src/ags/audio/task/ags_append_recall.h \
 	src/ags/audio/task/ags_add_audio_signal.c \
 	src/ags/audio/task/ags_unref_audio_signal.c \
@@ -789,6 +823,7 @@ ags_SOURCES = ./src/ags-lib/object/ags_connectable.c \
 	src/ags/audio/task/ags_remove_audio.h \
 	src/ags/audio/task/ags_remove_recall_container.c \
 	src/ags/audio/task/ags_remove_recall.c \
+	src/ags/audio/task/ags_seek_devout.c \
 	src/ags/audio/task/ags_append_recall.c \
 	src/ags/audio/task/ags_free_selection.h \
 	src/ags/audio/task/ags_add_recall_container.c \
@@ -1470,6 +1505,7 @@ include ./$(DEPDIR)/ags-ags_ruler.Po
 include ./$(DEPDIR)/ags-ags_runnable.Po
 include ./$(DEPDIR)/ags-ags_save_file.Po
 include ./$(DEPDIR)/ags-ags_scroll_on_play.Po
+include ./$(DEPDIR)/ags-ags_seek_devout.Po
 include ./$(DEPDIR)/ags-ags_seekable.Po
 include ./$(DEPDIR)/ags-ags_segment.Po
 include ./$(DEPDIR)/ags-ags_server.Po
@@ -3653,6 +3689,20 @@ ags-ags_remove_recall.obj: src/ags/audio/task/ags_remove_recall.c
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
 #	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_remove_recall.obj `if test -f 'src/ags/audio/task/ags_remove_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_recall.c'; fi`
 
+ags-ags_seek_devout.o: src/ags/audio/task/ags_seek_devout.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_seek_devout.o -MD -MP -MF $(DEPDIR)/ags-ags_seek_devout.Tpo -c -o ags-ags_seek_devout.o `test -f 'src/ags/audio/task/ags_seek_devout.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_seek_devout.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_seek_devout.Tpo $(DEPDIR)/ags-ags_seek_devout.Po
+#	$(AM_V_CC)source='src/ags/audio/task/ags_seek_devout.c' object='ags-ags_seek_devout.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_seek_devout.o `test -f 'src/ags/audio/task/ags_seek_devout.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_seek_devout.c
+
+ags-ags_seek_devout.obj: src/ags/audio/task/ags_seek_devout.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_seek_devout.obj -MD -MP -MF $(DEPDIR)/ags-ags_seek_devout.Tpo -c -o ags-ags_seek_devout.obj `if test -f 'src/ags/audio/task/ags_seek_devout.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_seek_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_seek_devout.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_seek_devout.Tpo $(DEPDIR)/ags-ags_seek_devout.Po
+#	$(AM_V_CC)source='src/ags/audio/task/ags_seek_devout.c' object='ags-ags_seek_devout.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_seek_devout.obj `if test -f 'src/ags/audio/task/ags_seek_devout.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_seek_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_seek_devout.c'; fi`
+
 ags-ags_append_recall.o: src/ags/audio/task/ags_append_recall.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_append_recall.o -MD -MP -MF $(DEPDIR)/ags-ags_append_recall.Tpo -c -o ags-ags_append_recall.o `test -f 'src/ags/audio/task/ags_append_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_recall.c
 	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_append_recall.Tpo $(DEPDIR)/ags-ags_append_recall.Po
@@ -5990,6 +6040,27 @@ ags-ags_ladspa_manager.obj: src/ags/plugin/ags_ladspa_manager.c
 #	$(AM_V_CC)source='src/ags/plugin/ags_ladspa_manager.c' object='ags-ags_ladspa_manager.obj' libtool=no \
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
 #	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_ladspa_manager.obj `if test -f 'src/ags/plugin/ags_ladspa_manager.c'; then $(CYGPATH_W) 'src/ags/plugin/ags_ladspa_manager.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/plugin/ags_ladspa_manager.c'; fi`
+install-appdataDATA: $(appdata_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(appdatadir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(appdatadir)" || 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)$(appdatadir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(appdatadir)" || exit $$?; \
+	done
+
+uninstall-appdataDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(appdatadir)'; $(am__uninstall_files_from_dir)
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -6215,9 +6286,9 @@ distcleancheck: distclean
 	       exit 1; } >&2
 check-am: all-am
 check: check-am
-all-am: Makefile $(LIBRARIES) $(PROGRAMS) config.h
+all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(DATA) config.h
 installdirs:
-	for dir in "$(DESTDIR)$(bindir)"; do \
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(appdatadir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -6242,6 +6313,7 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -6274,7 +6346,7 @@ info: info-am
 
 info-am:
 
-install-data-am:
+install-data-am: install-appdataDATA install-data-local
 
 install-dvi: install-dvi-am
 
@@ -6321,7 +6393,7 @@ ps: ps-am
 
 ps-am:
 
-uninstall-am: uninstall-binPROGRAMS
+uninstall-am: uninstall-appdataDATA uninstall-binPROGRAMS
 
 .MAKE: all install-am install-strip
 
@@ -6332,16 +6404,26 @@ uninstall-am: uninstall-binPROGRAMS
 	dist-xz dist-zip distcheck distclean distclean-compile \
 	distclean-generic distclean-hdr distclean-tags distcleancheck \
 	distdir distuninstallcheck dvi dvi-am html html-am info \
-	info-am install install-am install-binPROGRAMS install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
+	info-am install install-am install-appdataDATA \
+	install-binPROGRAMS install-data install-data-am \
+	install-data-local 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 \
 	install-ps install-ps-am install-strip installcheck \
 	installcheck-am installdirs maintainer-clean \
 	maintainer-clean-generic mostlyclean mostlyclean-compile \
 	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
-	uninstall-am uninstall-binPROGRAMS
+	uninstall-am uninstall-appdataDATA uninstall-binPROGRAMS
+
+
+ags.desktop: ags.desktop.in
+	$(AM_V_GEN)sed -e 's,\@datadir\@,$(datadir),g' < "$<" > $@
 
+install-data-local:
+	mkdir -p $(DESTDIR)/$(datadir)/gsequencer/icons
+	mkdir -p $(DESTDIR)/$(datadir)/gsequencer/images
+	cp doc/images/jumper.png $(DESTDIR)/$(datadir)/gsequencer/icons/jumper.png
+	cp doc/images/ags.png $(DESTDIR)/$(datadir)/gsequencer/images/ags.png
 
 # 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/Makefile.am b/Makefile.am
index 93259f6..20dc76d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -9,15 +9,32 @@ LDFLAGS = -L/lib -L/usr/lib -L/usr/X11/lib
 # the previous manual Makefile
 noinst_LIBRARIES = 
 bin_PROGRAMS = ags
+EXTRA_DIST =
+CLEANFILES =
 
 # library
-libags_a_CFLAGS=$(GOBJECT_CFLAGS) $(LIBXML2_CFLAGS) 
+libags_a_CFLAGS= $(GOBJECT_CFLAGS) $(LIBXML2_CFLAGS) 
 
 libags_a_SOURCES = 
 
 # application
-ags_CFLAGS=$(CFLAGS) $(UUID_CFLAGS) $(LIBASOUND2_CFLAGS) $(LIBAO_CFLAGS) $(LIBXML2_CFLAGS) $(OPENSSL_CFLAGS) $(SNDFILE_CFLAGS) $(LIBINSTPATCH_CFLAGS) $(GOBJECT_CFLAGS) $(GDKPIXBUF_CFLAGS) $(CAIRO_CFLAGS) $(GTK_CFLAGS) $(XMLRPC_CFLAGS) $(XMLRPC_UTIL_CFLAGS) $(XMLRPC_SERVER_ABYSS_CFLAGS) $(XMLRPC_SERVER_CGI_CFLAGS) $(XMLRPC_SERVER_CFLAGS) $(PTH_FLAGS)
-ags_LDFLAGS=-ldl $(LDFLAGS) $(UUID_LIBS) $(LIBASOUND2_LIBS) $(LIBAO_LIBS) $(LIBXML2_LIBS) $(OPENSSL_LIBS) $(SNDFILE_LIBS) $(LIBINSTPATCH_LIBS) $(GOBJECT_LIBS) $(GDKPIXBUF_LIBS) $(CAIRO_LIBS) $(GTK_LIBS) $(XMLRPC_LIBS) $(XMLRPC_UTIL_LIBS) $(XMLRPC_SERVER_ABYSS_LIBS) $(XMLRPC_SERVER_CGI_LIBS) $(XMLRPC_SERVER_LIBS) -lm -lrt -lX11 -pthread
-ags_LDADD=
+ags_CFLAGS= $(CFLAGS) $(UUID_CFLAGS) $(LIBASOUND2_CFLAGS) $(LIBAO_CFLAGS) $(LIBXML2_CFLAGS) $(OPENSSL_CFLAGS) $(SNDFILE_CFLAGS) $(LIBINSTPATCH_CFLAGS) $(GOBJECT_CFLAGS) $(GDKPIXBUF_CFLAGS) $(CAIRO_CFLAGS) $(GTK_CFLAGS) $(XMLRPC_CFLAGS) $(XMLRPC_UTIL_CFLAGS) $(XMLRPC_SERVER_ABYSS_CFLAGS) $(XMLRPC_SERVER_CGI_CFLAGS) $(XMLRPC_SERVER_CFLAGS) $(PTH_FLAGS)
+ags_LDFLAGS= -ldl $(LDFLAGS) $(UUID_LIBS) $(LIBASOUND2_LIBS) $(LIBAO_LIBS) $(LIBXML2_LIBS) $(OPENSSL_LIBS) $(SNDFILE_LIBS) $(LIBINSTPATCH_LIBS) $(GOBJECT_LIBS) $(GDKPIXBUF_LIBS) $(CAIRO_LIBS) $(GTK_LIBS) $(XMLRPC_LIBS) $(XMLRPC_UTIL_LIBS) $(XMLRPC_SERVER_ABYSS_LIBS) $(XMLRPC_SERVER_CGI_LIBS) $(XMLRPC_SERVER_LIBS) -lm -lrt -lX11 -pthread
+ags_LDADD = 
 
-ags_SOURCES = ./src/ags-lib/object/ags_connectable.c ./src/ags-lib/object/ags_connectable.h src/ags/lib/ags_combo_box_text.c src/ags/lib/ags_list.c src/ags/lib/ags_container.c src/ags/lib/ags_parameter.h src/ags/lib/ags_list.h src/ags/lib/ags_log.c src/ags/lib/ags_container.h src/ags/lib/ags_combo_box_text.h src/ags/lib/ags_log.h src/ags/lib/ags_parameter.c src/ags/X/editor/ags_notebook_callbacks.c src/ags/X/editor/ags_meter.h src/ags/X/editor/ags_toolbar.h src/ags/X/editor/ags_machine_radio_button.h src/ags/X/editor/ags_file_selection_callbacks.h src/ags/X/editor/ags_notebook_callbacks.h src/ags/X/editor/ags_note_edit.h src/ags/X/editor/ags_meter_callbacks.c src/ags/X/editor/ags_notebook.h src/ags/X/editor/ags_sf2_chooser.h src/ags/X/editor/ags_toolbar_mode_stock.h src/ags/X/editor/ags_meter_callbacks.h src/ags/X/editor/ags_toolbar_callbacks.c src/ags/X/editor/ags_machine_selector.c src/ags/X/editor/ags_machine_selector_callbacks.c src/ags/X/editor/ags_machine_radio_button.c src/ags/X/editor/ags_sf2_chooser.c src/ags/X/editor/ags_machine_selector_callbacks.h src/ags/X/editor/ags_sf2_chooser_callbacks.c src/ags/X/editor/ags_notebook.c src/ags/X/editor/ags_note_edit_callbacks.c src/ags/X/editor/ags_file_selection_callbacks.c src/ags/X/editor/ags_machine_selection.c src/ags/X/editor/ags_inline_player_callbacks.h src/ags/X/editor/ags_inline_player.c src/ags/X/editor/ags_meter.c src/ags/X/editor/ags_file_selection.h src/ags/X/editor/ags_inline_player.h src/ags/X/editor/ags_sf2_chooser_callbacks.h src/ags/X/editor/ags_file_selection.c src/ags/X/editor/ags_machine_selector.h src/ags/X/editor/ags_note_edit_callbacks.h src/ags/X/editor/ags_note_edit.c src/ags/X/editor/ags_inline_player_callbacks.c src/ags/X/editor/ags_toolbar_callbacks.h src/ags/X/editor/ags_machine_selection.h src/ags/X/editor/ags_toolbar.c src/ags/X/ags_line_callbacks.h src/ags/X/ags_plugin_preferences.c src/ags/X/ags_link_editor.c src/ags/X/ags_pad_callbacks.h src/ags/X/ags_machine_callbacks.c src/ags/X/ags_server_preferences_callbacks.h src/ags/X/ags_listing_editor_callbacks.c src/ags/X/ags_link_collection_editor_callbacks.c src/ags/X/ags_generic_preferences_callbacks.c src/ags/X/ags_property_collection_editor_callbacks.c src/ags/X/ags_property_collection_editor.h src/ags/X/ags_resize_editor.h src/ags/X/ags_property_editor.h src/ags/X/ags_window_callbacks.h src/ags/X/ags_property_editor_callbacks.c src/ags/X/machine/ags_synth_callbacks.h src/ags/X/machine/ags_synth.c src/ags/X/machine/ags_mixer.c src/ags/X/machine/ags_matrix_callbacks.c src/ags/X/machine/ags_panel_input_line.c src/ags/X/machine/ags_synth_input_line.c src/ags/X/machine/ags_drum_callbacks.h src/ags/X/machine/ags_mixer_callbacks.c src/ags/X/machine/ags_synth_callbacks.c src/ags/X/machine/ags_ffplayer_callbacks.h src/ags/X/machine/ags_drum_input_line.h src/ags/X/machine/ags_matrix.h src/ags/X/machine/ags_mixer_input_line.c src/ags/X/machine/ags_oscillator.c src/ags/X/machine/ags_oscillator.h src/ags/X/machine/ags_oscillator_callbacks.h src/ags/X/machine/ags_mixer.h src/ags/X/machine/ags_panel_input_pad.h src/ags/X/machine/ags_panel_input_pad.c src/ags/X/machine/ags_matrix.c src/ags/X/machine/ags_panel.h src/ags/X/machine/ags_drum_output_line_callbacks.c src/ags/X/machine/ags_ffplayer.h src/ags/X/machine/ags_panel_callbacks.c src/ags/X/machine/ags_mixer_input_pad.c src/ags/X/machine/ags_panel.c src/ags/X/machine/ags_drum.c src/ags/X/machine/ags_matrix_callbacks.h src/ags/X/machine/ags_drum_output_line.h src/ags/X/machine/ags_drum_output_pad.h src/ags/X/machine/ags_synth_input_pad.h src/ags/X/machine/ags_panel_callbacks.h src/ags/X/machine/ags_ffplayer.c src/ags/X/machine/ags_drum_output_line_callbacks.h src/ags/X/machine/ags_drum_output_pad_callbacks.c src/ags/X/machine/ags_drum_output_pad_callbacks.h src/ags/X/machine/ags_drum_input_pad_callbacks.h src/ags/X/machine/ags_oscillator_callbacks.c src/ags/X/machine/ags_drum_callbacks.c src/ags/X/machine/ags_synth_input_line.h src/ags/X/machine/ags_drum_input_pad_callbacks.c src/ags/X/machine/ags_drum_input_pad.c src/ags/X/machine/ags_panel_input_line.h src/ags/X/machine/ags_drum_input_line_callbacks.h src/ags/X/machine/ags_drum_output_line.c src/ags/X/machine/ags_mixer_callbacks.h src/ags/X/machine/ags_synth.h src/ags/X/machine/ags_mixer_input_line.h src/ags/X/machine/ags_drum.h src/ags/X/machine/ags_drum_input_line.c src/ags/X/machine/ags_ffplayer_callbacks.c src/ags/X/machine/ags_drum_output_pad.c src/ags/X/machine/ags_drum_input_pad.h src/ags/X/machine/ags_drum_input_line_callbacks.c src/ags/X/machine/ags_mixer_input_pad.h src/ags/X/machine/ags_synth_input_pad.c src/ags/X/ags_server_preferences.h src/ags/X/ags_line_editor_callbacks.h src/ags/X/ags_pad_editor_callbacks.c src/ags/X/ags_listing_editor_callbacks.h src/ags/X/ags_line_member_callbacks.c src/ags/X/ags_editor.h src/ags/X/ags_machine_editor.h src/ags/X/ags_plugin_preferences_callbacks.h src/ags/X/ags_export_window_callbacks.h src/ags/X/ags_editor_callbacks.c src/ags/X/ags_pad_editor.h src/ags/X/ags_server_preferences.c src/ags/X/ags_line_editor.c src/ags/X/ags_ladspa_browser.h src/ags/X/ags_audio_preferences.c src/ags/X/ags_pad.c src/ags/X/ags_line.c src/ags/X/ags_menu_bar_callbacks.c src/ags/X/ags_generic_preferences_callbacks.h src/ags/X/ags_pad.h src/ags/X/ags_audio_preferences_callbacks.h src/ags/X/ags_generic_preferences.c src/ags/X/ags_window.c src/ags/X/ags_machine_editor_callbacks.h src/ags/X/ags_editor_callbacks.h src/ags/X/ags_menu_bar_callbacks.h src/ags/X/ags_line_member_editor.h src/ags/X/ags_property_collection_editor_callbacks.h src/ags/X/ags_line_editor_callbacks.c src/ags/X/ags_property_editor.c src/ags/X/ags_link_editor_callbacks.c src/ags/X/ags_server_preferences_callbacks.c src/ags/X/ags_pad_callbacks.c src/ags/X/ags_line_member.h src/ags/X/ags_audio_preferences_callbacks.c src/ags/X/ags_performance_preferences.h src/ags/X/ags_property_collection_editor.c src/ags/X/ags_performance_preferences_callbacks.h src/ags/X/ags_line.h src/ags/X/ags_machine.c src/ags/X/ags_preferences_callbacks.c src/ags/X/ags_export_window.c src/ags/X/ags_menu_bar.c src/ags/X/ags_plugin_preferences_callbacks.c src/ags/X/ags_line_member_callbacks.h src/ags/X/ags_preferences.c src/ags/X/ags_export_window.h src/ags/X/ags_pad_editor_callbacks.h src/ags/X/ags_window.h src/ags/X/ags_machine_callbacks.h src/ags/X/ags_machine.h src/ags/X/ags_line_callbacks.c src/ags/X/ags_link_editor_callbacks.h src/ags/X/ags_navigation_callbacks.h src/ags/X/ags_pad_editor.c src/ags/X/ags_ladspa_browser.c src/ags/X/ags_editor.c src/ags/X/ags_resize_editor.c src/ags/X/ags_property_listing_editor.c src/ags/X/ags_property_editor_callbacks.h src/ags/X/ags_line_member_editor_callbacks.h src/ags/X/ags_window_callbacks.c src/ags/X/ags_audio_preferences.h src/ags/X/ags_navigation_callbacks.c src/ags/X/ags_plugin_preferences.h src/ags/X/ags_performance_preferences_callbacks.c src/ags/X/ags_line_member.c src/ags/X/ags_preferences.h src/ags/X/ags_generic_preferences.h src/ags/X/ags_navigation.h src/ags/X/ags_listing_editor.h src/ags/X/ags_performance_preferences.c src/ags/X/ags_link_editor.h src/ags/X/ags_ladspa_browser_callbacks.c src/ags/X/ags_link_collection_editor.c src/ags/X/ags_preferences_callbacks.h src/ags/X/ags_machine_editor_callbacks.c src/ags/X/ags_menu_bar.h src/ags/X/ags_export_window_callbacks.c src/ags/X/ags_line_member_editor_callbacks.c src/ags/X/ags_link_collection_editor.h src/ags/X/ags_link_collection_editor_callbacks.h src/ags/X/ags_property_listing_editor.h src/ags/X/ags_navigation.c src/ags/X/ags_machine_editor.c src/ags/X/ags_line_member_editor.c src/ags/X/ags_ladspa_browser_callbacks.h src/ags/X/ags_line_editor.h src/ags/X/ags_listing_editor.c src/ags/object/ags_applicable.c src/ags/object/ags_seekable.h src/ags/object/ags_packable.c src/ags/object/ags_persistable.h src/ags/object/ags_packable.h src/ags/object/ags_applicable.h src/ags/object/ags_main_loop.c src/ags/object/ags_soundcard.c src/ags/object/ags_marshal.c src/ags/object/ags_mutable.h src/ags/object/ags_plugin.h src/ags/object/ags_stackable.h src/ags/object/ags_runnable.c src/ags/object/ags_tactable.h src/ags/object/ags_mutable.c src/ags/object/ags_runnable.h src/ags/object/ags_effect.c src/ags/object/ags_playable.c src/ags/object/ags_dynamic_connectable.c src/ags/object/ags_seekable.c src/ags/object/ags_countable.c src/ags/object/ags_plugin.c src/ags/object/ags_tree_iterator.h src/ags/object/ags_playable.h src/ags/object/ags_effect.h src/ags/object/ags_soundcard.h src/ags/object/ags_countable.h src/ags/object/ags_marshal.h src/ags/object/ags_portlet.h src/ags/object/ags_dynamic_connectable.h src/ags/object/ags_tactable.c src/ags/object/ags_tree_iterator.c src/ags/object/ags_persistable.c src/ags/object/ags_main_loop.h src/ags/object/ags_stackable.c src/ags/object/ags_portlet.c src/ags/util/ags_id_generator.c src/ags/util/ags_id_generator.h src/ags/widget/ags_led.h src/ags/widget/ags_expander_set.c src/ags/widget/ags_expander_set.h src/ags/widget/ags_menu.c src/ags/widget/ags_hindicator.h src/ags/widget/ags_menu.h src/ags/widget/ags_timebar.c src/ags/widget/ags_dial.c src/ags/widget/ags_ruler.h src/ags/widget/ags_dial.h src/ags/widget/ags_segment.c src/ags/widget/ags_htimebar.c src/ags/widget/ags_option_menu.h src/ags/widget/ags_indicator.c src/ags/widget/ags_htimebar.h src/ags/widget/ags_option_menu.c src/ags/widget/ags_expander.h src/ags/widget/ags_menu_item.h src/ags/widget/ags_hindicator.c src/ags/widget/ags_cartesian.h src/ags/widget/ags_indicator.h src/ags/widget/ags_cartesian.c src/ags/widget/ags_menu_item.c src/ags/widget/ags_waveform.c src/ags/widget/ags_ruler.c src/ags/widget/ags_expander.c src/ags/widget/ags_vindicator.c src/ags/widget/ags_timebar.h src/ags/widget/ags_led.c src/ags/widget/ags_waveform.h src/ags/widget/ags_table.c src/ags/widget/ags_table.h src/ags/widget/ags_vindicator.h src/ags/widget/ags_segment.h src/ags/main.c src/ags/audio/task/ags_export_output.h src/ags/audio/task/ags_set_output_device.c src/ags/audio/task/ags_add_audio.h src/ags/audio/task/ags_set_samplerate.c src/ags/audio/task/ags_remove_point_from_selection.c src/ags/audio/task/ags_save_file.h src/ags/audio/task/ags_set_buffer_size.h src/ags/audio/task/ags_link_channel.c src/ags/audio/task/ags_save_file.c src/ags/audio/task/ags_append_audio_threaded.h src/ags/audio/task/ags_cancel_channel.h src/ags/audio/task/ags_apply_synth.h src/ags/audio/task/ags_append_recall.h src/ags/audio/task/ags_add_audio_signal.c src/ags/audio/task/ags_unref_audio_signal.c src/ags/audio/task/ags_remove_region_from_selection.c src/ags/audio/task/ags_change_indicator.h src/ags/audio/task/ags_remove_point_from_selection.h src/ags/audio/task/ags_set_audio_channels.h src/ags/audio/task/ags_scroll_on_play.h src/ags/audio/task/ags_remove_audio.h src/ags/audio/task/ags_remove_recall_container.c src/ags/audio/task/ags_remove_recall.c src/ags/audio/task/ags_append_recall.c src/ags/audio/task/ags_free_selection.h src/ags/audio/task/ags_add_recall_container.c src/ags/audio/task/ags_add_recall.c src/ags/audio/task/ags_export_output.c src/ags/audio/task/ags_init_channel.h src/ags/audio/task/ags_remove_note.c src/ags/audio/task/ags_apply_wavetable.h src/ags/audio/task/ags_add_audio_signal.h src/ags/audio/task/ags_cancel_recall.h src/ags/audio/task/ags_set_audio_channels.c src/ags/audio/task/ags_cancel_audio.c src/ags/audio/task/ags_unref_audio_signal.h src/ags/audio/task/ags_add_region_to_selection.c src/ags/audio/task/ags_change_tact.h src/ags/audio/task/ags_init_audio.c src/ags/audio/task/ags_channel_set_recycling.c src/ags/audio/task/ags_display_tact.c src/ags/audio/task/ags_add_point_to_selection.h src/ags/audio/task/ags_toggle_pattern_bit.h src/ags/audio/task/ags_append_channel.c src/ags/audio/task/ags_change_indicator.c src/ags/audio/task/ags_add_note.c src/ags/audio/task/ags_channel_set_recycling.h src/ags/audio/task/ags_cancel_audio.h src/ags/audio/task/recall/ags_set_muted.c src/ags/audio/task/recall/ags_set_muted.h src/ags/audio/task/recall/ags_apply_sequencer_length.c src/ags/audio/task/recall/ags_apply_bpm.h src/ags/audio/task/recall/ags_apply_tact.c src/ags/audio/task/recall/ags_apply_bpm.c src/ags/audio/task/recall/ags_apply_sequencer_length.h src/ags/audio/task/recall/ags_apply_tact.h src/ags/audio/task/ags_remove_region_from_selection.h src/ags/audio/task/ags_cancel_channel.c src/ags/audio/task/ags_add_recall_container.h src/ags/audio/task/ags_add_recall.h src/ags/audio/task/ags_add_note.h src/ags/audio/task/ags_start_devout.c src/ags/audio/task/ags_append_audio_threaded.c src/ags/audio/task/ags_append_audio.c src/ags/audio/task/ags_init_channel.c src/ags/audio/task/ags_remove_audio_signal.h src/ags/audio/task/ags_toggle_led.c src/ags/audio/task/ags_set_buffer_size.c src/ags/audio/task/ags_add_region_to_selection.h src/ags/audio/task/ags_audio_set_recycling.h src/ags/audio/task/ags_toggle_led.h src/ags/audio/task/ags_resize_audio.h src/ags/audio/task/ags_free_selection.c src/ags/audio/task/ags_add_audio.c src/ags/audio/task/ags_set_samplerate.h src/ags/audio/task/ags_apply_synth.c src/ags/audio/task/ags_open_single_file.h src/ags/audio/task/ags_remove_audio.c src/ags/audio/task/ags_cancel_recall.c src/ags/audio/task/ags_init_audio.h src/ags/audio/task/ags_remove_note.h src/ags/audio/task/ags_remove_audio_signal.c src/ags/audio/task/ags_audio_set_recycling.c src/ags/audio/task/ags_add_point_to_selection.c src/ags/audio/task/ags_scroll_on_play.c src/ags/audio/task/ags_set_devout_play_flags.c src/ags/audio/task/ags_apply_wavetable.c src/ags/audio/task/ags_add_line_member.c src/ags/audio/task/ags_open_file.h src/ags/audio/task/ags_set_output_device.h src/ags/audio/task/ags_toggle_pattern_bit.c src/ags/audio/task/ags_open_file.c src/ags/audio/task/ags_open_single_file.c src/ags/audio/task/ags_append_audio.h src/ags/audio/task/ags_start_devout.h src/ags/audio/task/ags_display_tact.h src/ags/audio/task/ags_remove_recall_container.h src/ags/audio/task/ags_remove_recall.h src/ags/audio/task/ags_change_tact.c src/ags/audio/task/ags_append_channel.h src/ags/audio/task/ags_resize_audio.c src/ags/audio/task/ags_link_channel.h src/ags/audio/task/ags_add_line_member.h src/ags/audio/task/ags_set_devout_play_flags.h src/ags/audio/ags_devout.c src/ags/audio/ags_recall_channel.h src/ags/audio/ags_timestamp_factory.h src/ags/audio/ags_garbage_collector.c src/ags/audio/ags_garbage_collector.h src/ags/audio/ags_recall_container.c src/ags/audio/ags_timestamp.c src/ags/audio/ags_channel_iter.h src/ags/audio/ags_recall_channel_run.c src/ags/audio/ags_audio.h src/ags/audio/ags_port.c src/ags/audio/ags_notation.c src/ags/audio/ags_recall_dependency.h src/ags/audio/ags_recycling.c src/ags/audio/ags_recall_audio_signal.h src/ags/audio/ags_input.c src/ags/audio/ags_synths.c src/ags/audio/ags_input.h src/ags/audio/ags_recycling_container.h src/ags/audio/ags_recall_id.h src/ags/audio/ags_note.c src/ags/audio/ags_timestamp_factory.c src/ags/audio/ags_channel.c src/ags/audio/ags_recall_audio.c src/ags/audio/ags_audio_signal.c src/ags/audio/ags_output.h src/ags/audio/ags_libao.c src/ags/audio/file/ags_ipatch_sf2_reader.c src/ags/audio/file/ags_audio_file_xml.h src/ags/audio/file/ags_ipatch.c src/ags/audio/file/ags_audio_file.c src/ags/audio/file/ags_sndfile.h src/ags/audio/file/ags_ipatch.h src/ags/audio/file/ags_audio_file.h src/ags/audio/file/ags_ipatch_sf2_reader.h src/ags/audio/file/ags_audio_file_xml.c src/ags/audio/file/ags_sndfile.c src/ags/audio/ags_devout.h src/ags/audio/ags_port.h src/ags/audio/ags_note.h src/ags/audio/ags_timestamp.h src/ags/audio/ags_notation.h src/ags/audio/ags_recall_audio_run.c src/ags/audio/ags_recycling_container.c src/ags/audio/ags_audio_signal.h src/ags/audio/ags_recall_recycling.h src/ags/audio/recall/ags_mute_audio.h src/ags/audio/recall/ags_clone_channel.c src/ags/audio/recall/ags_copy_channel.c src/ags/audio/recall/ags_copy_pattern_channel.c src/ags/audio/recall/ags_copy_recycling.c src/ags/audio/recall/ags_volume_audio_signal.h src/ags/audio/recall/ags_play_channel.h src/ags/audio/recall/ags_play_notation_audio_run.c src/ags/audio/recall/ags_buffer_audio_signal.c src/ags/audio/recall/ags_play_channel_run.c src/ags/audio/recall/ags_stream_channel_run.c src/ags/audio/recall/ags_copy_notation_audio_run.c src/ags/audio/recall/ags_mute_channel.c src/ags/audio/recall/ags_count_beats_audio.h src/ags/audio/recall/ags_copy_pattern_audio.c src/ags/audio/recall/ags_copy_pattern_audio_run.c src/ags/audio/recall/ags_clone_channel_run.h src/ags/audio/recall/ags_delay_audio.h src/ags/audio/recall/ags_copy_notation_audio_run.h src/ags/audio/recall/ags_stream.c src/ags/audio/recall/ags_play_audio_file.h src/ags/audio/recall/ags_loop_channel_run.c src/ags/audio/recall/ags_play_pattern.c src/ags/audio/recall/ags_stream_channel_run.h src/ags/audio/recall/ags_amplifier.h src/ags/audio/recall/ags_echo.c src/ags/audio/recall/ags_play_note.c src/ags/audio/recall/ags_buffer_channel.c src/ags/audio/recall/ags_clone_channel_run.c src/ags/audio/recall/ags_peak_channel.h src/ags/audio/recall/ags_play_recycling.h src/ags/audio/recall/ags_stream_channel.h src/ags/audio/recall/ags_amplifier.c src/ags/audio/recall/ags_mute_audio_signal.h src/ags/audio/recall/ags_copy_notation_audio.c src/ags/audio/recall/ags_buffer_channel_run.h src/ags/audio/recall/ags_copy_recycling.h src/ags/audio/recall/ags_down_mix.h src/ags/audio/recall/ags_volume_recycling.h src/ags/audio/recall/ags_volume_channel_run.h src/ags/audio/recall/ags_stream_channel.c src/ags/audio/recall/ags_echo.h src/ags/audio/recall/ags_delay_audio_run.h src/ags/audio/recall/ags_stream_audio_signal.h src/ags/audio/recall/ags_mute_recycling.c src/ags/audio/recall/ags_play_pattern.h src/ags/audio/recall/ags_delay_audio.c src/ags/audio/recall/ags_buffer_recycling.c src/ags/audio/recall/ags_stream_recycling.h src/ags/audio/recall/ags_play_audio_signal.c src/ags/audio/recall/ags_play_channel_run_master.h src/ags/audio/recall/ags_volume_recycling.c src/ags/audio/recall/ags_loop_channel.c src/ags/audio/recall/ags_buffer_recycling.h src/ags/audio/recall/ags_copy_pattern_channel_run.h src/ags/audio/recall/ags_peak_channel_run.c src/ags/audio/recall/ags_loop_channel.h src/ags/audio/recall/ags_play_audio.h src/ags/audio/recall/ags_copy_audio_signal.c src/ags/audio/recall/ags_mute_channel_run.h src/ags/audio/recall/ags_copy_channel.h src/ags/audio/recall/ags_play_notation_audio.h src/ags/audio/recall/ags_play_note.h src/ags/audio/recall/ags_synths.h src/ags/audio/recall/ags_play_recycling.c src/ags/audio/recall/ags_mute_channel_run.c src/ags/audio/recall/ags_buffer_channel.h src/ags/audio/recall/ags_play_notation_audio_run.h src/ags/audio/recall/ags_volume_channel_run.c src/ags/audio/recall/ags_play_channel_run_master.c src/ags/audio/recall/ags_stream.h src/ags/audio/recall/ags_copy_pattern_channel.h src/ags/audio/recall/ags_play_channel_run.h src/ags/audio/recall/ags_mute_channel.h src/ags/audio/recall/ags_mute_audio.c src/ags/audio/recall/ags_volume_channel.h src/ags/audio/recall/ags_volume_audio_signal.c src/ags/audio/recall/ags_stream_audio_signal.c src/ags/audio/recall/ags_count_beats_audio_run.h src/ags/audio/recall/ags_copy_audio_signal.h src/ags/audio/recall/ags_copy_channel_run.c src/ags/audio/recall/ags_delay_audio_run.c src/ags/audio/recall/ags_mute_audio_signal.c src/ags/audio/recall/ags_copy_notation_audio.h src/ags/audio/recall/ags_clone_channel.h src/ags/audio/recall/ags_buffer_channel_run.c src/ags/audio/recall/ags_play_audio.c src/ags/audio/recall/ags_copy_pattern_audio.h src/ags/audio/recall/ags_count_beats_audio.c src/ags/audio/recall/ags_play_channel.c src/ags/audio/recall/ags_count_beats_audio_run.c src/ags/audio/recall/ags_copy_pattern_audio_run.h src/ags/audio/recall/ags_stream_recycling.c src/ags/audio/recall/ags_play_audio_file.c src/ags/audio/recall/ags_play_notation_audio.c src/ags/audio/recall/ags_loop_channel_run.h src/ags/audio/recall/ags_mute_recycling.h src/ags/audio/recall/ags_peak_channel.c src/ags/audio/recall/ags_buffer_audio_signal.h src/ags/audio/recall/ags_peak_channel_run.h src/ags/audio/recall/ags_volume_channel.c src/ags/audio/recall/ags_play_audio_signal.h src/ags/audio/recall/ags_copy_channel_run.h src/ags/audio/recall/ags_copy_pattern_channel_run.c src/ags/audio/ags_recall_ladspa.h src/ags/audio/ags_recall_recycling.c src/ags/audio/ags_recall.h src/ags/audio/ags_recall_channel_run.h src/ags/audio/ags_recall_audio.h src/ags/audio/ags_channel.h src/ags/audio/ags_pattern.c src/ags/audio/ags_synths.h src/ags/audio/ags_recall_factory.h src/ags/audio/ags_recall_audio_signal.c src/ags/audio/ags_config.h src/ags/audio/ags_effect.h src/ags/audio/ags_pattern.h src/ags/audio/ags_output.c src/ags/audio/ags_recall_channel_run_dummy.c src/ags/audio/ags_recall_dependency.c src/ags/audio/ags_channel_iter.c src/ags/audio/ags_recall_channel_run_dummy.h src/ags/audio/ags_recall.c src/ags/audio/ags_recall_ladspa_run.h src/ags/audio/ags_recall_recycling_dummy.h src/ags/audio/ags_libao.h src/ags/audio/ags_task.h src/ags/audio/ags_config.c src/ags/audio/ags_recall_channel.c src/ags/audio/ags_audio.c src/ags/audio/ags_recall_ladspa_run.c src/ags/audio/ags_recall_audio_run.h src/ags/audio/ags_recall_id.c src/ags/audio/ags_task.c src/ags/audio/ags_recall_ladspa.c src/ags/audio/ags_recall_factory.c src/ags/audio/ags_recall_container.h src/ags/audio/ags_recycling.h src/ags/audio/ags_recall_recycling_dummy.c src/ags/file/ags_file_util.h src/ags/file/ags_file_sound.h src/ags/file/ags_file_thread.h src/ags/file/ags_file_gui.h src/ags/file/ags_file_lookup.h src/ags/file/ags_file_id_ref.c src/ags/file/ags_file.h src/ags/file/ags_file_link.c src/ags/file/ags_file_write.h src/ags/file/ags_file_read.h src/ags/file/ags_file_id_ref.h src/ags/file/ags_file_sound.c src/ags/file/ags_file_thread.c src/ags/file/ags_file_util.c src/ags/file/ags_file_lookup.c src/ags/file/ags_file_launch.c src/ags/file/ags_file_stock.h src/ags/file/ags_file_gui.c src/ags/file/ags_file.c src/ags/file/ags_file_launch.h src/ags/file/ags_file_link.h src/ags/thread/ags_record_thread.c src/ags/thread/ags_thread_pool.h src/ags/thread/ags_timestamp_thread.h src/ags/thread/ags_mutex_manager.h src/ags/thread/ags_mutex_manager.c src/ags/thread/ags_task_thread.h src/ags/thread/ags_audio_loop.h src/ags/thread/ags_gui_task_thread.h src/ags/thread/ags_task_completion.h src/ags/thread/ags_task_completion.c src/ags/thread/ags_recycling_thread.h src/ags/thread/ags_autosave_thread.h src/ags/thread/ags_returnable_thread.c src/ags/thread/ags_autosave_thread.c src/ags/thread/ags_export_thread.h src/ags/thread/ags_history.h src/ags/thread/ags_iterator_thread.h src/ags/thread/ags_devout_thread.c src/ags/thread/ags_thread_pool.c src/ags/thread/ags_gui_task_thread.c src/ags/thread/ags_gui_thread.h src/ags/thread/ags_task_thread.c src/ags/thread/ags_timestamp_thread.c src/ags/thread/ags_thread-posix.h src/ags/thread/ags_async_queue.h src/ags/thread/ags_record_thread.h src/ags/thread/ags_recycling_thread_callbacks.c src/ags/thread/ags_recycling_thread_callbacks.h src/ags/thread/ags_iterator_thread.c src/ags/thread/ags_async_queue.c src/ags/thread/ags_export_thread.c src/ags/thread/ags_audio_loop.c src/ags/thread/ags_returnable_thread.h src/ags/thread/ags_recycling_thread.c src/ags/thread/ags_devout_thread.h src/ags/thread/ags_single_thread.h src/ags/thread/ags_thread-posix.c src/ags/thread/ags_history.c src/ags/thread/ags_gui_thread.c src/ags/thread/ags_single_thread.c src/ags/server/ags_registry.c src/ags/server/ags_registry.h src/ags/server/ags_server.h src/ags/server/ags_remote_task.h src/ags/server/ags_remote_task.c src/ags/server/ags_server.c src/ags/plugin/ags_plugin_stock.h src/ags/plugin/ags_plugin_factory.h src/ags/plugin/ags_ladspa_manager.h src/ags/plugin/ags_plugin_factory.c src/ags/plugin/ags_ladspa_manager.c src/ags/main.h
+appdatadir = $(datadir)/applications
+appdata_DATA = ags.desktop
+
+EXTRA_DIST += ags.desktop.in
+CLEANFILES += $(appdata_DATA)
+
+ags_SOURCES = ./src/ags-lib/object/ags_connectable.c ./src/ags-lib/object/ags_connectable.h src/ags/lib/ags_combo_box_text.c src/ags/lib/ags_list.c src/ags/lib/ags_container.c src/ags/lib/ags_parameter.h src/ags/lib/ags_list.h src/ags/lib/ags_log.c src/ags/lib/ags_container.h src/ags/lib/ags_combo_box_text.h src/ags/lib/ags_log.h src/ags/lib/ags_parameter.c src/ags/X/editor/ags_notebook_callbacks.c src/ags/X/editor/ags_meter.h src/ags/X/editor/ags_toolbar.h src/ags/X/editor/ags_machine_radio_button.h src/ags/X/editor/ags_file_selection_callbacks.h src/ags/X/editor/ags_notebook_callbacks.h src/ags/X/editor/ags_note_edit.h src/ags/X/editor/ags_meter_callbacks.c src/ags/X/editor/ags_notebook.h src/ags/X/editor/ags_sf2_chooser.h src/ags/X/editor/ags_toolbar_mode_stock.h src/ags/X/editor/ags_meter_callbacks.h src/ags/X/editor/ags_toolbar_callbacks.c src/ags/X/editor/ags_machine_selector.c src/ags/X/editor/ags_machine_selector_callbacks.c src/ags/X/editor/ags_machine_radio_button.c src/ags/X/editor/ags_sf2_chooser.c src/ags/X/editor/ags_machine_selector_callbacks.h src/ags/X/editor/ags_sf2_chooser_callbacks.c src/ags/X/editor/ags_notebook.c src/ags/X/editor/ags_note_edit_callbacks.c src/ags/X/editor/ags_file_selection_callbacks.c src/ags/X/editor/ags_machine_selection.c src/ags/X/editor/ags_inline_player_callbacks.h src/ags/X/editor/ags_inline_player.c src/ags/X/editor/ags_meter.c src/ags/X/editor/ags_file_selection.h src/ags/X/editor/ags_inline_player.h src/ags/X/editor/ags_sf2_chooser_callbacks.h src/ags/X/editor/ags_file_selection.c src/ags/X/editor/ags_machine_selector.h src/ags/X/editor/ags_note_edit_callbacks.h src/ags/X/editor/ags_note_edit.c src/ags/X/editor/ags_inline_player_callbacks.c src/ags/X/editor/ags_toolbar_callbacks.h src/ags/X/editor/ags_machine_selection.h src/ags/X/editor/ags_toolbar.c src/ags/X/ags_line_callbacks.h src/ags/X/ags_plugin_preferences.c src/ags/X/ags_link_editor.c src/ags/X/ags_pad_callbacks.h src/ags/X/ags_machine_callbacks.c src/ags/X/ags_server_preferences_callbacks.h src/ags/X/ags_listing_editor_callbacks.c src/ags/X/ags_link_collection_editor_callbacks.c src/ags/X/ags_generic_preferences_callbacks.c src/ags/X/ags_property_collection_editor_callbacks.c src/ags/X/ags_property_collection_editor.h src/ags/X/ags_resize_editor.h src/ags/X/ags_property_editor.h src/ags/X/ags_window_callbacks.h src/ags/X/ags_property_editor_callbacks.c src/ags/X/machine/ags_synth_callbacks.h src/ags/X/machine/ags_synth.c src/ags/X/machine/ags_mixer.c src/ags/X/machine/ags_matrix_callbacks.c src/ags/X/machine/ags_panel_input_line.c src/ags/X/machine/ags_synth_input_line.c src/ags/X/machine/ags_drum_callbacks.h src/ags/X/machine/ags_mixer_callbacks.c src/ags/X/machine/ags_synth_callbacks.c src/ags/X/machine/ags_ffplayer_callbacks.h src/ags/X/machine/ags_drum_input_line.h src/ags/X/machine/ags_matrix.h src/ags/X/machine/ags_mixer_input_line.c src/ags/X/machine/ags_oscillator.c src/ags/X/machine/ags_oscillator.h src/ags/X/machine/ags_oscillator_callbacks.h src/ags/X/machine/ags_mixer.h src/ags/X/machine/ags_panel_input_pad.h src/ags/X/machine/ags_panel_input_pad.c src/ags/X/machine/ags_matrix.c src/ags/X/machine/ags_panel.h src/ags/X/machine/ags_drum_output_line_callbacks.c src/ags/X/machine/ags_ffplayer.h src/ags/X/machine/ags_panel_callbacks.c src/ags/X/machine/ags_mixer_input_pad.c src/ags/X/machine/ags_panel.c src/ags/X/machine/ags_drum.c src/ags/X/machine/ags_matrix_callbacks.h src/ags/X/machine/ags_drum_output_line.h src/ags/X/machine/ags_drum_output_pad.h src/ags/X/machine/ags_synth_input_pad.h src/ags/X/machine/ags_panel_callbacks.h src/ags/X/machine/ags_ffplayer.c src/ags/X/machine/ags_drum_output_line_callbacks.h src/ags/X/machine/ags_drum_output_pad_callbacks.c src/ags/X/machine/ags_drum_output_pad_callbacks.h src/ags/X/machine/ags_drum_input_pad_callbacks.h src/ags/X/machine/ags_oscillator_callbacks.c src/ags/X/machine/ags_drum_callbacks.c src/ags/X/machine/ags_synth_input_line.h src/ags/X/machine/ags_drum_input_pad_callbacks.c src/ags/X/machine/ags_drum_input_pad.c src/ags/X/machine/ags_panel_input_line.h src/ags/X/machine/ags_drum_input_line_callbacks.h src/ags/X/machine/ags_drum_output_line.c src/ags/X/machine/ags_mixer_callbacks.h src/ags/X/machine/ags_synth.h src/ags/X/machine/ags_mixer_input_line.h src/ags/X/machine/ags_drum.h src/ags/X/machine/ags_drum_input_line.c src/ags/X/machine/ags_ffplayer_callbacks.c src/ags/X/machine/ags_drum_output_pad.c src/ags/X/machine/ags_drum_input_pad.h src/ags/X/machine/ags_drum_input_line_callbacks.c src/ags/X/machine/ags_mixer_input_pad.h src/ags/X/machine/ags_synth_input_pad.c src/ags/X/ags_server_preferences.h src/ags/X/ags_line_editor_callbacks.h src/ags/X/ags_pad_editor_callbacks.c src/ags/X/ags_listing_editor_callbacks.h src/ags/X/ags_line_member_callbacks.c src/ags/X/ags_editor.h src/ags/X/ags_machine_editor.h src/ags/X/ags_plugin_preferences_callbacks.h src/ags/X/ags_export_window_callbacks.h src/ags/X/ags_editor_callbacks.c src/ags/X/ags_pad_editor.h src/ags/X/ags_server_preferences.c src/ags/X/ags_line_editor.c src/ags/X/ags_ladspa_browser.h src/ags/X/ags_audio_preferences.c src/ags/X/ags_pad.c src/ags/X/ags_line.c src/ags/X/ags_menu_bar_callbacks.c src/ags/X/ags_generic_preferences_callbacks.h src/ags/X/ags_pad.h src/ags/X/ags_audio_preferences_callbacks.h src/ags/X/ags_generic_preferences.c src/ags/X/ags_window.c src/ags/X/ags_machine_editor_callbacks.h src/ags/X/ags_editor_callbacks.h src/ags/X/ags_menu_bar_callbacks.h src/ags/X/ags_line_member_editor.h src/ags/X/ags_property_collection_editor_callbacks.h src/ags/X/ags_line_editor_callbacks.c src/ags/X/ags_property_editor.c src/ags/X/ags_link_editor_callbacks.c src/ags/X/ags_server_preferences_callbacks.c src/ags/X/ags_pad_callbacks.c src/ags/X/ags_line_member.h src/ags/X/ags_audio_preferences_callbacks.c src/ags/X/ags_performance_preferences.h src/ags/X/ags_property_collection_editor.c src/ags/X/ags_performance_preferences_callbacks.h src/ags/X/ags_line.h src/ags/X/ags_machine.c src/ags/X/ags_preferences_callbacks.c src/ags/X/ags_export_window.c src/ags/X/ags_menu_bar.c src/ags/X/ags_plugin_preferences_callbacks.c src/ags/X/ags_line_member_callbacks.h src/ags/X/ags_preferences.c src/ags/X/ags_export_window.h src/ags/X/ags_pad_editor_callbacks.h src/ags/X/ags_window.h src/ags/X/ags_machine_callbacks.h src/ags/X/ags_machine.h src/ags/X/ags_line_callbacks.c src/ags/X/ags_link_editor_callbacks.h src/ags/X/ags_navigation_callbacks.h src/ags/X/ags_pad_editor.c src/ags/X/ags_ladspa_browser.c src/ags/X/ags_editor.c src/ags/X/ags_resize_editor.c src/ags/X/ags_property_listing_editor.c src/ags/X/ags_property_editor_callbacks.h src/ags/X/ags_line_member_editor_callbacks.h src/ags/X/ags_window_callbacks.c src/ags/X/ags_audio_preferences.h src/ags/X/ags_navigation_callbacks.c src/ags/X/ags_plugin_preferences.h src/ags/X/ags_performance_preferences_callbacks.c src/ags/X/ags_line_member.c src/ags/X/ags_preferences.h src/ags/X/ags_generic_preferences.h src/ags/X/ags_navigation.h src/ags/X/ags_listing_editor.h src/ags/X/ags_performance_preferences.c src/ags/X/ags_link_editor.h src/ags/X/ags_ladspa_browser_callbacks.c src/ags/X/ags_link_collection_editor.c src/ags/X/ags_preferences_callbacks.h src/ags/X/ags_machine_editor_callbacks.c src/ags/X/ags_menu_bar.h src/ags/X/ags_export_window_callbacks.c src/ags/X/ags_line_member_editor_callbacks.c src/ags/X/ags_link_collection_editor.h src/ags/X/ags_link_collection_editor_callbacks.h src/ags/X/ags_property_listing_editor.h src/ags/X/ags_navigation.c src/ags/X/ags_machine_editor.c src/ags/X/ags_line_member_editor.c src/ags/X/ags_ladspa_browser_callbacks.h src/ags/X/ags_line_editor.h src/ags/X/ags_listing_editor.c src/ags/object/ags_applicable.c src/ags/object/ags_seekable.h src/ags/object/ags_packable.c src/ags/object/ags_persistable.h src/ags/object/ags_packable.h src/ags/object/ags_applicable.h src/ags/object/ags_main_loop.c src/ags/object/ags_soundcard.c src/ags/object/ags_marshal.c src/ags/object/ags_mutable.h src/ags/object/ags_plugin.h src/ags/object/ags_stackable.h src/ags/object/ags_runnable.c src/ags/object/ags_tactable.h src/ags/object/ags_mutable.c src/ags/object/ags_runnable.h src/ags/object/ags_effect.c src/ags/object/ags_playable.c src/ags/object/ags_dynamic_connectable.c src/ags/object/ags_seekable.c src/ags/object/ags_countable.c src/ags/object/ags_plugin.c src/ags/object/ags_tree_iterator.h src/ags/object/ags_playable.h src/ags/object/ags_effect.h src/ags/object/ags_soundcard.h src/ags/object/ags_countable.h src/ags/object/ags_marshal.h src/ags/object/ags_portlet.h src/ags/object/ags_dynamic_connectable.h src/ags/object/ags_tactable.c src/ags/object/ags_tree_iterator.c src/ags/object/ags_persistable.c src/ags/object/ags_main_loop.h src/ags/object/ags_stackable.c src/ags/object/ags_portlet.c src/ags/util/ags_id_generator.c src/ags/util/ags_id_generator.h src/ags/widget/ags_led.h src/ags/widget/ags_expander_set.c src/ags/widget/ags_expander_set.h src/ags/widget/ags_menu.c src/ags/widget/ags_hindicator.h src/ags/widget/ags_menu.h src/ags/widget/ags_timebar.c src/ags/widget/ags_dial.c src/ags/widget/ags_ruler.h src/ags/widget/ags_dial.h src/ags/widget/ags_segment.c src/ags/widget/ags_htimebar.c src/ags/widget/ags_option_menu.h src/ags/widget/ags_indicator.c src/ags/widget/ags_htimebar.h src/ags/widget/ags_option_menu.c src/ags/widget/ags_expander.h src/ags/widget/ags_menu_item.h src/ags/widget/ags_hindicator.c src/ags/widget/ags_cartesian.h src/ags/widget/ags_indicator.h src/ags/widget/ags_cartesian.c src/ags/widget/ags_menu_item.c src/ags/widget/ags_waveform.c src/ags/widget/ags_ruler.c src/ags/widget/ags_expander.c src/ags/widget/ags_vindicator.c src/ags/widget/ags_timebar.h src/ags/widget/ags_led.c src/ags/widget/ags_waveform.h src/ags/widget/ags_table.c src/ags/widget/ags_table.h src/ags/widget/ags_vindicator.h src/ags/widget/ags_segment.h src/ags/main.c src/ags/audio/task/ags_export_output.h src/ags/audio/task/ags_set_output_device.c src/ags/audio/task/ags_add_audio.h src/ags/audio/task/ags_set_samplerate.c src/ags/audio/task/ags_remove_point_from_selection.c src/ags/audio/task/ags_save_file.h src/ags/audio/task/ags_set_buffer_size.h src/ags/audio/task/ags_link_channel.c src/ags/audio/task/ags_save_file.c src/ags/audio/task/ags_append_audio_threaded.h src/ags/audio/task/ags_cancel_channel.h src/ags/audio/task/ags_apply_synth.h src/ags/audio/task/ags_seek_devout.h src/ags/audio/task/ags_append_recall.h src/ags/audio/task/ags_add_audio_signal.c src/ags/audio/task/ags_unref_audio_signal.c src/ags/audio/task/ags_remove_region_from_selection.c src/ags/audio/task/ags_change_indicator.h src/ags/audio/task/ags_remove_point_from_selection.h src/ags/audio/task/ags_set_audio_channels.h src/ags/audio/task/ags_scroll_on_play.h src/ags/audio/task/ags_remove_audio.h src/ags/audio/task/ags_remove_recall_container.c src/ags/audio/task/ags_remove_recall.c src/ags/audio/task/ags_seek_devout.c src/ags/audio/task/ags_append_recall.c src/ags/audio/task/ags_free_selection.h src/ags/audio/task/ags_add_recall_container.c src/ags/audio/task/ags_add_recall.c src/ags/audio/task/ags_export_output.c src/ags/audio/task/ags_init_channel.h src/ags/audio/task/ags_remove_note.c src/ags/audio/task/ags_apply_wavetable.h src/ags/audio/task/ags_add_audio_signal.h src/ags/audio/task/ags_cancel_recall.h src/ags/audio/task/ags_set_audio_channels.c src/ags/audio/task/ags_cancel_audio.c src/ags/audio/task/ags_unref_audio_signal.h src/ags/audio/task/ags_add_region_to_selection.c src/ags/audio/task/ags_change_tact.h src/ags/audio/task/ags_init_audio.c src/ags/audio/task/ags_channel_set_recycling.c src/ags/audio/task/ags_display_tact.c src/ags/audio/task/ags_add_point_to_selection.h src/ags/audio/task/ags_toggle_pattern_bit.h src/ags/audio/task/ags_append_channel.c src/ags/audio/task/ags_change_indicator.c src/ags/audio/task/ags_add_note.c src/ags/audio/task/ags_channel_set_recycling.h src/ags/audio/task/ags_cancel_audio.h src/ags/audio/task/recall/ags_set_muted.c src/ags/audio/task/recall/ags_set_muted.h src/ags/audio/task/recall/ags_apply_sequencer_length.c src/ags/audio/task/recall/ags_apply_bpm.h src/ags/audio/task/recall/ags_apply_tact.c src/ags/audio/task/recall/ags_apply_bpm.c src/ags/audio/task/recall/ags_apply_sequencer_length.h src/ags/audio/task/recall/ags_apply_tact.h src/ags/audio/task/ags_remove_region_from_selection.h src/ags/audio/task/ags_cancel_channel.c src/ags/audio/task/ags_add_recall_container.h src/ags/audio/task/ags_add_recall.h src/ags/audio/task/ags_add_note.h src/ags/audio/task/ags_start_devout.c src/ags/audio/task/ags_append_audio_threaded.c src/ags/audio/task/ags_append_audio.c src/ags/audio/task/ags_init_channel.c src/ags/audio/task/ags_remove_audio_signal.h src/ags/audio/task/ags_toggle_led.c src/ags/audio/task/ags_set_buffer_size.c src/ags/audio/task/ags_add_region_to_selection.h src/ags/audio/task/ags_audio_set_recycling.h src/ags/audio/task/ags_toggle_led.h src/ags/audio/task/ags_resize_audio.h src/ags/audio/task/ags_free_selection.c src/ags/audio/task/ags_add_audio.c src/ags/audio/task/ags_set_samplerate.h src/ags/audio/task/ags_apply_synth.c src/ags/audio/task/ags_open_single_file.h src/ags/audio/task/ags_remove_audio.c src/ags/audio/task/ags_cancel_recall.c src/ags/audio/task/ags_init_audio.h src/ags/audio/task/ags_remove_note.h src/ags/audio/task/ags_remove_audio_signal.c src/ags/audio/task/ags_audio_set_recycling.c src/ags/audio/task/ags_add_point_to_selection.c src/ags/audio/task/ags_scroll_on_play.c src/ags/audio/task/ags_set_devout_play_flags.c src/ags/audio/task/ags_apply_wavetable.c src/ags/audio/task/ags_add_line_member.c src/ags/audio/task/ags_open_file.h src/ags/audio/task/ags_set_output_device.h src/ags/audio/task/ags_toggle_pattern_bit.c src/ags/audio/task/ags_open_file.c src/ags/audio/task/ags_open_single_file.c src/ags/audio/task/ags_append_audio.h src/ags/audio/task/ags_start_devout.h src/ags/audio/task/ags_display_tact.h src/ags/audio/task/ags_remove_recall_container.h src/ags/audio/task/ags_remove_recall.h src/ags/audio/task/ags_change_tact.c src/ags/audio/task/ags_append_channel.h src/ags/audio/task/ags_resize_audio.c src/ags/audio/task/ags_link_channel.h src/ags/audio/task/ags_add_line_member.h src/ags/audio/task/ags_set_devout_play_flags.h src/ags/audio/ags_devout.c src/ags/audio/ags_recall_channel.h src/ags/audio/ags_timestamp_factory.h src/ags/audio/ags_garbage_collector.c src/ags/audio/ags_garbage_collector.h src/ags/audio/ags_recall_container.c src/ags/audio/ags_timestamp.c src/ags/audio/ags_channel_iter.h src/ags/audio/ags_recall_channel_run.c src/ags/audio/ags_audio.h src/ags/audio/ags_port.c src/ags/audio/ags_notation.c src/ags/audio/ags_recall_dependency.h src/ags/audio/ags_recycling.c src/ags/audio/ags_recall_audio_signal.h src/ags/audio/ags_input.c src/ags/audio/ags_synths.c src/ags/audio/ags_input.h src/ags/audio/ags_recycling_container.h src/ags/audio/ags_recall_id.h src/ags/audio/ags_note.c src/ags/audio/ags_timestamp_factory.c src/ags/audio/ags_channel.c src/ags/audio/ags_recall_audio.c src/ags/audio/ags_audio_signal.c src/ags/audio/ags_output.h src/ags/audio/ags_libao.c src/ags/audio/file/ags_ipatch_sf2_reader.c src/ags/audio/file/ags_audio_file_xml.h src/ags/audio/file/ags_ipatch.c src/ags/audio/file/ags_audio_file.c src/ags/audio/file/ags_sndfile.h src/ags/audio/file/ags_ipatch.h src/ags/audio/file/ags_audio_file.h src/ags/audio/file/ags_ipatch_sf2_reader.h src/ags/audio/file/ags_audio_file_xml.c src/ags/audio/file/ags_sndfile.c src/ags/audio/ags_devout.h src/ags/audio/ags_port.h src/ags/audio/ags_note.h src/ags/audio/ags_timestamp.h src/ags/audio/ags_notation.h src/ags/audio/ags_recall_audio_run.c src/ags/audio/ags_recycling_container.c src/ags/audio/ags_audio_signal.h src/ags/audio/ags_recall_recycling.h src/ags/audio/recall/ags_mute_audio.h src/ags/audio/recall/ags_clone_channel.c src/ags/audio/recall/ags_copy_channel.c src/ags/audio/recall/ags_copy_pattern_channel.c src/ags/audio/recall/ags_copy_recycling.c src/ags/audio/recall/ags_volume_audio_signal.h src/ags/audio/recall/ags_play_channel.h src/ags/audio/recall/ags_play_notation_audio_run.c src/ags/audio/recall/ags_buffer_audio_signal.c src/ags/audio/recall/ags_play_channel_run.c src/ags/audio/recall/ags_stream_channel_run.c src/ags/audio/recall/ags_copy_notation_audio_run.c src/ags/audio/recall/ags_mute_channel.c src/ags/audio/recall/ags_count_beats_audio.h src/ags/audio/recall/ags_copy_pattern_audio.c src/ags/audio/recall/ags_copy_pattern_audio_run.c src/ags/audio/recall/ags_clone_channel_run.h src/ags/audio/recall/ags_delay_audio.h src/ags/audio/recall/ags_copy_notation_audio_run.h src/ags/audio/recall/ags_stream.c src/ags/audio/recall/ags_play_audio_file.h src/ags/audio/recall/ags_loop_channel_run.c src/ags/audio/recall/ags_play_pattern.c src/ags/audio/recall/ags_stream_channel_run.h src/ags/audio/recall/ags_amplifier.h src/ags/audio/recall/ags_echo.c src/ags/audio/recall/ags_play_note.c src/ags/audio/recall/ags_buffer_channel.c src/ags/audio/recall/ags_clone_channel_run.c src/ags/audio/recall/ags_peak_channel.h src/ags/audio/recall/ags_play_recycling.h src/ags/audio/recall/ags_stream_channel.h src/ags/audio/recall/ags_amplifier.c src/ags/audio/recall/ags_mute_audio_signal.h src/ags/audio/recall/ags_copy_notation_audio.c src/ags/audio/recall/ags_buffer_channel_run.h src/ags/audio/recall/ags_copy_recycling.h src/ags/audio/recall/ags_down_mix.h src/ags/audio/recall/ags_volume_recycling.h src/ags/audio/recall/ags_volume_channel_run.h src/ags/audio/recall/ags_stream_channel.c src/ags/audio/recall/ags_echo.h src/ags/audio/recall/ags_delay_audio_run.h src/ags/audio/recall/ags_stream_audio_signal.h src/ags/audio/recall/ags_mute_recycling.c src/ags/audio/recall/ags_play_pattern.h src/ags/audio/recall/ags_delay_audio.c src/ags/audio/recall/ags_buffer_recycling.c src/ags/audio/recall/ags_stream_recycling.h src/ags/audio/recall/ags_play_audio_signal.c src/ags/audio/recall/ags_play_channel_run_master.h src/ags/audio/recall/ags_volume_recycling.c src/ags/audio/recall/ags_loop_channel.c src/ags/audio/recall/ags_buffer_recycling.h src/ags/audio/recall/ags_copy_pattern_channel_run.h src/ags/audio/recall/ags_peak_channel_run.c src/ags/audio/recall/ags_loop_channel.h src/ags/audio/recall/ags_play_audio.h src/ags/audio/recall/ags_copy_audio_signal.c src/ags/audio/recall/ags_mute_channel_run.h src/ags/audio/recall/ags_copy_channel.h src/ags/audio/recall/ags_play_notation_audio.h src/ags/audio/recall/ags_play_note.h src/ags/audio/recall/ags_synths.h src/ags/audio/recall/ags_play_recycling.c src/ags/audio/recall/ags_mute_channel_run.c src/ags/audio/recall/ags_buffer_channel.h src/ags/audio/recall/ags_play_notation_audio_run.h src/ags/audio/recall/ags_volume_channel_run.c src/ags/audio/recall/ags_play_channel_run_master.c src/ags/audio/recall/ags_stream.h src/ags/audio/recall/ags_copy_pattern_channel.h src/ags/audio/recall/ags_play_channel_run.h src/ags/audio/recall/ags_mute_channel.h src/ags/audio/recall/ags_mute_audio.c src/ags/audio/recall/ags_volume_channel.h src/ags/audio/recall/ags_volume_audio_signal.c src/ags/audio/recall/ags_stream_audio_signal.c src/ags/audio/recall/ags_count_beats_audio_run.h src/ags/audio/recall/ags_copy_audio_signal.h src/ags/audio/recall/ags_copy_channel_run.c src/ags/audio/recall/ags_delay_audio_run.c src/ags/audio/recall/ags_mute_audio_signal.c src/ags/audio/recall/ags_copy_notation_audio.h src/ags/audio/recall/ags_clone_channel.h src/ags/audio/recall/ags_buffer_channel_run.c src/ags/audio/recall/ags_play_audio.c src/ags/audio/recall/ags_copy_pattern_audio.h src/ags/audio/recall/ags_count_beats_audio.c src/ags/audio/recall/ags_play_channel.c src/ags/audio/recall/ags_count_beats_audio_run.c src/ags/audio/recall/ags_copy_pattern_audio_run.h src/ags/audio/recall/ags_stream_recycling.c src/ags/audio/recall/ags_play_audio_file.c src/ags/audio/recall/ags_play_notation_audio.c src/ags/audio/recall/ags_loop_channel_run.h src/ags/audio/recall/ags_mute_recycling.h src/ags/audio/recall/ags_peak_channel.c src/ags/audio/recall/ags_buffer_audio_signal.h src/ags/audio/recall/ags_peak_channel_run.h src/ags/audio/recall/ags_volume_channel.c src/ags/audio/recall/ags_play_audio_signal.h src/ags/audio/recall/ags_copy_channel_run.h src/ags/audio/recall/ags_copy_pattern_channel_run.c src/ags/audio/ags_recall_ladspa.h src/ags/audio/ags_recall_recycling.c src/ags/audio/ags_recall.h src/ags/audio/ags_recall_channel_run.h src/ags/audio/ags_recall_audio.h src/ags/audio/ags_channel.h src/ags/audio/ags_pattern.c src/ags/audio/ags_synths.h src/ags/audio/ags_recall_factory.h src/ags/audio/ags_recall_audio_signal.c src/ags/audio/ags_config.h src/ags/audio/ags_effect.h src/ags/audio/ags_pattern.h src/ags/audio/ags_output.c src/ags/audio/ags_recall_channel_run_dummy.c src/ags/audio/ags_recall_dependency.c src/ags/audio/ags_channel_iter.c src/ags/audio/ags_recall_channel_run_dummy.h src/ags/audio/ags_recall.c src/ags/audio/ags_recall_ladspa_run.h src/ags/audio/ags_recall_recycling_dummy.h src/ags/audio/ags_libao.h src/ags/audio/ags_task.h src/ags/audio/ags_config.c src/ags/audio/ags_recall_channel.c src/ags/audio/ags_audio.c src/ags/audio/ags_recall_ladspa_run.c src/ags/audio/ags_recall_audio_run.h src/ags/audio/ags_recall_id.c src/ags/audio/ags_task.c src/ags/audio/ags_recall_ladspa.c src/ags/audio/ags_recall_factory.c src/ags/audio/ags_recall_container.h src/ags/audio/ags_recycling.h src/ags/audio/ags_recall_recycling_dummy.c src/ags/file/ags_file_util.h src/ags/file/ags_file_sound.h src/ags/file/ags_file_thread.h src/ags/file/ags_file_gui.h src/ags/file/ags_file_lookup.h src/ags/file/ags_file_id_ref.c src/ags/file/ags_file.h src/ags/file/ags_file_link.c src/ags/file/ags_file_write.h src/ags/file/ags_file_read.h src/ags/file/ags_file_id_ref.h src/ags/file/ags_file_sound.c src/ags/file/ags_file_thread.c src/ags/file/ags_file_util.c src/ags/file/ags_file_lookup.c src/ags/file/ags_file_launch.c src/ags/file/ags_file_stock.h src/ags/file/ags_file_gui.c src/ags/file/ags_file.c src/ags/file/ags_file_launch.h src/ags/file/ags_file_link.h src/ags/thread/ags_record_thread.c src/ags/thread/ags_thread_pool.h src/ags/thread/ags_timestamp_thread.h src/ags/thread/ags_mutex_manager.h src/ags/thread/ags_mutex_manager.c src/ags/thread/ags_task_thread.h src/ags/thread/ags_audio_loop.h src/ags/thread/ags_gui_task_thread.h src/ags/thread/ags_task_completion.h src/ags/thread/ags_task_completion.c src/ags/thread/ags_recycling_thread.h src/ags/thread/ags_autosave_thread.h src/ags/thread/ags_returnable_thread.c src/ags/thread/ags_autosave_thread.c src/ags/thread/ags_export_thread.h src/ags/thread/ags_history.h src/ags/thread/ags_iterator_thread.h src/ags/thread/ags_devout_thread.c src/ags/thread/ags_thread_pool.c src/ags/thread/ags_gui_task_thread.c src/ags/thread/ags_gui_thread.h src/ags/thread/ags_task_thread.c src/ags/thread/ags_timestamp_thread.c src/ags/thread/ags_thread-posix.h src/ags/thread/ags_async_queue.h src/ags/thread/ags_record_thread.h src/ags/thread/ags_recycling_thread_callbacks.c src/ags/thread/ags_recycling_thread_callbacks.h src/ags/thread/ags_iterator_thread.c src/ags/thread/ags_async_queue.c src/ags/thread/ags_export_thread.c src/ags/thread/ags_audio_loop.c src/ags/thread/ags_returnable_thread.h src/ags/thread/ags_recycling_thread.c src/ags/thread/ags_devout_thread.h src/ags/thread/ags_single_thread.h src/ags/thread/ags_thread-posix.c src/ags/thread/ags_history.c src/ags/thread/ags_gui_thread.c src/ags/thread/ags_single_thread.c src/ags/server/ags_registry.c src/ags/server/ags_registry.h src/ags/server/ags_server.h src/ags/server/ags_remote_task.h src/ags/server/ags_remote_task.c src/ags/server/ags_server.c src/ags/plugin/ags_plugin_stock.h src/ags/plugin/ags_plugin_factory.h src/ags/plugin/ags_ladspa_manager.h src/ags/plugin/ags_plugin_factory.c src/ags/plugin/ags_ladspa_manager.c src/ags/main.h
+
+ags.desktop: ags.desktop.in
+	$(AM_V_GEN)sed -e 's,\@datadir\@,$(datadir),g' < "$<" > $@
+
+install-data-local:
+	mkdir -p $(DESTDIR)/$(datadir)/gsequencer/icons
+	mkdir -p $(DESTDIR)/$(datadir)/gsequencer/images
+	cp doc/images/jumper.png $(DESTDIR)/$(datadir)/gsequencer/icons/jumper.png
+	cp doc/images/ags.png $(DESTDIR)/$(datadir)/gsequencer/images/ags.png
diff --git a/Makefile.in b/Makefile.in
index 3282488..e52c2ae 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -15,6 +15,7 @@
 @SET_MAKE@
 
 
+
 VPATH = @srcdir@
 am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
 am__make_running_with_option = \
@@ -95,7 +96,7 @@ CONFIG_HEADER = config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LIBRARIES = $(noinst_LIBRARIES)
-am__installdirs = "$(DESTDIR)$(bindir)"
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(appdatadir)"
 PROGRAMS = $(bin_PROGRAMS)
 am_ags_OBJECTS = ags-ags_connectable.$(OBJEXT) \
 	ags-ags_combo_box_text.$(OBJEXT) ags-ags_list.$(OBJEXT) \
@@ -210,7 +211,7 @@ am_ags_OBJECTS = ags-ags_connectable.$(OBJEXT) \
 	ags-ags_unref_audio_signal.$(OBJEXT) \
 	ags-ags_remove_region_from_selection.$(OBJEXT) \
 	ags-ags_remove_recall_container.$(OBJEXT) \
-	ags-ags_remove_recall.$(OBJEXT) \
+	ags-ags_remove_recall.$(OBJEXT) ags-ags_seek_devout.$(OBJEXT) \
 	ags-ags_append_recall.$(OBJEXT) \
 	ags-ags_add_recall_container.$(OBJEXT) \
 	ags-ags_add_recall.$(OBJEXT) ags-ags_export_output.$(OBJEXT) \
@@ -379,6 +380,34 @@ am__can_run_installinfo = \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+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; }; \
+  }
+DATA = $(appdata_DATA)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
 	$(LISP)config.h.in
 # Read a list of newline-separated strings from the standard input,
@@ -538,6 +567,8 @@ AUTOMAKE_OPTIONS = foreign
 # this lists the binaries to produce, the (non-PHONY, binary) targets in
 # the previous manual Makefile
 noinst_LIBRARIES = 
+EXTRA_DIST = ags.desktop.in
+CLEANFILES = $(appdata_DATA)
 
 # library
 libags_a_CFLAGS = $(GOBJECT_CFLAGS) $(LIBXML2_CFLAGS) 
@@ -547,6 +578,8 @@ libags_a_SOURCES =
 ags_CFLAGS = $(CFLAGS) $(UUID_CFLAGS) $(LIBASOUND2_CFLAGS) $(LIBAO_CFLAGS) $(LIBXML2_CFLAGS) $(OPENSSL_CFLAGS) $(SNDFILE_CFLAGS) $(LIBINSTPATCH_CFLAGS) $(GOBJECT_CFLAGS) $(GDKPIXBUF_CFLAGS) $(CAIRO_CFLAGS) $(GTK_CFLAGS) $(XMLRPC_CFLAGS) $(XMLRPC_UTIL_CFLAGS) $(XMLRPC_SERVER_ABYSS_CFLAGS) $(XMLRPC_SERVER_CGI_CFLAGS) $(XMLRPC_SERVER_CFLAGS) $(PTH_FLAGS)
 ags_LDFLAGS = -ldl $(LDFLAGS) $(UUID_LIBS) $(LIBASOUND2_LIBS) $(LIBAO_LIBS) $(LIBXML2_LIBS) $(OPENSSL_LIBS) $(SNDFILE_LIBS) $(LIBINSTPATCH_LIBS) $(GOBJECT_LIBS) $(GDKPIXBUF_LIBS) $(CAIRO_LIBS) $(GTK_LIBS) $(XMLRPC_LIBS) $(XMLRPC_UTIL_LIBS) $(XMLRPC_SERVER_ABYSS_LIBS) $(XMLRPC_SERVER_CGI_LIBS) $(XMLRPC_SERVER_LIBS) -lm -lrt -lX11 -pthread
 ags_LDADD = 
+appdatadir = $(datadir)/applications
+appdata_DATA = ags.desktop
 ags_SOURCES = ./src/ags-lib/object/ags_connectable.c \
 	./src/ags-lib/object/ags_connectable.h \
 	src/ags/lib/ags_combo_box_text.c src/ags/lib/ags_list.c \
@@ -778,6 +811,7 @@ ags_SOURCES = ./src/ags-lib/object/ags_connectable.c \
 	src/ags/audio/task/ags_append_audio_threaded.h \
 	src/ags/audio/task/ags_cancel_channel.h \
 	src/ags/audio/task/ags_apply_synth.h \
+	src/ags/audio/task/ags_seek_devout.h \
 	src/ags/audio/task/ags_append_recall.h \
 	src/ags/audio/task/ags_add_audio_signal.c \
 	src/ags/audio/task/ags_unref_audio_signal.c \
@@ -789,6 +823,7 @@ ags_SOURCES = ./src/ags-lib/object/ags_connectable.c \
 	src/ags/audio/task/ags_remove_audio.h \
 	src/ags/audio/task/ags_remove_recall_container.c \
 	src/ags/audio/task/ags_remove_recall.c \
+	src/ags/audio/task/ags_seek_devout.c \
 	src/ags/audio/task/ags_append_recall.c \
 	src/ags/audio/task/ags_free_selection.h \
 	src/ags/audio/task/ags_add_recall_container.c \
@@ -1470,6 +1505,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_runnable.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_save_file.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_scroll_on_play.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_seek_devout.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_seekable.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_segment.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_server.Po at am__quote@
@@ -3653,6 +3689,20 @@ ags-ags_remove_recall.obj: src/ags/audio/task/ags_remove_recall.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_remove_recall.obj `if test -f 'src/ags/audio/task/ags_remove_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_recall.c'; fi`
 
+ags-ags_seek_devout.o: src/ags/audio/task/ags_seek_devout.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_seek_devout.o -MD -MP -MF $(DEPDIR)/ags-ags_seek_devout.Tpo -c -o ags-ags_seek_devout.o `test -f 'src/ags/audio/task/ags_seek_devout.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_seek_devout.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_seek_devout.Tpo $(DEPDIR)/ags-ags_seek_devout.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ags/audio/task/ags_seek_devout.c' object='ags-ags_seek_devout.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_seek_devout.o `test -f 'src/ags/audio/task/ags_seek_devout.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_seek_devout.c
+
+ags-ags_seek_devout.obj: src/ags/audio/task/ags_seek_devout.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_seek_devout.obj -MD -MP -MF $(DEPDIR)/ags-ags_seek_devout.Tpo -c -o ags-ags_seek_devout.obj `if test -f 'src/ags/audio/task/ags_seek_devout.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_seek_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_seek_devout.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_seek_devout.Tpo $(DEPDIR)/ags-ags_seek_devout.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ags/audio/task/ags_seek_devout.c' object='ags-ags_seek_devout.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_seek_devout.obj `if test -f 'src/ags/audio/task/ags_seek_devout.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_seek_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_seek_devout.c'; fi`
+
 ags-ags_append_recall.o: src/ags/audio/task/ags_append_recall.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_append_recall.o -MD -MP -MF $(DEPDIR)/ags-ags_append_recall.Tpo -c -o ags-ags_append_recall.o `test -f 'src/ags/audio/task/ags_append_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_recall.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_append_recall.Tpo $(DEPDIR)/ags-ags_append_recall.Po
@@ -5990,6 +6040,27 @@ ags-ags_ladspa_manager.obj: src/ags/plugin/ags_ladspa_manager.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ags/plugin/ags_ladspa_manager.c' object='ags-ags_ladspa_manager.obj' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_ladspa_manager.obj `if test -f 'src/ags/plugin/ags_ladspa_manager.c'; then $(CYGPATH_W) 'src/ags/plugin/ags_ladspa_manager.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/plugin/ags_ladspa_manager.c'; fi`
+install-appdataDATA: $(appdata_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(appdatadir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(appdatadir)" || 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)$(appdatadir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(appdatadir)" || exit $$?; \
+	done
+
+uninstall-appdataDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(appdatadir)'; $(am__uninstall_files_from_dir)
 
 ID: $(am__tagged_files)
 	$(am__define_uniq_tagged_files); mkid -fID $$unique
@@ -6215,9 +6286,9 @@ distcleancheck: distclean
 	       exit 1; } >&2
 check-am: all-am
 check: check-am
-all-am: Makefile $(LIBRARIES) $(PROGRAMS) config.h
+all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(DATA) config.h
 installdirs:
-	for dir in "$(DESTDIR)$(bindir)"; do \
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(appdatadir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 	done
 install: install-am
@@ -6242,6 +6313,7 @@ install-strip:
 mostlyclean-generic:
 
 clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
 distclean-generic:
 	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
@@ -6274,7 +6346,7 @@ info: info-am
 
 info-am:
 
-install-data-am:
+install-data-am: install-appdataDATA install-data-local
 
 install-dvi: install-dvi-am
 
@@ -6321,7 +6393,7 @@ ps: ps-am
 
 ps-am:
 
-uninstall-am: uninstall-binPROGRAMS
+uninstall-am: uninstall-appdataDATA uninstall-binPROGRAMS
 
 .MAKE: all install-am install-strip
 
@@ -6332,16 +6404,26 @@ uninstall-am: uninstall-binPROGRAMS
 	dist-xz dist-zip distcheck distclean distclean-compile \
 	distclean-generic distclean-hdr distclean-tags distcleancheck \
 	distdir distuninstallcheck dvi dvi-am html html-am info \
-	info-am install install-am install-binPROGRAMS install-data \
-	install-data-am install-dvi install-dvi-am install-exec \
+	info-am install install-am install-appdataDATA \
+	install-binPROGRAMS install-data install-data-am \
+	install-data-local 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 \
 	install-ps install-ps-am install-strip installcheck \
 	installcheck-am installdirs maintainer-clean \
 	maintainer-clean-generic mostlyclean mostlyclean-compile \
 	mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
-	uninstall-am uninstall-binPROGRAMS
+	uninstall-am uninstall-appdataDATA uninstall-binPROGRAMS
+
+
+ags.desktop: ags.desktop.in
+	$(AM_V_GEN)sed -e 's,\@datadir\@,$(datadir),g' < "$<" > $@
 
+install-data-local:
+	mkdir -p $(DESTDIR)/$(datadir)/gsequencer/icons
+	mkdir -p $(DESTDIR)/$(datadir)/gsequencer/images
+	cp doc/images/jumper.png $(DESTDIR)/$(datadir)/gsequencer/icons/jumper.png
+	cp doc/images/ags.png $(DESTDIR)/$(datadir)/gsequencer/images/ags.png
 
 # 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/ags.desktop b/ags.desktop
new file mode 100644
index 0000000..dd3246c
--- /dev/null
+++ b/ags.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Type=Application
+Terminal=false
+Exec=ags
+Icon=/usr/local/share/gsequencer/icons/jumper.png
+Name=Advanced Gtk+ Sequencer
+Categories=AudioVideo;Editor;
diff --git a/ags.desktop.in b/ags.desktop.in
new file mode 100644
index 0000000..36b1ea6
--- /dev/null
+++ b/ags.desktop.in
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Type=Application
+Terminal=false
+Exec=ags
+Icon=@datadir@/gsequencer/icons/jumper.png
+Name=Advanced Gtk+ Sequencer
+Categories=AudioVideo;Editor;
diff --git a/autom4te.cache/requests b/autom4te.cache/requests
index 0ba1142..8fa0ded 100644
--- a/autom4te.cache/requests
+++ b/autom4te.cache/requests
@@ -66,114 +66,114 @@
                         'configure.ac'
                       ],
                       {
-                        'gl_SIZE_MAX' => 1,
-                        'AM_SET_DEPDIR' => 1,
-                        'AM_INIT_AUTOMAKE' => 1,
-                        '_AC_TYPE_LONG_LONG_SNIPPET' => 1,
-                        'gl_AC_HEADER_INTTYPES_H' => 1,
-                        'AM_RUN_LOG' => 1,
+                        'AC_LIB_PREPARE_PREFIX' => 1,
+                        'gl_PREREQ_LOCK' => 1,
+                        'gt_LC_MESSAGES' => 1,
                         'AU_DEFUN' => 1,
-                        'AM_MISSING_HAS_RUN' => 1,
+                        'AC_DEFUN_ONCE' => 1,
+                        'gt_TYPE_WINT_T' => 1,
+                        'AC_LIB_ARG_WITH' => 1,
+                        'AM_PROG_INSTALL_SH' => 1,
+                        'AM_PROG_INSTALL_STRIP' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'PKG_CHECK_VAR' => 1,
                         'AC_LIB_APPENDTOVAR' => 1,
-                        '_AM_PROG_CC_C_O' => 1,
-                        'AC_LIB_LINKFLAGS_BODY' => 1,
-                        'AM_PROG_CC_C_O' => 1,
-                        'gl_THREADLIB_EARLY' => 1,
-                        '_AM_CONFIG_MACRO_DIRS' => 1,
+                        'AC_TYPE_LONG_LONG_INT' => 1,
+                        'AC_LIB_FROMPACKAGE' => 1,
+                        'AM_SANITY_CHECK' => 1,
                         '_AC_AM_CONFIG_HEADER_HOOK' => 1,
-                        'gt_INTDIV0' => 1,
-                        'AC_DEFUN_ONCE' => 1,
-                        'gt_TYPE_WCHAR_T' => 1,
-                        'AM_CONDITIONAL' => 1,
+                        'gl_FCNTL_O_FLAGS' => 1,
+                        'm4_pattern_allow' => 1,
+                        'AM_SILENT_RULES' => 1,
+                        'gt_GL_ATTRIBUTE' => 1,
                         '_AM_SET_OPTIONS' => 1,
-                        'gt_TYPE_INTMAX_T' => 1,
-                        'AM_NLS' => 1,
-                        'AM_SUBST_NOTMAKE' => 1,
-                        'AC_' => 1,
+                        '_AM_PROG_TAR' => 1,
+                        'gl_GLIBC21' => 1,
                         'AM_AUX_DIR_EXPAND' => 1,
+                        'AM_NLS' => 1,
+                        'AM_ICONV_LINK' => 1,
                         'AC_COMPUTE_INT' => 1,
-                        'AM_MAKE_INCLUDE' => 1,
-                        'gt_GL_ATTRIBUTE' => 1,
-                        'AM_ICONV' => 1,
+                        'AC_LIB_LINKFLAGS_BODY' => 1,
+                        'AC_LIB_PREPARE_MULTILIB' => 1,
+                        'PKG_NOARCH_INSTALLDIR' => 1,
+                        'AM_XGETTEXT_OPTION' => 1,
+                        'AM_SUBST_NOTMAKE' => 1,
+                        '_AM_CONFIG_MACRO_DIRS' => 1,
+                        '_AM_DEPENDENCIES' => 1,
+                        'AM_PATH_PROG_WITH_TEST' => 1,
+                        'PKG_CHECK_EXISTS' => 1,
                         'AM_LANGINFO_CODESET' => 1,
-                        'AC_LIB_FROMPACKAGE' => 1,
-                        'AC_LIB_LINKFLAGS' => 1,
+                        'gl_AC_TYPE_UINTMAX_T' => 1,
+                        'gl_DISABLE_THREADS' => 1,
+                        'AC_DEFUN' => 1,
+                        'gt_INTTYPES_PRI' => 1,
+                        'AC_LIB_LINKFLAGS_FROM_LIBS' => 1,
+                        'gl_LOCK' => 1,
+                        'gl_AC_HEADER_STDINT_H' => 1,
+                        'AM_MISSING_PROG' => 1,
+                        '_AM_AUTOCONF_VERSION' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        'gt_PRINTF_POSIX' => 1,
+                        'include' => 1,
+                        'AC_TYPE_UNSIGNED_LONG_LONG_INT' => 1,
+                        'AM_MISSING_HAS_RUN' => 1,
+                        'gt_TYPE_INTMAX_T' => 1,
+                        'gl_THREADLIB' => 1,
+                        'PKG_CHECK_MODULES' => 1,
+                        'gl_THREADLIB_EARLY' => 1,
+                        'AC_LIB_RPATH' => 1,
+                        'AM_GNU_GETTEXT_NEED' => 1,
                         'm4_pattern_forbid' => 1,
                         'gt_INTL_MACOSX' => 1,
-                        '_AM_DEPENDENCIES' => 1,
-                        'AM_GNU_GETTEXT_NEED' => 1,
-                        'AM_PATH_PROG_WITH_TEST' => 1,
-                        'AM_XGETTEXT_OPTION_INIT' => 1,
-                        'gt_TYPE_WINT_T' => 1,
+                        'gl_SIZE_MAX' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        'AC_CONFIG_MACRO_DIR' => 1,
                         '_PKG_SHORT_ERRORS_SUPPORTED' => 1,
+                        'gl_VISIBILITY' => 1,
+                        '_m4_warn' => 1,
+                        'AC_LIB_HAVE_LINKFLAGS' => 1,
+                        'm4_include' => 1,
+                        'PKG_PROG_PKG_CONFIG' => 1,
+                        'AC_LIB_PROG_LD' => 1,
+                        'gt_INTDIV0' => 1,
+                        '_AM_PROG_CC_C_O' => 1,
+                        'AC_LIB_WITH_FINAL_PREFIX' => 1,
+                        'AM_ICONV_LINKFLAGS_BODY' => 1,
+                        'AC_LIB_LINKFLAGS' => 1,
+                        'AC_' => 1,
+                        'AC_LIB_PREFIX' => 1,
+                        'gl_AC_HEADER_INTTYPES_H' => 1,
+                        'gl_THREADLIB_EARLY_BODY' => 1,
+                        'AM_CONDITIONAL' => 1,
                         'AM_PO_SUBDIRS' => 1,
-                        'AM_MISSING_PROG' => 1,
-                        'PKG_CHECK_EXISTS' => 1,
-                        'AM_DEP_TRACK' => 1,
-                        'AC_LIB_PREPARE_MULTILIB' => 1,
-                        'gt_LC_MESSAGES' => 1,
-                        'gl_XSIZE' => 1,
-                        'AM_PROG_INSTALL_STRIP' => 1,
-                        'AC_LIB_PROG_LD_GNU' => 1,
-                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
-                        'gl_FCNTL_O_FLAGS' => 1,
                         'gt_INTL_SUBDIR_CORE' => 1,
-                        'AC_TYPE_LONG_LONG_INT' => 1,
-                        'AC_DEFUN' => 1,
-                        '_AM_MANGLE_OPTION' => 1,
+                        'AC_LIB_PROG_LD_GNU' => 1,
+                        'gl_XSIZE' => 1,
+                        'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
                         '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
-                        'AM_SILENT_RULES' => 1,
-                        'AM_ICONV_LINKFLAGS_BODY' => 1,
-                        'AC_LIB_RPATH' => 1,
-                        '_AM_IF_OPTION' => 1,
-                        'AM_XGETTEXT_OPTION' => 1,
-                        'AM_SANITY_CHECK' => 1,
                         'gl_EXTERN_INLINE' => 1,
-                        'gl_GLIBC21' => 1,
                         'AC_CONFIG_MACRO_DIR_TRACE' => 1,
-                        'gl_AC_HEADER_STDINT_H' => 1,
-                        'gl_VISIBILITY' => 1,
-                        'AC_LIB_PREFIX' => 1,
-                        'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
-                        'gl_LOCK' => 1,
-                        '_AM_PROG_TAR' => 1,
-                        'gt_PRINTF_POSIX' => 1,
-                        'PKG_NOARCH_INSTALLDIR' => 1,
-                        'PKG_CHECK_VAR' => 1,
-                        'AM_SET_LEADING_DOT' => 1,
+                        '_AM_SET_OPTION' => 1,
+                        'AM_RUN_LOG' => 1,
+                        'AM_GNU_GETTEXT' => 1,
+                        'gt_TYPE_WCHAR_T' => 1,
+                        '_AM_IF_OPTION' => 1,
+                        'AM_ICONV' => 1,
+                        'AM_DEP_TRACK' => 1,
+                        'AM_PROG_CC_C_O' => 1,
+                        'AM_MAKE_INCLUDE' => 1,
                         'gl_THREADLIB_BODY' => 1,
-                        'AC_TYPE_UNSIGNED_LONG_LONG_INT' => 1,
-                        'AM_PROG_INSTALL_SH' => 1,
-                        'gl_DISABLE_THREADS' => 1,
-                        'AM_POSTPROCESS_PO_MAKEFILE' => 1,
-                        'include' => 1,
-                        'm4_include' => 1,
-                        '_AM_AUTOCONF_VERSION' => 1,
-                        'AM_AUTOMAKE_VERSION' => 1,
+                        'AM_GNU_GETTEXT_VERSION' => 1,
                         'AM_INTL_SUBDIR' => 1,
-                        'AC_LIB_ARG_WITH' => 1,
+                        'AM_POSTPROCESS_PO_MAKEFILE' => 1,
                         'PKG_INSTALLDIR' => 1,
-                        'AC_LIB_WITH_FINAL_PREFIX' => 1,
+                        'AM_XGETTEXT_OPTION_INIT' => 1,
+                        '_AM_MANGLE_OPTION' => 1,
+                        'AM_SET_LEADING_DOT' => 1,
+                        '_AC_TYPE_LONG_LONG_SNIPPET' => 1,
                         'gt_GLIBC2' => 1,
-                        'AC_CONFIG_MACRO_DIR' => 1,
-                        'gt_INTTYPES_PRI' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
-                        'gl_PREREQ_LOCK' => 1,
-                        'AC_LIB_LINKFLAGS_FROM_LIBS' => 1,
-                        '_AM_SET_OPTION' => 1,
-                        'm4_pattern_allow' => 1,
-                        'gl_THREADLIB' => 1,
-                        'AM_GNU_GETTEXT' => 1,
-                        'AC_LIB_PREPARE_PREFIX' => 1,
-                        'AC_LIB_PROG_LD' => 1,
-                        'AM_ICONV_LINK' => 1,
-                        'gl_THREADLIB_EARLY_BODY' => 1,
-                        'PKG_CHECK_MODULES' => 1,
-                        '_m4_warn' => 1,
-                        'AM_GNU_GETTEXT_VERSION' => 1,
-                        'gl_AC_TYPE_UINTMAX_T' => 1,
-                        'AC_LIB_HAVE_LINKFLAGS' => 1,
-                        'PKG_PROG_PKG_CONFIG' => 1
+                        'AM_SET_DEPDIR' => 1
                       }
                     ], 'Autom4te::Request' ),
              bless( [
@@ -188,66 +188,66 @@
                         'configure.ac'
                       ],
                       {
-                        'AM_EXTRA_RECURSIVE_TARGETS' => 1,
+                        'AM_POT_TOOLS' => 1,
+                        'AC_SUBST_TRACE' => 1,
+                        'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
+                        'AC_FC_PP_SRCEXT' => 1,
                         'AC_DEFINE_TRACE_LITERAL' => 1,
-                        'AM_SILENT_RULES' => 1,
-                        '_AM_MAKEFILE_INCLUDE' => 1,
-                        'AM_XGETTEXT_OPTION' => 1,
-                        'AM_PROG_CC_C_O' => 1,
+                        '_LT_AC_TAGCONFIG' => 1,
+                        'AM_GNU_GETTEXT' => 1,
+                        'AC_CANONICAL_SYSTEM' => 1,
                         'LT_SUPPORTED_TAG' => 1,
-                        'AC_CONFIG_AUX_DIR' => 1,
-                        'AC_CONFIG_SUBDIRS' => 1,
+                        'AM_PROG_MKDIR_P' => 1,
+                        'AC_INIT' => 1,
+                        '_AM_COND_ELSE' => 1,
+                        'AM_PROG_MOC' => 1,
+                        'AM_XGETTEXT_OPTION' => 1,
+                        'LT_INIT' => 1,
+                        'AC_CANONICAL_HOST' => 1,
+                        'AM_NLS' => 1,
+                        'AC_CANONICAL_TARGET' => 1,
                         'AM_CONDITIONAL' => 1,
-                        'AH_OUTPUT' => 1,
-                        'AC_REQUIRE_AUX_FILE' => 1,
-                        'AC_FC_FREEFORM' => 1,
-                        'AC_CANONICAL_BUILD' => 1,
-                        'AC_FC_SRCEXT' => 1,
-                        'AM_PROG_F77_C_O' => 1,
-                        'AC_SUBST_TRACE' => 1,
-                        'AM_INIT_AUTOMAKE' => 1,
-                        'AC_PROG_LIBTOOL' => 1,
                         'LT_CONFIG_LTDL_DIR' => 1,
-                        'AC_INIT' => 1,
-                        'AM_MAINTAINER_MODE' => 1,
-                        'sinclude' => 1,
-                        'AC_LIBSOURCE' => 1,
-                        'AC_SUBST' => 1,
+                        'AC_CONFIG_LIBOBJ_DIR' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        'AH_OUTPUT' => 1,
+                        'AM_PROG_LIBTOOL' => 1,
                         'AC_CONFIG_LINKS' => 1,
-                        'AM_POT_TOOLS' => 1,
+                        'AC_CONFIG_FILES' => 1,
+                        'm4_sinclude' => 1,
                         'AC_FC_PP_DEFINE' => 1,
-                        'AM_PROG_AR' => 1,
-                        'm4_pattern_forbid' => 1,
-                        'AC_CANONICAL_HOST' => 1,
-                        'AM_PROG_LIBTOOL' => 1,
-                        'AM_PROG_MOC' => 1,
+                        'AC_REQUIRE_AUX_FILE' => 1,
+                        'AC_SUBST' => 1,
+                        'AM_PROG_CXX_C_O' => 1,
+                        'AC_CONFIG_AUX_DIR' => 1,
+                        'AC_LIBSOURCE' => 1,
+                        'AM_PROG_CC_C_O' => 1,
                         'AM_MAKEFILE_INCLUDE' => 1,
-                        'AM_GNU_GETTEXT' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
-                        'm4_sinclude' => 1,
-                        'm4_pattern_allow' => 1,
-                        'AC_CONFIG_LIBOBJ_DIR' => 1,
-                        'AC_CANONICAL_TARGET' => 1,
-                        'AC_CANONICAL_SYSTEM' => 1,
-                        '_AM_COND_ELSE' => 1,
-                        'AC_FC_PP_SRCEXT' => 1,
-                        'LT_INIT' => 1,
+                        'AM_PROG_AR' => 1,
+                        '_AM_COND_ENDIF' => 1,
                         'AM_PATH_GUILE' => 1,
-                        'AM_PROG_FC_C_O' => 1,
-                        '_LT_AC_TAGCONFIG' => 1,
                         '_m4_warn' => 1,
-                        'AC_CONFIG_FILES' => 1,
-                        '_AM_COND_ENDIF' => 1,
-                        'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
-                        'AM_NLS' => 1,
-                        'AM_PROG_CXX_C_O' => 1,
-                        'AC_CONFIG_HEADERS' => 1,
+                        'AC_CONFIG_SUBDIRS' => 1,
                         'm4_include' => 1,
-                        'AM_PROG_MKDIR_P' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        'AC_FC_SRCEXT' => 1,
+                        'AC_PROG_LIBTOOL' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'sinclude' => 1,
+                        'AM_PROG_FC_C_O' => 1,
+                        'AM_EXTRA_RECURSIVE_TARGETS' => 1,
+                        'm4_pattern_forbid' => 1,
+                        'AM_PROG_F77_C_O' => 1,
+                        'AC_CANONICAL_BUILD' => 1,
                         'include' => 1,
-                        'AM_ENABLE_MULTILIB' => 1,
+                        'AC_CONFIG_HEADERS' => 1,
+                        'AM_MAINTAINER_MODE' => 1,
                         '_AM_COND_IF' => 1,
-                        'AM_AUTOMAKE_VERSION' => 1
+                        '_AM_MAKEFILE_INCLUDE' => 1,
+                        'AM_ENABLE_MULTILIB' => 1,
+                        'm4_pattern_allow' => 1,
+                        'AM_SILENT_RULES' => 1,
+                        'AC_FC_FREEFORM' => 1
                       }
                     ], 'Autom4te::Request' ),
              bless( [
@@ -282,54 +282,54 @@
                         'configure.ac'
                       ],
                       {
-                        'AM_RUN_LOG' => 1,
-                        'AM_DEP_TRACK' => 1,
-                        'AM_INIT_AUTOMAKE' => 1,
-                        'PKG_CHECK_EXISTS' => 1,
-                        'AM_MISSING_PROG' => 1,
+                        '_AM_AUTOCONF_VERSION' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
                         'AM_SET_DEPDIR' => 1,
-                        '_PKG_SHORT_ERRORS_SUPPORTED' => 1,
-                        '_AM_PROG_CC_C_O' => 1,
-                        '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        'AM_MISSING_PROG' => 1,
+                        'AM_SET_LEADING_DOT' => 1,
                         '_AM_MANGLE_OPTION' => 1,
+                        'PKG_INSTALLDIR' => 1,
                         'AC_DEFUN' => 1,
-                        'AM_MISSING_HAS_RUN' => 1,
-                        'AU_DEFUN' => 1,
-                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
-                        'AM_PROG_INSTALL_STRIP' => 1,
-                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
-                        '_AM_CONFIG_MACRO_DIRS' => 1,
-                        'AM_SANITY_CHECK' => 1,
+                        'AM_MAKE_INCLUDE' => 1,
                         'AM_PROG_CC_C_O' => 1,
+                        'AM_DEP_TRACK' => 1,
+                        'PKG_CHECK_EXISTS' => 1,
                         '_AM_IF_OPTION' => 1,
-                        'AM_SILENT_RULES' => 1,
+                        '_AM_DEPENDENCIES' => 1,
+                        '_AM_CONFIG_MACRO_DIRS' => 1,
+                        'AM_SUBST_NOTMAKE' => 1,
+                        'AM_RUN_LOG' => 1,
+                        'PKG_NOARCH_INSTALLDIR' => 1,
+                        '_AM_SET_OPTION' => 1,
+                        'AC_CONFIG_MACRO_DIR_TRACE' => 1,
+                        '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
                         'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
+                        'AM_AUX_DIR_EXPAND' => 1,
                         'AM_CONDITIONAL' => 1,
-                        'AC_DEFUN_ONCE' => 1,
-                        'AC_CONFIG_MACRO_DIR_TRACE' => 1,
-                        'AM_PROG_INSTALL_SH' => 1,
-                        'AM_SET_LEADING_DOT' => 1,
-                        'PKG_CHECK_VAR' => 1,
-                        'PKG_NOARCH_INSTALLDIR' => 1,
                         '_AM_PROG_TAR' => 1,
                         '_AM_SET_OPTIONS' => 1,
-                        'AM_MAKE_INCLUDE' => 1,
-                        'PKG_INSTALLDIR' => 1,
+                        '_AM_PROG_CC_C_O' => 1,
+                        'AM_SILENT_RULES' => 1,
+                        'm4_pattern_allow' => 1,
+                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+                        'm4_include' => 1,
+                        'AM_SANITY_CHECK' => 1,
+                        'PKG_PROG_PKG_CONFIG' => 1,
+                        '_m4_warn' => 1,
                         'AC_CONFIG_MACRO_DIR' => 1,
-                        'AM_AUX_DIR_EXPAND' => 1,
-                        '_AM_AUTOCONF_VERSION' => 1,
+                        'PKG_CHECK_VAR' => 1,
                         'AM_AUTOMAKE_VERSION' => 1,
-                        'm4_include' => 1,
-                        'AM_SUBST_NOTMAKE' => 1,
-                        'include' => 1,
-                        '_AM_DEPENDENCIES' => 1,
+                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        '_PKG_SHORT_ERRORS_SUPPORTED' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'AM_PROG_INSTALL_STRIP' => 1,
                         'm4_pattern_forbid' => 1,
-                        'm4_pattern_allow' => 1,
-                        '_AM_SET_OPTION' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
-                        'PKG_PROG_PKG_CONFIG' => 1,
+                        'AM_PROG_INSTALL_SH' => 1,
+                        'AC_DEFUN_ONCE' => 1,
                         'PKG_CHECK_MODULES' => 1,
-                        '_m4_warn' => 1
+                        'AM_MISSING_HAS_RUN' => 1,
+                        'include' => 1,
+                        'AU_DEFUN' => 1
                       }
                     ], 'Autom4te::Request' )
            );
diff --git a/config.log b/config.log
index 297fc07..f990948 100644
--- a/config.log
+++ b/config.log
@@ -27,12 +27,11 @@ uname -v = #1 SMP PREEMPT RT Fri May 29 23:50:25 CEST 2015
 /usr/bin/oslevel       = unknown
 /bin/universe          = unknown
 
-PATH: /usr/local/sbin
 PATH: /usr/local/bin
-PATH: /usr/sbin
 PATH: /usr/bin
-PATH: /sbin
 PATH: /bin
+PATH: /usr/local/games
+PATH: /usr/games
 
 
 ## ----------- ##
@@ -183,8 +182,6 @@ configure:4287: gcc -o conftest -g -O2   conftest.c -lrt  -lm -ldl -lX11  >&5
 configure:4287: $? = 0
 configure:4296: result: yes
 configure:4310: checking for X
-configure:4418: gcc -E  conftest.c
-configure:4418: $? = 0
 configure:4449: gcc -o conftest -g -O2   conftest.c -lX11 -lrt -lm -ldl -lX11  >&5
 configure:4449: $? = 0
 configure:4499: result: libraries , headers 
@@ -1444,3 +1441,39 @@ config.status:945: creating Makefile
 config.status:945: creating config.h
 config.status:1126: config.h is unchanged
 config.status:1174: executing depfiles commands
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by ags config.status 0.4.2, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status config.h
+
+on debian
+
+config.status:945: creating config.h
+config.status:1126: config.h is unchanged
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by ags config.status 0.4.2, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status Makefile depfiles
+
+on debian
+
+config.status:945: creating Makefile
+config.status:1174: executing depfiles commands
diff --git a/src/ags/X/ags_menu_bar_callbacks.c b/src/ags/X/ags_menu_bar_callbacks.c
index a784ea0..b1d1f58 100644
--- a/src/ags/X/ags_menu_bar_callbacks.c
+++ b/src/ags/X/ags_menu_bar_callbacks.c
@@ -473,8 +473,8 @@ ags_menu_bar_about_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar)
   gchar *authors[] = { "Joël Krähemann\0", NULL }; 
 
   if(file == NULL){
-    file = fopen("./COPYING\0", "r\0");
-    stat("./COPYING\0", &sb);
+    file = fopen("/usr/share/common-licenses/GPL-3\0", "r\0");
+    stat("/usr/share/common-licenses/GPL-3\0", &sb);
     license = (gchar *) malloc((sb.st_size + 1) * sizeof(gchar));
     fread(license, sizeof(char), sb.st_size, file);
     license[sb.st_size] = '\0';
@@ -482,7 +482,7 @@ ags_menu_bar_about_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar)
 
     error = NULL;
 
-    logo = gdk_pixbuf_new_from_file("./doc/images/ags.png\0", &error);
+    logo = gdk_pixbuf_new_from_file("/usr/share/gsequencer/images/ags.png\0", &error);
   }
 
   gtk_show_about_dialog((GtkWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, GTK_TYPE_WINDOW),
@@ -490,7 +490,7 @@ ags_menu_bar_about_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar)
 			"authors\0", authors,
 			"license\0", license,
 			"version\0", AGS_VERSION,
-			"website\0", "http://ags.sf.net\0",
+			"website\0", "http://gsequencer.org\0",
 			"title\0", "Advanced Gtk+ Sequencer\0",
 			"logo\0", logo,
 			NULL);
diff --git a/src/ags/X/ags_navigation.c b/src/ags/X/ags_navigation.c
index 9de947d..d156759 100644
--- a/src/ags/X/ags_navigation.c
+++ b/src/ags/X/ags_navigation.c
@@ -19,8 +19,15 @@
 #include <ags/X/ags_navigation.h>
 #include <ags/X/ags_navigation_callbacks.h>
 
+#include <ags/main.h>
+
 #include <ags-lib/object/ags_connectable.h>
 
+#include <ags/thread/ags_audio_loop.h>
+#include <ags/thread/ags_task_thread.h>
+
+#include <ags/audio/task/ags_seek_devout.h>
+
 #include <ags/X/ags_window.h>
 #include <ags/X/ags_editor.h>
 
@@ -182,6 +189,8 @@ ags_navigation_init(AgsNavigation *navigation)
   g_signal_connect_after(G_OBJECT(navigation), "parent-set\0",
 			 G_CALLBACK(ags_navigation_parent_set_callback), NULL);
 
+  navigation->start_tact = 0.0;
+  
   /* GtkWidget */
   hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0);
   gtk_box_pack_start((GtkBox *) navigation, (GtkWidget *) hbox, FALSE, FALSE, 2);
@@ -432,13 +441,38 @@ ags_navigation_real_change_position(AgsNavigation *navigation,
 {
   AgsWindow *window;
   AgsEditor *editor;
+  AgsSeekDevout *seek_devout;
   gchar *timestr;
   double tact_factor, zoom_factor;
   double tact;
-
+  gdouble delay;
+  guint steps;
+  gboolean move_forward;
+  
   window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation)));
   editor = window->editor;
 
+  /* seek devout */
+  delay = (window->devout->frequency / window->devout->buffer_size * (60.0 / navigation->bpm->adjustment->value));
+
+  if(navigation->start_tact < tact_counter){
+    steps = (guint) ((tact_counter - navigation->start_tact) * delay);
+    move_forward = TRUE;
+  }else{
+    steps = (guint) ((navigation->start_tact - tact_counter) * delay);
+    move_forward = FALSE;
+  }
+  
+  seek_devout = ags_seek_devout_new(window->devout,
+				    steps,
+				    move_forward);
+
+  ags_task_thread_append_task(AGS_TASK_THREAD(AGS_AUDIO_LOOP(AGS_MAIN(window->ags_main)->main_loop)->task_thread),
+			      AGS_TASK(seek_devout));
+
+  /* update GUI */
+  navigation->start_tact = tact_counter;
+
   zoom_factor = 0.25;
 
   tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom));
@@ -452,7 +486,6 @@ ags_navigation_real_change_position(AgsNavigation *navigation,
   gtk_label_set_text(navigation->position_time, timestr);
   
   g_free(timestr);
-
 }
 
 /**
diff --git a/src/ags/X/ags_navigation_callbacks.c b/src/ags/X/ags_navigation_callbacks.c
index 0b78fb5..6473a0d 100644
--- a/src/ags/X/ags_navigation_callbacks.c
+++ b/src/ags/X/ags_navigation_callbacks.c
@@ -112,8 +112,8 @@ ags_navigation_rewind_callback(GtkWidget *widget,
 			       AgsNavigation *navigation)
 {
   gtk_spin_button_set_value(navigation->position_tact,
-			    -1.0 * AGS_NAVIGATION_REWIND_STEPS +
-			    AGS_NAVIGATION_DEFAULT_TACT_STEP);
+			    navigation->position_tact->adjustment->value +
+			    (-1.0 * AGS_NAVIGATION_REWIND_STEPS));
 }
 
 void
@@ -121,8 +121,8 @@ ags_navigation_prev_callback(GtkWidget *widget,
 			     AgsNavigation *navigation)
 {
   gtk_spin_button_set_value(navigation->position_tact,
-			    -1.0 * AGS_NAVIGATION_SEEK_STEPS +
-			    AGS_NAVIGATION_DEFAULT_TACT_STEP);
+			    navigation->position_tact->adjustment->value +
+			    (-1.0 * AGS_NAVIGATION_SEEK_STEPS));
 }
 
 void
@@ -210,8 +210,8 @@ ags_navigation_next_callback(GtkWidget *widget,
 			     AgsNavigation *navigation)
 {
   gtk_spin_button_set_value(navigation->position_tact,
-			    AGS_NAVIGATION_REWIND_STEPS+
-			    AGS_NAVIGATION_DEFAULT_TACT_STEP);
+			    navigation->position_tact->adjustment->value +
+			    AGS_NAVIGATION_REWIND_STEPS);
 }
 
 void
@@ -220,7 +220,7 @@ ags_navigation_forward_callback(GtkWidget *widget,
 {
 
   gtk_spin_button_set_value(navigation->position_tact,
-			    AGS_NAVIGATION_SEEK_STEPS +
+			    navigation->position_tact->adjustment->value +
 			    AGS_NAVIGATION_DEFAULT_TACT_STEP);
 }
 
diff --git a/src/ags/X/ags_window.c b/src/ags/X/ags_window.c
index d161fb9..5098385 100644
--- a/src/ags/X/ags_window.c
+++ b/src/ags/X/ags_window.c
@@ -170,7 +170,7 @@ ags_window_init(AgsWindow *window)
   error = NULL;
   
   g_object_set(G_OBJECT(window),
-  	       "icon\0", gdk_pixbuf_new_from_file("./doc/images/jumper.png\0", &error),
+  	       "icon\0", gdk_pixbuf_new_from_file("/usr/share/gsequencer/icons/jumper.png\0", &error),
   	       NULL);
 
   window->ags_main = NULL;
diff --git a/src/ags/audio/ags_devout.c b/src/ags/audio/ags_devout.c
index eaf808f..638cc2b 100644
--- a/src/ags/audio/ags_devout.c
+++ b/src/ags/audio/ags_devout.c
@@ -320,7 +320,7 @@ ags_devout_class_init(AgsDevoutClass *devout)
 				  PROP_BPM,
 				  param_spec);
   /**
-   * AgsDevout:bpm:
+   * AgsDevout:attack:
    *
    * Attack of the buffer
    * 
@@ -619,7 +619,37 @@ ags_devout_set_property(GObject *gobject,
     break;
   case PROP_BPM:
     {
-	//TODO:JK: implement me
+      gdouble bpm;
+      gdouble delay;
+      guint default_tact_frames;
+      guint default_period;
+      guint i;
+      
+      bpm = g_value_get_double(value);
+
+      devout->bpm = bpm;
+
+      /* delay and attack */
+      devout->delay = (gdouble *) malloc((int) 2 * AGS_DEVOUT_DEFAULT_PERIOD *
+					 sizeof(gdouble));
+  
+      devout->attack = (guint *) malloc((int) 2 * AGS_DEVOUT_DEFAULT_PERIOD *
+					sizeof(guint));
+  
+      delay = ((gdouble) devout->frequency / (gdouble) devout->buffer_size) * (gdouble)(60.0 / devout->bpm);
+      default_tact_frames = (guint) (delay * devout->buffer_size);
+      default_period = (1.0 / AGS_DEVOUT_DEFAULT_PERIOD) * (default_tact_frames);
+
+      devout->attack[0] = 0;
+      devout->delay[0] = delay;
+  
+      for(i = 1; i < (int)  2.0 * AGS_DEVOUT_DEFAULT_PERIOD; i++){
+	devout->attack[i] = (guint) ((i * default_tact_frames + devout->attack[i - 1]) / (AGS_DEVOUT_DEFAULT_PERIOD / (delay * i))) % (guint) (devout->buffer_size);
+      }
+  
+      for(i = 1; i < (int) 2.0 * AGS_DEVOUT_DEFAULT_PERIOD; i++){
+	devout->delay[i] = ((gdouble) (default_tact_frames + devout->attack[i])) / (gdouble) devout->buffer_size;
+      }
     }
     break;
   default:
diff --git a/src/ags/audio/recall/ags_count_beats_audio_run.c b/src/ags/audio/recall/ags_count_beats_audio_run.c
index c884475..a5f5756 100644
--- a/src/ags/audio/recall/ags_count_beats_audio_run.c
+++ b/src/ags/audio/recall/ags_count_beats_audio_run.c
@@ -36,6 +36,8 @@
 
 #include <ags/audio/ags_recall_container.h>
 
+#include <ags/audio/recall/ags_delay_audio.h>
+#include <ags/audio/recall/ags_delay_audio_run.h>
 #include <ags/audio/recall/ags_stream_channel_run.h>
 
 #include <math.h>
@@ -660,9 +662,23 @@ ags_count_beats_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_conn
 void
 ags_count_beats_audio_run_seek(AgsSeekable *seekable,
 			       guint steps,
-			       gboolean forward)
+			       gboolean move_forward)
 {
-  //TODO:JK: implement this function
+  AgsDelayAudio *delay_audio;
+  AgsDelayAudioRun *delay_audio_run;
+  AgsCountBeatsAudioRun *count_beats_audio_run;
+
+  count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(seekable);
+  delay_audio_run = count_beats_audio_run->delay_audio_run;
+  delay_audio = AGS_RECALL_AUDIO_RUN(delay_audio_run)->recall_audio;
+  
+  if(move_forward){
+    count_beats_audio_run->notation_counter += steps;
+    count_beats_audio_run->sequencer_counter += (steps % (guint) delay_audio->sequencer_duration->port_value.ags_port_double);
+  }else{
+    count_beats_audio_run->notation_counter -= steps;
+    count_beats_audio_run->sequencer_counter -= (steps % (guint) delay_audio->sequencer_duration->port_value.ags_port_double);
+  }
 }
 
 guint
diff --git a/src/ags/audio/task/ags_seek_devout.c b/src/ags/audio/task/ags_seek_devout.c
new file mode 100644
index 0000000..32da527
--- /dev/null
+++ b/src/ags/audio/task/ags_seek_devout.c
@@ -0,0 +1,206 @@
+/* AGS - Advanced GTK Sequencer
+ * Copyright (C) 2015 Joël Krähemann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <ags/audio/task/ags_seek_devout.h>
+
+#include <ags-lib/object/ags_connectable.h>
+
+#include <ags/object/ags_seekable.h>
+
+#include <ags/main.h>
+
+void ags_seek_devout_class_init(AgsSeekDevoutClass *seek_devout);
+void ags_seek_devout_connectable_interface_init(AgsConnectableInterface *connectable);
+void ags_seek_devout_init(AgsSeekDevout *seek_devout);
+void ags_seek_devout_connect(AgsConnectable *connectable);
+void ags_seek_devout_disconnect(AgsConnectable *connectable);
+void ags_seek_devout_finalize(GObject *gobject);
+
+void ags_seek_devout_launch(AgsTask *task);
+
+/**
+ * SECTION:ags_seek_devout
+ * @short_description: seek devout object to devout loop
+ * @title: AgsSeekDevout
+ * @section_id:
+ * @include: ags/devout/task/ags_seek_devout.h
+ *
+ * The #AgsSeekDevout task seeks #AgsDevout to #AgsDevoutLoop.
+ */
+
+static gpointer ags_seek_devout_parent_class = NULL;
+static AgsConnectableInterface *ags_seek_devout_parent_connectable_interface;
+
+GType
+ags_seek_devout_get_type()
+{
+  static GType ags_type_seek_devout = 0;
+
+  if(!ags_type_seek_devout){
+    static const GTypeInfo ags_seek_devout_info = {
+      sizeof (AgsSeekDevoutClass),
+      NULL, /* base_init */
+      NULL, /* base_finalize */
+      (GClassInitFunc) ags_seek_devout_class_init,
+      NULL, /* class_finalize */
+      NULL, /* class_data */
+      sizeof (AgsSeekDevout),
+      0,    /* n_preallocs */
+      (GInstanceInitFunc) ags_seek_devout_init,
+    };
+
+    static const GInterfaceInfo ags_connectable_interface_info = {
+      (GInterfaceInitFunc) ags_seek_devout_connectable_interface_init,
+      NULL, /* interface_finalize */
+      NULL, /* interface_data */
+    };
+
+    ags_type_seek_devout = g_type_register_static(AGS_TYPE_TASK,
+						  "AgsSeekDevout\0",
+						  &ags_seek_devout_info,
+						  0);
+
+    g_type_add_interface_static(ags_type_seek_devout,
+				AGS_TYPE_CONNECTABLE,
+				&ags_connectable_interface_info);
+  }
+  
+  return (ags_type_seek_devout);
+}
+
+void
+ags_seek_devout_class_init(AgsSeekDevoutClass *seek_devout)
+{
+  GObjectClass *gobject;
+  AgsTaskClass *task;
+
+  ags_seek_devout_parent_class = g_type_class_peek_parent(seek_devout);
+
+  /* gobject */
+  gobject = (GObjectClass *) seek_devout;
+
+  gobject->finalize = ags_seek_devout_finalize;
+
+  /* task */
+  task = (AgsTaskClass *) seek_devout;
+
+  task->launch = ags_seek_devout_launch;
+}
+
+void
+ags_seek_devout_connectable_interface_init(AgsConnectableInterface *connectable)
+{
+  ags_seek_devout_parent_connectable_interface = g_type_interface_peek_parent(connectable);
+
+  connectable->connect = ags_seek_devout_connect;
+  connectable->disconnect = ags_seek_devout_disconnect;
+}
+
+void
+ags_seek_devout_init(AgsSeekDevout *seek_devout)
+{
+  seek_devout->devout = NULL;
+  seek_devout->steps = 0;
+  seek_devout->move_forward = FALSE;
+}
+
+void
+ags_seek_devout_connect(AgsConnectable *connectable)
+{
+  ags_seek_devout_parent_connectable_interface->connect(connectable);
+
+  /* empty */
+}
+
+void
+ags_seek_devout_disconnect(AgsConnectable *connectable)
+{
+  ags_seek_devout_parent_connectable_interface->disconnect(connectable);
+
+  /* empty */
+}
+
+void
+ags_seek_devout_finalize(GObject *gobject)
+{
+  G_OBJECT_CLASS(ags_seek_devout_parent_class)->finalize(gobject);
+
+  /* empty */
+}
+
+void
+ags_seek_devout_launch(AgsTask *task)
+{
+  AgsSeekDevout *seek_devout;
+  GList *audio, *recall;
+
+  seek_devout = AGS_SEEK_DEVOUT(task);
+
+  audio = AGS_DEVOUT(seek_devout->devout)->audio;
+
+  while(audio != NULL){
+    recall = AGS_AUDIO(audio->data)->recall;
+
+    while(recall != NULL){
+      if(AGS_IS_SEEKABLE(recall->data)){
+	ags_seekable_seek(AGS_SEEKABLE(recall->data),
+			  seek_devout->steps,
+			  seek_devout->move_forward);
+      }
+
+      recall = recall->next;
+    }
+
+    audio = audio->next;
+  }
+  
+  if(seek_devout->move_forward){
+    AGS_DEVOUT(seek_devout->devout)->tact_counter += seek_devout->steps;
+  }else{
+    AGS_DEVOUT(seek_devout->devout)->tact_counter -= seek_devout->steps;
+  }
+}
+
+/**
+ * ags_seek_devout_new:
+ * @devout: the #AgsDevout to seek
+ * @steps:
+ * @move_forward:
+ *
+ * Creates an #AgsSeekDevout.
+ *
+ * Returns: an new #AgsSeekDevout.
+ *
+ * Since: 0.4
+ */
+AgsSeekDevout*
+ags_seek_devout_new(GObject *devout,
+		    guint steps,
+		    gboolean move_forward)
+{
+  AgsSeekDevout *seek_devout;
+
+  seek_devout = (AgsSeekDevout *) g_object_new(AGS_TYPE_SEEK_DEVOUT,
+					       NULL);
+
+  seek_devout->devout = devout;
+  seek_devout->steps = steps;
+  seek_devout->move_forward = move_forward;
+
+  return(seek_devout);
+}
diff --git a/src/ags/audio/task/ags_seek_devout.c~ b/src/ags/audio/task/ags_seek_devout.c~
new file mode 100644
index 0000000..7e35564
--- /dev/null
+++ b/src/ags/audio/task/ags_seek_devout.c~
@@ -0,0 +1,200 @@
+/* AGS - Advanced GTK Sequencer
+ * Copyright (C) 2015 Joël Krähemann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <ags/audio/task/ags_seek_devout.h>
+
+#include <ags-lib/object/ags_connectable.h>
+
+#include <ags/main.h>
+
+void ags_seek_devout_class_init(AgsSeekDevoutClass *seek_devout);
+void ags_seek_devout_connectable_interface_init(AgsConnectableInterface *connectable);
+void ags_seek_devout_init(AgsSeekDevout *seek_devout);
+void ags_seek_devout_connect(AgsConnectable *connectable);
+void ags_seek_devout_disconnect(AgsConnectable *connectable);
+void ags_seek_devout_finalize(GObject *gobject);
+
+void ags_seek_devout_launch(AgsTask *task);
+
+/**
+ * SECTION:ags_seek_devout
+ * @short_description: seek devout object to devout loop
+ * @title: AgsSeekDevout
+ * @section_id:
+ * @include: ags/devout/task/ags_seek_devout.h
+ *
+ * The #AgsSeekDevout task seeks #AgsDevout to #AgsDevoutLoop.
+ */
+
+static gpointer ags_seek_devout_parent_class = NULL;
+static AgsConnectableInterface *ags_seek_devout_parent_connectable_interface;
+
+GType
+ags_seek_devout_get_type()
+{
+  static GType ags_type_seek_devout = 0;
+
+  if(!ags_type_seek_devout){
+    static const GTypeInfo ags_seek_devout_info = {
+      sizeof (AgsSeekDevoutClass),
+      NULL, /* base_init */
+      NULL, /* base_finalize */
+      (GClassInitFunc) ags_seek_devout_class_init,
+      NULL, /* class_finalize */
+      NULL, /* class_data */
+      sizeof (AgsSeekDevout),
+      0,    /* n_preallocs */
+      (GInstanceInitFunc) ags_seek_devout_init,
+    };
+
+    static const GInterfaceInfo ags_connectable_interface_info = {
+      (GInterfaceInitFunc) ags_seek_devout_connectable_interface_init,
+      NULL, /* interface_finalize */
+      NULL, /* interface_data */
+    };
+
+    ags_type_seek_devout = g_type_register_static(AGS_TYPE_TASK,
+						  "AgsSeekDevout\0",
+						  &ags_seek_devout_info,
+						  0);
+
+    g_type_add_interface_static(ags_type_seek_devout,
+				AGS_TYPE_CONNECTABLE,
+				&ags_connectable_interface_info);
+  }
+  
+  return (ags_type_seek_devout);
+}
+
+void
+ags_seek_devout_class_init(AgsSeekDevoutClass *seek_devout)
+{
+  GObjectClass *gobject;
+  AgsTaskClass *task;
+
+  ags_seek_devout_parent_class = g_type_class_peek_parent(seek_devout);
+
+  /* gobject */
+  gobject = (GObjectClass *) seek_devout;
+
+  gobject->finalize = ags_seek_devout_finalize;
+
+  /* task */
+  task = (AgsTaskClass *) seek_devout;
+
+  task->launch = ags_seek_devout_launch;
+}
+
+void
+ags_seek_devout_connectable_interface_init(AgsConnectableInterface *connectable)
+{
+  ags_seek_devout_parent_connectable_interface = g_type_interface_peek_parent(connectable);
+
+  connectable->connect = ags_seek_devout_connect;
+  connectable->disconnect = ags_seek_devout_disconnect;
+}
+
+void
+ags_seek_devout_init(AgsSeekDevout *seek_devout)
+{
+  seek_devout->devout = NULL;
+  seek_devout->steps = 0;
+  seek_devout->move_forward = FALSE;
+}
+
+void
+ags_seek_devout_connect(AgsConnectable *connectable)
+{
+  ags_seek_devout_parent_connectable_interface->connect(connectable);
+
+  /* empty */
+}
+
+void
+ags_seek_devout_disconnect(AgsConnectable *connectable)
+{
+  ags_seek_devout_parent_connectable_interface->disconnect(connectable);
+
+  /* empty */
+}
+
+void
+ags_seek_devout_finalize(GObject *gobject)
+{
+  G_OBJECT_CLASS(ags_seek_devout_parent_class)->finalize(gobject);
+
+  /* empty */
+}
+
+void
+ags_seek_devout_launch(AgsTask *task)
+{
+  AgsSeekDevout *seek_devout;
+  GList *audio, *recall;
+
+  seek_devout = AGS_SEEK_DEVOUT(task);
+
+  audio = AGS_DEVOUT(seek_devout->devout)->audio;
+
+  while(audio != NULL){
+    recall = AGS_AUDIO(audio->data)->recall;
+
+    while(recall != NULL){
+      if(AGS_IS_SEEKABLE(recall->data)){
+	ags_seekable_seek(AGS_SEEKABLE(recall->data),
+			  seek_devout->steps
+			  seek_devout->move_forward);
+      }
+
+      recall = recall->next;
+    }
+
+    audio = audio->next;
+  }
+  
+  if(seek_devout->move_forward){
+    AGS_DEVOUT(seek_devout->devout)->tact_counter += seek_devout->steps;
+  }else{
+    AGS_DEVOUT(seek_devout->devout)->tact_counter -= seek_devout->steps;
+  }
+}
+
+/**
+ * ags_seek_devout_new:
+ * @devout: the #AgsDevout to seek
+ *
+ * Creates an #AgsSeekDevout.
+ *
+ * Returns: an new #AgsSeekDevout.
+ *
+ * Since: 0.4
+ */
+AgsSeekDevout*
+ags_seek_devout_new(GObject *devout_loop,
+		    GObject *devout)
+{
+  AgsSeekDevout *seek_devout;
+
+  seek_devout = (AgsSeekDevout *) g_object_new(AGS_TYPE_SEEK_DEVOUT,
+					       NULL);
+
+  seek_devout->devout_loop = devout_loop;
+  seek_devout->devout = devout;
+
+  return(seek_devout);
+}
diff --git a/src/ags/audio/task/ags_seek_devout.h b/src/ags/audio/task/ags_seek_devout.h
new file mode 100644
index 0000000..73bc9bc
--- /dev/null
+++ b/src/ags/audio/task/ags_seek_devout.h
@@ -0,0 +1,58 @@
+/* AGS - Advanced GTK Sequencer
+ * Copyright (C) 2015 Joël Krähemann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __AGS_SEEK_DEVOUT_H__
+#define __AGS_SEEK_DEVOUT_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <ags/audio/ags_task.h>
+#include <ags/audio/ags_devout.h>
+
+#define AGS_TYPE_SEEK_DEVOUT                (ags_seek_devout_get_type())
+#define AGS_SEEK_DEVOUT(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SEEK_DEVOUT, AgsSeekDevout))
+#define AGS_SEEK_DEVOUT_CLASS(class)        (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SEEK_DEVOUT, AgsSeekDevoutClass))
+#define AGS_IS_SEEK_DEVOUT(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SEEK_DEVOUT))
+#define AGS_IS_SEEK_DEVOUT_CLASS(class)     (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SEEK_DEVOUT))
+#define AGS_SEEK_DEVOUT_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SEEK_DEVOUT, AgsSeekDevoutClass))
+
+typedef struct _AgsSeekDevout AgsSeekDevout;
+typedef struct _AgsSeekDevoutClass AgsSeekDevoutClass;
+
+struct _AgsSeekDevout
+{
+  AgsTask task;
+
+  GObject *devout;
+  guint steps;
+  gboolean move_forward;
+};
+
+struct _AgsSeekDevoutClass
+{
+  AgsTaskClass task;
+};
+
+GType ags_seek_devout_get_type();
+
+AgsSeekDevout* ags_seek_devout_new(GObject *devout,
+				   guint steps,
+				   gboolean move_forward);
+
+#endif /*__AGS_SEEK_DEVOUT_H__*/
diff --git a/src/ags/audio/task/ags_seek_devout.h~ b/src/ags/audio/task/ags_seek_devout.h~
new file mode 100644
index 0000000..395b472
--- /dev/null
+++ b/src/ags/audio/task/ags_seek_devout.h~
@@ -0,0 +1,58 @@
+/* AGS - Advanced GTK Sequencer
+ * Copyright (C) 2015 Joël Krähemann
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __AGS_SEEK_DEVOUT_H__
+#define __AGS_SEEK_DEVOUT_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <ags/devout/ags_task.h>
+#include <ags/devout/ags_devout.h>
+
+#define AGS_TYPE_SEEK_DEVOUT                (ags_seek_devout_get_type())
+#define AGS_SEEK_DEVOUT(obj)                (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SEEK_DEVOUT, AgsSeekDevout))
+#define AGS_SEEK_DEVOUT_CLASS(class)        (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SEEK_DEVOUT, AgsSeekDevoutClass))
+#define AGS_IS_SEEK_DEVOUT(obj)             (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SEEK_DEVOUT))
+#define AGS_IS_SEEK_DEVOUT_CLASS(class)     (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SEEK_DEVOUT))
+#define AGS_SEEK_DEVOUT_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SEEK_DEVOUT, AgsSeekDevoutClass))
+
+typedef struct _AgsSeekDevout AgsSeekDevout;
+typedef struct _AgsSeekDevoutClass AgsSeekDevoutClass;
+
+struct _AgsSeekDevout
+{
+  AgsTask task;
+
+  GObject *devout;
+  guint steps;
+  gboolean move_forward;
+};
+
+struct _AgsSeekDevoutClass
+{
+  AgsTaskClass task;
+};
+
+GType ags_seek_devout_get_type();
+
+AgsSeekDevout* ags_seek_devout_new(GObject *devout,
+				   guint steps,
+				   gboolean move_forward);
+
+#endif /*__AGS_SEEK_DEVOUT_H__*/
diff --git a/src/ags/audio/task/recall/ags_apply_bpm.c b/src/ags/audio/task/recall/ags_apply_bpm.c
index 18b6bfa..7e5884f 100644
--- a/src/ags/audio/task/recall/ags_apply_bpm.c
+++ b/src/ags/audio/task/recall/ags_apply_bpm.c
@@ -263,6 +263,9 @@ ags_apply_bpm_devout(AgsApplyBpm *apply_bpm, AgsDevout *devout)
 {
   GList *list;
 
+  g_object_set(devout,
+	       "bpm\0", apply_bpm->bpm,
+	       NULL);
   //TODO:JK: implement me
 
   /* AgsAudio */

-- 
gsequencer packaging



More information about the pkg-multimedia-commits mailing list