Skip to content

Commit 40d122b

Browse files
committed
Avoid removing items when dropping to a tab fails
1 parent 4a77cad commit 40d122b

File tree

7 files changed

+15
-10
lines changed

7 files changed

+15
-10
lines changed

src/gui/mainwindow.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,14 +1136,15 @@ void MainWindow::onClipboardCommandActionTriggered(CommandAction *commandAction,
11361136
action( actionData, command, QModelIndex() );
11371137
}
11381138

1139-
void MainWindow::onTabWidgetDropItems(const QString &tabName, const QMimeData *data)
1139+
void MainWindow::onTabWidgetDropItems(const QString &tabName, const QMimeData *data, bool *accepted)
11401140
{
11411141
auto browser = tab(tabName);
11421142

11431143
if (browser) {
11441144
const QVariantMap dataMap = data->hasFormat(mimeItems)
11451145
? cloneData(data, QStringList() << mimeItems) : cloneData(data);
1146-
browser->addAndSelect(dataMap, 0);
1146+
if ( browser->addAndSelect(dataMap, 0) )
1147+
*accepted = true;
11471148
}
11481149
}
11491150

src/gui/mainwindow.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ class MainWindow final : public QMainWindow
486486
void onItemCommandActionTriggered(CommandAction *commandAction, const QString &triggeredShortcut);
487487
void onClipboardCommandActionTriggered(CommandAction *commandAction, const QString &triggeredShortcut);
488488

489-
void onTabWidgetDropItems(const QString &tabName, const QMimeData *data);
489+
void onTabWidgetDropItems(const QString &tabName, const QMimeData *data, bool *accepted);
490490

491491
void showContextMenuAt(QPoint position);
492492

src/gui/tabbar.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,10 @@ void TabBar::dropEvent(QDropEvent *event)
184184
int tabIndex = dropItemsTabIndex(*event, *this);
185185

186186
if ( tabIndex != -1 ) {
187-
acceptDrag(event);
188-
emit dropItems( tabName(tabIndex), event->mimeData() );
187+
bool accepted = false;
188+
emit dropItems( tabName(tabIndex), event->mimeData(), &accepted );
189+
if (accepted)
190+
acceptDrag(event);
189191
} else {
190192
QTabBar::dropEvent(event);
191193
}

src/gui/tabbar.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class TabBar final : public QTabBar, public TabsWidgetInterface
4949
signals:
5050
void tabBarMenuRequested(const QPoint &pos, int tab);
5151
void tabRenamed(const QString &newName, int index);
52-
void dropItems(const QString &tabName, const QMimeData *data);
52+
void dropItems(const QString &tabName, const QMimeData *data, bool *accepted);
5353

5454
protected:
5555
void contextMenuEvent(QContextMenuEvent *event) override;

src/gui/tabtree.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -559,8 +559,10 @@ void TabTree::dropEvent(QDropEvent *event)
559559

560560
const auto targetItem = dropItemsTarget(*event, *this);
561561
if (targetItem) {
562-
acceptDrag(event);
563-
emit dropItems( getTabPath(targetItem), event->mimeData() );
562+
bool accepted = false;
563+
emit dropItems( getTabPath(targetItem), event->mimeData(), &accepted );
564+
if (accepted)
565+
acceptDrag(event);
564566
} else if ( itemAt(event->pos()) ) {
565567
const QString oldPrefix = getTabPath(current);
566568

src/gui/tabtree.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class TabTree final : public QTreeWidget, public TabsWidgetInterface
7070
void currentTabChanged(int index);
7171
void tabTreeMenuRequested(const QPoint &pos, const QString &groupPath);
7272
void tabsMoved(const QString &oldPrefix, const QString &newPrefix, const QList<int> &indexes);
73-
void dropItems(const QString &tabName, const QMimeData *data);
73+
void dropItems(const QString &tabName, const QMimeData *data, bool *accepted);
7474

7575
protected:
7676
void contextMenuEvent(QContextMenuEvent *event) override;

src/gui/tabwidget.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class TabWidget final : public QWidget
9090
void tabRenamed(const QString &newName, int index);
9191
void currentChanged(int tabIndex, int oldTabIndex);
9292
void tabCloseRequested(int);
93-
void dropItems(const QString &tabName, const QMimeData *data);
93+
void dropItems(const QString &tabName, const QMimeData *data, bool *accepted);
9494

9595
protected:
9696
bool eventFilter(QObject *object, QEvent *event) override;

0 commit comments

Comments
 (0)