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;