#include "pbd/error.h"
#include "pbd/enumwriter.h"
-#include <gtkmm2ext/utils.h>
-#include <gtkmm2ext/tearoff.h>
#include "pbd/memento_command.h"
#include "pbd/basename.h"
#include "pbd/stateful_diff_command.h"
+#include "gtkmm2ext/bindings.h"
+#include "gtkmm2ext/utils.h"
+#include "gtkmm2ext/tearoff.h"
+
#include "ardour_ui.h"
#include "actions.h"
#include "canvas-note.h"
Selection::Operation op = ArdourKeyboard::selection_type (event->button.state);
bool press = (event->type == GDK_BUTTON_PRESS);
- // begin_reversible_command (_("select on click"));
-
switch (item_type) {
case RegionItem:
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
if (internal_editing()) {
/* trim notes if we're in internal edit mode and near the ends of the note */
ArdourCanvas::CanvasNote* cn = dynamic_cast<ArdourCanvas::CanvasNote*> (item);
- cerr << "NoteItem button press, cursor = " << current_canvas_cursor << endl;
- if (cn->mouse_near_ends()) {
+ if (cn->big_enough_to_trim() && cn->mouse_near_ends()) {
_drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
} else {
_drags->set (new NoteDrag (this, item), event);
case MouseObject:
switch (item_type) {
case RegionItem:
+ if (internal_editing ()) {
+ /* no region drags in internal edit mode */
+ return false;
+ }
+
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) {
add_region_copy_drag (item, event, clicked_regionview);
} else {
break;
default:
+ return button_press_dispatch (&event->button);
break;
}
return false;
}
+bool
+Editor::button_press_dispatch (GdkEventButton* ev)
+{
+ /* this function is intended only for buttons 4 and above.
+ */
+
+ Gtkmm2ext::MouseButton b (ev->state, ev->button);
+ return button_bindings->activate (b, Gtkmm2ext::Bindings::Press);
+}
+
+bool
+Editor::button_release_dispatch (GdkEventButton* ev)
+{
+ /* this function is intended only for buttons 4 and above.
+ */
+
+ Gtkmm2ext::MouseButton b (ev->state, ev->button);
+ return button_bindings->activate (b, Gtkmm2ext::Bindings::Release);
+}
+
bool
Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type)
{
default:
break;
-
+
}
+ /* do any (de)selection operations that should occur on button release */
+ button_selection (item, event, item_type);
return true;
break;
default:
break;
}
+
return false;
}
ARDOUR_UI::instance()->set_tip (mouse_select_button, _("Draw/Edit MIDI Notes"));
mouse_mode_toggled (mouse_mode);
+ pre_internal_mouse_mode = mouse_mode;
+
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(*i)->enter_internal_edit_mode ();
}
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(*i)->leave_internal_edit_mode ();
}
+
+ if (mouse_mode == MouseRange && pre_internal_mouse_mode != MouseRange) {
+ /* we were drawing .. flip back to something sensible */
+ set_mouse_mode (pre_internal_mouse_mode);
+ }
}
}