summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2005-12-12 20:54:55 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2005-12-12 20:54:55 +0000
commit3733c995c5269756ca5941a9db50c6a965787508 (patch)
treee2152d49f8bd6daadf616d7b68aed2c8350d105a /gtk2_ardour
parent088a5289dc41b9066e9f518b94af546f80601d56 (diff)
editor window layout changes, and lots more
git-svn-id: svn://localhost/trunk/ardour2@187 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour.bindings8
-rw-r--r--gtk2_ardour/ardour2_ui.rc9
-rw-r--r--gtk2_ardour/ardour_ui2.cc3
-rw-r--r--gtk2_ardour/audio_clock.cc68
-rw-r--r--gtk2_ardour/audio_clock.h12
-rw-r--r--gtk2_ardour/audio_time_axis.cc44
-rw-r--r--gtk2_ardour/audio_time_axis.h5
-rw-r--r--gtk2_ardour/editor.cc201
-rw-r--r--gtk2_ardour/editor.h59
-rw-r--r--gtk2_ardour/editor_actions.cc4
-rw-r--r--gtk2_ardour/editor_canvas.cc31
-rw-r--r--gtk2_ardour/editor_export_audio.cc27
-rw-r--r--gtk2_ardour/editor_hscroller.cc238
-rw-r--r--gtk2_ardour/editor_imageframe.cc6
-rw-r--r--gtk2_ardour/editor_keyboard.cc4
-rw-r--r--gtk2_ardour/editor_markers.cc33
-rw-r--r--gtk2_ardour/editor_mouse.cc42
-rw-r--r--gtk2_ardour/editor_ops.cc26
-rw-r--r--gtk2_ardour/editor_route_list.cc7
-rw-r--r--gtk2_ardour/editor_rulers.cc2
-rw-r--r--gtk2_ardour/imageframe_time_axis.cc14
-rw-r--r--gtk2_ardour/marker.cc1
-rw-r--r--gtk2_ardour/marker_time_axis.cc22
-rw-r--r--gtk2_ardour/mixer_ui.cc5
-rw-r--r--gtk2_ardour/time_axis_view.cc86
-rw-r--r--gtk2_ardour/time_axis_view.h24
26 files changed, 389 insertions, 592 deletions
diff --git a/gtk2_ardour/ardour.bindings b/gtk2_ardour/ardour.bindings
index c559cc9eb2..fdbc336783 100644
--- a/gtk2_ardour/ardour.bindings
+++ b/gtk2_ardour/ardour.bindings
@@ -2,10 +2,16 @@
(gtk_accel_path "<Actions>/Common/Quit" "<Control>q")
(gtk_accel_path "<Actions>/Common/Save" "<Control>s")
-(gtk_accel_path "<Actions>/Editor/toggle-playback" "space")
(gtk_accel_path "<Actions>/Common/TransportForward" "Right")
(gtk_accel_path "<Actions>/Common/TransportRewind" "Left")
(gtk_accel_path "<Actions>/Common/TransportRecord" "R")
(gtk_accel_path "<Actions>/Common/TransportGotoStart" "<Control>a")
(gtk_accel_path "<Actions>/Common/TransportGotoEnd" "<Control>e")
+(gtk_accel_path "<Actions>/Editor/toggle-playback" "space")
+(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
+(gtk_accel_path "<Actions>/Editor/set-edit-cursor" "e")
+(gtk_accel_path "<Actions>/Editor/undo" "<Control>z")
+(gtk_accel_path "<Actions>/Editor/redo" "<Control>r")
+
+
diff --git a/gtk2_ardour/ardour2_ui.rc b/gtk2_ardour/ardour2_ui.rc
index 691d05685f..bfa1acaff7 100644
--- a/gtk2_ardour/ardour2_ui.rc
+++ b/gtk2_ardour/ardour2_ui.rc
@@ -511,6 +511,13 @@ style "track_name_display"
bg[ACTIVE] = { 0.26, 0.26, 0.26 }
}
+style "active_track_name_display"
+{
+ font_name = "sans medium 10"
+ text[NORMAL] = { 0.26, 0.26, 0.26 }
+ base[NORMAL] = { 0.89, 0.89, 0.89 }
+}
+
style "track_separator"
{
bg[NORMAL] = { 0.40, 0.40, 0.40 }
@@ -993,6 +1000,8 @@ widget "*TrackEditIndicator6*" style "edit_group_3"
widget "*TrackEditIndicator7*" style "edit_group_3"
widget "*EditorTrackNameDisplay" style "track_name_display"
widget "*EditorTrackNameDisplay*" style "track_name_display"
+widget "*EditorActiveTrackNameDisplay" style "active_track_name_display"
+widget "*EditorActiveTrackNameDisplay*" style "active_track_name_display"
widget "*EditorRegionList" style "region_list_display"
widget "*CrossfadeEditAuditionButton" style "red_when_active"
widget "*CrossfadeEditAuditionButton*" style "red_when_active"
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index c3063b6ed5..903cc0276c 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -358,10 +358,7 @@ ARDOUR_UI::setup_transport ()
ARDOUR_UI::Clock.connect (bind (mem_fun (secondary_clock, &AudioClock::set), false));
primary_clock.set_mode (AudioClock::SMPTE);
- primary_clock.set_name ("TransportClockDisplay");
secondary_clock.set_mode (AudioClock::BBT);
- secondary_clock.set_name ("TransportClockDisplay");
-
primary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::primary_clock_value_changed));
secondary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::secondary_clock_value_changed));
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 83d8f6644c..550b7c311f 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -296,23 +296,39 @@ AudioClock::setup_events ()
ms_hours_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Hours));
ms_minutes_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Minutes));
ms_seconds_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Seconds));
-
- Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2);
-
- Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2);
- Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2);
-
- Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
}
void
AudioClock::on_realize ()
{
HBox::on_realize ();
+
+ /* styles are not available until the widgets are bound to a window */
+
+ switch (_mode) {
+ case SMPTE:
+ Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2);
+ break;
+
+ case BBT:
+ Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2);
+ break;
+
+ case MinSec:
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2);
+ break;
+
+ case Frames:
+ Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
+
+ }
}
void
@@ -469,7 +485,7 @@ AudioClock::set_session (Session *s)
}
}
-gint
+bool
AudioClock::field_key_release_event (GdkEventKey *ev, Field field)
{
Label *label = 0;
@@ -693,7 +709,7 @@ AudioClock::field_key_release_event (GdkEventKey *ev, Field field)
return TRUE;
}
-gint
+bool
AudioClock::field_focus_in_event (GdkEventFocus *ev, Field field)
{
key_entry_state = 0;
@@ -750,7 +766,7 @@ AudioClock::field_focus_in_event (GdkEventFocus *ev, Field field)
return FALSE;
}
-gint
+bool
AudioClock::field_focus_out_event (GdkEventFocus *ev, Field field)
{
switch (field) {
@@ -807,7 +823,7 @@ AudioClock::field_focus_out_event (GdkEventFocus *ev, Field field)
return FALSE;
}
-gint
+bool
AudioClock::field_button_release_event (GdkEventButton *ev, Field field)
{
@@ -887,7 +903,7 @@ AudioClock::field_button_release_event (GdkEventButton *ev, Field field)
return TRUE;
}
-gint
+bool
AudioClock::field_button_press_event (GdkEventButton *ev, Field field)
{
if (session == 0) return FALSE;
@@ -964,7 +980,7 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field field)
return TRUE;
}
-gint
+bool
AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field)
{
if (session == 0 || !dragging) {
@@ -1675,20 +1691,36 @@ AudioClock::set_mode (Mode m)
switch (_mode) {
case SMPTE:
clock_base.add (smpte_packer_hbox);
+ Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2);
break;
+
case BBT:
clock_base.add (bbt_packer_hbox);
+ Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2);
break;
+
case MinSec:
clock_base.add (minsec_packer_hbox);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2);
+ Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2);
break;
+
case Frames:
clock_base.add (frames_packer_hbox);
+ Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2);
+
case Off:
break;
}
-
+
set (last_when, true);
clock_base.show_all ();
key_entry_state = 0;
}
+
diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h
index 0f25eb884b..dd06f7cf44 100644
--- a/gtk2_ardour/audio_clock.h
+++ b/gtk2_ardour/audio_clock.h
@@ -150,12 +150,12 @@ class AudioClock : public Gtk::HBox
void on_realize ();
- gint field_motion_notify_event (GdkEventMotion *ev, Field);
- gint field_button_press_event (GdkEventButton *ev, Field);
- gint field_button_release_event (GdkEventButton *ev, Field);
- gint field_key_release_event (GdkEventKey *, Field);
- gint field_focus_in_event (GdkEventFocus *, Field);
- gint field_focus_out_event (GdkEventFocus *, Field);
+ bool field_motion_notify_event (GdkEventMotion *ev, Field);
+ bool field_button_press_event (GdkEventButton *ev, Field);
+ bool field_button_release_event (GdkEventButton *ev, Field);
+ bool field_key_release_event (GdkEventKey *, Field);
+ bool field_focus_in_event (GdkEventFocus *, Field);
+ bool field_focus_out_event (GdkEventFocus *, Field);
void set_smpte (jack_nframes_t, bool);
void set_bbt (jack_nframes_t, bool);
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index 1f7f813a47..0b0da6fe04 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -168,11 +168,6 @@ AudioTimeAxisView::AudioTimeAxisView (PublicEditor& ed, Session& sess, Route& rt
visual_button.signal_clicked().connect (mem_fun(*this, &AudioTimeAxisView::visual_click));
hide_button.signal_clicked().connect (mem_fun(*this, &AudioTimeAxisView::hide_click));
- name_entry.signal_activate().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_activated));
- name_entry.signal_button_press_event().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_button_press_handler));
- name_entry.signal_button_release_event().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_button_release_handler));
- name_entry.signal_key_release_event().connect (mem_fun(*this, &AudioTimeAxisView::name_entry_key_release_handler));
-
if (is_audio_track()) {
controls_table.attach (*rec_enable_button, 6, 7, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 0, 0);
}
@@ -1090,45 +1085,6 @@ AudioTimeAxisView::playlist () const
}
}
-gint
-AudioTimeAxisView::name_entry_button_press_handler (GdkEventButton *ev)
-{
- if (ev->button == 3) {
- return stop_signal (name_entry, "button_press_event");
- }
- return FALSE;
-}
-
-gint
-AudioTimeAxisView::name_entry_button_release_handler (GdkEventButton *ev)
-{
- return FALSE;
-}
-
-gint
-AudioTimeAxisView::name_entry_key_release_handler (GdkEventKey* ev)
-{
- switch (ev->keyval) {
- case GDK_Tab:
- case GDK_Up:
- case GDK_Down:
- name_entry_changed ();
- return TRUE;
-
- default:
- return FALSE;
- }
-}
-
-void
-AudioTimeAxisView::name_entry_activated ()
-{
- /* this should drop focus from the entry,
- and cause a call to name_entry_changed()
- */
- controls_ebox.grab_focus();
-}
-
void
AudioTimeAxisView::name_entry_changed ()
{
diff --git a/gtk2_ardour/audio_time_axis.h b/gtk2_ardour/audio_time_axis.h
index 6f4405b5a7..cec7d3c089 100644
--- a/gtk2_ardour/audio_time_axis.h
+++ b/gtk2_ardour/audio_time_axis.h
@@ -178,11 +178,8 @@ class AudioTimeAxisView : public RouteUI, public TimeAxisView
void take_name_changed (void *);
void route_name_changed (void *);
- void name_entry_activated ();
void name_entry_changed ();
- gint name_entry_key_release_handler (GdkEventKey*);
- gint name_entry_button_release_handler (GdkEventButton*);
- gint name_entry_button_press_handler (GdkEventButton*);
+
void on_area_realize ();
virtual void label_view ();
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 3e8402bbca..3245843304 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -147,6 +147,66 @@ Gdk::Cursor* Editor::speaker_cursor = 0;
Gdk::Cursor* Editor::wait_cursor = 0;
Gdk::Cursor* Editor::timebar_cursor = 0;
+bool
+Editor::on_key_press_event (GdkEventKey* ev)
+{
+ GtkWindow* win = gobj();
+
+ /* This exists to allow us to override the way GTK handles
+ key events. The normal sequence is:
+
+ a) event is delivered to a GtkWindow
+ b) accelerators/mnemonics are activated
+ c) if (b) didn't handle the event, propagate to
+ the focus widget and/or focus chain
+
+ The problem with this is that if the accelerators include
+ keys without modifiers, such as the space bar or the
+ letter "e", then pressing the key while typing into
+ a text entry widget results in the accelerator being
+ activated, instead of the desired letter appearing
+ in the text entry.
+
+ There is no good way of fixing this, but this
+ represents a compromise. The idea is that
+ key events involving modifiers (not Shift)
+ get routed into the activation pathway first, then
+ get propagated to the focus widget if necessary.
+
+ If the key event doesn't involve modifiers,
+ we deliver to the focus widget first, thus allowing
+ it to get "normal text" without interference
+ from acceleration.
+
+ Of course, this can also be problematic: if there
+ is a widget with focus, then it will swallow
+ all "normal text" accelerators.
+ */
+
+ if (ev->state & ~Gdk::SHIFT_MASK) {
+ /* modifiers in effect, accelerate first */
+ if (!gtk_window_activate_key (win, ev)) {
+ return gtk_window_propagate_key_event (win, ev);
+ } else {
+ return true;
+ }
+ }
+
+ /* no modifiers, propagate first */
+
+ if (!gtk_window_propagate_key_event (win, ev)) {
+ return gtk_window_activate_key (win, ev);
+ }
+
+ return true;
+}
+
+void
+show_me_the_size (Requisition* r, const char* what)
+{
+ cerr << "size of " << what << " = " << r->width << " x " << r->height << endl;
+}
+
Editor::Editor (AudioEngine& eng)
: engine (eng),
@@ -163,8 +223,13 @@ Editor::Editor (AudioEngine& eng)
transport_mark_label (_("Loop/Punch Ranges")),
edit_packer (3, 3, false),
- edit_hscroll_left_arrow (Gtk::ARROW_LEFT, Gtk::SHADOW_OUT),
- edit_hscroll_right_arrow (Gtk::ARROW_RIGHT, Gtk::SHADOW_OUT),
+
+ /* the values here don't matter: layout widgets
+ reset them as needed.
+ */
+
+ vertical_adjustment (0.0, 0.0, 400.0, 10),
+ horizontal_adjustment (0.0, 0.0, 1200.0, 20),
/* tool bar related */
@@ -262,6 +327,7 @@ Editor::Editor (AudioEngine& eng)
_xfade_visibility = true;
editor_ruler_menu = 0;
no_ruler_shown_update = false;
+ edit_hscroll_dragging = false;
edit_group_list_menu = 0;
route_list_menu = 0;
region_list_menu = 0;
@@ -277,7 +343,6 @@ Editor::Editor (AudioEngine& eng)
region_edit_menu_split_item = 0;
temp_location = 0;
region_edit_menu_split_multichannel_item = 0;
- edit_hscroll_dragging = false;
leftmost_frame = 0;
ignore_mouse_mode_toggle = false;
current_stepping_trackview = 0;
@@ -309,45 +374,30 @@ Editor::Editor (AudioEngine& eng)
initialize_rulers ();
initialize_canvas ();
- track_canvas_scroller.add (track_canvas);
- track_canvas_scroller.set_policy (POLICY_NEVER, POLICY_NEVER);
- track_canvas_scroller.set_name ("TrackCanvasScroller");
-
- track_canvas_scroller.get_vadjustment()->signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling));
- track_canvas_scroller.get_vadjustment()->set_step_increment (10.0);
-
- track_canvas_scroller.get_hadjustment()->set_lower (0.0);
- track_canvas_scroller.get_hadjustment()->set_upper (1200.0);
- track_canvas_scroller.get_hadjustment()->set_step_increment (20.0);
- track_canvas_scroller.get_hadjustment()->signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled));
-
- edit_vscrollbar.set_adjustment(*track_canvas_scroller.get_vadjustment());
- edit_hscrollbar.set_adjustment(*track_canvas_scroller.get_hadjustment());
-
- edit_hscrollbar.signal_button_press_event().connect (mem_fun(*this, &Editor::hscroll_slider_button_press));
- edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscroll_slider_button_release));
- edit_hscrollbar.signal_size_allocate().connect (mem_fun(*this, &Editor::hscroll_slider_allocate));
+ edit_controls_vbox.set_spacing (track_spacing);
+ horizontal_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::canvas_horizontally_scrolled));
+ vertical_adjustment.signal_value_changed().connect (mem_fun(*this, &Editor::tie_vertical_scrolling));
- time_canvas_scroller.add (time_canvas);
- time_canvas_scroller.set_policy (POLICY_NEVER, POLICY_NEVER);
- time_canvas_scroller.set_hadjustment (*track_canvas_scroller.get_hadjustment());
- time_canvas_scroller.set_name ("TimeCanvasScroller");
+ track_canvas.set_hadjustment (horizontal_adjustment);
+ track_canvas.set_vadjustment (vertical_adjustment);
+ time_canvas.set_hadjustment (horizontal_adjustment);
- track_canvas_scroller.signal_map_event().connect (mem_fun (*this, &Editor::track_canvas_map_handler));
- time_canvas_scroller.signal_map_event().connect (mem_fun (*this, &Editor::time_canvas_map_handler));
+ track_canvas.signal_map_event().connect (mem_fun (*this, &Editor::track_canvas_map_handler));
+ time_canvas.signal_map_event().connect (mem_fun (*this, &Editor::time_canvas_map_handler));
- edit_controls_vbox.set_spacing (track_spacing);
- edit_controls_hbox.pack_start (edit_controls_vbox, true, true);
- edit_controls_scroller.add (edit_controls_hbox);
- edit_controls_scroller.set_name ("EditControlsBase");
- edit_controls_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_NEVER);
+ // edit_controls_hbox.pack_start (edit_controls_vbox, true, true);
+ controls_layout.add (edit_controls_vbox);
+ controls_layout.set_name ("EditControlsBase");
+
+ controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
+ controls_layout.signal_button_release_event().connect (mem_fun(*this, &Editor::edit_controls_button_release));
- Viewport* viewport = static_cast<Viewport*> (edit_controls_scroller.get_child());
+ edit_vscrollbar.set_adjustment (vertical_adjustment);
+ edit_hscrollbar.set_adjustment (horizontal_adjustment);
- viewport->set_shadow_type (Gtk::SHADOW_NONE);
- viewport->set_name ("EditControlsBase");
- viewport->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
- viewport->signal_button_release_event().connect (mem_fun(*this, &Editor::edit_controls_button_release));
+ edit_hscrollbar.signal_button_press_event().connect (mem_fun(*this, &Editor::hscrollbar_button_press));
+ edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscrollbar_button_release));
+ edit_hscrollbar.signal_size_allocate().connect (mem_fun(*this, &Editor::hscrollbar_allocate));
build_cursors ();
setup_toolbar ();
@@ -358,7 +408,7 @@ Editor::Editor (AudioEngine& eng)
time_canvas_vbox.pack_start (*smpte_ruler, false, false);
time_canvas_vbox.pack_start (*frames_ruler, false, false);
time_canvas_vbox.pack_start (*bbt_ruler, false, false);
- time_canvas_vbox.pack_start (time_canvas_scroller, true, true);
+ time_canvas_vbox.pack_start (time_canvas, true, true);
time_canvas_vbox.set_size_request (-1, (int)(timebar_height * visible_timebars));
bbt_label.set_name ("EditorTimeButton");
@@ -416,25 +466,24 @@ Editor::Editor (AudioEngine& eng)
for the canvas areas.
*/
- track_canvas_event_box.add (track_canvas_scroller);
+ track_canvas_event_box.add (track_canvas);
time_canvas_event_box.add (time_canvas_vbox);
time_canvas_event_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
-
edit_packer.set_col_spacings (0);
edit_packer.set_row_spacings (0);
edit_packer.set_homogeneous (false);
edit_packer.set_name ("EditorWindow");
- edit_packer.attach (edit_hscrollbar, 1, 2, 0, 1, FILL|EXPAND, FILL, 0, 0);
+ edit_packer.attach (edit_hscrollbar, 1, 2, 0, 1, FILL|EXPAND, FILL, 0, 0);
- edit_packer.attach (time_button_event_box, 0, 1, 1, 2, FILL, FILL, 0, 0);
- edit_packer.attach (time_canvas_event_box, 1, 2, 1, 2, FILL|EXPAND, FILL, 0, 0);
+ edit_packer.attach (time_button_event_box, 0, 1, 1, 2, FILL, FILL, 0, 0);
+ edit_packer.attach (time_canvas_event_box, 1, 2, 1, 2, FILL|EXPAND, FILL, 0, 0);
- edit_packer.attach (edit_controls_scroller, 0, 1, 2, 3, FILL,FILL, 0, 0);
- edit_packer.attach (track_canvas_event_box, 1, 2, 2, 3, FILL|EXPAND, FILL|EXPAND, 0, 0);
- edit_packer.attach (edit_vscrollbar, 2, 3, 2, 3, FILL, FILL|EXPAND, 0, 0);
+ edit_packer.attach (controls_layout, 0, 1, 2, 3, FILL, FILL, 0, 0);
+ edit_packer.attach (track_canvas_event_box, 1, 2, 2, 3, FILL|EXPAND, FILL|EXPAND, 0, 0);
+ edit_packer.attach (edit_vscrollbar, 2, 3, 2, 3, FILL, FILL|EXPAND, 0, 0);
edit_frame.set_name ("BaseFrame");
edit_frame.set_shadow_type (SHADOW_IN);
@@ -761,9 +810,9 @@ Editor::show_window ()
void
Editor::tie_vertical_scrolling ()
{
- edit_controls_scroller.get_vadjustment()->set_value (track_canvas_scroller.get_vadjustment()->get_value());
+ double y1 = vertical_adjustment.get_value();
+ controls_layout.get_vadjustment()->set_value (y1);
- float y1 = track_canvas_scroller.get_vadjustment()->get_value();
playhead_cursor->set_y_axis(y1);
edit_cursor->set_y_axis(y1);
}
@@ -804,12 +853,11 @@ Editor::set_frames_per_unit (double fpu)
*/
if (session) {
- track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
+ horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit);
}
if (!no_zoom_repos_update) {
- track_canvas_scroller.get_hadjustment()->set_value (leftmost_frame/frames_per_unit);
- update_hscroller ();
+ horizontal_adjustment.set_value (leftmost_frame/frames_per_unit);
update_fixed_rulers ();
tempo_map_changed (Change (0));
}
@@ -849,10 +897,10 @@ Editor::reposition_x_origin (jack_nframes_t frame)
if (frame != leftmost_frame) {
leftmost_frame = frame;
double pixel = frame_to_pixel (frame);
- if (pixel >= track_canvas_scroller.get_hadjustment()->get_upper()) {
- track_canvas_scroller.get_hadjustment()->set_upper (frame_to_pixel (frame + (current_page_frames())));
+ if (pixel >= horizontal_adjustment.get_upper()) {
+ horizontal_adjustment.set_upper (frame_to_pixel (frame + (current_page_frames())));
}
- track_canvas_scroller.get_hadjustment()->set_value (frame/frames_per_unit);
+ horizontal_adjustment.set_value (frame/frames_per_unit);
XOriginChanged (); /* EMIT_SIGNAL */
}
}
@@ -889,14 +937,8 @@ Editor::zoom_adjustment_changed ()
void
Editor::canvas_horizontally_scrolled ()
{
- /* XXX note the potential loss of accuracy here caused by
- adjustments being 32bit floats with only a 24 bit mantissa,
- whereas jack_nframes_t is at least a 32 bit uint32_teger.
- */
-
- leftmost_frame = (jack_nframes_t) floor (track_canvas_scroller.get_hadjustment()->get_value() * frames_per_unit);
+ leftmost_frame = (jack_nframes_t) floor (horizontal_adjustment.get_value() * frames_per_unit);
- update_hscroller ();
update_fixed_rulers ();
if (!edit_hscroll_dragging) {
@@ -1060,11 +1102,9 @@ Editor::handle_new_duration ()
reset_scrolling_region ();
if (session) {
- track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
- track_canvas_scroller.get_hadjustment()->set_value (leftmost_frame/frames_per_unit);
+ horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit);
+ horizontal_adjustment.set_value (leftmost_frame/frames_per_unit);
}
-
- update_hscroller ();
}
void
@@ -1231,10 +1271,9 @@ Editor::connect_to_session (Session *t)
leftmost_frame = 0;
- track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
- track_canvas_scroller.get_hadjustment()->set_value (0);
+ horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit);
+ horizontal_adjustment.set_value (0);
- update_hscroller ();
restore_ruler_visibility ();
tempo_map_changed (Change (0));
@@ -2047,8 +2086,7 @@ Editor::set_state (const XMLNode& node)
}
set_default_size(width, height);
- // GTK2FIX
- // set_position(x, y-yoff);
+ move (x, y-yoff);
if ((prop = node.property ("zoom-focus"))) {
set_zoom_focus ((ZoomFocus) atoi (prop->value()));
@@ -3584,27 +3622,6 @@ Editor::point_selection_changed ()
}
}
-void
-Editor::run_sub_event_loop ()
-{
- sub_event_loop_status = 0;
- Main::run ();
-}
-
-void
-Editor::finish_sub_event_loop (int status)
-{
- Main::quit ();
- sub_event_loop_status = status;
-}
-
-gint
-Editor::finish_sub_event_loop_on_delete (GdkEventAny *ignored, int32_t status)
-{
- finish_sub_event_loop (status);
- return TRUE;
-}
-
gint
Editor::mouse_select_button_release (GdkEventButton* ev)
{
@@ -3816,7 +3833,7 @@ void
Editor::end_location_changed (Location* location)
{
ENSURE_GUI_THREAD (bind (mem_fun(*this, &Editor::end_location_changed), location));
- track_canvas_scroller.get_hadjustment()->set_upper (location->end() / frames_per_unit);
+ horizontal_adjustment.set_upper (location->end() / frames_per_unit);
}
int
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 7ce050fc87..446a861a96 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -638,49 +638,21 @@ class Editor : public PublicEditor
Gtk::Frame edit_frame;
Gtk::VScrollbar edit_vscrollbar;
- /* the horizontal scroller works in a rather different way
- than a regular scrollbar, since its used for
- zoom control/indication as well. But more importantly,
- its different components (slider, left arrow, right arrow)
- have to be packed separately into the edit_packer.
- */
+ Gtk::Adjustment vertical_adjustment;
+ Gtk::Adjustment horizontal_adjustment;
+
+ Gtk::Layout controls_layout;
Gtk::HScrollbar edit_hscrollbar;
- Gtk::DrawingArea edit_hscroll_slider;
- Gtk::Arrow edit_hscroll_left_arrow;
- Gtk::Arrow edit_hscroll_right_arrow;
- Gtk::EventBox edit_hscroll_left_arrow_event;
- Gtk::EventBox edit_hscroll_right_arrow_event;
- gint edit_hscroll_slider_width;
- gint edit_hscroll_slider_height;
- static const gint edit_hscroll_edge_width = 3;
bool edit_hscroll_dragging;
- double edit_hscroll_drag_last;
-
- void hscroll_slider_allocate (Gtk::Allocation &);
- gint hscroll_slider_expose (GdkEventExpose*);
- gint hscroll_slider_button_press (GdkEventButton*);
- gint hscroll_slider_button_release (GdkEventButton*);
- gint hscroll_slider_motion (GdkEventMotion*);
-
- gint hscroll_trough_expose (GdkEventExpose*);
- gint hscroll_trough_button_press (GdkEventButton*);
- gint hscroll_trough_button_release (GdkEventButton*);
-
- void update_hscroller ();
-
- gint hscroll_left_arrow_button_press (GdkEventButton *);
- gint hscroll_left_arrow_button_release (GdkEventButton *);
- gint hscroll_right_arrow_button_press (GdkEventButton *);
- gint hscroll_right_arrow_button_release (GdkEventButton *);
+ bool hscrollbar_button_press (GdkEventButton*);
+ bool hscrollbar_button_release (GdkEventButton*);
+ void hscrollbar_allocate (Gtk::Allocation &alloc);
+
double canvas_width;
double canvas_height;
- Gtk::ScrolledWindow track_canvas_scroller;
- Gtk::ScrolledWindow time_canvas_scroller;
- Gtk::ScrolledWindow edit_controls_scroller;
-
bool track_canvas_map_handler (GdkEventAny*);
bool time_canvas_map_handler (GdkEventAny*);
@@ -1134,9 +1106,6 @@ class Editor : public PublicEditor
/* Canvas event handlers */
- // FIXED FOR GTK2
-
-
bool canvas_control_point_event (GdkEvent* event,ArdourCanvas::Item*, ControlPoint*);
bool canvas_line_event (GdkEvent* event,ArdourCanvas::Item*, AutomationLine*);
bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
@@ -1208,13 +1177,6 @@ class Editor : public PublicEditor
void reset_scrolling_region (Gtk::Allocation* alloc = 0);
void scroll_canvas ();
- /* sub-event loop handling */
-
- int32_t sub_event_loop_status;
- void run_sub_event_loop ();
- void finish_sub_event_loop (int status);
- gint finish_sub_event_loop_on_delete (GdkEventAny*, int32_t status);
-
/* display control */
bool _show_measures;
@@ -1586,10 +1548,9 @@ class Editor : public PublicEditor
ExportDialog *export_dialog;
void export_range (jack_nframes_t start, jack_nframes_t end);
- int write_region_selection(AudioRegionSelection&);
+ int write_region_selection(AudioRegionSelection&);
bool write_region (string path, ARDOUR::AudioRegion&);
void export_region ();
- void write_a_region ();
void bounce_region_selection ();
void bounce_range_selection ();
void external_edit_region ();
@@ -1808,6 +1769,8 @@ class Editor : public PublicEditor
typedef std::map<Editing::ColorID,std::string> ColorStyleMap;
void init_colormap ();
+
+ bool on_key_press_event (GdkEventKey*);
};
#endif /* __ardour_editor_h__ */
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index b81013a941..3c437cd4b0 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -89,8 +89,8 @@ Editor::register_actions ()
ActionManager::register_action (editor_actions, "set-playhead", _("set playhead"), mem_fun(*this, &Editor::kbd_set_playhead_cursor));
ActionManager::register_action (editor_actions, "set-edit-cursor", _("set edit cursor"), mem_fun(*this, &Editor::kbd_set_edit_cursor));
- ActionManager::register_action (editor_actions, "set-undo", _("set undo"), bind (mem_fun(*this, &Editor::undo), 1U));
- ActionManager::register_action (editor_actions, "set-redo", _("set redo"), bind (mem_fun(*this, &Editor::redo), 1U));
+ ActionManager::register_action (editor_actions, "undo", _("undo"), bind (mem_fun(*this, &Editor::undo), 1U));
+ ActionManager::register_action (editor_actions, "redo", _("redo"), bind (mem_fun(*this, &Editor::redo), 1U));
ActionManager::register_action (editor_actions, "export-session", _("export session"), mem_fun(*this, &Editor::export_session));
ActionManager::register_action (editor_actions, "export-range", _("export range"), mem_fun(*this, &Editor::export_selection));
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 1e02d34ce9..993ad24006 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -304,10 +304,7 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
edit_cursor->set_position (edit_cursor->current_frame);
playhead_cursor->set_position (playhead_cursor->current_frame);
- double last_canvas_unit = ceil ((double) max_frames / frames_per_unit);
-
- track_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height);
- time_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height);
+ reset_scrolling_region ();
if (edit_cursor) edit_cursor->set_length (canvas_height);
if (playhead_cursor) playhead_cursor->set_length (canvas_height);
@@ -357,19 +354,41 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
void
Editor::reset_scrolling_region (Gtk::Allocation* alloc)
{
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
+ double pos;
+
+ for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
+ TimeAxisView *tv = (*i)[route_display_columns.tv];
+ pos += tv->effective_height;
+ }
+
+ RefPtr<Gdk::Screen> screen = get_screen();
+
+ if (!screen) {
+ screen = Gdk::Screen::get_default();
+ }
+
+ edit_controls_hbox.set_size_request (-1, min ((gint) pos, (screen->get_height() - 400)));
+ edit_controls_vbox.set_size_request (-1, min ((gint) pos, (screen->get_height() - 400)));
+ double last_canvas_unit = ceil ((double) max_frames / frames_per_unit);
+ track_canvas.set_scroll_region (0.0, 0.0, max (last_canvas_unit, canvas_width), pos);
+
+ // XXX what is the correct height value for the time canvas ? this overstates it
+ time_canvas.set_scroll_region ( 0.0, 0.0, max (last_canvas_unit, canvas_width), canvas_height);
}
bool
Editor::track_canvas_map_handler (GdkEventAny* ev)
{
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
return false;
}
bool
Editor::time_canvas_map_handler (GdkEventAny* ev)
{
- time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
+ time_canvas.get_window()->set_cursor (*timebar_cursor);
return false;
}
diff --git a/gtk2_ardour/editor_export_audio.cc b/gtk2_ardour/editor_export_audio.cc
index a68a94a4e8..8b498f0000 100644
--- a/gtk2_ardour/editor_export_audio.cc
+++ b/gtk2_ardour/editor_export_audio.cc
@@ -94,33 +94,6 @@ Editor::export_region ()
dialog->start_export();
}
-void
-Editor::write_a_region ()
-{
- if (clicked_regionview == 0) {
- return;
- }
-
- FileSelection file_selector;
-
- file_selector.get_selection_entry()->signal_activate().connect (sigc::bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1));
- file_selector.get_cancel_button()->signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), -1));
- file_selector.get_ok_button()->signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1));
- file_selector.signal_delete_event().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop_on_delete), -1));
-
- file_selector.show_all();
-
- run_sub_event_loop ();
-
- if (sub_event_loop_status == 1) {
- string path = file_selector.get_filename();
- printf ("got region: %s\n", path.c_str());
- if (path.length()) {
- write_region (path, clicked_regionview->region);
- }
- }
-}
-
int
Editor::write_region_selection (AudioRegionSelection& regions)
{
diff --git a/gtk2_ardour/editor_hscroller.cc b/gtk2_ardour/editor_hscroller.cc
index d918983f94..049f19b85f 100644
--- a/gtk2_ardour/editor_hscroller.cc
+++ b/gtk2_ardour/editor_hscroller.cc
@@ -26,244 +26,32 @@ using namespace std;
using namespace ARDOUR;
void
-Editor::hscroll_slider_allocate (Gtk::Allocation &alloc)
+Editor::hscrollbar_allocate (Gtk::Allocation &alloc)
{
- //edit_hscroll_slider_width = alloc->width;
- //edit_hscroll_slider_height = alloc->height ;
-
- if (session) {
- track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
- }
-
-}
-
-gint
-Editor::hscroll_slider_expose (GdkEventExpose *ev)
-{
- GdkRectangle draw_rect;
- GdkRectangle bar_rect;
- gint bar_max = edit_hscroll_slider_width - 2;
-
- bar_rect.y = 1;
- bar_rect.height = edit_hscroll_slider_height - 2;
-
if (session) {
- bar_rect.width = (gint) floor (bar_max * ((canvas_width * frames_per_unit) / session->current_end_frame()));
-
- if (bar_rect.width > bar_max) {
- bar_rect.x = 1;
- bar_rect.width = bar_max;
- } else {
- bar_rect.x = 1 + (gint) floor (bar_max * ((double) leftmost_frame / session->current_end_frame()));
- }
-
- } else {
- bar_rect.x = 1;
- bar_rect.width = bar_max;
+ horizontal_adjustment.set_upper (session->current_end_frame() / frames_per_unit);
}
- /* make sure we can see the bar at all times, and have enough to do zoom-trim on */
-
- bar_rect.width = max ((guint16) (edit_hscroll_edge_width+5), (guint16) bar_rect.width);
-
- gdk_rectangle_intersect (&ev->area, &bar_rect, &draw_rect);
-
- gtk_paint_box (edit_hscroll_slider.get_style()->gobj(),
- edit_hscroll_slider.get_window()->gobj(),
- GTK_STATE_ACTIVE,
- GTK_SHADOW_IN,
- &ev->area,
- GTK_WIDGET(edit_hscroll_slider.gobj()),
- "trough",
- 0, 0, -1, -1);
-
- gtk_paint_box (edit_hscroll_slider.get_style()->gobj(),
- edit_hscroll_slider.get_window()->gobj(),
- GTK_STATE_NORMAL,
- GTK_SHADOW_OUT,
- &draw_rect,
- GTK_WIDGET(edit_hscroll_slider.gobj()),
- "hscale",
- bar_rect.x, bar_rect.y, bar_rect.width, bar_rect.height);
-
-
- return TRUE;
}
-gint
-Editor::hscroll_slider_button_press (GdkEventButton *ev)
+bool
+Editor::hscrollbar_button_press (GdkEventButton *ev)
{
- if (!session) {
- return TRUE;
- }
-
edit_hscroll_dragging = true;
- //cerr << "PRESS" << endl;
-
- return TRUE;
-
- gint start;
- gint width;
- gint end;
- gint x;
-
- start = (gint) floor (edit_hscroll_slider_width * ((double) leftmost_frame / session->current_end_frame()));
- width = (gint) floor (edit_hscroll_slider_width * ((canvas_width * frames_per_unit) / session->current_end_frame()));
-
- end = start + width - 1;
- x = (gint) max (0.0, ev->x);
-
- if (x >= start && x <= end) {
-
- edit_hscroll_drag_last = x;
- edit_hscroll_dragging = true;
- edit_hscroll_slider.add_modal_grab();
- }
-
- return TRUE;
-}
-
-gint
-Editor::hscroll_slider_button_release (GdkEventButton *ev)
-{
- if (!session) {
- return TRUE;
- }
-
- gint start;
- gint width;
- gint end;
- gint x;
- gint bar_max = edit_hscroll_slider_width - 2;
- jack_nframes_t new_leftmost = 0;
-
- //cerr << "RELESAE" << endl;
-
- if (edit_hscroll_dragging) {
- // lets do a tempo redisplay now only, because it is dog slow
- tempo_map_changed (Change (0));
- edit_hscroll_dragging = false;
- }
-
- return TRUE;
-
- start = (gint) floor (bar_max * ((double) leftmost_frame / session->current_end_frame()));
- width = (gint) floor (bar_max * ((canvas_width * frames_per_unit) / session->current_end_frame()));
-
- end = start + width - 1;
- x = (gint) max (0.0, ev->x);
-
- if (!edit_hscroll_dragging) {
-
- new_leftmost = (jack_nframes_t) floor (((double) x/bar_max) * session->current_end_frame());
- reposition_x_origin (new_leftmost);
- }
-
- if (edit_hscroll_dragging) {
- // lets do a tempo redisplay now only, because it is dog slow
- tempo_map_changed (Change (0));
- edit_hscroll_dragging = false;
- edit_hscroll_slider.remove_modal_grab();
- }
-
- return TRUE;
+ return true;
}
-gint
-Editor::hscroll_slider_motion (GdkEventMotion *ev)
+bool
+Editor::hscrollbar_button_release (GdkEventButton *ev)
{
- gint x, y;
- Gdk::ModifierType state;
- gint bar_max = edit_hscroll_slider_width - 2;
-
- if (!session || !edit_hscroll_dragging) {
- return TRUE;
- }
-
- edit_hscroll_slider.get_window()->get_pointer (x, y, state);
-
- jack_nframes_t new_frame;
- jack_nframes_t frames;
- double distance;
- double fract;
-
- distance = x - edit_hscroll_drag_last;
- fract = fabs (distance) / bar_max;
- frames = (jack_nframes_t) floor (session->current_end_frame() * fract);
-
- if (distance < 0) {
- if (leftmost_frame < frames) {
- new_frame = 0;
- } else {
- new_frame = leftmost_frame - frames;
- }
- } else {
- if (leftmost_frame > max_frames - frames) {
- new_frame = max_frames;
- } else {
- new_frame = leftmost_frame + frames;
+ if (session) {
+ if (edit_hscroll_dragging) {
+ // lets do a tempo redisplay only on button release, because it is dog slow
+ tempo_map_changed (Change (0));
+ edit_hscroll_dragging = false;
}
}
- if (new_frame != leftmost_frame) {
- reposition_x_origin (new_frame);
- }
-
- edit_hscroll_drag_last = x;
-
- return TRUE;
-}
-
-void
-Editor::update_hscroller ()
-{
- //edit_hscroll_slider.queue_draw ();
-// if (session) {
-// track_canvas_scroller.get_hadjustment()->set_upper (session->current_end_frame() / frames_per_unit);
-// track_canvas_scroller.get_hadjustment()->set_value (leftmost_frame/frames_per_unit);
-// }
-}
-
-gint
-Editor::hscroll_left_arrow_button_press (GdkEventButton *ev)
-{
- if (!session) {
- return FALSE;
- }
-
- start_canvas_autoscroll (-1);
- return TRUE;
-}
-
-gint
-Editor::hscroll_right_arrow_button_press (GdkEventButton *ev)
-{
- if (!session) {
- return FALSE;
- }
-
- start_canvas_autoscroll (1);
- return TRUE;
+ return true;
}
-gint
-Editor::hscroll_left_arrow_button_release (GdkEventButton *ev)
-{
- if (!session) {
- return FALSE;
- }
-
- stop_canvas_autoscroll ();
- return TRUE;
-}
-
-gint
-Editor::hscroll_right_arrow_button_release (GdkEventButton *ev)
-{
- if (!session) {
- return FALSE;
- }
-
- stop_canvas_autoscroll ();
- return TRUE;
-}
diff --git a/gtk2_ardour/editor_imageframe.cc b/gtk2_ardour/editor_imageframe.cc
index 391a9972f0..4df43c1d7a 100644
--- a/gtk2_ardour/editor_imageframe.cc
+++ b/gtk2_ardour/editor_imageframe.cc
@@ -94,8 +94,10 @@ Editor::connect_to_image_compositor()
void
Editor::scroll_timeaxis_to_imageframe_item(const TimeAxisViewItem* item)
{
- jack_nframes_t offset = static_cast<jack_nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
-
+ // GTK2FIX
+ //jack_nframes_t offset = static_cast<jack_nframes_t>(frames_per_unit * (edit_hscroll_slider_width/2)) ;
+ jack_nframes_t offset = 0;
+
jack_nframes_t x_pos = 0 ;
if(item->get_position() < offset)
{
diff --git a/gtk2_ardour/editor_keyboard.cc b/gtk2_ardour/editor_keyboard.cc
index 0ba4432391..20dbea52ca 100644
--- a/gtk2_ardour/editor_keyboard.cc
+++ b/gtk2_ardour/editor_keyboard.cc
@@ -34,10 +34,14 @@ Editor::kbd_driver (sigc::slot<void,GdkEvent*> theslot, bool use_track_canvas, b
Glib::RefPtr<Gdk::Window> evw = track_canvas.get_window()->get_pointer (x, y, mask);
bool doit = false;
+ cerr << "editor keyboard driver\n";
+
if (use_track_canvas && track_canvas_event_box.get_window()->get_pointer(x, y, mask) != 0) {
+ cerr << "in track canvas\n";
doit = true;
} else if (use_time_canvas && time_canvas_event_box.get_window()->get_pointer(x, y, mask)!= 0) {
+ cerr << "in time canvas\n";
doit = true;
}
diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc
index 47982ff728..466aa09acd 100644
--- a/gtk2_ardour/editor_markers.cc
+++ b/gtk2_ardour/editor_markers.cc
@@ -730,8 +730,6 @@ Editor::marker_menu_rename ()
Dialog dialog;
Entry entry;
- Button ok_button (_("OK"));
- Button cancel_button (_("Cancel"));
if (loc->is_mark()) {
dialog.set_title (_("ardour: rename mark"));
@@ -744,35 +742,24 @@ Editor::marker_menu_rename ()
dialog.set_position (Gtk::WIN_POS_MOUSE);
dialog.set_modal (true);
- dialog.get_vbox()->set_border_width (10);
- dialog.get_vbox()->pack_start (entry);
- dialog.get_action_area()->pack_start (ok_button);
- dialog.get_action_area()->pack_start (cancel_button);
+ dialog.add_action_widget (entry, RESPONSE_ACCEPT);
+ dialog.add_button (Stock::OK, RESPONSE_ACCEPT);
+ dialog.add_button (Stock::CANCEL, RESPONSE_ACCEPT);
entry.set_text (loc->name());
entry.set_name ("MarkerNameDisplay");
- ok_button.set_name ("EditorGTKButton");
- cancel_button.set_name ("EditorGTKButton");
-
- entry.signal_activate().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1));
- cancel_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), -1));
- ok_button.signal_clicked().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop), 1));
- dialog.signal_delete_event().connect (bind (mem_fun(*this, &Editor::finish_sub_event_loop_on_delete), -1));
dialog.show_all ();
entry.grab_focus ();
- run_sub_event_loop ();
-
- if (sub_event_loop_status == 1) {
-
- Location* l;
- bool is_start;
-
- if ((l = find_location_from_marker (marker, is_start)) != 0) {
- l->set_name (entry.get_text());
- }
+ switch (dialog.run ()) {
+ case RESPONSE_ACCEPT:
+ break;
+ default:
+ return;
}
+
+ loc->set_name (entry.get_text());
}
gint
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index d95d4a3e47..c9c452ed44 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -242,7 +242,7 @@ Editor::set_mouse_mode (MouseMode m, bool force)
ignore_mouse_mode_toggle = false;
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor(*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor(*current_canvas_cursor);
}
}
@@ -1141,7 +1141,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
show_verbose_canvas_cursor ();
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*fader_cursor);
+ track_canvas.get_window()->set_cursor (*fader_cursor);
}
}
break;
@@ -1165,7 +1165,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
show_verbose_canvas_cursor ();
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*fader_cursor);
+ track_canvas.get_window()->set_cursor (*fader_cursor);
}
break;
@@ -1175,7 +1175,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
if (line)
line->property_fill_color_rgba() = color_map[cEnteredGainLine];
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*fader_cursor);
+ track_canvas.get_window()->set_cursor (*fader_cursor);
}
}
break;
@@ -1189,13 +1189,13 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
line->property_fill_color_rgba() = color_map[cEnteredAutomationLine];
}
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*fader_cursor);
+ track_canvas.get_window()->set_cursor (*fader_cursor);
}
break;
case AudioRegionViewNameHighlight:
if (is_drawable() && mouse_mode == MouseObject) {
- track_canvas_scroller.get_window()->set_cursor (*trimmer_cursor);
+ track_canvas.get_window()->set_cursor (*trimmer_cursor);
}
break;
@@ -1209,14 +1209,14 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
/* </CMT Additions> */
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*trimmer_cursor);
+ track_canvas.get_window()->set_cursor (*trimmer_cursor);
}
break;
case EditCursorItem:
case PlayheadCursorItem:
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*grabber_cursor);
+ track_canvas.get_window()->set_cursor (*grabber_cursor);
}
break;
@@ -1226,7 +1226,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
if (!reinterpret_cast<AudioRegionView *> (item->get_data ("regionview"))->name_active()) {
if (mouse_mode == MouseObject && is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*trimmer_cursor);
+ track_canvas.get_window()->set_cursor (*trimmer_cursor);
}
}
break;
@@ -1247,7 +1247,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
break;
}
- track_canvas_scroller.get_window()->set_cursor (*cursor);
+ track_canvas.get_window()->set_cursor (*cursor);
AutomationTimeAxisView* atv;
if ((atv = static_cast<AutomationTimeAxisView*>(item->get_data ("trackview"))) != 0) {
@@ -1263,7 +1263,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case MeterBarItem:
case TempoBarItem:
if (is_drawable()) {
- time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
+ time_canvas.get_window()->set_cursor (*timebar_cursor);
}
break;
@@ -1276,7 +1276,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case MeterMarkerItem:
case TempoMarkerItem:
if (is_drawable()) {
- time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
+ time_canvas.get_window()->set_cursor (*timebar_cursor);
}
break;
case FadeInHandleItem:
@@ -1345,7 +1345,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
}
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
}
hide_verbose_canvas_cursor ();
@@ -1363,7 +1363,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case MarkerViewHandleEndItem:
/* </CMT Additions> */
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
}
break;
@@ -1378,7 +1378,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
line->property_fill_color_rgba() = al->get_line_color();
}
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
}
break;
@@ -1386,7 +1386,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
/* see enter_handler() for notes */
if (!reinterpret_cast<AudioRegionView *> (item->get_data ("regionview"))->name_active()) {
if (is_drawable() && mouse_mode == MouseObject) {
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
}
}
break;
@@ -1397,7 +1397,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case TempoBarItem:
case MarkerBarItem:
if (is_drawable()) {
- time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
+ time_canvas.get_window()->set_cursor (*timebar_cursor);
}
break;
@@ -1412,7 +1412,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case TempoMarkerItem:
if (is_drawable()) {
- time_canvas_scroller.get_window()->set_cursor (*timebar_cursor);
+ time_canvas.get_window()->set_cursor (*timebar_cursor);
}
break;
@@ -1431,7 +1431,7 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case AutomationTrackItem:
if (is_drawable()) {
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
clear_entered_track = true;
Glib::signal_idle().connect (mem_fun(*this, &Editor::left_automation_track));
}
@@ -3651,7 +3651,7 @@ Editor::drag_selection (ArdourCanvas::Item* item, GdkEvent* event)
break;
}
- if (event->button.x >= track_canvas_scroller.get_hadjustment()->get_value() + canvas_width) {
+ if (event->button.x >= horizontal_adjustment.get_value() + canvas_width) {
start_canvas_autoscroll (1);
}
@@ -4183,7 +4183,7 @@ Editor::drag_range_markerbar_op (ArdourCanvas::Item* item, GdkEvent* event)
break;
}
- if (event->button.x >= track_canvas_scroller.get_hadjustment()->get_value() + canvas_width) {
+ if (event->button.x >= horizontal_adjustment.get_value() + canvas_width) {
start_canvas_autoscroll (1);
}
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 260d2ce387..3190b04a45 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -973,8 +973,7 @@ Editor::scroll_tracks_down ()
cnt = (int) floor (prefix);
}
- Gtk::Adjustment *adj = track_canvas_scroller.get_vadjustment();
- adj->set_value (adj->get_value() + (cnt * adj->get_page_size()));
+ vertical_adjustment.set_value (vertical_adjustment.get_value() + (cnt * vertical_adjustment.get_page_size()));
}
void
@@ -990,8 +989,7 @@ Editor::scroll_tracks_up ()
cnt = (int) floor (prefix);
}
- Gtk::Adjustment *adj = track_canvas_scroller.get_vadjustment();
- adj->set_value (adj->get_value() - (cnt * adj->get_page_size()));
+ vertical_adjustment.set_value (vertical_adjustment.get_value() - (cnt * vertical_adjustment.get_page_size()));
}
void
@@ -2101,7 +2099,7 @@ Editor::embed_sndfile (string path, bool split, bool multiple_files, bool& check
}
}
- track_canvas_scroller.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
+ track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
ARDOUR_UI::instance()->flush_pending ();
/* make the proper number of channels in the region */
@@ -2149,7 +2147,7 @@ Editor::embed_sndfile (string path, bool split, bool multiple_files, bool& check
}
out:
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
}
void
@@ -2287,7 +2285,7 @@ Editor::insert_sndfile_into (string path, bool multi, AudioTimeAxisView* tv, jac
return;
}
- track_canvas_scroller.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
+ track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
ARDOUR_UI::instance()->flush_pending ();
/* make the proper number of channels in the region */
@@ -2330,7 +2328,7 @@ Editor::insert_sndfile_into (string path, bool multi, AudioTimeAxisView* tv, jac
}
out:
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
return;
}
@@ -2918,7 +2916,7 @@ Editor::freeze_route ()
pthread_create (&itt.thread, 0, _freeze_thread, this);
- track_canvas_scroller.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
+ track_canvas.get_window()->set_cursor (Gdk::Cursor (Gdk::WATCH));
while (!itt.done && !itt.cancel) {
gtk_main_iteration ();
@@ -2927,7 +2925,7 @@ Editor::freeze_route ()
interthread_progress_connection.disconnect ();
interthread_progress_window->hide_all ();
current_interthread_info = 0;
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
}
void
@@ -3458,7 +3456,7 @@ Editor::normalize_region ()
begin_reversible_command (_("normalize"));
- track_canvas_scroller.get_window()->set_cursor (*wait_cursor);
+ track_canvas.get_window()->set_cursor (*wait_cursor);
gdk_flush ();
for (AudioRegionSelection::iterator r = selection->audio_regions.begin(); r != selection->audio_regions.end(); ++r) {
@@ -3468,7 +3466,7 @@ Editor::normalize_region ()
}
commit_reversible_command ();
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
}
@@ -3515,7 +3513,7 @@ Editor::apply_filter (AudioFilter& filter, string command)
begin_reversible_command (command);
- track_canvas_scroller.get_window()->set_cursor (*wait_cursor);
+ track_canvas.get_window()->set_cursor (*wait_cursor);
gdk_flush ();
for (AudioRegionSelection::iterator r = selection->audio_regions.begin(); r != selection->audio_regions.end(); ) {
@@ -3544,7 +3542,7 @@ Editor::apply_filter (AudioFilter& filter, string command)
selection->audio_regions.clear ();
out:
- track_canvas_scroller.get_window()->set_cursor (*current_canvas_cursor);
+ track_canvas.get_window()->set_cursor (*current_canvas_cursor);
}
void
diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc
index 5df85489b7..9cdc981eb0 100644
--- a/gtk2_ardour/editor_route_list.cc
+++ b/gtk2_ardour/editor_route_list.cc
@@ -155,7 +155,7 @@ Editor::route_display_selection_changed ()
for (i = rows.begin(); i != rows.end(); ++i) {
tv = (*i)[route_display_columns.tv];
- if (selection->is_selected (i)) {
+ if (!selection->is_selected (i)) {
tv->set_marked_for_display (false);
} else {
AudioTimeAxisView *atv;
@@ -225,7 +225,7 @@ Editor::route_list_reordered ()
TreeModel::Children rows = route_display_model->children();
TreeModel::Children::iterator i;
long order;
-int n;
+ int n;
for (n = 0, order = 0, i = rows.begin(); i != rows.end(); ++i, ++order) {
TimeAxisView *tv = (*i)[route_display_columns.tv];
@@ -250,7 +250,8 @@ int n;
n++;
}
- edit_controls_scroller.queue_resize ();
+
+ // controls_layout.queue_resize ();
reset_scrolling_region ();
return FALSE;
}
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc
index 93af2a18be..1fe4e0711c 100644
--- a/gtk2_ardour/editor_rulers.cc
+++ b/gtk2_ardour/editor_rulers.cc
@@ -520,7 +520,7 @@ Editor::update_ruler_visibility ()
lab_children.clear();
- // leave the last one (the time_canvas_scroller) intact
+ // leave the last one (the time_canvas) intact
while (ruler_children.size() > 1) {
ruler_children.pop_front();
}
diff --git a/gtk2_ardour/imageframe_time_axis.cc b/gtk2_ardour/imageframe_time_axis.cc
index 00d20129df..f15c8d79e8 100644
--- a/gtk2_ardour/imageframe_time_axis.cc
+++ b/gtk2_ardour/imageframe_time_axis.cc
@@ -116,20 +116,6 @@ ImageFrameTimeAxis::~ImageFrameTimeAxis ()
image_action_menu = 0 ;
}
- for(list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i)
- {
- delete (*i)->rect;
- delete (*i)->start_trim;
- delete (*i)->end_trim;
- }
-
- for(list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i)
- {
- delete (*i)->rect;
- delete (*i)->start_trim;
- delete (*i)->end_trim;
- }
-
if (selection_group)
{
delete selection_group;
diff --git a/gtk2_ardour/marker.cc b/gtk2_ardour/marker.cc
index 8a9ac674fc..8a75492a30 100644
--- a/gtk2_ardour/marker.cc
+++ b/gtk2_ardour/marker.cc
@@ -246,6 +246,7 @@ Marker::Marker (PublicEditor& ed, ArdourCanvas::Group& parent, guint32 rgba, con
mark->property_points() = *points;
mark->property_fill_color_rgba() = rgba;
mark->property_outline_color() = "black";
+ mark->property_width_pixels() = 1;
Pango::FontDescription font = get_font_for_style (N_("MarkerText"));
diff --git a/gtk2_ardour/marker_time_axis.cc b/gtk2_ardour/marker_time_axis.cc
index e8673e6fe3..973bb5d221 100644
--- a/gtk2_ardour/marker_time_axis.cc
+++ b/gtk2_ardour/marker_time_axis.cc
@@ -92,27 +92,7 @@ MarkerTimeAxis::MarkerTimeAxis (PublicEditor& ed, ARDOUR::Session& sess, Canvas&
*/
MarkerTimeAxis::~MarkerTimeAxis()
{
- GoingAway() ; /* EMIT_SIGNAL */
-
- for (list<SelectionRect*>::iterator i = free_selection_rects.begin(); i != free_selection_rects.end(); ++i)
- {
- delete (*i)->rect;
- delete (*i)->start_trim;
- delete (*i)->end_trim;
- }
-
- for (list<SelectionRect*>::iterator i = used_selection_rects.begin(); i != used_selection_rects.end(); ++i)
- {
- delete (*i)->rect;
- delete (*i)->start_trim;
- delete (*i)->end_trim;
- }
-
- if(selection_group)
- {
- delete selection_group;
- selection_group = 0 ;
- }
+ GoingAway() ; /* EMIT_SIGNAL */
// destroy the view helper
// this handles removing and destroying individual marker items
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 5d8f88eeeb..a85a589ae3 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -435,14 +435,11 @@ Mixer_UI::show_strip (MixerStrip* ms)
if (ms->route().master() || ms->route().control()) {
out_packer.pack_start (*ms, false, false);
- cerr << "Packed master strip @ " << ms << endl;
} else {
- strip_packer.pack_start (*ms, false, false);
- cerr << "Packed strip @ " << ms << endl;
+ strip_packer.pack_start (*ms, false, false);
}
ms->set_packed (true);
ms->show ();
-
}
}
diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc
index 6c97e24199..b9ff987d53 100644
--- a/gtk2_ardour/time_axis_view.cc
+++ b/gtk2_ardour/time_axis_view.cc
@@ -78,6 +78,7 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie
effective_height = 0;
parent = rent;
_has_state = false;
+ last_name_entry_key_press_event = 0;
/*
Create the standard LHS Controls
@@ -88,7 +89,10 @@ TimeAxisView::TimeAxisView (ARDOUR::Session& sess, PublicEditor& ed, TimeAxisVie
name_entry.set_name ("EditorTrackNameDisplay");
name_entry.signal_button_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_release));
name_entry.signal_button_press_event().connect (mem_fun (*this, &TimeAxisView::name_entry_button_press));
-
+ name_entry.signal_key_release_event().connect (mem_fun (*this, &TimeAxisView::name_entry_key_release));
+ name_entry.signal_activate().connect (mem_fun(*this, &TimeAxisView::name_entry_activated));
+ name_entry.signal_focus_in_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_in));
+ name_entry.signal_focus_out_event().connect (mem_fun (*this, &TimeAxisView::name_entry_focus_out));
Gtkmm2ext::set_size_request_to_display_given_text (name_entry, N_("gTortnam"), 10, 10); // just represents a short name
name_label.set_name ("TrackLabel");
@@ -356,6 +360,86 @@ TimeAxisView::set_height (TrackHeight h)
}
bool
+TimeAxisView::name_entry_key_release (GdkEventKey* ev)
+{
+ switch (ev->keyval) {
+ case GDK_Tab:
+ case GDK_Up:
+ case GDK_Down:
+ name_entry_changed ();
+ return true;
+
+ default:
+ break;
+ }
+
+#ifdef TIMEOUT_NAME_EDIT
+ /* adapt the timeout to reflect the user's typing speed */
+
+ guint32 name_entry_timeout;
+
+ if (last_name_entry_key_press_event) {
+ /* timeout is 1/2 second or 5 times their current inter-char typing speed */
+ name_entry_timeout = std::max (500U, (5 * (ev->time - last_name_entry_key_press_event)));
+ } else {
+ /* start with a 1 second timeout */
+ name_entry_timeout = 1000;
+ }
+
+ last_name_entry_key_press_event = ev->time;
+
+ /* wait 1 seconds and if no more keys are pressed, act as if they pressed enter */
+
+ name_entry_key_timeout.disconnect();
+ name_entry_key_timeout = Glib::signal_timeout().connect (mem_fun (*this, &TimeAxisView::name_entry_key_timed_out), name_entry_timeout);
+#endif
+
+ return false;
+}
+
+bool
+TimeAxisView::name_entry_focus_in (GdkEventFocus* ev)
+{
+ name_entry.select_region (0, -1);
+ name_entry.set_name ("EditorActiveTrackNameDisplay");
+ return false;
+}
+
+bool
+TimeAxisView::name_entry_focus_out (GdkEventFocus* ev)
+{
+ /* clean up */
+
+ last_name_entry_key_press_event = 0;
+ name_entry_key_timeout.disconnect ();
+ name_entry.set_name ("EditorTrackNameDisplay");
+
+ /* do the real stuff */
+
+ name_entry_changed ();
+
+ return false;
+}
+
+bool
+TimeAxisView::name_entry_key_timed_out ()
+{
+ name_entry_activated();
+ return false;
+}
+
+void
+TimeAxisView::name_entry_activated ()
+{
+ controls_ebox.grab_focus();
+}
+
+void
+TimeAxisView::name_entry_changed ()
+{
+}
+
+bool
TimeAxisView::name_entry_button_press (GdkEventButton *ev)
{
if (ev->button == 3) {
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index 1b132322e4..7cd2cc8e38 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -199,19 +199,19 @@ class TimeAxisView : public virtual AxisView
string controls_base_unselected_name;
string controls_base_selected_name;
- /**
- * Handle mouse press on our LHS control name entry.
- *
- * @param ev the event
- */
- virtual bool name_entry_button_press (GdkEventButton *ev);
+ bool name_entry_button_press (GdkEventButton *ev);
+ bool name_entry_button_release (GdkEventButton *ev);
+ bool name_entry_key_release (GdkEventKey *ev);
+ void name_entry_activated ();
+ sigc::connection name_entry_key_timeout;
+ bool name_entry_key_timed_out ();
+ guint32 last_name_entry_key_press_event;
+
+ /* derived classes can override these */
- /**
- * Handle mouse relaese on our LHS control name entry.
- *
- *@ param ev the event
- */
- virtual bool name_entry_button_release (GdkEventButton *ev);
+ virtual void name_entry_changed ();
+ virtual bool name_entry_focus_in (GdkEventFocus *ev);
+ virtual bool name_entry_focus_out (GdkEventFocus *ev);
/**
* Handle mouse relaese on our LHS control name ebox.