diff options
author | Carl Hetherington <carl@carlh.net> | 2009-02-28 01:52:45 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-02-28 01:52:45 +0000 |
commit | edee84d0144db6fb9878faaf53eb26f52f6f3256 (patch) | |
tree | 409c8d912a7fabd258a22d2e6161916a2c1dd9d2 /gtk2_ardour | |
parent | 737ce09ef0bb1f651a2c10810cdc770114a442c9 (diff) |
Fix #2559; crash when doing end_grab on an already-deleted canvas item.
git-svn-id: svn://localhost/ardour2/branches/3.0@4709 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 7 | ||||
-rw-r--r-- | gtk2_ardour/streamview.h | 1 |
3 files changed, 9 insertions, 3 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index ee828c570a..86efc2069c 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -911,6 +911,10 @@ Editor::catch_vanishing_regionview (RegionView *rv) audioregionview by itself. */ + if (rv->get_canvas_group() == drag_info.item) { + end_grab (drag_info.item, 0); + } + if (clicked_regionview == rv) { clicked_regionview = 0; } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 051463f200..72f34279d8 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -2053,6 +2053,9 @@ Editor::swap_grab (ArdourCanvas::Item* new_item, Gdk::Cursor* cursor, uint32_t t drag_info.item->grab (Gdk::POINTER_MOTION_MASK|Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK, *cursor, time); } +/** @param item Canvas item + * @param event GDK event, or 0. + */ bool Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event) { @@ -2064,9 +2067,9 @@ Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event) return false; } - drag_info.item->ungrab (event->button.time); + drag_info.item->ungrab (event ? event->button.time : 0); - if (drag_info.finished_callback) { + if (drag_info.finished_callback && event) { drag_info.last_pointer_x = drag_info.current_pointer_x; drag_info.last_pointer_y = drag_info.current_pointer_y; (this->*(drag_info.finished_callback)) (item, event); diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index 24a81f4847..caea5487ee 100644 --- a/gtk2_ardour/streamview.h +++ b/gtk2_ardour/streamview.h @@ -46,7 +46,6 @@ struct RecBoxInfo { nframes_t length; }; -class PublicEditor; class Selectable; class RouteTimeAxisView; class RegionView; |