]> git.lyx.org Git - lyx.git/commitdiff
Fix up 'Reduce metrics updates from 4 to 1 when loading file'
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 29 Apr 2024 12:22:57 +0000 (14:22 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 29 Apr 2024 16:02:14 +0000 (18:02 +0200)
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
src/frontends/qt/GuiView.cpp
src/frontends/qt/GuiWorkArea.cpp
src/frontends/qt/GuiWorkArea.h
src/frontends/qt/GuiWorkArea_Private.h

index 292b0f6a014c11f392c74f777415a597eb7af161..3c35d75ec872a9a378a3cc2a48441cbb1ccfc189 100644 (file)
@@ -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),
index 94a0a84be2d378d0a46d5dc4a81faad4a4cc4b72..b4c412be6d8124368c37a9aba0b04417cc9caa01 100644 (file)
@@ -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 =
index d860d29b60adb50d3cb72773fbf0ca2405daa7ed..5935baaf77686ffd93ef052787631de913a9aa64 100644 (file)
@@ -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();
index 86bbfda93906bf6ded27c5f790b77c96dc2b6204..8cb0771c0f2372953436cd21cb4b842679d6f57d 100644 (file)
@@ -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
index 42dcef836c89a8871517053ec122d9b635b8d904..672cba2056d1591321db330041af9aba34b402b2 100644 (file)
@@ -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