commit 527984ed2e0269861f5e1efc021fa0302d80819b
Author: Jean-Marc Lasgouttes <[email protected]>
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
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs