commit 026c4bd726f36623772dc152740f709ce9972415
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Sun Jun 23 14:47:43 2024 +0200

    Fixup [152811a27d242/lyxgit]
    
    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     |  6 ++++++
 src/frontends/qt/GuiView.h       |  2 ++
 src/frontends/qt/GuiWorkArea.cpp | 18 +++++++++++++++++-
 src/frontends/qt/GuiWorkArea.h   |  2 ++
 4 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index f86f53e7a9..3b24846852 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -1927,6 +1927,12 @@ GuiWorkArea const * GuiView::currentWorkArea() const
 }
 
 
+TabWorkArea * GuiView::currentTabWorkArea() const
+{
+       return d.currentTabWorkArea();
+}
+
+
 GuiWorkArea * GuiView::currentWorkArea()
 {
        return d.current_work_area_;
diff --git a/src/frontends/qt/GuiView.h b/src/frontends/qt/GuiView.h
index 18a5672239..b7726e0230 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -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).
diff --git a/src/frontends/qt/GuiWorkArea.cpp b/src/frontends/qt/GuiWorkArea.cpp
index bd263aa3cc..625ea51352 100644
--- a/src/frontends/qt/GuiWorkArea.cpp
+++ b/src/frontends/qt/GuiWorkArea.cpp
@@ -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
diff --git a/src/frontends/qt/GuiWorkArea.h b/src/frontends/qt/GuiWorkArea.h
index 12f642c54f..9075fbe20e 100644
--- a/src/frontends/qt/GuiWorkArea.h
+++ b/src/frontends/qt/GuiWorkArea.h
@@ -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;
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to