Revert to old Lock mode (still called Lock).
[ardour.git] / gtk2_ardour / editor_canvas.cc
index 2e2231c09fcf8f0be8004faba52df539d5b8d57d..c1929bd38bb2e664d6827b5b9fa194c3114411bf 100644 (file)
@@ -92,7 +92,7 @@ Editor::initialize_canvas ()
        CANVAS_DEBUG_NAME (hv_scroll_group, "canvas hv scroll");
        _track_canvas->add_scroller (*hsg);
 
-       cursor_scroll_group = cg = new ArdourCanvas::ScrollGroup (_track_canvas->root(), ArdourCanvas::ScrollGroup::ScrollsHorizontally, false);
+       cursor_scroll_group = cg = new ArdourCanvas::ScrollGroup (_track_canvas->root(), ArdourCanvas::ScrollGroup::ScrollsHorizontally);
        CANVAS_DEBUG_NAME (cursor_scroll_group, "canvas cursor scroll");
        _track_canvas->add_scroller (*cg);
 
@@ -1012,15 +1012,22 @@ Editor::set_canvas_cursor (Gdk::Cursor* cursor)
 {
        Glib::RefPtr<Gdk::Window> win = _track_canvas->get_window();
 
-       if (win && cursor) {
-               win->set_cursor (*cursor);
+       if (win && !_cursors->is_invalid (cursor)) {
+               /* glibmm 2.4 doesn't allow null cursor pointer because it uses
+                  a Gdk::Cursor& as the argument to Gdk::Window::set_cursor().
+                  But a null pointer just means "use parent window cursor",
+                  and so should be allowed. Gtkmm 3.x has fixed this API.
+
+                  For now, drop down and use C API
+               */
+               gdk_window_set_cursor (win->gobj(), cursor ? cursor->gobj() : 0);
        }
 }
 
 size_t
 Editor::push_canvas_cursor (Gdk::Cursor* cursor)
 {
-       if (cursor) {
+       if (!_cursors->is_invalid (cursor)) {
                _cursor_stack.push_back (cursor);
                set_canvas_cursor (cursor);
        }
@@ -1095,7 +1102,7 @@ Editor::which_trim_cursor (bool left) const
 Gdk::Cursor*
 Editor::which_mode_cursor () const
 {
-       Gdk::Cursor* mode_cursor = 0;
+       Gdk::Cursor* mode_cursor = MouseCursors::invalid_cursor ();
 
        switch (mouse_mode) {
        case MouseRange:
@@ -1161,7 +1168,7 @@ Editor::which_mode_cursor () const
 Gdk::Cursor*
 Editor::which_track_cursor () const
 {
-       Gdk::Cursor* cursor = 0;
+       Gdk::Cursor* cursor = MouseCursors::invalid_cursor();
 
        switch (_join_object_range_state) {
        case JOIN_OBJECT_RANGE_NONE:
@@ -1332,7 +1339,7 @@ Editor::choose_canvas_cursor_on_entry (ItemType type)
 
        Gdk::Cursor* cursor = which_canvas_cursor(type);
 
-       if (cursor) {
+       if (!_cursors->is_invalid (cursor)) {
                // Push a new enter context
                const EnterContext ctx = { type, CursorContext::create(*this, cursor) };
                _enter_stack.push_back(ctx);