From: David Robillard Date: Fri, 14 Nov 2014 07:28:15 +0000 (-0500) Subject: Fix various sticky/broken cursor issues. X-Git-Tag: 4.0-rc1~1402^2~1 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=5d5d9cb9e262498dc0831dc362fbcb3f92bcdb9f;p=ardour.git Fix various sticky/broken cursor issues. This still isn't quite right, but it's a lot less broken than before, at least. --- diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 7eeeba2ed0..482ada3cbc 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -1348,7 +1348,7 @@ Editor::choose_canvas_cursor_on_entry (GdkEventCrossing* /*event*/, ItemType typ } if (cursor) { - set_canvas_cursor (cursor, false); + set_canvas_cursor (cursor, true); } } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index c4e19b15a8..52486a1322 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -1813,6 +1813,8 @@ Editor::leave_handler (ArdourCanvas::Item* item, GdkEvent*, ItemType item_type) bool is_start; bool ret = true; + reset_canvas_cursor (); + switch (item_type) { case ControlPointItem: _verbose_cursor->hide (); diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 40c4af0924..81248c9585 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -112,6 +112,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisVi , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name())); @@ -149,6 +150,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container *parent, RouteTimeAxisVi , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { CANVAS_DEBUG_NAME (_note_group, string_compose ("note group for %1", get_item_name())); @@ -195,6 +197,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other) , _last_event_y (0) , pre_enter_cursor (0) , pre_press_cursor (0) + , pre_note_enter_cursor (0) , _note_player (0) { init (false); @@ -223,6 +226,7 @@ MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr (&trackview.editor()); editor->set_canvas_cursor(pre_enter_cursor); + pre_enter_cursor = 0; } return false; @@ -456,7 +461,7 @@ MidiRegionView::button_press (GdkEventButton* ev) if (m == MouseObject && Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier())) { pre_press_cursor = editor->get_canvas_cursor (); editor->set_canvas_cursor (editor->cursors()->midi_pencil); - } + } if (_mouse_state != SelectTouchDragging) { @@ -3116,7 +3121,7 @@ MidiRegionView::note_entered(NoteBase* ev) { Editor* editor = dynamic_cast(&trackview.editor()); - pre_enter_cursor = editor->get_canvas_cursor (); + pre_note_enter_cursor = editor->get_canvas_cursor (); if (_mouse_state == SelectTouchDragging) { note_selected (ev, true); @@ -3136,9 +3141,9 @@ MidiRegionView::note_left (NoteBase*) editor->verbose_cursor()->hide (); - if (pre_enter_cursor) { - editor->set_canvas_cursor (pre_enter_cursor); - pre_enter_cursor = 0; + if (pre_note_enter_cursor) { + editor->set_canvas_cursor (pre_note_enter_cursor); + pre_note_enter_cursor = 0; } } @@ -3190,13 +3195,13 @@ MidiRegionView::note_mouse_position (float x_fraction, float /*y_fraction*/, boo Editing::MouseMode mm = editor->current_mouse_mode(); bool trimmable = (mm == MouseObject || mm == MouseTimeFX || mm == MouseDraw); - if (trimmable && x_fraction > 0.0 && x_fraction < 0.2) { - editor->set_canvas_cursor (editor->cursors()->left_side_trim); - } else if (trimmable && x_fraction >= 0.8 && x_fraction < 1.0) { - editor->set_canvas_cursor (editor->cursors()->right_side_trim); - } else { - if (pre_enter_cursor && can_set_cursor) { - editor->set_canvas_cursor (pre_enter_cursor); + if (can_set_cursor) { + if (trimmable && x_fraction > 0.0 && x_fraction < 0.2) { + editor->set_canvas_cursor (editor->cursors()->left_side_trim); + } else if (trimmable && x_fraction >= 0.8 && x_fraction < 1.0) { + editor->set_canvas_cursor (editor->cursors()->right_side_trim); + } else if (pre_note_enter_cursor) { + editor->set_canvas_cursor (pre_note_enter_cursor); } } } diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 3fd6625ce9..65ca7df7ab 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -473,6 +473,7 @@ private: Gdk::Cursor* pre_enter_cursor; Gdk::Cursor* pre_press_cursor; + Gdk::Cursor* pre_note_enter_cursor; NotePlayer* _note_player; diff --git a/gtk2_ardour/note_base.cc b/gtk2_ardour/note_base.cc index 7bc45a4b25..5e5d83e500 100644 --- a/gtk2_ardour/note_base.cc +++ b/gtk2_ardour/note_base.cc @@ -262,8 +262,8 @@ NoteBase::event_handler (GdkEvent* ev) switch (ev->type) { case GDK_ENTER_NOTIFY: - set_mouse_fractions (ev); _region.note_entered (this); + set_mouse_fractions (ev); break; case GDK_LEAVE_NOTIFY: