diff --git a/src/gui/clipboardbrowser.cpp b/src/gui/clipboardbrowser.cpp index 024053751fe991da22346011f07a3d09c8af48b4..b16f2f52f2c874cc44f6217ef44d7b67057fef30 100644 --- a/src/gui/clipboardbrowser.cpp +++ b/src/gui/clipboardbrowser.cpp @@ -871,7 +871,16 @@ void ClipboardBrowser::onRowsInserted(const QModelIndex &, int first, int last) QModelIndex current; QItemSelection selection; - const bool select = hasFocus() && isVisible(); + // Select new items only if explicitly asked for + // or select new top item when not actively using the item list. + const bool select = m_selectNewItems + || !currentIndex().isValid() + || (first == 0 + && !isInternalEditorOpen() + && (currentIndex().row() == last + 1 + || !isVisible() + || !isActiveWindow())); + for (int row = first; row <= last; ++row) { if ( !hideFiltered(row) ) { const auto newIndex = index(row); @@ -1042,7 +1051,7 @@ void ClipboardBrowser::dropEvent(QDropEvent *event) return; // handled in mouseMoveEvent() const QVariantMap data = cloneData( *event->mimeData() ); - add(data, m_dragTargetRow); + addAndSelect(data, m_dragTargetRow); m_dragTargetRow = -1; } @@ -1375,7 +1384,12 @@ void ClipboardBrowser::editNew(const QString &text, bool changeClipboard) emit searchHideRequest(); filterItems(nullptr); - if ( add(text) ) + + m_selectNewItems = true; + const bool added = add(text); + m_selectNewItems = false; + + if (added) editItem(currentIndex(), false, changeClipboard); } @@ -1640,6 +1654,14 @@ bool ClipboardBrowser::add(const QVariantMap &data, int row) return true; } +bool ClipboardBrowser::addAndSelect(const QVariantMap &data, int row) +{ + m_selectNewItems = true; + bool added = add(data, row); + m_selectNewItems = false; + return added; +} + void ClipboardBrowser::addUnique(const QVariantMap &data, ClipboardMode mode) { if ( moveToTop(hash(data)) ) { diff --git a/src/gui/clipboardbrowser.h b/src/gui/clipboardbrowser.h index d725a6273eedd00a9c24d78c92dc98acc005f8a3..7f3c539183514704904ef254e771757b09daaadf 100644 --- a/src/gui/clipboardbrowser.h +++ b/src/gui/clipboardbrowser.h @@ -140,6 +140,8 @@ class ClipboardBrowser final : public QListView int row = 0 //!< Target row for the new item (negative to append item). ); + bool addAndSelect(const QVariantMap &data, int row); + /** * Add item and remove duplicates. */ @@ -407,6 +409,8 @@ class ClipboardBrowser final : public QListView QPoint m_dragStartPosition; int m_filterRow = -1; + + bool m_selectNewItems = false; }; #endif // CLIPBOARDBROWSER_H diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 2c7530f00d6998131edb756a61794dd870ffc7b0..d0789bc463941b83d85b3e01e0528ba5959064a1 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -1041,7 +1041,7 @@ void MainWindow::onTabWidgetDropItems(const QString &tabName, const QMimeData *d if (browser) { const QVariantMap dataMap = data->hasFormat(mimeItems) ? cloneData(*data, QStringList() << mimeItems) : cloneData(*data); - browser->add(dataMap, 0); + browser->addAndSelect(dataMap, 0); } } @@ -3540,7 +3540,7 @@ void MainWindow::pasteItems() QModelIndexList list = c->selectionModel()->selectedIndexes(); std::sort( list.begin(), list.end() ); const int row = list.isEmpty() ? 0 : list.first().row(); - c->add( cloneData(*data), row ); + c->addAndSelect( cloneData(*data), row ); } void MainWindow::copyItems() diff --git a/src/scriptable/scriptableproxy.cpp b/src/scriptable/scriptableproxy.cpp index 2f5ddaa185ec919cf91b055a5d9d731895c5efa8..48ebaf1d23b75964a6195d9e83441fa3e4b5f975 100644 --- a/src/scriptable/scriptableproxy.cpp +++ b/src/scriptable/scriptableproxy.cpp @@ -2097,10 +2097,8 @@ void ScriptableProxy::saveData(const QString &tab, const QVariantMap &data, Clip INVOKE2(saveData, (tab, data, mode)); auto c = m_wnd->tab(tab); - if (c) { + if (c) c->addUnique(data, mode); - c->setCurrent(0); - } } void ScriptableProxy::showDataNotification(const QVariantMap &data)