From 577f1571f8e8cf0dc5f6983ea5dd07cc6153f831 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 30 Nov 2007 22:12:27 +0000 Subject: [PATCH] don't put NDF/DF in clocks if there is no DF/NDF alternative; make deselect-all and invert-selection operations work properly; fix bug in edit range determination with no selected marker; popup dialog when no range can be determined; add new WINDOW modifier to SConscript to allow different conventions on OS X and linux git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2730 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/SConscript | 2 ++ gtk2_ardour/ardour-sae.bindings.in | 11 +++++----- gtk2_ardour/audio_clock.cc | 11 +++++++--- gtk2_ardour/editor.cc | 7 ++++++ gtk2_ardour/editor.h | 2 ++ gtk2_ardour/editor_actions.cc | 4 ++-- gtk2_ardour/editor_mouse.cc | 2 -- gtk2_ardour/editor_ops.cc | 13 ++++++++++-- gtk2_ardour/editor_selection.cc | 34 +++++++++++++++++++++++++++++- gtk2_ardour/utils.cc | 15 ++++++++----- 10 files changed, 80 insertions(+), 21 deletions(-) diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript index 7205bdc509..a6c94a3172 100644 --- a/gtk2_ardour/SConscript +++ b/gtk2_ardour/SConscript @@ -397,6 +397,7 @@ if gtkardour['GTKOSX'] and gtkardour['NATIVE_OSX_KEYS']: keybindings_dict['%SECONDARY%'] = 'Alt' keybindings_dict['%TERTIARY%'] = 'Shift' keybindings_dict['%LEVEL4%'] = 'Shift' + keybindings_dict['%WINDOW%'] = 'Mod5' else: # # Ctrl, Alt, Shift, Mod3(Meta) @@ -405,6 +406,7 @@ else: keybindings_dict['%SECONDARY%'] = 'Alt' keybindings_dict['%TERTIARY%'] = 'Shift' keybindings_dict['%LEVEL4%'] = 'Mod3' + keybindings_dict['%WINDOW%'] = 'Ctrl' ardourbindings = env.SubstInFile ('ardour.bindings', 'ardour.bindings.in', SUBST_DICT = keybindings_dict); ardoursaebindings = env.SubstInFile ('ardour-sae.bindings', 'ardour-sae.bindings.in', SUBST_DICT = keybindings_dict); diff --git a/gtk2_ardour/ardour-sae.bindings.in b/gtk2_ardour/ardour-sae.bindings.in index e35fa5d5b9..7c19ac5d6a 100644 --- a/gtk2_ardour/ardour-sae.bindings.in +++ b/gtk2_ardour/ardour-sae.bindings.in @@ -172,7 +172,6 @@ (gtk_accel_path "/Transport/Loop" "l") ; (gtk_accel_path "/Editor/CrossfadesFull" "") (gtk_accel_path "/Editor/finish-add-range" "<%TERTIARY%><%PRIMARY%>KP_Up") -; (gtk_accel_path "/Transport/ToggleClick" "") ; (gtk_accel_path "/options/SendMTC" "") ; (gtk_accel_path "/Transport/TogglePunchOut" "") (gtk_accel_path "/Editor/select-all-in-loop-range" "<%PRIMARY%>l") @@ -227,7 +226,7 @@ ; (gtk_accel_path "/Editor/Smpte24976" "") ; (gtk_accel_path "/options/FileDataFormat24bit" "") ; (gtk_accel_path "/Editor/SnapMode" "") -(gtk_accel_path "/Common/ToggleOptionsEditor" "<%PRIMARY%>o") +(gtk_accel_path "/Common/ToggleOptionsEditor" "<%WINDOW%>o") ; (gtk_accel_path "/Editor/PullupMinus4" "") (gtk_accel_path "/Common/goto-mixer" "<%SECONDARY%>m") ; (gtk_accel_path "/RegionList/SortBySourceFileCreationDate" "") @@ -235,8 +234,8 @@ (gtk_accel_path "/Editor/extend-range-to-start-of-region" "leftanglebracket") ; (gtk_accel_path "/Editor/PullupMinus1" "") ; (gtk_accel_path "/Editor/snap-normal" "") -(gtk_accel_path "/Common/ToggleBigClock" "<%SECONDARY%>b") -(gtk_accel_path "/Common/ToggleKeyEditor" "<%SECONDARY%>k") +(gtk_accel_path "/Common/ToggleBigClock" "<%WINDOW%>b") +(gtk_accel_path "/Common/ToggleKeyEditor" "<%WINDOW%>k") ; (gtk_accel_path "/Snap/snap-to-asixteenthbeat" "") (gtk_accel_path "/Editor/select-all-in-punch-range" "<%PRIMARY%>d") ; (gtk_accel_path "/redirectmenu/edit" "") @@ -263,7 +262,7 @@ ; (gtk_accel_path "/Transport/ToggleVideoSync" "") (gtk_accel_path "/Transport/ToggleRoll" "space") ; (gtk_accel_path "/RegionList/SortBySourceFilesystem" "") -(gtk_accel_path "/Common/ToggleColorManager" "<%SECONDARY%>c") +(gtk_accel_path "/Common/ToggleColorManager" "<%WINDOW%>c") ; (gtk_accel_path "/Common/About" "") ; (gtk_accel_path "/JACK/JACKLatency32" "") (gtk_accel_path "/Editor/playhead-to-edit" "Return") @@ -282,7 +281,7 @@ (gtk_accel_path "/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e") ; (gtk_accel_path "/Editor/Subframes80" "") ; (gtk_accel_path "/options/FileHeaderFormatCAF" "") -(gtk_accel_path "/Common/ToggleLocations" "<%SECONDARY%>l") +(gtk_accel_path "/Common/ToggleLocations" "<%WINDOW%>l") ; (gtk_accel_path "/Editor/ToggleGeneric MIDISurface" "") (gtk_accel_path "/Editor/editor-delete" "BackSpace") ; (gtk_accel_path "/JACK/JACKLatency256" "") diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 3a8ccd4d2c..33f522f234 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -600,10 +600,15 @@ AudioClock::set_smpte (nframes_t when, bool force) smpte_upper_info_label->set_text (buf); - if (session->smpte_drop_frames()) { - sprintf (buf, "DF"); + if ((fabs(smpte_frames - 29.97) < 0.0001) || smpte_frames == 30) { + if (session->smpte_drop_frames()) { + sprintf (buf, "DF"); + } else { + sprintf (buf, "NDF"); + } } else { - sprintf (buf, "NDF"); + // there is no drop frame alternative + buf[0] = '\0'; } smpte_lower_info_label->set_text (buf); diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 8c5c2cc4c9..dcf750bfea 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -3936,6 +3936,13 @@ Editor::on_key_press_event (GdkEventKey* ev) return key_press_focus_accelerator_handler (*this, ev); } +bool +Editor::on_key_release_event (GdkEventKey* ev) +{ + return Gtk::Window::on_key_release_event (ev); + // return key_press_focus_accelerator_handler (*this, ev); +} + void Editor::reset_x_origin (nframes_t frame) { diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index c434bc1de8..4b7829f92f 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -231,6 +231,7 @@ class Editor : public PublicEditor void select_all (Selection::Operation op); void invert_selection_in_track (); void invert_selection (); + void deselect_all (); /* tempo */ @@ -1945,6 +1946,7 @@ class Editor : public PublicEditor Gtk::CheckMenuItem* region_opaque_item; bool on_key_press_event (GdkEventKey*); + bool on_key_release_event (GdkEventKey*); void session_state_saved (string); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index e0ebb6e314..e54f0e86b9 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -134,9 +134,9 @@ Editor::register_actions () act = ActionManager::register_action (editor_actions, "select-all", _("Select All"), bind (mem_fun(*this, &Editor::select_all), Selection::Set)); ActionManager::session_sensitive_actions.push_back (act); - act = ActionManager::register_action (editor_actions, "deselect-all", _("Deselect All"), bind (mem_fun(*this, &Editor::select_all), Selection::Set)); + act = ActionManager::register_action (editor_actions, "deselect-all", _("Deselect All"), mem_fun(*this, &Editor::deselect_all)); ActionManager::session_sensitive_actions.push_back (act); - act = ActionManager::register_action (editor_actions, "invert-selection", _("Invert Selection"), bind (mem_fun(*this, &Editor::select_all), Selection::Set)); + act = ActionManager::register_action (editor_actions, "invert-selection", _("Invert Selection"), mem_fun(*this, &Editor::invert_selection)); ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (editor_actions, "select-all-after-edit-cursor", _("Select All After Edit Point"), bind (mem_fun(*this, &Editor::select_all_selectables_using_edit), true)); ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 14eb8ceff3..b933238e11 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -4046,10 +4046,8 @@ Editor::cancel_selection () for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { (*i)->hide_selection (); } - begin_reversible_command (_("cancel selection")); selection->clear (); clicked_selection = 0; - commit_reversible_command (); } void diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 09182261d9..0508a7a6df 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4479,6 +4479,9 @@ Editor::set_loop_from_edit_range (bool play) void Editor::set_loop_from_region (bool play) { + nframes64_t start = max_frames; + nframes64_t end = 0; + ensure_entered_region_selected (true); if (selection->regions.empty()) { @@ -4486,8 +4489,14 @@ Editor::set_loop_from_region (bool play) return; } - nframes64_t start = selection->regions.front()->region()->first_frame(); - nframes64_t end = selection->regions.front()->region()->last_frame() + 1; + for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) { + if ((*i)->region()->position() < start) { + start = (*i)->region()->position(); + } + if ((*i)->region()->last_frame() + 1 > end) { + end = (*i)->region()->last_frame() + 1; + } + } set_loop_range (start, end, _("set loop range from region")); diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 61a128e618..c2dfa44dfb 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -1096,10 +1096,36 @@ Editor::get_edit_op_range (nframes64_t& start, nframes64_t& end) const break; case EditAtMouse: + /* use mouse + selected marker */ + if (selection->markers.empty()) { + start = m; + end = session->audible_frame(); + } else { + start = selection->markers.front()->position(); + end = m; + } + break; + case EditAtSelectedMarker: /* use mouse + selected marker */ if (selection->markers.empty()) { - return false; + + MessageDialog win (_("No edit range defined"), + false, + MESSAGE_INFO, + BUTTONS_OK); + + win.set_secondary_text ( + _("the edit point is Selected Marker\nbut there is no selected marker.")); + + + win.set_default_response (RESPONSE_CLOSE); + win.set_position (Gtk::WIN_POS_MOUSE); + win.show_all(); + + win.run (); + + return false; // NO RANGE } start = selection->markers.front()->position(); end = m; @@ -1117,3 +1143,9 @@ Editor::get_edit_op_range (nframes64_t& start, nframes64_t& end) const return true; } + +void +Editor::deselect_all () +{ + selection->clear (); +} diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc index ed460a5864..686c8e521c 100644 --- a/gtk2_ardour/utils.cc +++ b/gtk2_ardour/utils.cc @@ -487,7 +487,7 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) return true; } } - + if (!special_handling_of_unmodified_accelerators || ev->state & (Gdk::MOD1_MASK| Gdk::MOD3_MASK| @@ -495,7 +495,7 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) Gdk::MOD5_MASK| Gdk::CONTROL_MASK)) { - /* no special handling or modifiers in effect: accelerate first */ + /* no special handling or there are modifiers in effect: accelerate first */ #ifdef DEBUG_ACCELERATOR_HANDLING if (debug) { @@ -508,12 +508,17 @@ key_press_focus_accelerator_handler (Gtk::Window& window, GdkEventKey* ev) } #endif if (!gtk_window_activate_key (win, ev)) { +#ifdef DEBUG_ACCELERATOR_HANDLING + if (debug) { + cerr << "\tnot accelerated, now propagate\n"; + } +#endif return gtk_window_propagate_key_event (win, ev); } else { #ifdef DEBUG_ACCELERATOR_HANDLING - if (debug) { - cerr << "\tnot handled\n"; - } + if (debug) { + cerr << "\taccelerated - done.\n"; + } #endif return true; }