summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-06-07 18:20:22 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-06-07 18:20:22 +0000
commit7e2b86dc835bd061786bffd0d503dfb3e8c74912 (patch)
tree5e3b49709ce34a9fc5b448f96b679109af1cf2ce
parentf6e67fa3dd7ddbb2315887af37a7cb20c3e8157f (diff)
locate when clicking on start/end fields in time info box
git-svn-id: svn://localhost/ardour2/branches/3.0@9683 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/audio_clock.cc54
-rw-r--r--gtk2_ardour/time_info_box.cc21
-rw-r--r--gtk2_ardour/time_info_box.h2
3 files changed, 48 insertions, 29 deletions
diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc
index 40ff8f3f14..bc9783cf86 100644
--- a/gtk2_ardour/audio_clock.cc
+++ b/gtk2_ardour/audio_clock.cc
@@ -889,21 +889,23 @@ AudioClock::button_press (GdkEventButton *ev, CairoCell* cell)
{
switch (ev->button) {
case 1:
- if (cell) {
- editing_field = (Field) cell->id ();
- display->start_editing (cell);
+ if (editable) {
+ if (cell) {
+ editing_field = (Field) cell->id ();
+ display->start_editing (cell);
+ }
+
+ Keyboard::magic_widget_grab_focus ();
+
+ /* make absolutely sure that the pointer is grabbed */
+ gdk_pointer_grab(ev->window,false ,
+ GdkEventMask( Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK |Gdk::BUTTON_RELEASE_MASK),
+ NULL,NULL,ev->time);
+ dragging = true;
+ drag_accum = 0;
+ drag_start_y = ev->y;
+ drag_y = ev->y;
}
-
- Keyboard::magic_widget_grab_focus ();
-
- /* make absolutely sure that the pointer is grabbed */
- gdk_pointer_grab(ev->window,false ,
- GdkEventMask( Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK |Gdk::BUTTON_RELEASE_MASK),
- NULL,NULL,ev->time);
- dragging = true;
- drag_accum = 0;
- drag_start_y = ev->y;
- drag_y = ev->y;
break;
default:
@@ -917,21 +919,15 @@ AudioClock::button_press (GdkEventButton *ev, CairoCell* cell)
bool
AudioClock::button_release (GdkEventButton *ev, CairoCell* cell)
{
- if (dragging) {
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- dragging = false;
- if (ev->y > drag_start_y+1 || ev->y < drag_start_y-1 || Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)){
- // we actually dragged so return without setting editing focus, or we shift clicked
- return true;
- }
- }
-
- if (!editable) {
- if (ops_menu == 0) {
- build_ops_menu ();
+ if (editable) {
+ if (dragging) {
+ gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ dragging = false;
+ if (ev->y > drag_start_y+1 || ev->y < drag_start_y-1 || Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)){
+ // we actually dragged so return without setting editing focus, or we shift clicked
+ return true;
+ }
}
- ops_menu->popup (1, ev->time);
- return true;
}
if (Keyboard::is_context_menu_event (ev)) {
@@ -942,7 +938,7 @@ AudioClock::button_release (GdkEventButton *ev, CairoCell* cell)
return true;
}
- return true;
+ return false;
}
bool
diff --git a/gtk2_ardour/time_info_box.cc b/gtk2_ardour/time_info_box.cc
index ebebade6c1..ae3d3b65d4 100644
--- a/gtk2_ardour/time_info_box.cc
+++ b/gtk2_ardour/time_info_box.cc
@@ -125,6 +125,12 @@ TimeInfoBox::TimeInfoBox ()
punch_start->mode_changed.connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::sync_punch_mode), punch_start));
punch_end->mode_changed.connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::sync_punch_mode), punch_end));
+ selection_start->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::clock_button_release_event), selection_start), true);
+ selection_end->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::clock_button_release_event), selection_end), true);
+
+ punch_start->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::clock_button_release_event), punch_start), true);
+ punch_end->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &TimeInfoBox::clock_button_release_event), punch_end), true);
+
Editor::instance().get_selection().TimeChanged.connect (sigc::mem_fun (*this, &TimeInfoBox::selection_changed));
}
@@ -138,6 +144,21 @@ TimeInfoBox::~TimeInfoBox ()
delete punch_end;
}
+bool
+TimeInfoBox::clock_button_release_event (GdkEventButton* ev, AudioClock* src)
+{
+ if (!_session) {
+ return false;
+ }
+
+ if (ev->button == 1) {
+ _session->request_locate (src->current_time ());
+ return true;
+ }
+
+ return false;
+}
+
void
TimeInfoBox::sync_selection_mode (AudioClock* src)
{
diff --git a/gtk2_ardour/time_info_box.h b/gtk2_ardour/time_info_box.h
index 734f9ebb95..50561d1249 100644
--- a/gtk2_ardour/time_info_box.h
+++ b/gtk2_ardour/time_info_box.h
@@ -72,6 +72,8 @@ class TimeInfoBox : public Gtk::Table, public ARDOUR::SessionHandlePtr
void sync_selection_mode (AudioClock*);
void sync_punch_mode (AudioClock*);
+
+ bool clock_button_release_event (GdkEventButton* ev, AudioClock* src);
};