commit 527984ed2e0269861f5e1efc021fa0302d80819b
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Mon Apr 29 14:22:57 2024 +0200

    Fix up 'Reduce metrics updates from 4 to 1 when loading file'
    
    The missing metrics computation meant that, when loading a file, the
    workarea would not be scrolled correctly to show the cursor.
    
    The resizeBufferView does not create an additional metrics
    computation, it just triggers it earlier.
---
 src/BufferView.cpp                     |  2 +-
 src/frontends/qt/GuiView.cpp           |  1 +
 src/frontends/qt/GuiWorkArea.cpp       | 26 +++++++++++++-------------
 src/frontends/qt/GuiWorkArea.h         |  2 ++
 src/frontends/qt/GuiWorkArea_Private.h |  3 ---
 5 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 292b0f6a01..3c35d75ec8 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -214,7 +214,7 @@ struct BufferView::Private
        Private(BufferView & bv) :
                update_strategy_(FullScreenUpdate),
                update_flags_(Update::Force),
-               cursor_(bv), anchor_pit_(0), anchor_ypos_(0),
+               cursor_(bv), anchor_pit_(0), anchor_ypos_(10000),
                wh_(0), inlineCompletionUniqueChars_(0),
                last_inset_(nullptr), mouse_position_cache_(),
                gui_(nullptr), bookmark_edit_position_(-1),
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index 94a0a84be2..b4c412be6d 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -2119,6 +2119,7 @@ void GuiView::setBuffer(Buffer * newBuffer, bool 
switch_to)
                newBuffer->masterBuffer()->updateBuffer();
                setBusy(false);
                wa = addWorkArea(*newBuffer);
+               wa->resizeBufferView();
                // scroll to the position when the BufferView was last closed
                if (lyxrc.use_lastfilepos) {
                        LastFilePosSection::FilePos filepos =
diff --git a/src/frontends/qt/GuiWorkArea.cpp b/src/frontends/qt/GuiWorkArea.cpp
index d860d29b60..5935baaf77 100644
--- a/src/frontends/qt/GuiWorkArea.cpp
+++ b/src/frontends/qt/GuiWorkArea.cpp
@@ -455,33 +455,33 @@ void GuiWorkArea::Private::dispatch(FuncRequest const & 
cmd)
 }
 
 
-void GuiWorkArea::Private::resizeBufferView()
+void GuiWorkArea::resizeBufferView()
 {
        // WARNING: Please don't put any code that will trigger a repaint here!
        // We are already inside a paint event.
-       p->stopBlinkingCaret();
+       stopBlinkingCaret();
        // Warn our container (GuiView).
-       p->busy(true);
+       busy(true);
 
-       bool const caret_in_view = buffer_view_->caretInView();
-       buffer_view_->resize(p->viewport()->width(), p->viewport()->height());
+       bool const caret_in_view = d->buffer_view_->caretInView();
+       d->buffer_view_->resize(viewport()->width(), viewport()->height());
        if (caret_in_view)
-               buffer_view_->showCursor();
-       resetCaret();
+               d->buffer_view_->showCursor();
+       d->resetCaret();
 
        // Update scrollbars which might have changed due different
        // BufferView dimension. This is especially important when the
        // BufferView goes from zero-size to the real-size for the first time,
        // as the scrollbar parameters are then set for the first time.
-       updateScrollbar();
+       d->updateScrollbar();
 
-       need_resize_ = false;
-       p->busy(false);
+       d->need_resize_ = false;
+       busy(false);
        // Eventually, restart the caret after the resize event.
        // We might be resizing even if the focus is on another widget so we 
only
        // restart the caret if we have the focus.
-       if (p->hasFocus())
-               QTimer::singleShot(50, p, SLOT(startBlinkingCaret()));
+       if (hasFocus())
+               QTimer::singleShot(50, this, SLOT(startBlinkingCaret()));
 }
 
 
@@ -1393,7 +1393,7 @@ void GuiWorkArea::paintEvent(QPaintEvent * ev)
 
        if (d->need_resize_ || pixelRatio() != d->last_pixel_ratio_) {
                d->resetScreen();
-               d->resizeBufferView();
+               resizeBufferView();
        }
 
        d->last_pixel_ratio_ = pixelRatio();
diff --git a/src/frontends/qt/GuiWorkArea.h b/src/frontends/qt/GuiWorkArea.h
index 86bbfda939..8cb0771c0f 100644
--- a/src/frontends/qt/GuiWorkArea.h
+++ b/src/frontends/qt/GuiWorkArea.h
@@ -63,6 +63,8 @@ public:
        ///
        BufferView const & bufferView() const override;
        ///
+       void resizeBufferView();
+       ///
        void scheduleRedraw(bool update_metrics) override;
 
        /// return true if the key is part of a shortcut
diff --git a/src/frontends/qt/GuiWorkArea_Private.h 
b/src/frontends/qt/GuiWorkArea_Private.h
index 42dcef836c..672cba2056 100644
--- a/src/frontends/qt/GuiWorkArea_Private.h
+++ b/src/frontends/qt/GuiWorkArea_Private.h
@@ -77,9 +77,6 @@ struct GuiWorkArea::Private
        ///
        ~Private();
 
-       ///
-       void resizeBufferView();
-
        ///
        void dispatch(FuncRequest const & cmd0);
        /// Make caret visible and signal that its geometry needs to be updated
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to