summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-11-18 14:53:55 +0000
committerCarl Hetherington <carl@carlh.net>2009-11-18 14:53:55 +0000
commitb7cfd2849ebb0d949af3ee39f70cbf1856fbfe0f (patch)
treed30c3a24c4b74f78f830e25eb4f176b36a764cf1 /gtk2_ardour
parent0f313672f59f7a00314400f82fc012e56df8d095 (diff)
Fix dragging grid lines when you move the mouse outside of the grid during the drag.
git-svn-id: svn://localhost/ardour2/branches/3.0@6120 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/port_matrix_body.cc21
-rw-r--r--gtk2_ardour/port_matrix_component.h1
-rw-r--r--gtk2_ardour/port_matrix_grid.cc40
3 files changed, 36 insertions, 26 deletions
diff --git a/gtk2_ardour/port_matrix_body.cc b/gtk2_ardour/port_matrix_body.cc
index 3d961baa5c..79efd22b7c 100644
--- a/gtk2_ardour/port_matrix_body.cc
+++ b/gtk2_ardour/port_matrix_body.cc
@@ -328,14 +328,19 @@ PortMatrixBody::on_button_press_event (GdkEventButton* ev)
bool
PortMatrixBody::on_button_release_event (GdkEventButton* ev)
{
- if (Gdk::Region (_grid->parent_rectangle()).point_in (ev->x, ev->y)) {
-
- _grid->button_release (
- _grid->parent_to_component_x (ev->x),
- _grid->parent_to_component_y (ev->y),
- ev->button, ev->time
- );
-
+ for (list<PortMatrixComponent*>::iterator i = _components.begin(); i != _components.end(); ++i) {
+ if (Gdk::Region ((*i)->parent_rectangle()).point_in (ev->x, ev->y)) {
+ (*i)->button_release (
+ (*i)->parent_to_component_x (ev->x),
+ (*i)->parent_to_component_y (ev->y),
+ ev->button, ev->time
+ );
+ } else {
+ (*i)->button_release (
+ -1, -1,
+ ev->button, ev->time
+ );
+ }
}
return true;
diff --git a/gtk2_ardour/port_matrix_component.h b/gtk2_ardour/port_matrix_component.h
index cbef95344b..86cd0565ae 100644
--- a/gtk2_ardour/port_matrix_component.h
+++ b/gtk2_ardour/port_matrix_component.h
@@ -50,6 +50,7 @@ public:
virtual void mouseover_changed (std::list<PortMatrixNode> const &) = 0;
virtual void draw_extra (cairo_t *) = 0;
virtual void button_press (double, double, int, uint32_t) {}
+ virtual void button_release (double, double, int, uint32_t) {}
virtual void motion (double, double) {}
void set_show_ports (bool);
diff --git a/gtk2_ardour/port_matrix_grid.cc b/gtk2_ardour/port_matrix_grid.cc
index 53b4b50b50..c2af484e6c 100644
--- a/gtk2_ardour/port_matrix_grid.cc
+++ b/gtk2_ardour/port_matrix_grid.cc
@@ -359,29 +359,33 @@ PortMatrixGrid::button_release (double x, double y, int b, uint32_t /*t*/)
{
if (b == 1) {
- if (_dragging && _moved) {
-
- if (_drag_valid) {
- list<PortMatrixNode> const p = nodes_on_line (_drag_start_x, _drag_start_y, _drag_x, _drag_y);
-
- if (!p.empty()) {
- PortMatrixNode::State const s = get_association (p.front());
- for (list<PortMatrixNode>::const_iterator i = p.begin(); i != p.end(); ++i) {
- set_association (*i, toggle_state (s));
+ if (x != -1) {
+
+ if (_dragging && _moved) {
+
+ if (_drag_valid) {
+ list<PortMatrixNode> const p = nodes_on_line (_drag_start_x, _drag_start_y, _drag_x, _drag_y);
+
+ if (!p.empty()) {
+ PortMatrixNode::State const s = get_association (p.front());
+ for (list<PortMatrixNode>::const_iterator i = p.begin(); i != p.end(); ++i) {
+ set_association (*i, toggle_state (s));
+ }
}
}
+
+ } else {
+
+ PortMatrixNode const n = position_to_node (x, y);
+ if (n.row.bundle && n.column.bundle) {
+ PortMatrixNode::State const s = get_association (n);
+ set_association (n, toggle_state (s));
+ }
}
- } else {
-
- PortMatrixNode const n = position_to_node (x, y);
- if (n.row.bundle && n.column.bundle) {
- PortMatrixNode::State const s = get_association (n);
- set_association (n, toggle_state (s));
- }
+ require_render ();
}
-
- require_render ();
+
_body->queue_draw ();
}