provide instructional hint for keyeditor; fix keybinding issues on OS X (needs curren...
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 4 Feb 2008 22:37:57 +0000 (22:37 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 4 Feb 2008 22:37:57 +0000 (22:37 +0000)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3007 d708f5d6-7413-0410-9779-e7cbd77b26cf

15 files changed:
gtk2_ardour/SConscript
gtk2_ardour/ardour.bindings.in
gtk2_ardour/ardour.menus
gtk2_ardour/editor_actions.cc
gtk2_ardour/editor_ops.cc
gtk2_ardour/editor_selection.cc
gtk2_ardour/keyeditor.cc
gtk2_ardour/main.cc
gtk2_ardour/option_editor.cc
gtk2_ardour/sync-menu.c
gtk2_ardour/time_axis_view.cc
gtk2_ardour/utils.cc
libs/ardour/session_state.cc
svn_revision.h
tools/osx_packaging/osx_build

index a011cbe27e87c5fd5a85871d5c0215c5cf968ea7..b6baecf3207098b598ee1f6ab0fe68bf2f326353 100644 (file)
@@ -405,13 +405,17 @@ keybindings_dict = { }
 
 if gtkardour['GTKOSX'] and gtkardour['NATIVE_OSX_KEYS']:
        #
-       # Command(Mod1), Alt(Mod5), Ctrl, Shift
+       # Command(Meta), Alt(Mod1), Ctrl, Shift
+       # **** as of february 4th 2008, OUR VERSION OF *****
+       # Gtk/Quartz maps:
+       #  NSCommand (aka "Command" aka "Apple" aka "Cauliflower") -> Meta
+       #  NSAlternate (aka "Option")  -> Mod1
        #
-       keybindings_dict['%PRIMARY%'] = 'Mod5'
-       keybindings_dict['%SECONDARY%'] = 'Alt'
+       keybindings_dict['%PRIMARY%'] = 'Meta'
+       keybindings_dict['%SECONDARY%'] = 'Mod1'
        keybindings_dict['%TERTIARY%'] = 'Shift'
        keybindings_dict['%LEVEL4%'] = 'Ctrl'
-       keybindings_dict['%WINDOW%'] = 'Mod5'
+       keybindings_dict['%WINDOW%'] = 'Mod1'
 else:
        #
        # Ctrl, Alt, Shift, Mod3(Meta)
index 0465889f7495db741d91debde3fa5a0ca4da3cf2..3d21244ede290d1f888b5b697327f7d2a80ebf58 100644 (file)
 (gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<%PRIMARY%>downarrow")
 (gtk_accel_path "<Actions>/Editor/select-next-route" "<%SECONDARY%>downarrow")
 
-(gtk_accel_path "<Actions>/Editor/scroll-backward" "leftarrow")
-(gtk_accel_path "<Actions>/Transport/Rewind" "<%PRIMARY%>leftarrow")
-(gtk_accel_path "<Actions>/Editor/scroll-playhead-backward" "<%TERTIARY%>leftarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-to-previous-region-boundary" "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>/Editor/scroll-forward" "rightarrow")
-(gtk_accel_path "<Actions>/Transport/Forward" "<%PRIMARY%>rightarrow")
-(gtk_accel_path "<Actions>/Editor/scroll-playhead-forward" "<%TERTIARY%>rightarrow")
+(gtk_accel_path "<Actions>/Editor/playhead-to-next-region-boundary" "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>/Editor/scroll-tracks-down" "Page_Down")
 (gtk_accel_path "<Actions>/Editor/scroll-tracks-up" "Page_Up")
 (gtk_accel_path "<Actions>/Editor/cycle-snap-choice" "3")
 (gtk_accel_path "<Actions>/Transport/ToggleAutoReturn" "4")
 (gtk_accel_path "<Actions>/Transport/ToggleClick" "5")
-(gtk_accel_path "<Actions>/Editor/tab-to-transient-forwards" "7")
-(gtk_accel_path "<Actions>/Editor/tab-to-transient-backwards" "8")
 (gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "9")
 (gtk_accel_path "<Actions>/Editor/set-tempo-from-edit-range" "0")
 
-
 ;;
 ;; unbound actions
 ;;
index bcf4ada3e7e03791d647d7edcf417a8cb2e85bf0..f21356d12731a8198d69f13b8813dc1e36965ec7 100644 (file)
@@ -46,6 +46,8 @@
               <separator/>
                <menuitem action='tab-to-transient-forwards'/>
                <menuitem action='tab-to-transient-backwards'/>
+               <menuitem action='nudge-playhead-forward'/>
+               <menuitem action='nudge-playhead-backward'/>
               <separator/>
                <menuitem action='Record'/>
                <separator/> 
                   <menuitem action='edit-cursor-to-range-start'/>
                   <menuitem action='edit-cursor-to-range-end'/>
               </menu>
+             <menuitem action='set-tempo-from-region'/>
+                  <menuitem action='set-tempo-from-edit-range'/>
               <menu name='KeyMouse Actions' action='KeyMouse Actions'>
                        <menuitem action='play-selected-regions'/>
                                <menuitem action='brush-at-mouse'/>
                           <menuitem action='normalize-region'/>
                    <separator/>       
                   <menuitem action="nudge-forward"/>
-                  <menuitem action="nudge-next-forward"/>
                   <menuitem action="nudge-backward"/>
-                  <menuitem action="nudge-next-backward"/>
                   <menuitem action='split-region'/>
                   <menuitem action='set-region-sync-position'/>
                    <separator/>       
                   <menuitem action='trim-region-to-punch'/>
                   <separator/>
                   <menuitem action='pitch-shift-region'/>
-                  <menuitem action='set-tempo-from-region'/>
-                  <menuitem action='set-tempo-from-edit-range'/>
        </menu>
         <menu name='View' action = 'View'>
                <menu name='ZoomFocus' action='ZoomFocus'>
index fe0ba2943f53b1b1b47733b6450dcb3aec8fc0df..751266e4bbad6ece14ececd0f620d520c4040a5e 100644 (file)
@@ -203,6 +203,11 @@ Editor::register_actions ()
        act = ActionManager::register_action (editor_actions, "nudge-next-backward", _("Nudge Next Backward"), bind (mem_fun(*this, &Editor::nudge_backward), true, false));
        ActionManager::session_sensitive_actions.push_back (act);
 
+       act = ActionManager::register_action (editor_actions, "nudge-playhead-forward", _("Nudge Playhead Forward"), bind (mem_fun(*this, &Editor::nudge_forward), false, true));
+       ActionManager::session_sensitive_actions.push_back (act);
+       act = ActionManager::register_action (editor_actions, "nudge-playhead-backward", _("Nudge Playhead Backward"), bind (mem_fun(*this, &Editor::nudge_backward), false, true));
+       ActionManager::session_sensitive_actions.push_back (act);
+
 
        act = ActionManager::register_action (editor_actions, "temporal-zoom-out", _("Zoom Out"), bind (mem_fun(*this, &Editor::temporal_zoom_step), true));
        ActionManager::session_sensitive_actions.push_back (act);
index c37b7c0dbd414fbab8abed9aa8bafc6f54ad63b1..aaa505bc81d9192d44b9afedf729de7ee21dcbb4 100644 (file)
@@ -5128,6 +5128,7 @@ Editor::split_region_at_points (boost::shared_ptr<Region> r, AnalysisFeatureList
                if ((*x) > pos) {
                        break;
                }
+               ++x;
        }
        
        if (x == positions.end()) {
index fb10b0b81f5f92c6628777e6a93c412b47d0733e..d68212fe3208622e907f7b1a2f2ecef26badeded 100644 (file)
@@ -183,6 +183,8 @@ void
 Editor::set_selected_track (TimeAxisView& view, Selection::Operation op, bool no_remove)
 {
 
+       cerr << "set selected track, op = " << op << " selected ? " << selection->selected (&view) << " no remove? " << no_remove << endl;
+
        switch (op) {
        case Selection::Toggle:
                if (selection->selected (&view)) {
index c914b6282bc3c2e4d19d3926d04f8d95f2b568fc..cdac398a30db958bcadf5d58e8fd111064152662 100644 (file)
@@ -3,6 +3,7 @@
 #include <ardour/profile.h>
 
 #include <gtkmm/stock.h>
+#include <gtkmm/label.h>
 #include <gtkmm/accelkey.h>
 #include <gtkmm/accelmap.h>
 #include <gtkmm/uimanager.h>
@@ -50,17 +51,23 @@ KeyEditor::KeyEditor ()
        scroller.add (view);
        scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
 
-       unbind_box.pack_start (unbind_button, false, false);
-
-       unbind_button.signal_clicked().connect (mem_fun (*this, &KeyEditor::unbind));
 
        get_vbox()->set_spacing (6);
        get_vbox()->pack_start (scroller);
 
        if (!ARDOUR::Profile->get_sae()) {
+
+               Label* hint = manage (new Label (_("Select an action, then press the key(s) to (re)set its shortcut")));
+               hint->show ();
+               unbind_box.set_spacing (6);
+               unbind_box.pack_start (*hint, false, true);
+               unbind_box.pack_start (unbind_button, false, false);
+               unbind_button.signal_clicked().connect (mem_fun (*this, &KeyEditor::unbind));
+
                get_vbox()->pack_start (unbind_box, false, false);
                unbind_box.show ();
                unbind_button.show ();
+               
        }
 
        get_vbox()->set_border_width (12);
@@ -248,9 +255,16 @@ KeyEditor::populate ()
 
 #ifdef GTKOSX
                        string label = (*k);
-                       replace_all (label, "<Mod5>", _("Command-"));
+
+                       /* Gtk/Quartz maps:
+                          NSAlternate/NSOption key to Mod1
+                          NSCommand key to Meta 
+                       */
+
+                       replace_all (label, "<Meta>", _("Command-"));
                        replace_all (label, "<Alt>", _("Option-"));
                        replace_all (label, "<Shift>", _("Shift-"));
+                       replace_all (label, "<Control>", _("Control-"));
                        row[columns.binding] = label;
 #else          
                        row[columns.binding] = (*k);
index f7039039cfb594d7520d26a6fef7065179a14fdf..896deb634346b78d67ca09d57261280619c77edb 100644 (file)
@@ -122,7 +122,27 @@ fixup_bundle_environment ()
        path += "/../Plugins";
        
        setenv ("LADSPA_PATH", path.c_str(), 1);
+
+       cstr = getenv ("VAMP_PATH");
+       if (cstr) {
+               path = cstr;
+               path += ':';
+       }
+       path = dir_path;
+       path += "/../Frameworks";
+       
+       setenv ("VAMP_PATH", path.c_str(), 1);
+
+       cstr = getenv ("ARDOUR_CONTROL_SURFACE_PATH");
+       if (cstr) {
+               path = cstr;
+               path += ':';
+       }
+       path = dir_path;
+       path += "/../Surfaces";
        
+       setenv ("ARDOUR_CONTROL_SURFACE_PATH", path.c_str(), 1);
+
        cstr = getenv ("LV2_PATH");
        if (cstr) {
                path = cstr;
index 2a2cb4e3591c6c9dcd0f8112a998e4131d702db8..d6893b4adaf2eb6a698242d6846bceecbe346f90 100644 (file)
@@ -1081,14 +1081,14 @@ static const struct {
 
 #ifdef GTKOSX 
 
-       /* Command = Mod1
-          Option/Alt = Mod5
+       /* Command = Meta
+          Option/Alt = Mod1
        */
 
        { "Shift", GDK_SHIFT_MASK },
-       { "Command", GDK_MOD1_MASK },
+       { "Command", GDK_META_MASK },
        { "Control", GDK_CONTROL_MASK },
-       { "Option", GDK_MOD5_MASK },
+       { "Option", GDK_MOD1_MASK },
        { "Command-Shift", GDK_MOD1_MASK|GDK_SHIFT_MASK },
        { "Command-Option", GDK_MOD1_MASK|GDK_MOD5_MASK },
        { "Shift-Option", GDK_SHIFT_MASK|GDK_MOD5_MASK },
index cf697db466f6878ebf2d4294770a928f668c2f74..22beca9b115d82de3eb6fdc8db7375799f442932 100644 (file)
@@ -331,6 +331,8 @@ carbon_menu_item_update_accelerator (CarbonMenuItem *carbon_item,
                    modifiers |= kMenuShiftModifier;
                  }
 
+                 /* gdk/quartz maps Alt/Option to Mod1 */
+
                  if (key->accel_mods & (GDK_MOD1_MASK)) {
                    modifiers |= kMenuOptionModifier;
                  }
@@ -338,12 +340,10 @@ carbon_menu_item_update_accelerator (CarbonMenuItem *carbon_item,
                  if (key->accel_mods & GDK_CONTROL_MASK) {
                    modifiers |= kMenuControlModifier;
                  }
+
+                 /* gdk/quartz maps Command to Meta */
                  
-                 if (key->accel_mods & GDK_MOD5_MASK) {
-                         /* Mod5 is what ardour's binding file uses to mean "Command"
-                            Nothing needs to be set in modifiers, but we need to notice
-                            that there *is* an implicit modifier
-                         */
+                 if (key->accel_mods & GDK_META_MASK) {
                          use_command = 1;
                  }
                }  
index 5cc44f17125da5070bda51be12e150e4335f8c22..904e62727366d064921cbb9b14de2888576cf57a 100644 (file)
@@ -271,6 +271,7 @@ TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev)
 bool
 TimeAxisView::controls_ebox_button_release (GdkEventButton* ev)
 {
+       cerr << "CEB button release\n";
        switch (ev->button) {
        case 1:
                selection_click (ev);
index d0e85a4fa03de429d74f6c812b4fd0ff3d6c36b5..7a058b9ce508652e5a49100e59b877e0a1c93d4e 100644 (file)
@@ -460,42 +460,51 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev)
                   it does allow.
                */
 
+               int fakekey = GDK_VoidSymbol;
                int ret = false;
 
                switch (ev->keyval) {
                case GDK_Tab:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_nabla, GdkModifierType(ev->state));
-                       break;
-
-               // some X and/or GDK implementations do Shift-Tab -> GDK_ISO_Left_Tab
-
                case GDK_ISO_Left_Tab:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_nabla, GdkModifierType(ev->state));
+                       fakekey = GDK_nabla;
                        break;
 
                case GDK_Up:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_uparrow, GdkModifierType(ev->state));
+                       fakekey = GDK_uparrow;
                        break;
 
                case GDK_Down:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_downarrow, GdkModifierType(ev->state));
+                       fakekey = GDK_downarrow;
                        break;
 
                case GDK_Right:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_rightarrow, GdkModifierType(ev->state));
+                       fakekey = GDK_rightarrow;
                        break;
 
                case GDK_Left:
-                       ret = gtk_accel_groups_activate(G_OBJECT(win), GDK_leftarrow, GdkModifierType(ev->state));
+                       fakekey = GDK_leftarrow;
                        break;
 
                default:
                        break;
                }
 
-               if (ret) {
-                       return true;
+               if (fakekey != GDK_VoidSymbol) {
+                       ret = gtk_accel_groups_activate(G_OBJECT(win), fakekey, GdkModifierType(ev->state));
+                       
+                       if (ret) {
+                               return true;
+                       }
+
+#ifdef GTKOSX
+                       int oldval = ev->keyval;
+                       ev->keyval = fakekey;
+                       if (gdk_quartz_possibly_forward ((GdkEvent*) ev)) {
+                               return true;
+                       }
+                       ev->keyval = oldval;
                }
+#endif
        }
 
        /* consider all relevant modifiers but not LOCK or SHIFT */
index d0302ea675faac8e0e7a1eb6673e21172061f8b7..168885ea8e9f91980789c8197172311258d1956c 100644 (file)
@@ -2139,6 +2139,10 @@ Session::template_path ()
 string
 Session::control_protocol_path ()
 {
+       char *p = getenv ("ARDOUR_CONTROL_SURFACE_PATH");
+       if (p && *p) {
+               return p;
+       }
        return suffixed_search_path (X_("surfaces"), false);
 }
 
index 5000e5a2a4434aa565962f64e83ddc93f07cda59..0029caf988f40b3ec85c5f84610a96d522bf97a4 100644 (file)
@@ -1,4 +1,4 @@
 #ifndef __ardour_svn_revision_h__
 #define __ardour_svn_revision_h__
-static const char* ardour_svn_revision = "2985";
+static const char* ardour_svn_revision = "2986";
 #endif
index 4160b07d5614056b3ac50398c21267de9bda96cc..b3984f6b4034862124edbed162a6d3a31cf13c7d 100755 (executable)
@@ -32,6 +32,7 @@ APPROOT=Ardour2.app/Contents
 Frameworks=$APPROOT/Frameworks
 Resources=$APPROOT/Resources
 Plugins=$APPROOT/Plugins
+Surfaces=$APPROOT/Surfaces
 Shared=$Resources/share
 Etc=$Resources/etc
 
@@ -60,6 +61,7 @@ echo "Building new app directory structure ..."
 mkdir -p $APPROOT/MacOS
 mkdir -p $APPROOT/Resources
 mkdir -p $APPROOT/Plugins
+mkdir -p $APPROOT/Surfaces
 mkdir -p $Frameworks/modules
 mkdir -p $Shared/templates
 mkdir -p $Etc
@@ -140,8 +142,12 @@ mkdir -p $Frameworks/clearlooks/engines
 (cd $Frameworks/clearlooks/engines && ln -s ../../libclearlooks.dylib libclearlooks.dylib && ln -s ../../libclearlooks.dylib libclearlooks.so)
 
 # XXX STILL NEED TO DO PANNERS FOR TRUNK
+cp ../../libs/surfaces/*/libardour_*.dylib $Surfaces
+# hack ... move libardour_cp back into Frameworks
+cp $Surfaces/libardour_cp*.dylib $Frameworks
 
-cp ../../libs/surfaces/*/libardour_*.dylib $Frameworks
+# VAMP plugins that we use
+cp ../../libs/vamp-plugins/libardourvampplugins.dylib $Frameworks
 
 while [ true ] ; do 
     missing=false
@@ -228,7 +234,7 @@ done
 
 echo "Fixing up library names ..."
 # now do the same for all the libraries we include
-for dylib in $Frameworks/*.dylib $Frameworks/modules/*.so ; do
+for dylib in $Frameworks/*.dylib $Frameworks/modules/*.so $Surfaces/*.dylib ; do
     # skip symlinks
     if test ! -L $dylib ; then