diff --git a/libs/gtkmm2ext/gtkmm2ext/dndvbox.h b/libs/gtkmm2ext/gtkmm2ext/dndvbox.h index 7a011e9dcc..166544d73f 100644 --- a/libs/gtkmm2ext/gtkmm2ext/dndvbox.h +++ b/libs/gtkmm2ext/gtkmm2ext/dndvbox.h @@ -258,9 +258,18 @@ private: add_to_selection (child); } SelectionChanged (); /* EMIT SIGNAL */ + } else { + /* XXX THIS NEEDS GENERALIZING FOR OS X */ + if (ev->button == 1 && (ev->state & Gdk::CONTROL_MASK)) { + if (child && selected (child)) { + remove_from_selection (child); + SelectionChanged (); /* EMIT SIGNAL */ + } + } } } + return ButtonPress (ev, child); /* EMIT SIGNAL */ } @@ -292,6 +301,16 @@ private: _selection.push_back (child); } + + void remove_from_selection (T* child) + { + typename std::list::iterator x = find (_selection.begin(), _selection.end(), child); + if (x != _selection.end()) { + child->action_widget().set_state (Gtk::STATE_NORMAL); + _selection.erase (x); + } + } + T* child_from_widget (Gtk::Widget const * w) const { typename std::list::const_iterator i = _children.begin();