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)

(cherry picked from commit 026c4bd726)
This commit is contained in:
Juergen Spitzmueller 2024-06-23 14:47:43 +02:00
parent 6aef9e394e
commit 2cc5ca27fd
4 changed files with 27 additions and 1 deletions

View File

@ -1926,6 +1926,12 @@ GuiWorkArea const * GuiView::currentWorkArea() const
}
TabWorkArea * GuiView::currentTabWorkArea() const
{
return d.currentTabWorkArea();
}
GuiWorkArea * GuiView::currentWorkArea()
{
return d.current_work_area_;

View 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).

View File

@ -1648,7 +1648,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);
@ -1928,6 +1928,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

View File

@ -265,6 +265,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;