Skip to content

Commit e5bfe4b

Browse files
committed
fix: shortcuts while editing text item
- while editing a text item, secondary shortcuts like Shift+Ins have not been processed properly - instead they have been routed to the board controller - add UBApplication::enableEditingShortcuts to enable/disable global action shortcuts for cut/copy/paste - disable these shortcuts while a text item has focus - add missing override annotations in UBGraphicsTextItem.h Signed-off-by: letsfindaway <me@letsfindaway.de>
1 parent 627c1dd commit e5bfe4b

5 files changed

Lines changed: 60 additions & 25 deletions

File tree

src/board/UBBoardController.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2507,13 +2507,14 @@ void UBBoardController::processMimeData(const QMimeData* pMimeData, const QPoint
25072507
if("" != pMimeData->text()){
25082508
// Sometimes, it is possible to have an URL as text. we check here if it is the case
25092509
QString qsTmp = pMimeData->text().remove(QChar('\0'));
2510-
if(qsTmp.startsWith("http"))
2510+
2511+
if (qsTmp.startsWith("http:") || qsTmp.startsWith("https:"))
2512+
{
25112513
downloadURL(QUrl(qsTmp), QString(), pPos);
2512-
else{
2513-
if(mActiveScene->selectedItems().count() && mActiveScene->selectedItems().at(0)->type() == UBGraphicsItemType::TextItemType)
2514-
dynamic_cast<UBGraphicsTextItem*>(mActiveScene->selectedItems().at(0))->setHtml(pMimeData->text());
2515-
else
2516-
mActiveScene->addTextHtml("", pPos)->setHtml(pMimeData->text());
2514+
}
2515+
else
2516+
{
2517+
mActiveScene->addTextHtml("", pPos)->setHtml(qsTmp);
25172518
}
25182519
}
25192520
else{

src/core/UBApplication.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -321,9 +321,7 @@ int UBApplication::exec(const QString& pFileToImport)
321321

322322
mainWindow->setAttribute(Qt::WA_NativeWindow, true);
323323

324-
mainWindow->actionCopy->setShortcuts(QKeySequence::Copy);
325-
mainWindow->actionPaste->setShortcuts(QKeySequence::Paste);
326-
mainWindow->actionCut->setShortcuts(QKeySequence::Cut);
324+
enableEditingShortcuts(true);
327325

328326
UBThumbnailUI::_private::initCatalog();
329327

@@ -745,6 +743,22 @@ void UBApplication::cleanup()
745743
documentController = NULL;
746744
}
747745

746+
void UBApplication::enableEditingShortcuts(bool enable)
747+
{
748+
if (enable)
749+
{
750+
mainWindow->actionCopy->setShortcuts(QKeySequence::Copy);
751+
mainWindow->actionPaste->setShortcuts(QKeySequence::Paste);
752+
mainWindow->actionCut->setShortcuts(QKeySequence::Cut);
753+
}
754+
else
755+
{
756+
mainWindow->actionCopy->setShortcuts({});
757+
mainWindow->actionPaste->setShortcuts({});
758+
mainWindow->actionCut->setShortcuts({});
759+
}
760+
}
761+
748762
QString UBApplication::urlFromHtml(QString html)
749763
{
750764
QString _html;

src/core/UBApplication.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ class UBApplication : public SingleApplication
6868

6969
void cleanup();
7070

71+
void enableEditingShortcuts(bool enable);
72+
7173
static QPointer<QUndoStack> undoStack;
7274

7375
static UBDisplayManager* displayManager;

src/domain/UBGraphicsTextItem.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,21 @@ void UBGraphicsTextItem::keyReleaseEvent(QKeyEvent *event)
323323
QGraphicsTextItem::keyReleaseEvent(event);
324324
}
325325

326+
void UBGraphicsTextItem::focusInEvent(QFocusEvent* event)
327+
{
328+
// disable global editing shortcuts while text item is focussed
329+
// so that they are passed to the item
330+
UBApplication::app()->enableEditingShortcuts(false);
331+
QGraphicsTextItem::focusInEvent(event);
332+
}
333+
334+
void UBGraphicsTextItem::focusOutEvent(QFocusEvent* event)
335+
{
336+
// re-enable global editing shortcuts when loosing focus
337+
UBApplication::app()->enableEditingShortcuts(true);
338+
QGraphicsTextItem::focusOutEvent(event);
339+
}
340+
326341
void UBGraphicsTextItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
327342
{
328343
// Never draw the rubber band, we draw our custom selection with the DelegateFrame

src/domain/UBGraphicsTextItem.h

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,19 @@ class UBGraphicsTextItem : public QGraphicsTextItem, public UBItem, public UBRes
4848

4949
enum { Type = UBGraphicsItemType::TextItemType };
5050

51-
virtual int type() const
51+
virtual int type() const override
5252
{
5353
return Type;
5454
}
5555

56-
virtual UBItem* deepCopy() const;
56+
virtual UBItem* deepCopy() const override;
5757

58-
virtual void copyItemParameters(UBItem *copy) const;
58+
virtual void copyItemParameters(UBItem *copy) const override;
5959

60-
virtual std::shared_ptr<UBGraphicsScene> scene();
60+
virtual std::shared_ptr<UBGraphicsScene> scene() override;
6161

62-
virtual QRectF boundingRect() const;
63-
virtual QPainterPath shape() const;
62+
virtual QRectF boundingRect() const override;
63+
virtual QPainterPath shape() const override;
6464

6565
void setTextWidth(qreal width);
6666
void setTextHeight(qreal height);
@@ -69,9 +69,9 @@ class UBGraphicsTextItem : public QGraphicsTextItem, public UBItem, public UBRes
6969

7070
void contentsChanged();
7171

72-
virtual void resize(qreal w, qreal h);
72+
virtual void resize(qreal w, qreal h) override;
7373

74-
virtual QSizeF size() const;
74+
virtual QSizeF size() const override;
7575

7676
static QColor lastUsedTextColor;
7777

@@ -112,18 +112,21 @@ class UBGraphicsTextItem : public QGraphicsTextItem, public UBItem, public UBRes
112112
void documentSizeChanged(const QSizeF & newSize);
113113

114114
private:
115-
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
116-
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
117-
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
115+
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
116+
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
117+
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
118118

119-
virtual void keyPressEvent(QKeyEvent *event);
120-
virtual void keyReleaseEvent(QKeyEvent *event);
119+
virtual void keyPressEvent(QKeyEvent *event) override;
120+
virtual void keyReleaseEvent(QKeyEvent *event) override;
121121

122-
virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
122+
virtual void focusInEvent(QFocusEvent* event) override;
123+
virtual void focusOutEvent(QFocusEvent* event) override;
123124

124-
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
125+
virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event) override;
125126

126-
virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value);
127+
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
128+
129+
virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
127130

128131
qreal mTextHeight;
129132

0 commit comments

Comments
 (0)