@@ -467,9 +467,7 @@ class DeSelectTransition : public QMouseEventTransition
467
467
virtual bool eventTest (QEvent* event) {
468
468
if (!QMouseEventTransition::eventTest (event))
469
469
return false ;
470
- QStateMachine::WrappedEvent* we = static_cast <QStateMachine::WrappedEvent*>(event);
471
- QMouseEvent* me = static_cast <QMouseEvent*>(we->event ());
472
- return canvas->mousePress (me);
470
+ return canvas->getCurElement () != 0 ;
473
471
}
474
472
virtual void onTransition (QEvent* e) {
475
473
QStateMachine::WrappedEvent* we = static_cast <QStateMachine::WrappedEvent*>(e);
@@ -598,7 +596,7 @@ bool ScoreViewDragTransition::eventTest(QEvent* event)
598
596
return false ;
599
597
QStateMachine::WrappedEvent* we = static_cast <QStateMachine::WrappedEvent*>(event);
600
598
QMouseEvent* me = static_cast <QMouseEvent*>(we->event ());
601
- if (me->modifiers () & Qt::ShiftModifier)
599
+ if (( me->modifiers () & Qt::ShiftModifier) || (me-> modifiers () & Qt::ControlModifier) )
602
600
return false ;
603
601
return !canvas->mousePress (me);
604
602
}
@@ -610,7 +608,7 @@ ScoreViewDragTransition::ScoreViewDragTransition(ScoreView* c, QState* target)
610
608
}
611
609
612
610
// ---------------------------------------------------------
613
- // onTransition
611
+ // DragTransition
614
612
// ---------------------------------------------------------
615
613
616
614
void DragTransition::onTransition (QEvent* e)
@@ -705,8 +703,8 @@ ScoreView::ScoreView(QWidget* parent)
705
703
s->addTransition (et);
706
704
s->addTransition (new SelectTransition (this )); // select
707
705
connect (s, SIGNAL (entered ()), mscore, SLOT (setNormalState ()));
708
- // s->addTransition(new DeSelectTransition(this)); // deselect
709
- // connect(s, SIGNAL(entered()), mscore, SLOT(setNormalState()));
706
+ s->addTransition (new DeSelectTransition (this )); // deselect
707
+ connect (s, SIGNAL (entered ()), mscore, SLOT (setNormalState ()));
710
708
s->addTransition (new ScoreViewDragTransition (this , states[DRAG])); // ->stateDrag
711
709
s->addTransition (new ScoreViewLassoTransition (this , states[LASSO])); // ->stateLasso
712
710
s->addTransition (new ElementDragTransition (this , states[DRAG_OBJECT])); // ->stateDragObject
@@ -3260,9 +3258,16 @@ void ScoreView::select(QMouseEvent* ev)
3260
3258
else if (keyState & Qt::ShiftModifier)
3261
3259
st = SelectType::RANGE;
3262
3260
else if (keyState & Qt::ControlModifier) {
3263
- if (curElement->selected () && (ev->type () == QEvent::MouseButtonPress)) {
3264
- // do not deselect on ButtonPress, only on ButtonRelease
3265
- addSelect = false ;
3261
+ if (curElement->selected ()) {
3262
+ if (ev->type () == QEvent::MouseButtonPress) {
3263
+ // do not deselect on ButtonPress, only on ButtonRelease
3264
+ addSelect = false ;
3265
+ }
3266
+ else if (ev->type () == QEvent::MouseButtonRelease) {
3267
+ score ()->deselect (curElement);
3268
+ _score->setUpdateAll (true ); // DEBUG
3269
+ mscore->endCmd ();
3270
+ }
3266
3271
return ;
3267
3272
}
3268
3273
addSelect = true ;
0 commit comments