]> git.lyx.org Git - lyx.git/commitdiff
Fixup [152811a27d242/lyxgit]
authorJuergen Spitzmueller <spitz@lyx.org>
Sun, 23 Jun 2024 12:47:43 +0000 (14:47 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Sun, 23 Jun 2024 12:47:43 +0000 (14:47 +0200)
tabBarClicked() should really only reset focus if a click in a different
TabBarGroup happened. And no need to issue workAreaChanged() again.

This has lead to extra and erroneous focus changes (see #12954)

src/frontends/qt/GuiView.cpp
src/frontends/qt/GuiView.h
src/frontends/qt/GuiWorkArea.cpp
src/frontends/qt/GuiWorkArea.h

index f86f53e7a96d2266b293ea5f6570eb8492c9be44..3b24846852df2c6b62f0f57ce1afa4376fb1ca03 100644 (file)
@@ -1927,6 +1927,12 @@ GuiWorkArea const * GuiView::currentWorkArea() const
 }
 
 
+TabWorkArea * GuiView::currentTabWorkArea() const
+{
+       return d.currentTabWorkArea();
+}
+
+
 GuiWorkArea * GuiView::currentWorkArea()
 {
        return d.current_work_area_;
index 18a5672239db36e3d0cab268383cebca2437e9e6..b7726e02305bd78c3bace4a3fb5a02bc012c9a47 100644 (file)
@@ -209,6 +209,8 @@ public:
        void removeWorkArea(GuiWorkArea * work_area);
        /// return true if \c wa is one of the visibles workareas of this view
        bool hasVisibleWorkArea(GuiWorkArea * wa) const;
+       ///
+       TabWorkArea * currentTabWorkArea() const;
        /// return the current WorkArea (the one that has the focus).
        GuiWorkArea const * currentWorkArea() const;
        /// return the current WorkArea (the one that has the focus).
index bd263aa3cc10059f06335c405d2a2fc5057fc622..625ea513524bf7c4388a39e2cc04f840a8948f59 100644 (file)
@@ -1644,7 +1644,7 @@ TabWorkArea::TabWorkArea(QWidget * parent)
                this, SLOT(on_currentTabChanged(int)));
        // Fix for #11835
        QObject::connect(this, SIGNAL(tabBarClicked(int)),
-               this, SLOT(on_currentTabChanged(int)));
+               this, SLOT(on_tabBarClicked(int)));
 
        closeBufferButton = new QToolButton(this);
        closeBufferButton->setPalette(pal);
@@ -1925,6 +1925,22 @@ bool TabWorkArea::removeWorkArea(GuiWorkArea * work_area)
 }
 
 
+void TabWorkArea::on_tabBarClicked(int i)
+{
+       // returns e.g. on application destruction
+       if (i == -1)
+               return;
+
+       // if we click on a tab in a different TabWorkArea,
+       // focus needs to be set (#11835)
+       if (currentWorkArea() && currentWorkArea()->view().currentTabWorkArea() != this) {
+               GuiWorkArea * wa = workArea(i);
+               LASSERT(wa, return);
+               wa->setFocus();
+       }
+}
+
+
 void TabWorkArea::on_currentTabChanged(int i)
 {
        // returns e.g. on application destruction
index 12f642c54fa31cf2499bade61394bd3724c11d29..9075fbe20e910d4e7ec624e66994b5937af4b7ed 100644 (file)
@@ -267,6 +267,8 @@ private Q_SLOTS:
        ///
        void on_currentTabChanged(int index);
        ///
+       void on_tabBarClicked(int index);
+       ///
        void showContextMenu(const QPoint & pos);
        /// enable closing tab on middle-click
        void mousePressEvent(QMouseEvent * me) override;