diff --git a/src/lib/3rdparty/lineedit.cpp b/src/lib/3rdparty/lineedit.cpp index 613576c12..a56bc45ea 100644 --- a/src/lib/3rdparty/lineedit.cpp +++ b/src/lib/3rdparty/lineedit.cpp @@ -154,9 +154,10 @@ void LineEdit::init() // Connections to update edit actions connect(this, SIGNAL(textChanged(QString)), this, SLOT(updateActions())); connect(this, SIGNAL(selectionChanged()), this, SLOT(updateActions())); - connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(updateActions())); + connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(updatePasteActions())); updateActions(); + updatePasteActions(); } bool LineEdit::event(QEvent* event) @@ -236,11 +237,19 @@ void LineEdit::updateActions() m_editActions[Redo]->setEnabled(!isReadOnly() && isRedoAvailable()); m_editActions[Cut]->setEnabled(!isReadOnly() && hasSelectedText() && echoMode() == QLineEdit::Normal); m_editActions[Copy]->setEnabled(hasSelectedText() && echoMode() == QLineEdit::Normal); - m_editActions[Paste]->setEnabled(!isReadOnly() && !QApplication::clipboard()->text().isEmpty()); m_editActions[Delete]->setEnabled(!isReadOnly() && hasSelectedText()); m_editActions[SelectAll]->setEnabled(!text().isEmpty() && selectedText() != text()); } +void LineEdit::updatePasteActions() +{ + // Paste actions are updated in separate slot because accessing clipboard is expensive + bool pasteEnabled = !isReadOnly() && !QApplication::clipboard()->text().isEmpty(); + + m_editActions[Paste]->setEnabled(pasteEnabled); + m_editActions[PasteAndGo]->setEnabled(pasteEnabled); +} + void LineEdit::slotDelete() { if (hasSelectedText()) { diff --git a/src/lib/3rdparty/lineedit.h b/src/lib/3rdparty/lineedit.h index f495c7d23..d72b72432 100644 --- a/src/lib/3rdparty/lineedit.h +++ b/src/lib/3rdparty/lineedit.h @@ -124,6 +124,7 @@ protected: private slots: void updateActions(); + void updatePasteActions(); void slotDelete(); private: