[LyX/master] Only fix simple search height if there are no other widgets in the dock area (#13005)
Juergen Spitzmueller
spitz at lyx.org
Sat Jan 13 09:32:03 UTC 2024
commit 6f4054222ce42ee49294e7a778842c3ff1ceaabe
Author: Juergen Spitzmueller <spitz at lyx.org>
Date: Sat Jan 13 11:58:35 2024 +0100
Only fix simple search height if there are no other widgets in the dock area (#13005)
---
src/frontends/qt/DockView.cpp | 3 ++
src/frontends/qt/GuiSearch.cpp | 50 +++++++++++++++++++++++++++++++++------
src/frontends/qt/GuiSearch.h | 3 ++
src/frontends/qt/GuiView.h | 4 +++
4 files changed, 52 insertions(+), 8 deletions(-)
diff --git a/src/frontends/qt/DockView.cpp b/src/frontends/qt/DockView.cpp
index ef204e2..81696c9 100644
--- a/src/frontends/qt/DockView.cpp
+++ b/src/frontends/qt/DockView.cpp
@@ -31,6 +31,9 @@ DockView::DockView(GuiView & parent, QString const & name,
hide();
connect(&parent, SIGNAL(bufferViewChanged()),
this, SLOT(onBufferViewChanged()));
+ connect(this, SIGNAL(visibilityChanged(bool)),
+ &parent, SLOT(onDockWidgetVisibilityChanged()));
+
// Make dock widgets sub windows to prevent focusNextPrevChild
// (Tab key) switching to the parent rather than to the next
diff --git a/src/frontends/qt/GuiSearch.cpp b/src/frontends/qt/GuiSearch.cpp
index 3ca4f49..c702287 100644
--- a/src/frontends/qt/GuiSearch.cpp
+++ b/src/frontends/qt/GuiSearch.cpp
@@ -67,9 +67,6 @@ GuiSearchWidget::GuiSearchWidget(QWidget * parent, GuiView & view)
{
setupUi(this);
- // fix height to minimum
- setFixedHeight(sizeHint().height());
-
// align items in grid on top
gridLayout->setAlignment(Qt::AlignTop);
@@ -126,6 +123,9 @@ GuiSearchWidget::GuiSearchWidget(QWidget * parent, GuiView & view)
replacePB->setEnabled(false);
replacePrevPB->setEnabled(false);
replaceallPB->setEnabled(false);
+
+ connect(&view_, SIGNAL(dockWidgetVisibilityChanged()),
+ this, SLOT(onDockWidgetVisibilityChanged()));
}
@@ -568,6 +568,25 @@ void GuiSearchWidget::restoreSession(QString const & session_key)
}
+bool GuiSearchWidget::hasCoWidgets(QDockWidget * dw)
+{
+ int res = 0;
+ QList<QDockWidget *> dockWidgets = view_.findChildren<QDockWidget *>();
+ for (int i = 0; i < dockWidgets.size(); ++i) {
+ if (dockWidgets.at(i)->isVisible()
+ && view_.dockWidgetArea(dockWidgets.at(i)) == view_.dockWidgetArea(dw))
+ ++res;
+ }
+ return res > 1;
+}
+
+
+void GuiSearchWidget::onDockWidgetVisibilityChanged()
+{
+ Q_EMIT needSizeUpdate();
+}
+
+
GuiSearch::GuiSearch(GuiView & parent, Qt::DockWidgetArea area, Qt::WindowFlags flags)
: DockView(parent, "findreplace", qt_("Search and Replace"), area, flags),
widget_(new GuiSearchWidget(this, parent))
@@ -661,13 +680,28 @@ void GuiSearch::updateTitle()
void GuiSearch::updateSize()
{
- widget_->setFixedHeight(widget_->sizeHint().height());
- if (widget_->isMinimized())
- setFixedHeight(widget_->sizeHint().height());
- else {
- // undo setFixedHeight
+ // This can be triggered before the search widget is visible
+ // Nothing to do in that case
+ if (!widget_->isVisible())
+ return;
+
+ // if we have more than this widget in the current dock
+ // we do not fix the size as other widgets might want to
+ // remain resizable
+ if (widget_->hasCoWidgets(this)) {
+ widget_->setMaximumHeight(QWIDGETSIZE_MAX);
+ widget_->setMinimumHeight(0);
setMaximumHeight(QWIDGETSIZE_MAX);
setMinimumHeight(0);
+ } else {
+ widget_->setFixedHeight(widget_->sizeHint().height());
+ if (widget_->isMinimized())
+ setFixedHeight(widget_->sizeHint().height());
+ else {
+ // undo setFixedHeight
+ setMaximumHeight(QWIDGETSIZE_MAX);
+ setMinimumHeight(0);
+ }
}
update();
}
diff --git a/src/frontends/qt/GuiSearch.h b/src/frontends/qt/GuiSearch.h
index 89234fe..bb3b523 100644
--- a/src/frontends/qt/GuiSearch.h
+++ b/src/frontends/qt/GuiSearch.h
@@ -43,6 +43,8 @@ public:
bool initialiseParams(std::string const &);
///
bool isMinimized() { return minimized_; }
+ ///
+ bool hasCoWidgets(QDockWidget * dw);
private Q_SLOTS:
void findChanged();
@@ -59,6 +61,7 @@ private Q_SLOTS:
void immediateActTriggered();
void immediateClicked();
void wrapActTriggered();
+ void onDockWidgetVisibilityChanged();
Q_SIGNALS:
void needTitleBarUpdate() const;
void needSizeUpdate() const;
diff --git a/src/frontends/qt/GuiView.h b/src/frontends/qt/GuiView.h
index d55472d..ac6d293 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -232,6 +232,8 @@ Q_SIGNALS:
void scriptKilled();
/// emitted when track changes status toggled
void changeTrackingToggled(bool);
+ ///
+ void dockWidgetVisibilityChanged();
public Q_SLOTS:
///
@@ -245,6 +247,8 @@ public Q_SLOTS:
void updateWindowTitle(GuiWorkArea * wa);
///
void disableShellEscape();
+ ///
+ void onDockWidgetVisibilityChanged() { Q_EMIT dockWidgetVisibilityChanged(); }
private Q_SLOTS:
///
More information about the lyx-cvs
mailing list