diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index c2701f10..48bcfa8d 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -214,7 +214,7 @@ UBBoardView::keyPressEvent (QKeyEvent *event) case Qt::Key_Control: case Qt::Key_Shift: { - mMultipleSelectionIsEnabled = true; + setMultiselection(true); }break; } @@ -274,6 +274,10 @@ UBBoardView::keyPressEvent (QKeyEvent *event) } } } + + // if ctrl of shift was pressed combined with other keys - we need to disable multiple selection. + if (event->isAccepted()) + setMultiselection(false); } @@ -284,7 +288,7 @@ void UBBoardView::keyReleaseEvent(QKeyEvent *event) if (Qt::Key_Shift == event->key() ||Qt::Key_Control == event->key()) { - mMultipleSelectionIsEnabled = false; + setMultiselection(false); } } @@ -459,7 +463,7 @@ void UBBoardView::handleItemsSelection(QGraphicsItem *item) // if we need to uwe multiple selection - we shouldn't deselect other items. - if (!mMultipleSelectionIsEnabled) + if (!isMultipleSelectionEnabled()) { // here we need to determine what item is pressed. We should work // only with UB items. @@ -627,8 +631,8 @@ QGraphicsItem* UBBoardView::determineItemToPress(QGraphicsItem *item) { UBStylusTool::Enum currentTool = (UBStylusTool::Enum)UBDrawingController::drawingController()->stylusTool(); - // groups should should be moved instead of strokes groups - if (item->parentItem() && UBGraphicsStrokesGroup::Type == item->type()) + // groups should should be moved instead of strokes groups + if (item->parentItem() && UBGraphicsStrokesGroup::Type == item->type()) return item->parentItem(); // if item is on group and froup is not selected - group should take press. @@ -687,14 +691,14 @@ void UBBoardView::handleItemMousePress(QMouseEvent *event) { mLastPressedMousePos = mapToScene(event->pos()); - // Determining item who will take mouse press event - //all other items will be deselected and if all item will be deselected, then - // wrong item can catch mouse press. because selected items placed on the top - QGraphicsItem *pressedItem = determineItemToPress(movingItem); - - handleItemsSelection(movingItem); + // Determining item who will take mouse press event + //all other items will be deselected and if all item will be deselected, then + // wrong item can catch mouse press. because selected items placed on the top + QGraphicsItem *pressedItem = determineItemToPress(movingItem); + + handleItemsSelection(movingItem); - if (mMultipleSelectionIsEnabled) + if (isMultipleSelectionEnabled()) return; if (itemShouldReceiveMousePressEvent(movingItem)) @@ -792,6 +796,11 @@ void UBBoardView::moveRubberedItems(QPointF movingVector) scene()->invalidate(invalidateRect); } +void UBBoardView::setMultiselection(bool enable) +{ + mMultipleSelectionIsEnabled = enable; +} + void UBBoardView::longPressEvent() { UBDrawingController *drawingController = UBDrawingController::drawingController(); @@ -1090,7 +1099,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event) !(movingItem->parentItem() && UBGraphicsW3CWidgetItem::Type == movingItem->type() && UBGraphicsGroupContainerItem::Type == movingItem->parentItem()->type())) { bReleaseIsNeed = false; - if (movingItem->isSelected() && mMultipleSelectionIsEnabled) + if (movingItem->isSelected() && isMultipleSelectionEnabled()) movingItem->setSelected(false); else { diff --git a/src/board/UBBoardView.h b/src/board/UBBoardView.h index f2aa69ee..1aae71ba 100644 --- a/src/board/UBBoardView.h +++ b/src/board/UBBoardView.h @@ -44,6 +44,9 @@ class UBBoardView : public QGraphicsView void rubberItems(); void moveRubberedItems(QPointF movingVector); + void setMultiselection(bool enable); + bool isMultipleSelectionEnabled() { return mMultipleSelectionIsEnabled; } + signals: void resized(QResizeEvent* event); diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index ec8280e4..75591e73 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -582,6 +582,12 @@ bool UBApplication::eventFilter(QObject *obj, QEvent *event) boardController->controlView()->forcedTabletRelease(); } + + if (event->type() == QEvent::ApplicationActivate) + { + boardController->controlView()->setMultiselection(false); + } + #ifdef Q_WS_MAC if (bIsMinimized && event->type() == QEvent::ApplicationActivate){ if (mainWindow->isHidden()) mainWindow->show();