commit 28a912424171e87c43634c1ec7e4e101a4caa692
Author: Daniel Ramoeller <d....@web.de>
Date:   Sun Jun 11 10:26:35 2023 +0200

    Fix combined zoom widget on windows (bug #12803).
---
 src/frontends/qt/GuiView.cpp |   28 +++++++++++++++-------------
 src/frontends/qt/GuiView.h   |    2 ++
 2 files changed, 17 insertions(+), 13 deletions(-)

diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index e74a532..dca336a 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -658,8 +658,6 @@ GuiView::GuiView(int id)
        connect(stat_counts_, SIGNAL(clicked()), this, SLOT(statsPressed()));
 
        zoom_slider_ = new QSlider(Qt::Horizontal, statusBar());
-       // Small size slider for macOS to prevent the status bar from enlarging
-       zoom_slider_->setAttribute(Qt::WA_MacSmallSize);
 #if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
        zoom_slider_->setFixedWidth(fm.horizontalAdvance('x') * 15);
 #else
@@ -691,14 +689,22 @@ GuiView::GuiView(int id)
        zoom_out_->setFixedSize(s);
        zoom_out_->setAlignment(Qt::AlignCenter);
 
-       statusBar()->addPermanentWidget(zoom_out_);
+
+       zoom_widget_ = new QWidget(statusBar());
+       zoom_widget_->setAttribute(Qt::WA_MacSmallSize);
+       zoom_widget_->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+       zoom_widget_->setLayout(new QHBoxLayout());
+       zoom_widget_->layout()->setSpacing(5);
+       zoom_widget_->layout()->setContentsMargins(0,0,0,0);
+       zoom_widget_->layout()->addWidget(zoom_out_);
+       zoom_widget_->layout()->addWidget(zoom_slider_);
+       zoom_widget_->layout()->addWidget(zoom_in_);
+       statusBar()->addPermanentWidget(zoom_widget_);
        zoom_out_->setEnabled(currentBufferView()
                              && zoom_slider_->value() > 
zoom_slider_->minimum());
-       statusBar()->addPermanentWidget(zoom_slider_);
        zoom_slider_->setEnabled(currentBufferView());
        zoom_in_->setEnabled(currentBufferView()
                             && zoom_slider_->value() < 
zoom_slider_->maximum());
-       statusBar()->addPermanentWidget(zoom_in_);
 
        connect(zoom_slider_, SIGNAL(sliderMoved(int)), this, 
SLOT(zoomSliderMoved(int)));
        connect(zoom_slider_, SIGNAL(valueChanged(int)), this, 
SLOT(zoomValueChanged(int)));
@@ -993,7 +999,7 @@ void GuiView::saveLayout() const
        settings.setValue("layout", saveState(0));
        settings.setValue("icon_size", toqstr(d.iconSize(iconSize())));
        settings.setValue("zoom_value_visible", zoom_value_->isVisible());
-       settings.setValue("zoom_slider_visible", zoom_slider_->isVisible());
+       settings.setValue("zoom_slider_visible", zoom_widget_->isVisible());
        settings.setValue("word_count_enabled", word_count_enabled_);
        settings.setValue("char_count_enabled", char_count_enabled_);
        settings.setValue("char_nb_count_enabled", char_nb_count_enabled_);
@@ -1044,9 +1050,7 @@ bool GuiView::restoreLayout()
        zoom_value_->setVisible(settings.value("zoom_value_visible", 
true).toBool());
 
        bool const show_zoom_slider = settings.value("zoom_slider_visible", 
true).toBool();
-       zoom_slider_->setVisible(show_zoom_slider);
-       zoom_in_->setVisible(show_zoom_slider);
-       zoom_out_->setVisible(show_zoom_slider);
+       zoom_widget_->setVisible(show_zoom_slider);
 
        word_count_enabled_ = settings.value("word_count_enabled", 
true).toBool();
        char_count_enabled_ = settings.value("char_count_enabled", 
true).toBool();
@@ -2566,7 +2570,7 @@ bool GuiView::getStatus(FuncRequest const & cmd, 
FuncStatus & flag)
                if (cmd.argument() == "zoomlevel") {
                        flag.setOnOff(zoom_value_ ? zoom_value_->isVisible() : 
false);
                } else if (cmd.argument() == "zoomslider") {
-                       flag.setOnOff(zoom_slider_ ? zoom_slider_->isVisible() 
: false);
+                       flag.setOnOff(zoom_widget_ ? zoom_widget_->isVisible() 
: false);
                } else if (cmd.argument() == "statistics-w") {
                        flag.setOnOff(word_count_enabled_);
                } else if (cmd.argument() == "statistics-cb") {
@@ -5108,9 +5112,7 @@ bool GuiView::lfunUiToggle(string const & ui_component)
        } else if (ui_component == "zoomlevel") {
                zoom_value_->setVisible(!zoom_value_->isVisible());
        } else if (ui_component == "zoomslider") {
-               zoom_slider_->setVisible(!zoom_slider_->isVisible());
-               zoom_in_->setVisible(zoom_slider_->isVisible());
-               zoom_out_->setVisible(zoom_slider_->isVisible());
+               zoom_widget_->setVisible(!zoom_widget_->isVisible());
        } else if (ui_component == "statistics-w") {
                word_count_enabled_ = !word_count_enabled_;
                if (statsEnabled())
diff --git a/src/frontends/qt/GuiView.h b/src/frontends/qt/GuiView.h
index 8453c47..d55472d 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -535,6 +535,8 @@ private:
        bool char_nb_count_enabled_;
        /// Statusbar widget that shows zoom value
        GuiClickableLabel * zoom_value_;
+       /// The zoom widget
+       QWidget * zoom_widget_;
        /// The zoom slider widget
        QSlider * zoom_slider_;
        /// Zoom in ("+") Button
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to