From 044fc8d50cfa1b01bcaea26d251089f8c58f4783 Mon Sep 17 00:00:00 2001 From: Rosa Hase Date: Wed, 23 Mar 2022 22:47:24 +0100 Subject: [PATCH] Use setChangeCurrentOnDrag property to handle drag and drop between tabs .FIXES #7155 --- src/CMakeLists.txt | 1 - src/gui/DatabaseTabWidget.cpp | 6 ++- src/gui/DragTabBar.cpp | 98 ----------------------------------- src/gui/DragTabBar.h | 45 ---------------- 4 files changed, 4 insertions(+), 146 deletions(-) delete mode 100644 src/gui/DragTabBar.cpp delete mode 100644 src/gui/DragTabBar.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 38d162ec8..c4f66e713 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -107,7 +107,6 @@ set(keepassx_SOURCES gui/DatabaseWidgetStateSync.cpp gui/EntryPreviewWidget.cpp gui/DialogyWidget.cpp - gui/DragTabBar.cpp gui/EditWidget.cpp gui/EditWidgetIcons.cpp gui/EditWidgetProperties.cpp diff --git a/src/gui/DatabaseTabWidget.cpp b/src/gui/DatabaseTabWidget.cpp index e75467abe..61ecad5ca 100644 --- a/src/gui/DatabaseTabWidget.cpp +++ b/src/gui/DatabaseTabWidget.cpp @@ -18,6 +18,7 @@ #include "DatabaseTabWidget.h" #include +#include #include "autotype/AutoType.h" #include "core/Tools.h" @@ -26,7 +27,6 @@ #include "gui/DatabaseOpenDialog.h" #include "gui/DatabaseWidget.h" #include "gui/DatabaseWidgetStateSync.h" -#include "gui/DragTabBar.h" #include "gui/FileDialog.h" #include "gui/HtmlExporter.h" #include "gui/MessageBox.h" @@ -42,7 +42,9 @@ DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) , m_dbWidgetPendingLock(nullptr) , m_databaseOpenDialog(new DatabaseOpenDialog(this)) { - auto* tabBar = new DragTabBar(this); + auto* tabBar = new QTabBar(this); + tabBar->setAcceptDrops(true); + tabBar->setChangeCurrentOnDrag(true); setTabBar(tabBar); setDocumentMode(true); diff --git a/src/gui/DragTabBar.cpp b/src/gui/DragTabBar.cpp deleted file mode 100644 index c40cceb75..000000000 --- a/src/gui/DragTabBar.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2012 Felix Geyer - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 or (at your option) - * version 3 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "DragTabBar.h" - -#include -#include -#include - -DragTabBar::DragTabBar(QWidget* parent) - : QTabBar(parent) - , m_tabSwitchTimer(new QTimer(this)) - , m_tabSwitchIndex(-1) -{ - m_tabSwitchTimer->setSingleShot(true); - connect(m_tabSwitchTimer, SIGNAL(timeout()), SLOT(dragSwitchTab())); - - setAcceptDrops(true); -} - -void DragTabBar::dragEnterEvent(QDragEnterEvent* event) -{ - int tab = tabAt(event->pos()); - - if (tab != -1) { - if (tab != currentIndex()) { - m_tabSwitchIndex = tab; - m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); - } - event->setAccepted(true); - } else { - QTabBar::dragEnterEvent(event); - } -} - -void DragTabBar::dragMoveEvent(QDragMoveEvent* event) -{ - int tab = tabAt(event->pos()); - - if (tab != -1) { - if (tab == currentIndex()) { - m_tabSwitchTimer->stop(); - } else if (tab != m_tabSwitchIndex) { - m_tabSwitchIndex = tab; - m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); - } - event->setAccepted(true); - } else { - m_tabSwitchIndex = -1; - m_tabSwitchTimer->stop(); - QTabBar::dragMoveEvent(event); - } -} - -void DragTabBar::dragLeaveEvent(QDragLeaveEvent* event) -{ - m_tabSwitchIndex = -1; - m_tabSwitchTimer->stop(); - QTabBar::dragLeaveEvent(event); -} - -void DragTabBar::dropEvent(QDropEvent* event) -{ - m_tabSwitchIndex = -1; - m_tabSwitchTimer->stop(); - QTabBar::dropEvent(event); -} - -void DragTabBar::tabLayoutChange() -{ - m_tabSwitchIndex = -1; - m_tabSwitchTimer->stop(); - QTabBar::tabLayoutChange(); -} - -void DragTabBar::dragSwitchTab() -{ - int tab = tabAt(mapFromGlobal(QCursor::pos())); - - if (tab != -1 && tab == m_tabSwitchIndex) { - m_tabSwitchIndex = -1; - setCurrentIndex(tab); - } -} diff --git a/src/gui/DragTabBar.h b/src/gui/DragTabBar.h deleted file mode 100644 index 38de10dab..000000000 --- a/src/gui/DragTabBar.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2012 Felix Geyer - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 or (at your option) - * version 3 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef KEEPASSX_DRAGTABBAR_H -#define KEEPASSX_DRAGTABBAR_H - -#include - -class DragTabBar : public QTabBar -{ - Q_OBJECT - -public: - explicit DragTabBar(QWidget* parent = nullptr); - -protected: - void dragEnterEvent(QDragEnterEvent* event) override; - void dragMoveEvent(QDragMoveEvent* event) override; - void dragLeaveEvent(QDragLeaveEvent* event) override; - void dropEvent(QDropEvent* event) override; - void tabLayoutChange() override; - -private slots: - void dragSwitchTab(); - -private: - QTimer* const m_tabSwitchTimer; - int m_tabSwitchIndex; -}; - -#endif // KEEPASSX_DRAGTABBAR_H