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)