summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autowaf.py96
-rw-r--r--gtk2_ardour/ardour_ui.cc42
-rw-r--r--gtk2_ardour/ardour_ui.h1
-rw-r--r--gtk2_ardour/cocoacarbon.mm8
-rw-r--r--gtk2_ardour/diamond.cc8
-rw-r--r--gtk2_ardour/diamond.h1
-rw-r--r--gtk2_ardour/editor.h3
-rw-r--r--gtk2_ardour/editor_canvas_events.cc2
-rw-r--r--gtk2_ardour/editor_routes.cc4
-rw-r--r--gtk2_ardour/marker.cc8
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in734
-rw-r--r--gtk2_ardour/public_editor.h9
-rw-r--r--gtk2_ardour/time_axis_view_item.cc8
-rw-r--r--gtk2_ardour/wscript56
-rw-r--r--libs/ardour/ardour/coreaudiosource.h9
-rw-r--r--libs/ardour/coreaudiosource.cc12
-rw-r--r--libs/ardour/plugin_manager.cc2
-rw-r--r--libs/ardour/route.cc8
-rw-r--r--libs/ardour/wscript36
-rw-r--r--libs/gtkmm2ext/barcontroller.cc2
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/barcontroller.h8
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/cell_renderer_pixbuf_toggle.h9
-rw-r--r--libs/gtkmm2ext/wscript64
-rw-r--r--libs/pbd/wscript4
-rw-r--r--libs/surfaces/control_protocol/wscript1
-rw-r--r--libs/surfaces/osc/wscript7
-rw-r--r--wscript27
27 files changed, 640 insertions, 529 deletions
diff --git a/autowaf.py b/autowaf.py
index 21ec430d37..9078761ef8 100644
--- a/autowaf.py
+++ b/autowaf.py
@@ -130,6 +130,102 @@ def configure(conf):
conf.env['DEBUG'] = Options.options.debug
conf.env['STRICT'] = Options.options.strict
conf.env['PREFIX'] = os.path.abspath(os.path.expanduser(os.path.normpath(conf.env['PREFIX'])))
+
+ if sys.platform == 'darwin':
+ #
+ # Define OSX as a uselib to use when compiling
+ # on Darwin to add all applicable flags at once
+ #
+ conf.env.append_value('CXXFLAGS_OSX', "-mmacosx-version-min=10.4")
+ conf.env.append_value('CCFLAGS_OSX', "-mmacosx-version-min=10.4")
+ conf.env.append_value('CXXFLAGS_OSX', "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")
+ conf.env.append_value('CCFLAGS_OSX', "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")
+ conf.env.append_value('LINKFLAGS_OSX', "-mmacosx-version-min=10.4")
+ conf.env.append_value('LINKFLAGS_OSX', "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")
+
+ conf.env.append_value('LINKFLAGS_OSX', "-sysroot /Developer/SDKs/MacOSX10.4u.sdk")
+ conf.env.append_value('LINKFLAGS_OSX', "-F/System/Library/Frameworks")
+
+ conf.env.append_value('CXXFLAGS_OSX', "-msse")
+ conf.env.append_value('CCFLAGS_OSX', "-msse")
+ conf.env.append_value('CXXFLAGS_OSX', "-msse2")
+ conf.env.append_value('CCFLAGS_OSX', "-msse2")
+ #
+ # TODO: The previous sse flags NEED to be based
+ # off processor type. Need to add in a check
+ # for that.
+ #
+
+ conf.env.append_value('LINKFLAGS_OSX', ['-undefined', 'suppress'])
+ conf.env.append_value('LINKFLAGS_OSX', "-flat_namespace")
+ #
+ # The previous 2 flags avoid circular dependencies
+ # between libardour and libardour_cp on OS X.
+ # ld reported -undefined suppress as an unknown option
+ # in one of the tests ran, removing it for the moment
+ #
+ conf.env.append_value('CXXFLAGS_OSX', "-F/System/Library/Frameworks")
+ conf.env.append_value('CCFLAGS_OSX', "-F/System/Library/Frameworks")
+
+
+ if Options.options.gtkosx:
+ #
+ # Define Include Paths for GTKOSX
+ #
+ conf.env.append_value('CPPPATH_GTKOSX', "/usr/include/")
+ conf.env.append_value('CPPPATH_GTKOSX', "/usr/include/c++/4.0.0")
+ conf.env.append_value('CPPPATH_GTKOSX', "/usr/include/c++/4.0.0/i686-apple-darwin8/")
+ #
+ # TODO: Fix the above include path, it needs to be
+ # defined based off what is read in the configuration
+ # stage about the machine(PPC, X86, X86_64, etc.)
+ #
+ conf.env.append_value('CPPPATH_GTKOSX', "/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/")
+ #
+ # TODO: Likewise this needs to be defined not only
+ # based off the machine characteristics, but also
+ # based off the version of GCC being used.
+ #
+ conf.env.append_value('CPPPATH_GTKOSX', "/System/Library/Frameworks/")
+ conf.env.append_value('CXXFLAGS_GTKOSX', '-DTOP_MENUBAR')
+ conf.env.append_value('CXXFLAGS_GTKOSX', '-DGTKOSX')
+ conf.env.append_value('LINKFLAGS_GTKOSX', "-framework AppKit")
+ conf.env.append_value('LINKFLAGS_GTKOSX', "-Xlinker -headerpad")
+ conf.env.append_value('LINKFLAGS_GTKOSX', "-Xlinker 2048")
+ conf.env.append_value('CPPPATH_GTKOSX', "/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/")
+ #
+ # I had a note the previous was for MacTypes.h
+ #
+
+ if Options.options.coreaudio:
+ #conf.env.append_value('LINKFLAGS_COREAUDIO', "-framework CoreAudioKit")
+ #conf.env.append_value('LINKFLAGS_COREAUDIO', "-framework AudioToolbox")
+ #conf.env.append_value('LINKFLAGS_COREAUDIO', "-framework CoreServices")
+ conf.check_cc (header_name = '/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h',
+ define_name = 'HAVE_COREAUDIO', linkflags = ['-framework', 'CoreAudio'])
+ conf.check_cxx (header_name = '/System/Library/Frameworks/AudioToolbox.framework/Headers/ExtendedAudioFile.h',
+ linkflags = [ '-framework', 'AudioToolbox' ])
+ conf.check_cc (header_name = '/System/Library/Frameworks/CoreFoundation.framework/Headers/CoreFoundation.h',
+ linkflags = ['-framework', 'CoreFoundation'])
+ conf.check_cc (header_name = '/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h',
+ linkflags = ['-framework', 'CoreServices'])
+ #
+ # TODO: For some reason the above doesn't seem to be correctly adding the
+ # the link flags, so we will add them manually.
+ #
+ conf.env.append_value('LINKFLAGS_COREAUDIO', ['-framework', 'CoreServices'])
+ conf.env.append_value('LINKFLAGS_COREAUDIO', ['-framework', 'CoreFoundation'])
+ conf.env.append_value('LINKFLAGS_COREAUDIO', ['-framework', 'AudioToolbox'])
+ conf.env.append_value('LINKFLAGS_COREAUDIO', ['-framework', 'CoreAudio'])
+
+ if Options.options.audiounits:
+ #conf.env.append_value('CXXFLAGS_AUDIOUNITS', "-DHAVE_AUDIOUNITS")
+ conf.env.append_value('LINKFLAGS_AUDIOUNITS', "-framework AudioToolbox")
+ conf.env.append_value('LINKFLAGS_AUDIOUNITS', "-framework CoreServices")
+ conf.check_cc (header_name = '/System/Library/Frameworks/AudioUnit.framework/Headers/AudioUnit.h',
+ define_name = 'HAVE_AUDIOUNITS', linkflags = [ '-framework', 'AudioUnit' ])
+
+
if Options.options.bundle:
conf.env['BUNDLE'] = True
conf.define('BUNDLE', 1)
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index de1273a719..b551dc37d3 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -172,7 +172,12 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
#ifdef TOP_MENUBAR
- _auto_display_errors = false;
+ // _auto_display_errors = false;
+ /*
+ * This was commented out as it wasn't defined
+ * in A3 IIRC. If this is not needed it should
+ * be completely removed.
+ */
#endif
about = 0;
@@ -2204,6 +2209,41 @@ ARDOUR_UI::build_session_from_nsd (const Glib::ustring& session_path, const Glib
}
void
+ARDOUR_UI::idle_load (const Glib::ustring& path)
+{
+ if (session) {
+ if (Glib::file_test (path, Glib::FILE_TEST_IS_DIR)) {
+ /* /path/to/foo => /path/to/foo, foo */
+ load_session (path, basename_nosuffix (path));
+ } else {
+ /* /path/to/foo/foo.ardour => /path/to/foo, foo */
+ load_session (Glib::path_get_dirname (path), basename_nosuffix (path));
+ }
+ } else {
+
+ ARDOUR_COMMAND_LINE::session_name = path;
+
+ /*
+ * new_session_dialog doens't exist in A3
+ * Try to remove all references to it to
+ * see if it will compile. NOTE: this will
+ * likely cause a runtime issue is my somewhat
+ * uneducated guess.
+ */
+
+ //if (new_session_dialog) {
+
+
+ /* make it break out of Dialog::run() and
+ start again.
+ */
+
+ //new_session_dialog->response (1);
+ //}
+ }
+}
+
+void
ARDOUR_UI::end_loading_messages ()
{
// hide_splash ();
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index acf711290a..407867167a 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -115,6 +115,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void show_about ();
void hide_about ();
+ void idle_load (const Glib::ustring& path);
void finish();
int load_session (const Glib::ustring& path, const Glib::ustring& snapshot, Glib::ustring mix_template = Glib::ustring());
diff --git a/gtk2_ardour/cocoacarbon.mm b/gtk2_ardour/cocoacarbon.mm
index e4f833dd26..84e34bd74d 100644
--- a/gtk2_ardour/cocoacarbon.mm
+++ b/gtk2_ardour/cocoacarbon.mm
@@ -21,6 +21,14 @@
#undef YES // stupid, stupid gtkmm and/or NSObjC
#undef NO // ditto
+#ifdef GTKOSX
+#include <objc/objc.h>
+#ifdef nil
+ /*Stupid OS X defining nil*/
+#undef nil
+#endif
+#endif
+
#include "ardour_ui.h"
#include "actions.h"
#include "opts.h"
diff --git a/gtk2_ardour/diamond.cc b/gtk2_ardour/diamond.cc
index 04fdd509c2..7d3e66357d 100644
--- a/gtk2_ardour/diamond.cc
+++ b/gtk2_ardour/diamond.cc
@@ -32,10 +32,10 @@ void
Diamond::set_height(double height)
{
Points points;
- points.push_back(Point(0, height*2.0));
- points.push_back(Point(height, height));
- points.push_back(Point(0, 0));
- points.push_back(Point(-height, height));
+ points.push_back(Art::Point(0, height*2.0));
+ points.push_back(Art::Point(height, height));
+ points.push_back(Art::Point(0, 0));
+ points.push_back(Art::Point(-height, height));
property_points() = points;
}
diff --git a/gtk2_ardour/diamond.h b/gtk2_ardour/diamond.h
index da344fed29..6afa3e3d64 100644
--- a/gtk2_ardour/diamond.h
+++ b/gtk2_ardour/diamond.h
@@ -22,6 +22,7 @@
#include <libgnomecanvasmm/polygon.h>
#include "canvas-note-event.h"
+#include "canvas.h"
namespace Gnome {
namespace Canvas {
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 6b6358c2cb..2a1875d17d 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -38,8 +38,8 @@
#include <cmath>
-#include <gtkmm/layout.h>
#include <gtkmm/comboboxtext.h>
+#include <gtkmm/layout.h>
#include <gtkmm2ext/selector.h>
#include <gtkmm2ext/click_box.h>
@@ -48,7 +48,6 @@
#include "pbd/stateful.h"
#include "ardour/session.h"
#include "ardour/tempo.h"
-#include "ardour/stretch.h"
#include "ardour/location.h"
#include "ardour/audioregion.h"
#include "ardour/track.h"
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index d965c82c08..e789fef314 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -26,9 +26,9 @@
#include "ardour/audio_diskstream.h"
#include "ardour/audioplaylist.h"
-#include "ardour/midi_region.h"
#include "ardour/audioregion.h"
#include "ardour/region_factory.h"
+#include "ardour/midi_region.h"
#include "editor.h"
#include "keyboard.h"
diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc
index 4b6ca10b72..ebb467dc60 100644
--- a/gtk2_ardour/editor_routes.cc
+++ b/gtk2_ardour/editor_routes.cc
@@ -24,8 +24,6 @@
#include <cmath>
#include <cassert>
-#include "gtkmm2ext/cell_renderer_pixbuf_toggle.h"
-
#include "ardour/diskstream.h"
#include "editor.h"
@@ -44,6 +42,8 @@
#include "ardour/route.h"
+#include "gtkmm2ext/cell_renderer_pixbuf_toggle.h"
+
#include "i18n.h"
using namespace std;
diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc
index 392ba85152..131354e72e 100644
--- a/gtk2_ardour/marker.cc
+++ b/gtk2_ardour/marker.cc
@@ -20,11 +20,17 @@
#include <sigc++/bind.h>
#include "ardour/tempo.h"
+#include "ardour_ui.h"
+/*
+ * ardour_ui.h include was moved to the top of the list
+ * due to a conflicting definition of 'Rect' between
+ * Apple's MacTypes.h and GTK.
+ */
+
#include "marker.h"
#include "public_editor.h"
#include "utils.h"
#include "canvas_impl.h"
-#include "ardour_ui.h"
#include "simpleline.h"
#include <gtkmm2ext/utils.h>
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index 39e193ba99..7ea5b8bf67 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -1,450 +1,372 @@
-; ardour-2.2 GtkAccelMap rc-file -*- scheme -*-
-; this file is a hand-edited map that is processed by scons
-; to produce a real accelmap.
+; this is a template file processed by tools/fmt-bindings to generate either
+; a gtk accelmap file or a LaTeX key binding cheat sheet.
;
+; it is the reference for any bindings or cheatsheets
+;
+;
+; FORMAT:
+; $text -> defines cheatsheet title as "text", which may contain LaTeX markup
+;
+; %group text -> defines a binding group called "group" which will have the title "text" on the cheatsheet.
+; may be followed by zero or more lines of descriptive text, which may contain LaTeX markup
+;
+; @group|action|binding|description -> defines an action+binding with description, as a member of a binding group
+; if group starts with '-' it will not be printed in the cheatsheet.
+; if group starts with '+' it will be printed in the cheatsheet no matter what
+; if the group is a mouse binding group, action should contain a ':', and
+; have the binding before the colon, and the target area after it
-;; punctuation
+;; Title
+$ARDOUR Shortcuts \linebreak Mnemonic US-Keypad
-(gtk_accel_path "<Actions>/Editor/temporal-zoom-in" "equal")
-(gtk_accel_path "<Actions>/Editor/temporal-zoom-out" "minus")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-sync" "apostrophe")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-next-region-sync" "semicolon")
-(gtk_accel_path "<Actions>/Editor/cycle-edit-point" "grave")
-(gtk_accel_path "<Actions>/Editor/cycle-edit-point-with-marker" "<@PRIMARY@>asciicircum")
+;; GROUP DEFINITIONS
-(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "period")
-(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "<@PRIMARY@>period")
+%trans Transport \& Recording Control
-(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "comma")
-(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "<@PRIMARY@>comma")
+%sess Session \& File Handling
-(gtk_accel_path "<Actions>/Editor/extend-range-to-end-of-region" "rightanglebracket")
-(gtk_accel_path "<Actions>/Editor/extend-range-to-start-of-region" "leftanglebracket")
+%edit Basic Editing
-(gtk_accel_path "<Actions>/Transport/ToggleRoll" "space")
-(gtk_accel_path "<Actions>/Transport/ToggleRollForgetCapture" "<@PRIMARY@>space")
-(gtk_accel_path "<Actions>/Transport/record-roll" "<@TERTIARY@>space")
+%vis Changing What's Visible
-(gtk_accel_path "<Actions>/Editor/set-fade-in-length" "slash")
-(gtk_accel_path "<Actions>/Editor/set-fade-out-length" "backslash")
+%wvis Window Visibility
-(gtk_accel_path "<Actions>/Editor/trim-from-start" "<@TERTIARY@>braceleft")
-(gtk_accel_path "<Actions>/Editor/trim-to-end" "<@TERTIARY@>braceright")
+%eep Editing with Edit Point
+Most edit functions operate on a single "Edit Point". The edit point can be any of: playhead (default), the mouse or an active marker. The choice of Edit Point is by default linked to the Zoom Focus.
-(gtk_accel_path "<Actions>/Editor/set-loop-from-edit-range" "bracketright")
-(gtk_accel_path "<Actions>/Editor/set-loop-from-region" "<@SECONDARY@>bracketright")
+%aep Aligning with the Edit Point
+Align operations move regions so that their start/end/sync point is at the edit point. "Relative" operations
+just align the first region and moves other selected regions to maintain relative positioning.
-(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
-(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<@SECONDARY@>bracketleft")
+%epp Edit Point Playback
-(gtk_accel_path "<Actions>/Editor/boost-region-gain" "asciicircum")
-(gtk_accel_path "<Actions>/Editor/cut-region-gain" "ampersand")
+%movp Moving the Playhead
+A left click in the rulers positions the playhead unless Ardour is recording. You can use {\tt KP$\_$n} to move the
+playhead to the n-th marker.
-;; letters
+%rop Region Operations
+
+%edit Edit Range
+There are only a few functions that refer to an "Edit Range". The current edit range is defined using combinations of the possible edit points: Playhead, Marker or Mouse.\par
+\begin{tabular}{lll}
+{\bf Edit Point} & {\bf Active Mark?} & {\bf Edit Range} \\
+Playhead & no & from Playhead to Mouse \\
+Playhead & yes & from Playhead to Active Marker \\
+ & & \\
+Mouse & no & from Mouse to Playhead \\
+Mouse & yes & from Mouse to Active Marker \\
+ & & \\
+Marker & no & {\it No edit range defined} \\
+Marker & yes & from Active Marker to Mouse
+\end{tabular}
+
+%select Selecting
+
+%ranges Defining Loop, Punch Range and Tempo Changes
+
+%markers Markers \& Locations
+The "move" commands all move the active marker(s). Jump to the first 9 markers using
+the keypad digits 1-9 (requires numlock).
+
+%mmode Mouse Modes
+
+%mouse Mouse Usage
+Right click on most objects and controls displays a context menu
+Shift+Right click deletes most objects.
+OS X users without a 3 button mouse can use {\tt Option+Ctrl+Left} to simulate "Middle" for some purposes.
+Use F1 to step through mouse modes.
+
+%mobject Mouse Object Mode
+This mode provides many different operations on both regions and control points, partially depending on where you click/drag with the mouse. The "body" of a region is the area where the waveform is displayed.
+%mzoom Mouse Zoom Mode
+%mops Mouse Ops on Solo/Mute/Rec-enable
+%mopsolo Mouse Ops on Solo Buttons only
+%mopsfader Mouse Ops on Faders \& Plugin Controls
+
+;; END GROUP DEFINITIONS
+
+;; punctuation
+
+@vis|Editor/temporal-zoom-in|equal|zoom in
+@vis|Editor/temporal-zoom-out|minus|zoom out
+@eep|Editor/edit-cursor-to-previous-region-sync|apostrophe|EP to previous region sync
+@eep|Editor/edit-cursor-to-next-region-sync|semicolon|EP to next region sync
+@eep|Editor/cycle-edit-point|grave|next EP w/o marker
+@eep|Editor/cycle-edit-point-with-marker|<@PRIMARY@>asciicircum|next EP w/marker
+
+@aep|Editor/extend-range-to-end-of-region|rightanglebracket|align sync point relative
+@-group|Editor/extend-range-to-start-of-region|leftanglebracket|some text
+
+@trans|Transport/ToggleRoll|space|toggle roll
+@epp|Editor/play-edit-range|<@SECONDARY@>space|play edit range
+@epp|Editor/play-from-edit-point-and-return|<@LEVEL4@>space|play from EP \& return
+@trans|Transport/ToggleRollForgetCapture|<@PRIMARY@>space|stop and destroy
+@trans|Transport/record-roll|<@TERTIARY@>space|start recording
+
+@rop|Editor/set-fade-in-length|slash|set fade in length
+@rop|Editor/set-fade-in-length|<@PRIMARY@>slash|toggle fade in active
+@rop|Editor/toggle-fade-out-active|backslash|set fade out length
+@rop|Editor/toggle-fade-out-active|<@PRIMARY@>backslash|toggle fade out active
+
+@eep|Editor/trim-from-start|<@TERTIARY@>braceleft|trim region start to edit point
+@eep|Editor/trim-to-end|<@TERTIARY@>braceright|trim region end to edit point
+
+@ranges|Editor/set-loop-from-edit-range|bracketright|set loop range from edit range
+@ranges|Editor/set-loop-from-region|<@SECONDARY@>bracketright|set loop range from region(s)
+
+@ranges|Editor/set-punch-from-edit-range|bracketleft|set punch range from edit range
+@ranges|Editor/set-punch-from-region|<@SECONDARY@>bracketleft|set punch range from region(s)
+
+@rop|Editor/boost-region-gain|asciicircum|increase region gain
+@rop|Editor/cut-region-gain|ampersand|reduce region gain
+
+;; letters
;; TOP ROW
-(gtk_accel_path "<Actions>/Common/Quit" "<@PRIMARY@>q")
+@sess|Common/Quit|<@PRIMARY@>q|quit
;; note that ctrl-w is special and consumed by the keyboard snooper
-(gtk_accel_path "<Actions>/Editor/set-edit-point" "e")
-(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<@PRIMARY@>e")
-(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<@TERTIARY@>e")
-(gtk_accel_path "<Actions>/Common/goto-editor" "<@WINDOW@>e")
-(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<@TERTIARY@><@PRIMARY@>e")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r")
-(gtk_accel_path "<Actions>/Editor/redo" "<@PRIMARY@>r")
-(gtk_accel_path "<Actions>/Transport/Record" "<@TERTIARY@>r")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
-(gtk_accel_path "<Actions>/Editor/insert-time" "<@PRIMARY@>t")
-(gtk_accel_path "<Actions>/Editor/select-all-between-cursors" "u")
-(gtk_accel_path "<Actions>/Editor/insert-region" "i")
-(gtk_accel_path "<Actions>/Editor/invert-selection" "<@TERTIARY@>i")
-(gtk_accel_path "<Actions>/Editor/addExistingAudioFiles" "<@SECONDARY@>i")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-object" "o")
-(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<@WINDOW@>o")
-(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
-(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<@PRIMARY@>p")
-(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<@TERTIARY@><@PRIMARY@>p")
+@rop|Editor/set-edit-point|e|set fade out length
+@select|Editor/select-all-before-edit-cursor|<@PRIMARY@>e|select all before EP
+@rop|Editor/export-region|<@PRIMARY@><@LEVEL4@>e|export selected region(s)
+@sess|Main/ExportSession|<@LEVEL4@>e|export session
+@select|Editor/select-all-after-edit-cursor|<@PRIMARY@><@TERTIARY@>e|select all after EP
+@vis|Editor/show-editor-mixer|<@TERTIARY@>e|toggle editor window mixer
+@wvis|Common/goto-editor|<@WINDOW@>e|toggle editor window
+@mmode|MouseMode/set-mouse-mode-range|r|range mode
+@edit|Editor/redo|<@PRIMARY@>r|redo
+@edit|Editor/reverse-region|<@PRIMARY@>r|reverse
+@trans|Transport/Record|<@TERTIARY@>r|engage record
+@mmode|MouseMode/set-mouse-mode-timefx|t|timefx mode
+@rop|Editor/pitch-shift-region|<@SECONDARY@>t|transpose
+@eep|Editor/insert-time|<@PRIMARY@>t|insert time
+@select|Editor/select-all-between-cursors|<@PRIMARY@>u|all enclosed by edit range
+@select|Editor/select-all-within-cursors|u|all present in edit range
+@eep|Editor/insert-region|i|insert from region list
+@select|Editor/invert-selection|<@TERTIARY@>i|invert selection
+@sess|Editor/addExistingAudioFiles|<@SECONDARY@>i|import audio files
+@mmode|MouseMode/set-mouse-mode-object|o|object mode
+@sess|Main/Open|<@PRIMARY@>o|open an existing session
+@sess|Main/Recent|<@PRIMARY@><@TERTIARY@>o|open a recent session
+@wvis|Common/ToggleOptionsEditor|<@WINDOW@>o|toggle preferences dialog
+@rop|Editor/naturalize-region|<@LEVEL4@>o|move to original position
+@trans|Editor/set-playhead|p|toggle auto-punch status
+@select|Editor/select-all-before-playhead|<@PRIMARY@>p|all before playhead
+@select|Editor/select-all-after-playhead|<@TERTIARY@><@PRIMARY@>p|all after playhead
;; MIDDLE ROW
-(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "a")
-(gtk_accel_path "<Actions>/Editor/select-all" "<@PRIMARY@>a")
-(gtk_accel_path "<Actions>/Editor/align-regions-end" "<@SECONDARY@>a")
-(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<@TERTIARY@>a")
-(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<@LEVEL4@>a")
-(gtk_accel_path "<Actions>/Editor/split-region" "s")
-(gtk_accel_path "<Actions>/Common/Save" "<@PRIMARY@>s")
-(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
-(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<@PRIMARY@>d")
-(gtk_accel_path "<Actions>/Editor/fit-tracks" "f")
-(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "<@PRIMARY@>f")
-(gtk_accel_path "<Actions>/Editor/toggle-rhythm-ferret" "<@WINDOW@>f")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
-(gtk_accel_path "<Actions>/Editor/play-selected-regions" "h")
-(gtk_accel_path "<Actions>/Editor/trim-front" "j")
-(gtk_accel_path "<Actions>/Editor/trim-back" "k")
-(gtk_accel_path "<Actions>/Common/ToggleKeyEditor" "<@WINDOW@>k")
-(gtk_accel_path "<Actions>/Transport/Loop" "l")
-(gtk_accel_path "<Actions>/Editor/select-all-in-loop-range" "<@PRIMARY@>l")
-(gtk_accel_path "<Actions>/Common/ToggleLocations" "<@WINDOW@>l")
+@aep|Editor/align-regions-sync-relative|a|align sync points (relative)
+@select|Editor/select-all|<@PRIMARY@>a|select everything
+@aep|Editor/align-regions-end|<@SECONDARY@>a|align end(s)
+@aep|Editor/align-regions-sync|<@TERTIARY@>a|align sync points
+@aep|Editor/align-regions-start|<@PRIMARY@><@LEVEL4@>a|align start(s)
+@aep|Editor/align-regions-start-relative|<@LEVEL4@>a|align start(s) relative
+@rop|Editor/split-region|s|split
+@sess|Common/Save|<@PRIMARY@>s|save session
+@sess|Main/Snapshot|<@PRIMARY@><@TERTIARY@>s|snapshot session
+@rop|Editor/duplicate-region|d|duplicate region (once)
+@rop|Editor/multi-duplicate-region|<@TERTIARY@>d|duplicate region (multi)
+@select|Editor/select-all-in-punch-range|<@PRIMARY@>d|select all in punch range
+@vis|Editor/fit-tracks|f|fit tracks vertically
+@trans|Editor/toggle-follow-playhead|<@PRIMARY@>f|toggle playhead tracking
+@wvis|Editor/toggle-rhythm-ferret|<@WINDOW@>f|toggle rhythm ferret window
+@mmode|MouseMode/set-mouse-mode-gain|g|region gain
+@epp|Editor/play-selected-regions|h|play selected region(s)
+@eep|Editor/trim-front|j|trim front
+@eep|Editor/trim-back|k|trim back
+@wvis|Common/ToggleKeyEditor|<@WINDOW@>k|toggle key bindings editor
+@trans|Transport/Loop|l|loop play (the loop range)
+@select|Editor/select-all-in-loop-range|<@PRIMARY@>l|select all in loop range
+@wvis|Common/ToggleLocations|<@WINDOW@>l| toggle locations dialog
;; HOME ROW
-(gtk_accel_path "<Actions>/Editor/zoom-to-region" "<@PRIMARY@><@SECONDARY@>z")
-(gtk_accel_path "<Actions>/Editor/zoom-to-region-both-axes" "<@SECONDARY@>z")
-(gtk_accel_path "<Actions>/Editor/undo" "<@PRIMARY@>z")
-(gtk_accel_path "<Actions>/Editor/toggle-zoom" "<@TERTIARY@>z")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-zoom" "z")
-(gtk_accel_path "<Actions>/Editor/editor-cut" "<@PRIMARY@>x")
-(gtk_accel_path "<Actions>/Editor/editor-copy" "<@PRIMARY@>c")
-(gtk_accel_path "<Actions>/Common/ToggleColorManager" "<@WINDOW@>c")
-(gtk_accel_path "<Actions>/Editor/set-region-sync-position" "v")
-(gtk_accel_path "<Actions>/Editor/editor-paste" "<@PRIMARY@>v")
-(gtk_accel_path "<Actions>/Editor/brush-at-mouse" "<@PRIMARY@>b")
-(gtk_accel_path "<Actions>/Common/ToggleBigClock" "<@WINDOW@>b")
-(gtk_accel_path "<Actions>/Editor/normalize-region" "n")
-(gtk_accel_path "<Actions>/Editor/mute-unmute-region" "m")
-(gtk_accel_path "<Actions>/Common/toggle-editor-mixer-on-top" "<@WINDOW@>m")
+@vis|Editor/zoom-to-region|<@PRIMARY@><@SECONDARY@>z|zoom (x) to selected region(s)
+@vis|Editor/zoom-to-region-both-axes|<@SECONDARY@>z|zoom (x+y) to selected region
+@edit|Editor/undo|<@PRIMARY@>z|undo
+@vis|Editor/toggle-zoom|<@TERTIARY@>z|toggle last 2 zoom states
+@vis|MouseMode/set-mouse-mode-zoom|z| zoom to selected region(s)
+@edit|Editor/editor-cut|<@PRIMARY@>x|cut
+@edit|Editor/editor-copy|<@PRIMARY@>c|copy
+@wvis|Common/ToggleColorManager|<@WINDOW@>c|toggle color manager
+@rop|Editor/set-region-sync-position|v|set region sync point
+@edit|Editor/editor-paste|<@PRIMARY@>v|paste
+@-group|Editor/brush-at-mouse|<@PRIMARY@>b|some text
+@wvis|Common/ToggleBigClock|<@WINDOW@>b|toggle big clock
+@rop|Editor/normalize-region|n|normalize
+@sess|Main/AddTrackBus|<@PRIMARY@><@TERTIARY@>n|add track(s) or bus(ses)
+@sess|Main/New|<@PRIMARY@>n|open a new session
+@rop|Editor/mute-unmute-region|m|mute/unmute
+@wvis|Common/toggle-editor-mixer-on-top|<@WINDOW@>m|rotate editor \& mixer window
;; arrow keys, navigation etc.
-(gtk_accel_path "<Actions>/Editor/step-tracks-up" "uparrow")
-(gtk_accel_path "<Actions>/Transport/TransitionToRoll" "<@TERTIARY@>uparrow")
-(gtk_accel_path "<Actions>/Editor/select-prev-route" "<@SECONDARY@>uparrow")
-(gtk_accel_path "<Actions>/Editor/move-selected-tracks-up" "<@PRIMARY@>uparrow")
-
-(gtk_accel_path "<Actions>/Editor/step-tracks-down" "downarrow")
-(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<@TERTIARY@>downarrow")
-(gtk_accel_path "<Actions>/Editor/select-next-route" "<@SECONDARY@>downarrow")
-(gtk_accel_path "<Actions>/Editor/move-selected-tracks-down" "<@PRIMARY@>downarrow")
-
-(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "leftarrow")
-(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary-noselection" "<@LEVEL4@>leftarrow")
-(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "<@PRIMARY@>leftarrow")
-(gtk_accel_path "<Actions>/Editor/nudge-playhead-backward" "<@SECONDARY@>leftarrow")
-(gtk_accel_path "<Actions>/Transport/Rewind" "<@TERTIARY@>leftarrow")
-(gtk_accel_path "<Actions>/Editor/selected-marker-to-previous-region-boundary" "<@PRIMARY@><@TERTIARY@>leftarrow")
-
-(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "rightarrow")
-(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary-noselection" "<@LEVEL4@>rightarrow")
-(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "<@PRIMARY@>rightarrow")
-(gtk_accel_path "<Actions>/Editor/nudge-playhead-forward" "<@SECONDARY@>rightarrow")
-(gtk_accel_path "<Actions>/Transport/Forward" "<@TERTIARY@>rightarrow")
-(gtk_accel_path "<Actions>/Editor/selected-marker-to-next-region-boundary" "<@PRIMARY@><@TERTIARY@>rightarrow")
-
-(gtk_accel_path "<Actions>/Editor/scroll-tracks-down" "Page_Down")
-(gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
-(gtk_accel_path "<Actions>/Transport/GotoStart" "Home")
-(gtk_accel_path "<Actions>/Transport/GotoEnd" "End")
-(gtk_accel_path "<Actions>/Editor/editor-delete" "Delete")
-
-(gtk_accel_path "<Actions>/Editor/playhead-to-edit" "Return")
-(gtk_accel_path "<Actions>/Editor/edit-to-playhead" "<@SECONDARY@>Return")
-(gtk_accel_path "<Actions>/Editor/remove-last-capture" "<@PRIMARY@>Delete")
+@vis|Editor/step-tracks-up|uparrow|scroll up (step)
+@trans|Transport/TransitionToRoll|<@TERTIARY@>uparrow|transition to roll
+@select|Editor/select-prev-route|<@SECONDARY@>uparrow|select previous track/bus
+@vis|Editor/move-selected-tracks-up|<@PRIMARY@>uparrow|move selected tracks up
+
+@vis|Editor/step-tracks-down|downarrow|scroll down (step)
+@trans|Transport/TransitionToReverse|<@TERTIARY@>downarrow|transition to reverse
+@select|Editor/select-next-route|<@SECONDARY@>downarrow|select next track/bus
+@vis|Editor/move-selected-tracks-down|<@PRIMARY@>downarrow|move selected tracks down
+
+@movp|Editor/playhead-to-previous-region-boundary|leftarrow|to previous region edge
+@movp|Editor/playhead-to-previous-region-boundary-noselection|<@LEVEL4@>leftarrow|to previous edge \linebreak[4] (ignore selection)
+@movp|Editor/playhead-to-previous-region-sync|<@PRIMARY@><@SECONDARY@>leftarrow|to previous region sync
+@movp|Editor/tab-to-transient-backwards|<@PRIMARY@>leftarrow|to previous transient
+@movp|Editor/nudge-playhead-backward|<@SECONDARY@>leftarrow|nudge backward
+@movp|Editor/playhead-backward-to-grid|<@TERTIARY@><@LEVEL4@>leftarrow|to previous grid point
+@trans|Transport/Rewind|<@TERTIARY@>leftarrow|rewind
+@markers|Editor/selected-marker-to-previous-region-boundary|<@PRIMARY@><@TERTIARY@>leftarrow|move to prev. region edge
+
+@movp|Editor/playhead-to-next-region-boundary|rightarrow|to next region edge
+@movp|Editor/playhead-to-next-region-boundary-noselection|<@LEVEL4@>rightarrow|to next region edge \linebreak[4] (ignore selection)
+@movp|Editor/playhead-to-next-region-sync|<@PRIMARY@><@SECONDARY@>rightarrow|to next region sync
+@movp|Editor/tab-to-transient-forwards|<@PRIMARY@>rightarrow|to next transient
+@movp|Editor/nudge-playhead-forward|<@SECONDARY@>rightarrow|nudge forwards
+@movp|Editor/playhead-forward-to-grid|<@TERTIARY@><@LEVEL4@>rightarrow|to next grid point
+@trans|Transport/Forward|<@TERTIARY@>rightarrow|fast forward
+@markers|Editor/selected-marker-to-next-region-boundary|<@PRIMARY@><@TERTIARY@>rightarrow|move to next region edge
+
+@vis|Editor/scroll-tracks-down|Page_Down|scroll down (page)
+@vis|Editor/scroll-tracks-up|Page_Up|scroll up (page)
+@movp|Transport/GotoStart|Home|to start marker
+@movp|Transport/GotoEnd|End|to end marker
+@edit|Editor/editor-delete|Delete|delete
+
+@movp|Editor/playhead-to-edit|Return|to edit point
+@eep|Editor/edit-to-playhead|<@SECONDARY@>Return|move EP to playhead
+@trans|Editor/remove-last-capture|<@PRIMARY@>Delete|destroy last recording
;; keypad
-(gtk_accel_path "<Actions>/Editor/nudge-backward" "KP_Subtract")
-(gtk_accel_path "<Actions>/Editor/nudge-next-backward" "<@PRIMARY@>KP_Subtract")
+@rop|Editor/nudge-backward|KP_Subtract|nudge backward
+@-group|Editor/nudge-next-backward|<@PRIMARY@>KP_Subtract|some text
-(gtk_accel_path "<Actions>/Editor/jump-forward-to-mark" "<@PRIMARY@>KP_Right")
-(gtk_accel_path "<Actions>/Editor/jump-backward-to-mark" "<@PRIMARY@>KP_Left")
+@movp|Editor/jump-forward-to-mark|<@PRIMARY@>KP_Right|to next mark
+@movp|Editor/jump-backward-to-mark|<@PRIMARY@>KP_Left|to previous mark
-(gtk_accel_path "<Actions>/Editor/nudge-forward" "KP_Add")
-(gtk_accel_path "<Actions>/Editor/nudge-next-forward" "<@PRIMARY@>KP_Add")
+@rop|Editor/nudge-forward|KP_Add|nudge forward
+@-group|Editor/nudge-next-forward|<@PRIMARY@>KP_Add|some text
-(gtk_accel_path "<Actions>/Editor/start-range" "<@PRIMARY@>KP_Down")
+@-group|Editor/start-range|<@PRIMARY@>KP_Down|some text
-(gtk_accel_path "<Actions>/Editor/finish-range" "<@PRIMARY@>KP_Up")
-(gtk_accel_path "<Actions>/Editor/finish-add-range" "<@TERTIARY@><@PRIMARY@>KP_Up")
+@-group|Editor/finish-range|<@PRIMARY@>KP_Up|some text
+@-group|Editor/finish-add-range|<@TERTIARY@><@PRIMARY@>KP_Up|some text
-(gtk_accel_path "<Actions>/Editor/add-location-from-playhead" "KP_Enter")
-(gtk_accel_path "<Actions>/Transport/focus-on-clock" "KP_Divide")
+@markers|Editor/add-location-from-playhead|KP_Enter|add mark at playhead
+@wvis|Transport/focus-on-clock|KP_Divide|focus on main clock
-(gtk_accel_path "<Actions>/Transport/GotoZero" "KP_0")
-(gtk_accel_path "<Actions>/Editor/goto-mark-1" "KP_1")
-(gtk_accel_path "<Actions>/Editor/goto-mark-2" "KP_2")
-(gtk_accel_path "<Actions>/Editor/goto-mark-3" "KP_3")
-(gtk_accel_path "<Actions>/Editor/goto-mark-4" "KP_4")
-(gtk_accel_path "<Actions>/Editor/goto-mark-5" "KP_5")
-(gtk_accel_path "<Actions>/Editor/goto-mark-6" "KP_6")
-(gtk_accel_path "<Actions>/Editor/goto-mark-7" "KP_7")
-(gtk_accel_path "<Actions>/Editor/goto-mark-8" "KP_8")
-(gtk_accel_path "<Actions>/Editor/goto-mark-9" "KP_9")
+@trans|Transport/GotoZero|KP_0|to zero
+@-group|Editor/goto-mark-1|KP_1|some text
+@-group|Editor/goto-mark-2|KP_2|some text
+@-group|Editor/goto-mark-3|KP_3|some text
+@-group|Editor/goto-mark-4|KP_4|some text
+@-group|Editor/goto-mark-5|KP_5|some text
+@-group|Editor/goto-mark-6|KP_6|some text
+@-group|Editor/goto-mark-7|KP_7|some text
+@-group|Editor/goto-mark-8|KP_8|some text
+@-group|Editor/goto-mark-9|KP_9|some text
;; F-N keys
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-start" "F1")
-(gtk_accel_path "<Actions>/Editor/edit-cursor-to-range-end" "F2")
-(gtk_accel_path "<Actions>/Editor/crop" "F3")
-(gtk_accel_path "<Actions>/Editor/separate" "F4")
-(gtk_accel_path "<Actions>/Editor/pitch-shift-region" "F5")
-(gtk_accel_path "<Actions>/Editor/select-range-between-cursors" "F6")
-(gtk_accel_path "<Actions>/Common/ToggleMaximalEditor" "F11")
-
-(gtk_accel_path "<Actions>/Editor/save-visual-state-1" "<@PRIMARY@>F1")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-2" "<@PRIMARY@>F2")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-3" "<@PRIMARY@>F3")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-4" "<@PRIMARY@>F4")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-5" "<@PRIMARY@>F5")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-6" "<@PRIMARY@>F6")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-7" "<@PRIMARY@>F7")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-8" "<@PRIMARY@>F8")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-9" "<@PRIMARY@>F9")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-10" "<@PRIMARY@>F10")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-11" "<@PRIMARY@>F11")
-(gtk_accel_path "<Actions>/Editor/save-visual-state-12" "<@PRIMARY@>F12")
-
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-1" "<release><@PRIMARY@>F1")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-2" "<release><@PRIMARY@>F2")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-3" "<release><@PRIMARY@>F3")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-4" "<release><@PRIMARY@>F4")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-5" "<release><@PRIMARY@>F5")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-6" "<release><@PRIMARY@>F6")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-7" "<release><@PRIMARY@>F7")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-8" "<release><@PRIMARY@>F8")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-9" "<release><@PRIMARY@>F9")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-10" "<release><@PRIMARY@>F10")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-11" "<release><@PRIMARY@>F11")
-(gtk_accel_path "<Actions>/Editor/goto-visual-state-12" "<release><@PRIMARY@>F12")
+@-group|Editor/edit-cursor-to-range-start|F1|some text
+@-group|Editor/edit-cursor-to-range-end|F2|some text
+@-group|Editor/crop|F3|some text
+@-group|Editor/separate|F4|some text
+@-group|Editor/pitch-shift-region|F5|some text
+@select|Editor/select-range-between-cursors|F6|convert edit range as range
+@wvis|Common/ToggleMaximalEditor|F11|toggle fullscreen editor window
+
+@-group|Editor/save-visual-state-1|<@PRIMARY@>F1|some text
+@-group|Editor/save-visual-state-2|<@PRIMARY@>F2|some text
+@-group|Editor/save-visual-state-3|<@PRIMARY@>F3|some text
+@-group|Editor/save-visual-state-4|<@PRIMARY@>F4|some text
+@-group|Editor/save-visual-state-5|<@PRIMARY@>F5|some text
+@-group|Editor/save-visual-state-6|<@PRIMARY@>F6|some text
+@-group|Editor/save-visual-state-7|<@PRIMARY@>F7|some text
+@-group|Editor/save-visual-state-8|<@PRIMARY@>F8|some text
+@-group|Editor/save-visual-state-9|<@PRIMARY@>F9|some text
+@-group|Editor/save-visual-state-10|<@PRIMARY@>F10|some text
+@-group|Editor/save-visual-state-11|<@PRIMARY@>F11|some text
+@-group|Editor/save-visual-state-12|<@PRIMARY@>F12|some text
+
+@-group|Editor/goto-visual-state-1|<release><@PRIMARY@>F1|some text
+@-group|Editor/goto-visual-state-2|<release><@PRIMARY@>F2|some text
+@-group|Editor/goto-visual-state-3|<release><@PRIMARY@>F3|some text
+@-group|Editor/goto-visual-state-4|<release><@PRIMARY@>F4|some text
+@-group|Editor/goto-visual-state-5|<release><@PRIMARY@>F5|some text
+@-group|Editor/goto-visual-state-6|<release><@PRIMARY@>F6|some text
+@-group|Editor/goto-visual-state-7|<release><@PRIMARY@>F7|some text
+@-group|Editor/goto-visual-state-8|<release><@PRIMARY@>F8|some text
+@-group|Editor/goto-visual-state-9|<release><@PRIMARY@>F9|some text
+@-group|Editor/goto-visual-state-10|<release><@PRIMARY@>F10|some text
+@-group|Editor/goto-visual-state-11|<release><@PRIMARY@>F11|some text
+@-group|Editor/goto-visual-state-12|<release><@PRIMARY@>F12|some text
;; numbers
-(gtk_accel_path "<Actions>/Editor/toggle-edit-mode" "1")
-(gtk_accel_path "<Actions>/Editor/cycle-snap-mode" "2")
-(gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
-(gtk_accel_path "<Actions>/Editor/step-mouse-mode" "4")
-(gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "5")
-(gtk_accel_path "<Actions>/Transport/ToggleClick" "6")
-(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
-(gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
-
-;;
-;; unbound actions
-;;
-
-; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
-; (gtk_accel_path "<Actions>/Main/Windows" "")
-; (gtk_accel_path "<Actions>/Main/CleanupUnused" "")
-; (gtk_accel_path "<Actions>/redirectmenu/deselectall" "")
-; (gtk_accel_path "<Actions>/options/SoloViaBus" "")
-; (gtk_accel_path "<Actions>/RegionList/rlAudition" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus4Plus1" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-boundary" "")
-; (gtk_accel_path "<Actions>/JACK/JACK" "")
-; (gtk_accel_path "<Actions>/RegionList/SortAscending" "")
-; (gtk_accel_path "<Actions>/Main/Help" "")
-; (gtk_accel_path "<Actions>/options/UseExternalMonitoring" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte23976" "")
-; (gtk_accel_path "<Actions>/options/ShowSoloMutes" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-eighths" "")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileLength" "")
-; (gtk_accel_path "<Actions>/Editor/Timecode" "")
-; (gtk_accel_path "<Actions>/Transport/PlaySelection" "")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus4Minus1" "")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileName" "")
-; (gtk_accel_path "<Actions>/Editor/CrossfadesFull" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleClick" "")
-; (gtk_accel_path "<Actions>/options/SendMTC" "")
-; (gtk_accel_path "<Actions>/Transport/TogglePunchOut" "")
-; (gtk_accel_path "<Actions>/options/SoloInPlace" "")
-; (gtk_accel_path "<Actions>/Main/Options" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffMedium" "")
-; (gtk_accel_path "<Actions>/Main/SaveTemplate" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionStartinFile" "")
-; (gtk_accel_path "<Actions>/options/GainReduceFastTransport" "")
-; (gtk_accel_path "<Actions>/Common/ToggleInspector" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleAutoPlay" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-next-region-sync" "")
-; (gtk_accel_path "<Actions>/Editor/LayerMoveAddHigher" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte60" "")
-; (gtk_accel_path "<Actions>/Main/Open" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-left" "")
-; (gtk_accel_path "<Actions>/Main/TransportOptions" "")
-; (gtk_accel_path "<Actions>/Main/ControlSurfaces" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatBWF" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte2997" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleWaveformVisibility" "")
-; (gtk_accel_path "<Actions>/Main/ExportSession" "")
-; (gtk_accel_path "<Actions>/options/InputAutoConnectPhysical" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-edit-cursor" "")
-; (gtk_accel_path "<Actions>/JACK/Latency" "")
-; (gtk_accel_path "<Actions>/redirectmenu/rename" "")
-; (gtk_accel_path "<Actions>/RegionList/rlShowAuto" "")
-; (gtk_accel_path "<Actions>/Main/Session" "")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
-; (gtk_accel_path "<Actions>/Transport/Transport" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
-; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
-; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
-; (gtk_accel_path "<Actions>/Editor/Crossfades" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus4" "")
-; (gtk_accel_path "<Actions>/Main/MeteringHoldTime" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus1" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte24976" "")
-; (gtk_accel_path "<Actions>/options/FileDataFormat24bit" "")
-; (gtk_accel_path "<Actions>/Editor/SnapMode" "")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus4" "")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFileCreationDate" "")
-; (gtk_accel_path "<Actions>/redirectmenu/activate" "")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus1" "")
-; (gtk_accel_path "<Actions>/Editor/snap-normal" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-asixteenthbeat" "")
-; (gtk_accel_path "<Actions>/redirectmenu/edit" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency2048" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleWaveformsWhileRecording" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-right" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE" "")
-; (gtk_accel_path "<Actions>/redirectmenu/cut" "")
-; (gtk_accel_path "<Actions>/redirectmenu/newinsert" "")
-; (gtk_accel_path "<Actions>/options/UseMMC" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffOff" "")
-; (gtk_accel_path "<Actions>/Editor/PullupMinus4Plus1" "")
-; (gtk_accel_path "<Actions>/Editor/MeterHold" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-cd-frame" "")
-; (gtk_accel_path "<Actions>/options/StopTransportAtEndOfSession" "")
-; (gtk_accel_path "<Actions>/Main/Cleanup" "")
-; (gtk_accel_path "<Actions>/Main/Snapshot" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleVideoSync" "")
-; (gtk_accel_path "<Actions>/RegionList/SortBySourceFilesystem" "")
-; (gtk_accel_path "<Actions>/Common/About" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency32" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatWAVE64" "")
-; (gtk_accel_path "<Actions>/RegionList/rlShowAll" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionTimestamp" "")
-; (gtk_accel_path "<Actions>/options/VerifyRemoveLastCapture" "")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectPhysical" "")
-; (gtk_accel_path "<Actions>/options/SendMMC" "")
-; (gtk_accel_path "<Actions>/Editor/toggle-auto-xfades" "")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormatHeader" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldShort" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldMedium" "")
-; (gtk_accel_path "<Actions>/Editor/Subframes80" "")
-; (gtk_accel_path "<Actions>/options/FileHeaderFormatCAF" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurface" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency256" "")
-; (gtk_accel_path "<Actions>/Editor/LayerAddHigher" "")
-; (gtk_accel_path "<Actions>/Editor/Solo" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency1024" "")
-; (gtk_accel_path "<Actions>/Main/ExportRangeMarkers" "")
-; (gtk_accel_path "<Actions>/Editor/toggle-xfades-active" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-bar" "")
-; (gtk_accel_path "<Actions>/Editor/LayerLaterHigher" "")
-; (gtk_accel_path "<Actions>/redirectmenu/selectall" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-quarters" "")
-; (gtk_accel_path "<Actions>/options/UseSoftwareMonitoring" "")
-; (gtk_accel_path "<Actions>/Editor/Subframes100" "")
-
-
-; (gtk_accel_path "<Actions>/redirectmenu/clear" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceFeedback" "")
-; (gtk_accel_path "<Actions>/Editor/PullupPlus4Minus1" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency512" "")
-; (gtk_accel_path "<Actions>/Main/Recent" "")
-; (gtk_accel_path "<Actions>/redirectmenu/newplugin" "")
-; (gtk_accel_path "<Actions>/options/InputAutoConnectManual" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldLong" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-seconds" "")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectManual" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-sync" "")
-; (gtk_accel_path "<Actions>/Editor/Pullup" "")
-; (gtk_accel_path "<Actions>/Editor/zoom-to-session" "")
-; (gtk_accel_path "<Actions>/JACK/JACKReconnect" "")
-; (gtk_accel_path "<Actions>/Editor/Autoconnect" "")
-; (gtk_accel_path "<Actions>/Editor/Edit" "")
-; (gtk_accel_path "<Actions>/redirectmenu/copy" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFaster" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionLength" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffSlowest" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-sync" "")
-; (gtk_accel_path "<Actions>/redirectmenu/deactivate_all" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionPosition" "")
-; (gtk_accel_path "<Actions>/Editor/ZoomFocus" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffSlow" "")
-; (gtk_accel_path "<Actions>/RegionList/rlHide" "")
-; (gtk_accel_path "<Actions>/Main/Metering" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-playhead" "")
-; (gtk_accel_path "<Actions>/Editor/center-edit-cursor" "")
-; (gtk_accel_path "<Actions>/Editor/Monitoring" "")
-; (gtk_accel_path "<Actions>/redirectmenu/deactivate" "")
-; (gtk_accel_path "<Actions>/options/LatchedRecordEnable" "")
-; (gtk_accel_path "<Actions>/Transport/TogglePunchIn" "")
-; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsPercentage" "")
-; (gtk_accel_path "<Actions>/Main/Close" "")
-; (gtk_accel_path "<Actions>/Main/New" "")
-; (gtk_accel_path "<Actions>/Editor/EditSelectRangeOptions" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleTimeMaster" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-thirds" "")
-; (gtk_accel_path "<Actions>/Main/Export" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte30" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-range-start" "")
-; (gtk_accel_path "<Actions>/Editor/Subframes" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte2997drop" "")
-; (gtk_accel_path "<Actions>/Main/AddTrackBus" "")
-; (gtk_accel_path "<Actions>/JACK/JACKDisconnect" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFast" "")
-; (gtk_accel_path "<Actions>/options/FileDataFormatFloat" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-end" "")
-; (gtk_accel_path "<Actions>/options/StopRecordingOnXrun" "")
-; (gtk_accel_path "<Actions>/RegionList/SortDescending" "")
-; (gtk_accel_path "<Actions>/options/DoNotRunPluginsWhileRecording" "")
-; (gtk_accel_path "<Actions>/Editor/PullupNone" "")
-; (gtk_accel_path "<Actions>/Main/AudioFileFormatData" "")
-; (gtk_accel_path "<Actions>/options/MeterFalloffFastest" "")
-; (gtk_accel_path "<Actions>/Editor/audition-at-mouse" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-seconds" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-frame" "")
-; (gtk_accel_path "<Actions>/Main/ExportSelection" "")
-; (gtk_accel_path "<Actions>/options/StopPluginsWithTransport" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-smpte-minutes" "")
-; (gtk_accel_path "<Actions>/Main/FlushWastebasket" "")
-; (gtk_accel_path "<Actions>/RegionList/SortByRegionEndinFile" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleMeasureVisibility" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-center" "")
-; (gtk_accel_path "<Actions>/options/LatchedSolo" "")
-; (gtk_accel_path "<Actions>/options/MeterHoldOff" "")
-; (gtk_accel_path "<Actions>/options/OutputAutoConnectMaster" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency64" "")
-; (gtk_accel_path "<Actions>/Editor/center-playhead" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-region-start" "")
-; (gtk_accel_path "<Actions>/Editor/View" "")
-; (gtk_accel_path "<Actions>/Editor/Layering" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency4096" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte30drop" "")
-; (gtk_accel_path "<Actions>/Zoom/zoom-focus-edit" "")
-; (gtk_accel_path "<Actions>/Editor/EditCursorMovementOptions" "")
-; (gtk_accel_path "<Actions>/redirectmenu/activate_all" "")
-; (gtk_accel_path "<Actions>/redirectmenu/paste" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte25" "")
-; (gtk_accel_path "<Actions>/options/RegionEquivalentsOverlap" "")
-; (gtk_accel_path "<Actions>/Main/MeteringFallOffRate" "")
-; (gtk_accel_path "<Actions>/options/UseHardwareMonitoring" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte24" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-mark" "")
-; (gtk_accel_path "<Actions>/Editor/CrossfadesShort" "")
-; (gtk_accel_path "<Actions>/Editor/Smpte5994" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency8192" "")
-; (gtk_accel_path "<Actions>/Editor/toggle-xfades-visible" "")
-; (gtk_accel_path "<Actions>/ShuttleActions/SetShuttleUnitsSemitones" "")
-; (gtk_accel_path "<Actions>/JACK/JACKLatency128" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-beat" "")
-; (gtk_accel_path "<Actions>/Editor/RegionEditOps" "")
-; (gtk_accel_path "<Actions>/Editor/snap-magnetic" "")
-; (gtk_accel_path "<Actions>/Editor/playhead-to-range-end" "")
-; (gtk_accel_path "<Actions>/Editor/EditSelectRegionOptions" "")
-; (gtk_accel_path "<Actions>/redirectmenu/newsend" "")
-; (gtk_accel_path "<Actions>/redirectmenu/newreturn" "")
-; (gtk_accel_path "<Actions>/Editor/ToggleGeneric MIDISurfaceSubMenu" "")
-; (gtk_accel_path "<Actions>/Editor/MeterFalloff" "")
-; (gtk_accel_path "<Actions>/RegionList/rlRemove" "")
-; (gtk_accel_path "<Actions>/Transport/ToggleAutoInput" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-thirtyseconds" "")
-; (gtk_accel_path "<Actions>/Snap/snap-to-minutes" "")
-; (gtk_accel_path "<Actions>/RegionList/RegionListSort" "")
-; (gtk_accel_path "<Actions>/Editor/edit-cursor-to-previous-region-start" "")
+@eep|Editor/toggle-edit-mode|1|cycle to next edit mode
+@eep|Editor/cycle-snap-mode|2|cycle to next grid snap mode
+@eep|Editor/cycle-snap-choice|3|cycle to next grid unit
+@trans|Editor/step-mouse-mode|4|toggle auto play
+@trans|Transport/ToggleAutoReturn|5|toggle auto return
+@trans|Transport/ToggleClick|6|toggle auto input
+@ranges|Editor/set-tempo-from-region|9|set tempo (1 bar) from region(s)
+@ranges|Editor/set-tempo-from-edit-range|0|set tempo (1 bar) from edit range
+
+; mouse stuff
+
+@+mobject|foo|left-click:on body|select
+@+mobject|foo|<@TERTIARY@>left-click:on body|extend selection
+@+mobject|foo|<@PRIMARY@>left-click:on body|add/remove selection
+@+mobject|foo|left-drag:on body|move region(s)
+@+mobject|foo|<@PRIMARY@>left-drag:on body|copy+move region(s)
+@+mobject|foo|<@PRIMARY@>middle-drag:on body|fixed time copy+move
+@+mobject|foo|middle-drag:on body|fixed time move
+@+mobject|foo|<@SECONDARY@><@TERTIARY@>midde:on body|lower region
+@+mobject|foo|<@TERTIARY@>middle:on body|raise region
+@+mobject|foo|<@PRIMARY@>left-drag:in trim bar|slip audio in region
+@+mobject|foo|left-click:in trim bar|set region start
+@+mobject|foo|middle:in trim bar|set region end
+@+mobject|foo|left-drag:near ends of trim bar|adjust region edges
+@+mobject|foo|left-click:in auto track|add control point
+@+mobject|foo|left-drag:on point|move control point
+@+mobject|foo|middle-drag:on point|fixed time adjust
+@+mobject|foo|<@PRIMARY@>left-drag:on point|move point+later points
+@+mobject|foo|<@PRIMARY@>middle-drag:on point|fixed time move
+@+mobject|foo|left-drag:on line|move line segment
+@+mobject|foo|<@PRIMARY@><@SECONDARY@>left-drag:on regions|rubber-band select
+@+mobject|foo|left-drag:in auto track|rubber-band select\linebreak control points
+@+mobject|foo|left-drag:empty space|rubber-band select
+
+; mouse zoom
+@+mzoom|foo|<@PRIMARY@>middle|zoom to session
+@+mzoom|foo|middle-click|zoom out
+@+mzoom|foo|left-click|zoom in
+@+mzoom|foo|left+drag |define the new visible area
+
+; mouse solo etc.
+@+mops|foo|<@PRIMARY@>middle-click|learn MIDI control
+@+mops|foo|<@PRIMARY@><@TERTIARY@>left-click|apply to all tracks/busses
+@+mops|foo|<@PRIMARY@>left-click|apply to group
+@+mops|foo|middle-click|momentary switch
+@+mops|foo|left-click|apply to track or active group
+
+; mouse solo
+
+@+mopsolo|foo|<@PRIMARY@><@SECONDARY@>left-click|exclusive solo
+@+mopsolo|foo|<@TERTIARY@>left-click|temporary latched solo
+
+; mouse fader etc.
+
+@+mopsfader|foo|<@PRIMARY@>middle-click|learn MIDI control
+@+mopsfader|foo|<@TERTIARY@>left-click|reset to default
+@+mopsfader|foo|<@PRIMARY@><@SECONDARY@>left-drag|finest-drag control
+@+mopsfader|foo|<@PRIMARY@>left-drag|fine-drag control
+@+mopsfader|foo|left-drag|adjust
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 4d40e1c11e..85fb7faf70 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -25,6 +25,7 @@
#include <string>
#include <glib.h>
#include <gdk/gdktypes.h>
+#include <gtkmm/box.h>
#include <gtkmm/window.h>
#include <gtkmm/actiongroup.h>
#include <jack/types.h>
@@ -327,6 +328,14 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulThingWithGoingAway
static const int vertical_spacing;
static const int horizontal_spacing;
+#ifdef TOP_MENUBAR
+ /*
+ * This is needed for OS X primarily
+ * but also any other OS that uses a single
+ * top menubar instead of per window menus
+ */
+ virtual Gtk::HBox& get_status_bar_packer() = 0;
+#endif
virtual gdouble get_trackview_group_vertical_offset () const = 0;
virtual gdouble get_canvas_timebars_vsize () const = 0;
diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc
index db141a9f01..793e70c990 100644
--- a/gtk2_ardour/time_axis_view_item.cc
+++ b/gtk2_ardour/time_axis_view_item.cc
@@ -25,6 +25,13 @@
#include <gtkmm2ext/utils.h>
+#include "ardour_ui.h"
+/*
+ * ardour_ui.h was moved up in the include list
+ * due to a conflicting definition of 'Rect' between
+ * Apple's MacTypes.h file and GTK
+ */
+
#include "public_editor.h"
#include "time_axis_view_item.h"
#include "time_axis_view.h"
@@ -32,7 +39,6 @@
#include "utils.h"
#include "canvas_impl.h"
#include "rgb_macros.h"
-#include "ardour_ui.h"
#include "i18n.h"
diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript
index 6b791799cb..592b48efd0 100644
--- a/gtk2_ardour/wscript
+++ b/gtk2_ardour/wscript
@@ -2,6 +2,10 @@
import autowaf
import os
import glob
+import Options
+import sys
+import TaskGen
+import re
from w18n import build_i18n
# Version of this package (even if built as a child)
@@ -193,8 +197,6 @@ gtk2_ardour_sources = [
def set_options(opt):
autowaf.set_options(opt)
- opt.add_option('--potupdate', action='store_true', dest='potupdate',
- help='Rebuild pot file for translators')
def configure(conf):
autowaf.build_version_files(path_prefix+'version.h', path_prefix+'version.cc',
@@ -202,7 +204,13 @@ def configure(conf):
autowaf.configure(conf)
conf.check_tool('compiler_cxx')
- autowaf.check_pkg(conf, 'alsa', uselib_store='ALSA')
+ if re.search ("linux", sys.platform) != None:
+ autowaf.check_pkg(conf, 'alsa', uselib_store='ALSA')
+ #
+ # TODO: Insert a sanity check for on OS X
+ # to ensure that CoreAudio is present....
+ # Really shouldn't these checks be in AutoWaf?
+ #
autowaf.check_pkg(conf, 'flac', uselib_store='FLAC', atleast_version='1.2.1')
autowaf.check_pkg(conf, 'gthread', uselib_store='GTHREAD', atleast_version='2.10.1')
autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK', atleast_version='2.12.1')
@@ -214,10 +222,7 @@ def configure(conf):
conf.check_tool('misc') # subst tool
conf.write_config_header('gtk2ardour-config.h')
-
- # TODO
- conf.define('WINDOWS_KEY', 'Mod4')
-
+
# Boost headers
autowaf.check_header(conf, 'boost/shared_ptr.hpp')
autowaf.check_header(conf, 'boost/weak_ptr.hpp')
@@ -231,7 +236,7 @@ def build(bld):
obj.target = 'ardour-3.0'
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
obj.uselib = 'UUID FLAC GLIBMM GTHREAD GTK GNOMECANVAS OGG ALSA'
- obj.uselib += ' GTKMM GNOMECANVASMM'
+ obj.uselib += ' GTKMM GNOMECANVASMM OSX GTKOSX COREAUDIO'
obj.uselib_local = '''libpbd libmidipp libtaglib libardour libardour_cp
libgtkmm2ext libtaglib'''
obj.cflags = ['-DPACKAGE="gtk2_ardour"']
@@ -242,6 +247,7 @@ def build(bld):
obj.cxxflags += ['-DMODULE_DIR="' + os.path.normpath(bld.env['LIBDIRNAME']) + '"']
obj.cxxflags += ['-DLOCALEDIR="' + os.path.join(
os.path.normpath(bld.env['DATADIRNAME']), 'locale') + '"']
+
if bld.env['HAVE_SLV2']:
obj.source += [ 'lv2_plugin_ui.cc' ]
obj.uselib += ' SLV2 '
@@ -254,14 +260,11 @@ def build(bld):
obj.cxxflags += [ '-DVST_SUPPORT' ]
if bld.env['GTKOSX']:
- obj.features += ' objc '
+ TaskGen.task_gen.mappings['.mm'] = TaskGen.task_gen.mappings['.cc']
obj.source += [ 'cocoacarbon.mm' ]
- obj.cxxflags += [ '-DTOP_MENUBAR', '-DGTKOSX' ]
- obj.linkflags += [ '-framework', 'AppKit', '-framework', 'CoreAudioKit' ]
if bld.env['AUDIOUNITS']:
obj.source += [ 'au_pluginui.mm' ]
- obj.cxxflags += [ '-DHAVE_AUDIOUNITS' ]
obj.uselib_local += ' libappleutility '
else:
@@ -380,26 +383,15 @@ def build(bld):
bld.install_files(os.path.join(bld.env['CONFIGDIR'], 'ardour3'), 'ardour.menus')
# Keybindings
- keybindings_dict = {}
- if bld.env['GTKOSX']:
- keybindings_dict['PRIMARY'] = 'Meta'
- keybindings_dict['SECONDARY'] = 'Mod1'
- keybindings_dict['TERTIARY'] = 'Shift'
- keybindings_dict['LEVEL4'] = 'Ctrl'
- keybindings_dict['WINDOW'] = 'Mod1'
- else:
- keybindings_dict['PRIMARY'] = 'Ctrl'
- keybindings_dict['SECONDARY'] = 'Alt'
- keybindings_dict['TERTIARY'] = 'Shift'
- keybindings_dict['LEVEL4'] = bld.env['WINDOWS_KEY']
- keybindings_dict['WINDOW'] = 'Alt'
-
- for b in [ 'SAE-de-keypad', 'SAE-de-nokeypad', 'SAE-us-keypad', 'SAE-us-nokeypad',
- 'mnemonic-us', 'ergonomic-us' ]:
- obj = bld.new_task_gen('subst')
- obj.target = b + '.bindings'
- obj.source = obj.target + '.in'
- obj.dict = keybindings_dict
+
+ # 'SAE-de-keypad', 'SAE-de-nokeypad', 'SAE-us-keypad', 'SAE-us-nokeypad', 'ergonomic-us'
+
+ for b in [ 'mnemonic-us' ] :
+ obj = bld.new_task_gen (
+ target = b + '.bindings',
+ source = b + '.bindings.in',
+ rule = '../tools/fmt-bindings --winkey=%s --accelmap <${SRC} >${TGT}' % bld.env['windows_key']
+ )
obj.install_path = os.path.join(bld.env['CONFIGDIR'], 'ardour3')
# Icons/Images
diff --git a/libs/ardour/ardour/coreaudiosource.h b/libs/ardour/ardour/coreaudiosource.h
index 7e9f975d03..e8b22e5524 100644
--- a/libs/ardour/ardour/coreaudiosource.h
+++ b/libs/ardour/ardour/coreaudiosource.h
@@ -22,17 +22,20 @@
#include <appleutility/CAAudioFile.h>
#include "ardour/audiofilesource.h"
+#include <string>
+
+using namespace std;
namespace ARDOUR {
class CoreAudioSource : public AudioFileSource {
public:
CoreAudioSource (ARDOUR::Session&, const XMLNode&);
- CoreAudioSource (ARDOUR::Session&, const string& path, int chn, Flag);
+ CoreAudioSource (ARDOUR::Session&, const string& path, bool, int chn, Flag);
~CoreAudioSource ();
float sample_rate() const;
- int update_header (nframes_t when, struct tm&, time_t);
+ int update_header (sframes_t when, struct tm&, time_t);
int flush_header () {return 0;};
void set_header_timeline_position () {};
@@ -40,7 +43,7 @@ class CoreAudioSource : public AudioFileSource {
static int get_soundfile_info (string path, SoundFileInfo& _info, string& error_msg);
protected:
- nframes_t read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const;
+ nframes_t read_unlocked (Sample *dst, sframes_t start, nframes_t cnt) const;
nframes_t write_unlocked (Sample *dst, nframes_t cnt) { return 0; }
private:
diff --git a/libs/ardour/coreaudiosource.cc b/libs/ardour/coreaudiosource.cc
index 95cae8c4ee..d9d1f01601 100644
--- a/libs/ardour/coreaudiosource.cc
+++ b/libs/ardour/coreaudiosource.cc
@@ -38,14 +38,16 @@ using namespace ARDOUR;
using namespace PBD;
CoreAudioSource::CoreAudioSource (Session& s, const XMLNode& node)
- : AudioFileSource (s, node)
+ : Source (s, node),
+ AudioFileSource (s, node)
{
init ();
}
-CoreAudioSource::CoreAudioSource (Session& s, const string& path, int chn, Flag flags)
+CoreAudioSource::CoreAudioSource (Session& s, const string& path, bool, int chn, Flag flags)
/* files created this way are never writable or removable */
- : AudioFileSource (s, path,
+ : Source (s, DataType::AUDIO, path, Source::Flag (flags & ~(Writable|Removable|RemovableIfEmpty|RemoveAtDestroy))),
+ AudioFileSource (s, path,
Source::Flag (flags & ~(Writable|Removable|RemovableIfEmpty|RemoveAtDestroy)))
{
_channel = chn;
@@ -138,7 +140,7 @@ CoreAudioSource::safe_read (Sample* dst, nframes_t start, nframes_t cnt, AudioBu
nframes_t
-CoreAudioSource::read_unlocked (Sample *dst, nframes_t start, nframes_t cnt) const
+CoreAudioSource::read_unlocked (Sample *dst, sframes_t start, nframes_t cnt) const
{
nframes_t file_cnt;
AudioBufferList abl;
@@ -217,7 +219,7 @@ CoreAudioSource::sample_rate() const
}
int
-CoreAudioSource::update_header (nframes_t when, struct tm&, time_t)
+CoreAudioSource::update_header (sframes_t when, struct tm&, time_t)
{
return 0;
}
diff --git a/libs/ardour/plugin_manager.cc b/libs/ardour/plugin_manager.cc
index 44974a7199..bdc4d9e9b5 100644
--- a/libs/ardour/plugin_manager.cc
+++ b/libs/ardour/plugin_manager.cc
@@ -80,7 +80,7 @@ PluginManager::PluginManager ()
load_favorites ();
-#ifdef GTKOSX
+#ifdef HAVE_AUDIOUNITS
ProcessSerialNumber psn = { 0, kCurrentProcess };
OSStatus returnCode = TransformProcessType(& psn, kProcessTransformToForegroundApplication);
if( returnCode != 0) {
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index e1c85bf968..9895cf1e18 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -420,7 +420,12 @@ Route::process_output_buffers (BufferSet& bufs,
if (rm.locked()) {
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
- bufs.set_count (ChanCount::max(bufs.count(), (*i)->input_streams()));
+ if (bufs.count() != (*i)->input_streams()) {
+ cerr << _name << " bufs = " << bufs.count()
+ << " input = " << (*i)->input_streams()
+ << endl;
+ }
+ assert (bufs.count() == (*i)->input_streams());
(*i)->run (bufs, start_frame, end_frame, nframes);
bufs.set_count (ChanCount::max(bufs.count(), (*i)->output_streams()));
}
@@ -1333,6 +1338,7 @@ Route::configure_processors_unlocked (ProcessorStreams* err)
// We can, so configure everything
list< pair<ChanCount,ChanCount> >::iterator c = configuration.begin();
for (ProcessorList::iterator p = _processors.begin(); p != _processors.end(); ++p, ++c) {
+ cerr << _name << " Configure " << (*p)->name() << " for " << in << " + " << out << endl;
(*p)->configure_io(c->first, c->second);
processor_max_streams = ChanCount::max(processor_max_streams, c->first);
processor_max_streams = ChanCount::max(processor_max_streams, c->second);
diff --git a/libs/ardour/wscript b/libs/ardour/wscript
index 09c4e57149..0f64c32f54 100644
--- a/libs/ardour/wscript
+++ b/libs/ardour/wscript
@@ -210,19 +210,6 @@ def configure(conf):
conf.check(header_name='sys/vfs.h', define_name='HAVE_SYS_VFS_H')
conf.check(header_name='wordexp.h', define_name='HAVE_WORDEXP')
- if conf.env['IS_OSX']:
- conf.check_cc (header_name = '/System/Library/Frameworks/CoreMIDI.framework/Headers/CoreMIDI.h',
- linkflags = [ '-framework', 'CoreMIDI' ])
-
- conf.check_cc (header_name = '/System/Library/Frameworks/AudioToolbox.framework/Headers/ExtendedAudioFile.h',
- linkflags = [ '-framework', 'AudioToolbox' ])
-
- conf.check_cc (header_name = '/System/Library/Frameworks/CoreAudio.framework/Headers/CoreAudio.h',
- define_name = 'HAVE_COREAUDIO')
-
- conf.check_cc (header_name = '/System/Library/Frameworks/AudioUnit.framework/Headers/AudioUnit.h',
- define_name = 'HAVE_AUDIOUNITS', linkflags = [ '-framework', 'AudioUnit' ])
-
conf.write_config_header('libardour-config.h')
# Boost headers
@@ -234,10 +221,10 @@ def build(bld):
obj = bld.new_task_gen('cxx', 'shlib')
obj.source = libardour_sources
obj.export_incdirs = ['.']
- obj.includes = ['.', '../surfaces/control_protocol']
+ obj.includes = ['.', '../surfaces/control_protocol', '..']
obj.name = 'libardour'
obj.target = 'ardour'
- obj.uselib = 'GLIBMM AUBIO SIGCPP XML UUID JACK SNDFILE SAMPLERATE LRDF'
+ obj.uselib = 'GLIBMM AUBIO SIGCPP XML UUID JACK SNDFILE SAMPLERATE LRDF OSX'
obj.uselib_local = 'libpbd libmidipp libevoral libvamphost libvampplugin libtaglib librubberband'
obj.vnum = LIBARDOUR_LIB_VERSION
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
@@ -251,6 +238,14 @@ def build(bld):
os.path.normpath(bld.env['LIBDIR']), 'ardour3', 'vamp') + '"']
#obj.source += ' st_stretch.cc st_pitch.cc '
#obj.uselib += ' SOUNDTOUCH '
+ #obj.add_objects = 'default/libs/surfaces/control_protocol/smpte_1.o'
+
+ obj.env.append_value('LINKFLAGS', 'default/libs/surfaces/control_protocol/smpte_1.o')
+ #
+ # TODO: The above is an ugly hack that shouldn't be needed. We really need
+ # to refactor SMPTE out of libardour_cp to get rid of that circular dependency
+ # alltogether.
+ #
if bld.env['HAVE_SLV2']:
obj.source += [ 'lv2_plugin.cc', 'lv2_event_buffer.cc', 'uri_map.cc' ]
obj.uselib += ' SLV2 '
@@ -259,14 +254,13 @@ def build(bld):
obj.source += [ 'vst_plugin.cc', 'session_vst.cc' ]
if bld.env['HAVE_COREAUDIO'] and bld.env['COREAUDIO']:
- obj.sources += [ 'coreaudio.cc', 'caimportable.cc' ]
+ obj.source += [ 'coreaudiosource.cc', 'caimportable.cc' ]
- if bld.env['HAVE_AUDIOUNITS'] and bld.env['AUDIOUNITS']:
- obj.sources += [ 'audio_unit.cc' ]
+ if bld.env['HAVE_AUDIOUNITS'] or bld.env['HAVE_COREAUDIO']:
+ obj.uselib_local += ' libappleutility'
- if bld.env['IS_OSX']:
- # this avoids issues with circular dependencies between libardour and libardour_cp.
- obj.linkflags += '-undefined suppress -flat_namespace'
+ if bld.env['HAVE_AUDIOUNITS'] and bld.env['AUDIOUNITS']:
+ obj.source += [ 'audio_unit.cc' ]
if bld.env['FPU_OPTIMIZATION']:
obj.source += [ 'sse_functions_xmm.cc' ]
diff --git a/libs/gtkmm2ext/barcontroller.cc b/libs/gtkmm2ext/barcontroller.cc
index 60ec7e1cd6..53d642ce23 100644
--- a/libs/gtkmm2ext/barcontroller.cc
+++ b/libs/gtkmm2ext/barcontroller.cc
@@ -369,7 +369,7 @@ BarController::expose (GdkEventExpose* /*event*/)
}
void
-BarController::set_style (Style s)
+BarController::set_style (barStyle s)
{
_style = s;
darea.queue_draw ();
diff --git a/libs/gtkmm2ext/gtkmm2ext/barcontroller.h b/libs/gtkmm2ext/gtkmm2ext/barcontroller.h
index 9c9c4c18b9..e5c01c7191 100644
--- a/libs/gtkmm2ext/gtkmm2ext/barcontroller.h
+++ b/libs/gtkmm2ext/gtkmm2ext/barcontroller.h
@@ -33,7 +33,7 @@ class BarController : public Gtk::Frame
virtual ~BarController () {}
- enum Style {
+ enum barStyle {
LeftToRight,
RightToLeft,
Line,
@@ -43,8 +43,8 @@ class BarController : public Gtk::Frame
BottomToTop
};
- Style style() const { return _style; }
- void set_style (Style);
+ barStyle style() const { return _style; }
+ void set_style (barStyle);
void set_use_parent (bool yn);
void set_sensitive (bool yn);
@@ -64,7 +64,7 @@ class BarController : public Gtk::Frame
BindingProxy binding_proxy;
Gtk::DrawingArea darea;
Glib::RefPtr<Pango::Layout> layout;
- Style _style;
+ barStyle _style;
bool grabbed;
bool switching;
bool switch_on_release;
diff --git a/libs/gtkmm2ext/gtkmm2ext/cell_renderer_pixbuf_toggle.h b/libs/gtkmm2ext/gtkmm2ext/cell_renderer_pixbuf_toggle.h
index 18c1e5cac0..4a1bbb9051 100644
--- a/libs/gtkmm2ext/gtkmm2ext/cell_renderer_pixbuf_toggle.h
+++ b/libs/gtkmm2ext/gtkmm2ext/cell_renderer_pixbuf_toggle.h
@@ -17,6 +17,13 @@
*/
+#ifdef GTKOSX
+#include <MacTypes.h>
+#if defined(Style)
+#undef style
+#endif
+#endif
+
#ifndef __gtkmm2ext_cell_renderer_pixbuf_toggle_h__
#define __gtkmm2ext_cell_renderer_pixbuf_toggle_h__
@@ -37,7 +44,7 @@ class CellRendererPixbufToggle : public Gtk::CellRenderer
CellRendererPixbufToggle();
virtual ~CellRendererPixbufToggle(){};
- virtual void render_vfunc (const Glib::RefPtr<Gdk::Drawable>& window, Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, const Gdk::Rectangle& expose_area, Gtk::CellRendererState flags);
+ virtual void render_vfunc (const Glib::RefPtr<Gdk::Drawable>& window, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, const Gdk::Rectangle& expose_area, Gtk::CellRendererState flags);
virtual void get_size_vfunc (Gtk::Widget& widget, const Gdk::Rectangle* cell_area, int* x_offset, int* y_offset, int* width, int* height) const;
diff --git a/libs/gtkmm2ext/wscript b/libs/gtkmm2ext/wscript
index 212a471989..7c8f4cda99 100644
--- a/libs/gtkmm2ext/wscript
+++ b/libs/gtkmm2ext/wscript
@@ -18,6 +18,34 @@ GTKMM2EXT_LIB_VERSION = '0.8.3'
APPNAME = 'gtkmm2ext'
VERSION = GTKMM2EXT_VERSION
+gtkmm2ext_sources = [
+ 'auto_spin.cc',
+ 'barcontroller.cc',
+ 'binding_proxy.cc',
+ 'cell_renderer_pixbuf_toggle.cc',
+ 'choice.cc',
+ 'click_box.cc',
+ 'dndtreeview.cc',
+ 'fastmeter.cc',
+ 'focus_entry.cc',
+ 'grouped_buttons.cc',
+ 'gtk_ui.cc',
+ 'idle_adjustment.cc',
+ 'pixfader.cc',
+ 'pixscroller.cc',
+ 'popup.cc',
+ 'prompter.cc',
+ 'scroomer.cc',
+ 'selector.cc',
+ 'slider_controller.cc',
+ 'stateful_button.cc',
+ 'tearoff.cc',
+ 'textviewer.cc',
+ 'utils.cc',
+ 'version.cc',
+ 'window_title.cc'
+]
+
# Mandatory variables
srcdir = '.'
blddir = 'build'
@@ -33,41 +61,17 @@ def configure(conf):
autowaf.configure(conf)
conf.check_tool('compiler_cxx')
autowaf.check_pkg(conf, 'gtkmm-2.4', uselib_store='GTKMM', atleast_version='2.8')
+ autowaf.check_pkg(conf, 'gtk+-2.0', uselib_store='GTK', atleast_version='2.12.1')
+
def build(bld):
- obj = bld.new_task_gen('cxx', 'shlib')
- obj.source = '''
- auto_spin.cc
- barcontroller.cc
- binding_proxy.cc
- cell_renderer_pixbuf_toggle.cc
- choice.cc
- click_box.cc
- dndtreeview.cc
- fastmeter.cc
- focus_entry.cc
- grouped_buttons.cc
- gtk_ui.cc
- idle_adjustment.cc
- pixfader.cc
- pixscroller.cc
- popup.cc
- prompter.cc
- scroomer.cc
- selector.cc
- slider_controller.cc
- stateful_button.cc
- tearoff.cc
- textviewer.cc
- utils.cc
- version.cc
- window_title.cc
- '''
+ obj = bld.new_task_gen(features = 'cc cxx cshlib')
+ obj.source = gtkmm2ext_sources
obj.export_incdirs = ['.']
obj.includes = ['.']
obj.name = 'libgtkmm2ext'
obj.target = 'gtkmm2ext'
- obj.uselib = 'GTKMM'
+ obj.uselib = 'GTKMM GTK GTKOSX OSX GDK'
obj.uselib_local = 'libpbd'
obj.vnum = GTKMM2EXT_LIB_VERSION
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
@@ -75,6 +79,8 @@ def build(bld):
'-DPACKAGE="libgtkmm2ext"',
'-DLOCALEDIR="' + os.path.join(
os.path.normpath(bld.env['DATADIRNAME']), 'locale') + '"']
+ if bld.env['GTKOSX']:
+ obj.source += ['sync-menu.c']
def shutdown():
autowaf.shutdown()
diff --git a/libs/pbd/wscript b/libs/pbd/wscript
index c06cd31503..be65a84ac1 100644
--- a/libs/pbd/wscript
+++ b/libs/pbd/wscript
@@ -1,6 +1,7 @@
#!/usr/bin/env python
import autowaf
import os
+import sys
# Version of this package (even if built as a child)
MAJOR = '4'
@@ -34,7 +35,8 @@ def configure(conf):
conf.check_tool('compiler_cxx')
autowaf.check_pkg(conf, 'libxml-2.0', uselib_store='XML')
autowaf.check_pkg(conf, 'sigc++-2.0', uselib_store='SIGCPP', atleast_version='2.0')
- autowaf.check_pkg(conf, 'uuid', uselib_store='UUID')
+ if sys.platform != 'darwin':
+ autowaf.check_pkg(conf, 'uuid', uselib_store='UUID')
conf.check(function_name='getmntent', header_name='mntent.h', define_name='HAVE_GETMNTENT')
conf.check(header_name='execinfo.h', define_name='HAVE_EXECINFO')
diff --git a/libs/surfaces/control_protocol/wscript b/libs/surfaces/control_protocol/wscript
index e8354e58d4..b118ca5726 100644
--- a/libs/surfaces/control_protocol/wscript
+++ b/libs/surfaces/control_protocol/wscript
@@ -6,6 +6,7 @@ import os
# major increment <=> incompatible changes
# minor increment <=> compatible changes (additions)
# micro increment <=> no interface changes
+APPNAME = 'libardour_cp'
LIBARDOUR_CP_LIB_VERSION = '4.1.0'
# Mandatory variables
diff --git a/libs/surfaces/osc/wscript b/libs/surfaces/osc/wscript
index d254d00313..4e1e87d7f5 100644
--- a/libs/surfaces/osc/wscript
+++ b/libs/surfaces/osc/wscript
@@ -17,7 +17,12 @@ def set_options(opt):
def configure(conf):
autowaf.configure(conf)
- autowaf.check_pkg(conf, 'liblo', uselib_store='LO')
+ autowaf.check_pkg(conf, 'liblo', uselib_store='LO', linkflags='-llo')
+ conf.env.append_value('LINKFLAGS_LO', '-llo')
+ #
+ # TODO: Again this append_value shouldn't be necessary really
+ # but for some reason the link flag is not being added otherwise.
+ #
def build(bld):
obj = bld.new_task_gen('cxx', 'shlib')
diff --git a/wscript b/wscript
index ffe7aa89ec..2e5d306675 100644
--- a/wscript
+++ b/wscript
@@ -6,6 +6,7 @@ import commands
import re
import string
import subprocess
+import sys
# Variables for 'waf dist'
VERSION = '3.0pre0'
@@ -200,7 +201,7 @@ def set_compiler_flags (conf,opt):
if conf.env['build_target'] == 'tiger' or conf.env['build_target'] == 'leopard':
optimization_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS");
debug_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS");
- libraries['core'].Append(LINKFLAGS= '-framework Accelerate')
+ conf.env.append_value('LINKFLAGS', "-framework Accelerate")
elif conf.env['build_target'] == 'i686' or conf.env['build_target'] == 'x86_64':
optimization_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
debug_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
@@ -209,6 +210,8 @@ def set_compiler_flags (conf,opt):
debug_flags.append ("-DUSE_X86_64_ASM")
if build_host_supports_sse != 1:
print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)"
+ if conf.check_cc(function_name='posix_memalign', header_name='stdlib.h') == False:
+ optimization_flags.append("-DNO_POSIX_MEMALIGN")
# end optimization section
@@ -231,13 +234,7 @@ def set_compiler_flags (conf,opt):
conf.define ('IS_OSX', 1)
# force tiger or later, to avoid issues on PPC which defaults
# back to 10.1 if we don't tell it otherwise.
- conf.env.append_value (CCFLAGS="-DMAC_OS_X_VERSION_MIN_REQUIRED=1040")
-
- if conf.env['build_target'] == 'leopard':
- # need this to force build against the 10.4 SDK when building on later versions of OS X
- # ideally this would be configurable, but lets just do that later when we need it
- conf.env.append_value(CCFLAGS="-mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk")
- conf.env.append_value(LINKFLAGS="-mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk")
+ conf.env.append_value('CCFLAGS', "-DMAC_OS_X_VERSION_MIN_REQUIRED=1040")
else:
conf.define ('IS_OSX', 0)
@@ -353,8 +350,10 @@ def set_options(opt):
help='Compile with support for VST')
opt.add_option('--wiimote', action='store_true', default=False, dest='wiimote',
help='Build the wiimote control surface')
- opt.add_option('--windows-key', type='string', dest='windows_key',
- help='Set X Modifier (Mod1,Mod2,Mod3,Mod4,Mod5) for "Windows" key [Default: Mod4]', default='Mod4><Super')
+ opt.add_option('--windows-key', type='string', action='store', dest='windows_key', default='Mod4><Super',
+ help='X Modifier(s) (Mod1,Mod2, etc) for the Windows key (X11 builds only). ' +
+ 'Multiple modifiers must be separated by \'><\'')
+
for i in children:
opt.sub_options(i)
@@ -368,6 +367,8 @@ def configure(conf):
autowaf.configure(conf)
autowaf.check_pkg(conf, 'glib-2.0', uselib_store='GLIB', atleast_version='2.2')
autowaf.check_pkg(conf, 'glibmm-2.4', uselib_store='GLIBMM', atleast_version='2.14.0')
+ if sys.platform == 'darwin':
+ sub_config_and_use(conf, 'libs/appleutility')
for i in children:
sub_config_and_use(conf, i)
@@ -398,6 +399,8 @@ def configure(conf):
autowaf.display_msg(conf, 'GtkOSX', opts.gtkosx)
if opts.gtkosx:
conf.define ('GTKOSX', 1)
+ if opts.coreaudio:
+ conf.define ('COREAUDIO', 1)
autowaf.display_msg(conf, 'LV2 Support', bool(conf.env['HAVE_SLV2']))
autowaf.display_msg(conf, 'Rubberband', bool(conf.env['HAVE_RUBBERBAND']))
autowaf.display_msg(conf, 'Samplerate', bool(conf.env['HAVE_SAMPLERATE']))
@@ -416,9 +419,9 @@ def configure(conf):
autowaf.display_msg(conf, 'Wiimote Support', opts.wiimote)
if opts.wiimote:
conf.define('WIIMOTE',1)
- autowaf.display_msg(conf, 'Windows Key', opts.windows_key)
if opts.windows_key:
conf.define('WINDOWS_KEY', opts.windows_key)
+ autowaf.display_msg(conf, 'Windows Key', opts.windows_key)
set_compiler_flags (conf, Options.options)
@@ -427,6 +430,8 @@ def configure(conf):
def build(bld):
autowaf.set_recursive()
+ if sys.platform == 'darwin':
+ bld.add_subdirs('libs/appleutility')
for i in children:
bld.add_subdirs(i)