]> git.lyx.org Git - features.git/commitdiff
Make tab movement visible (#10733)
authorGuillaume Munch <gadmm@free.fr>
Thu, 4 Oct 2018 23:52:21 +0000 (19:52 -0400)
committerRichard Kimberly Heck <rikiheck@lyx.org>
Thu, 4 Oct 2018 23:52:21 +0000 (19:52 -0400)
The nice hand-made solution for moving tabs has made its time. Use Qt's feature
instead from now on.

src/frontends/qt4/GuiWorkArea.cpp
src/frontends/qt4/GuiWorkArea.h

index 11f8da81fd3415e8fa20d942dfd49545b629610a..4244cee71e0b79607823384f581a941bf79c6484 100644 (file)
@@ -1556,19 +1556,19 @@ TabWorkArea::TabWorkArea(QWidget * parent)
                this, SLOT(closeCurrentBuffer()));
        setCornerWidget(closeBufferButton, Qt::TopRightCorner);
 
-       // setup drag'n'drop
-       QTabBar* tb = new DragTabBar;
-       connect(tb, SIGNAL(tabMoveRequested(int, int)),
-               this, SLOT(moveTab(int, int)));
+       // set TabBar behaviour
+       QTabBar * tb = tabBar();
+       tb->setTabsClosable(!lyxrc.single_close_tab_button);
+       tb->setSelectionBehaviorOnRemove(QTabBar::SelectPreviousTab);
        tb->setElideMode(Qt::ElideNone);
-       setTabBar(tb);
-
+       // allow dragging tabs
+       tb->setMovable(true);
        // make us responsible for the context menu of the tabbar
        tb->setContextMenuPolicy(Qt::CustomContextMenu);
        connect(tb, SIGNAL(customContextMenuRequested(const QPoint &)),
-               this, SLOT(showContextMenu(const QPoint &)));
+               this, SLOT(showContextMenu(const QPoint &)));
        connect(tb, SIGNAL(tabCloseRequested(int)),
-               this, SLOT(closeTab(int)));
+               this, SLOT(closeTab(int)));
 
        setUsesScrollButtons(true);
 }
@@ -2083,7 +2083,7 @@ void TabWorkArea::updateTabTexts()
 void TabWorkArea::showContextMenu(const QPoint & pos)
 {
        // which tab?
-       clicked_tab_ = static_cast<DragTabBar *>(tabBar())->tabAt(pos);
+       clicked_tab_ = tabBar()->tabAt(pos);
        if (clicked_tab_ == -1)
                return;
 
@@ -2112,84 +2112,6 @@ void TabWorkArea::moveTab(int fromIndex, int toIndex)
 }
 
 
-DragTabBar::DragTabBar(QWidget* parent)
-       : QTabBar(parent)
-{
-       setAcceptDrops(true);
-       setTabsClosable(!lyxrc.single_close_tab_button);
-}
-
-
-void DragTabBar::mousePressEvent(QMouseEvent * event)
-{
-       if (event->button() == Qt::LeftButton)
-               dragStartPos_ = event->pos();
-       QTabBar::mousePressEvent(event);
-}
-
-
-void DragTabBar::mouseMoveEvent(QMouseEvent * event)
-{
-       // If the left button isn't pressed anymore then return
-       if (!(event->buttons() & Qt::LeftButton))
-               return;
-
-       // If the distance is too small then return
-       if ((event->pos() - dragStartPos_).manhattanLength()
-           < QApplication::startDragDistance())
-               return;
-
-       // did we hit something after all?
-       int tab = tabAt(dragStartPos_);
-       if (tab == -1)
-               return;
-
-       // simulate button release to remove highlight from button
-       int i = currentIndex();
-       QMouseEvent me(QEvent::MouseButtonRelease, dragStartPos_,
-               event->button(), event->buttons(), 0);
-       QTabBar::mouseReleaseEvent(&me);
-       setCurrentIndex(i);
-
-       // initiate Drag
-       QDrag * drag = new QDrag(this);
-       QMimeData * mimeData = new QMimeData;
-       // a crude way to distinguish tab-reodering drops from other ones
-       mimeData->setData("action", "tab-reordering") ;
-       drag->setMimeData(mimeData);
-
-       // get tab pixmap as cursor
-       QRect r = tabRect(tab);
-       QPixmap pixmap(r.size());
-       render(&pixmap, - r.topLeft());
-       drag->setPixmap(pixmap);
-       drag->exec();
-}
-
-
-void DragTabBar::dragEnterEvent(QDragEnterEvent * event)
-{
-       // Only accept if it's an tab-reordering request
-       QMimeData const * m = event->mimeData();
-       QStringList formats = m->formats();
-       if (formats.contains("action")
-           && m->data("action") == "tab-reordering")
-               event->acceptProposedAction();
-}
-
-
-void DragTabBar::dropEvent(QDropEvent * event)
-{
-       int fromIndex = tabAt(dragStartPos_);
-       int toIndex = tabAt(event->pos());
-
-       // Tell interested objects that
-       if (fromIndex != toIndex)
-               tabMoveRequested(fromIndex, toIndex);
-       event->acceptProposedAction();
-}
-
-
 GuiWorkAreaContainer::GuiWorkAreaContainer(GuiWorkArea * wa, QWidget * parent)
        : QWidget(parent), wa_(wa)
 {
index 39d2054217b658682c741f3a96951805ecb489b3..22e8bfdc0a32cc0589ee605230d714520baf8490 100644 (file)
@@ -276,33 +276,6 @@ private:
 }; // TabWorkArea
 
 
-class DragTabBar : public QTabBar
-{
-       Q_OBJECT
-public:
-       ///
-       DragTabBar(QWidget * parent = 0);
-
-protected:
-       ///
-       void mousePressEvent(QMouseEvent * event);
-       ///
-       void mouseMoveEvent(QMouseEvent * event);
-       ///
-       void dragEnterEvent(QDragEnterEvent * event);
-       ///
-       void dropEvent(QDropEvent * event);
-
-private:
-       ///
-       QPoint dragStartPos_;
-
-Q_SIGNALS:
-       ///
-       void tabMoveRequested(int fromIndex, int toIndex);
-};
-
-
 class GuiWorkAreaContainer : public QWidget, public Ui::WorkAreaUi
 {
        Q_OBJECT