Skip to content

Feature/smooth scroll calc#62

Closed
kkettinger wants to merge 5 commits into
LibreOffice:masterfrom
kkettinger:feature/smooth-scroll-calc
Closed

Feature/smooth scroll calc#62
kkettinger wants to merge 5 commits into
LibreOffice:masterfrom
kkettinger:feature/smooth-scroll-calc

Conversation

@kkettinger

Copy link
Copy Markdown

No description provided.

kkettinger and others added 5 commits June 17, 2026 11:59
Introduces sub-cell pixel offset fields (nPixOffsetX/Y) to ScViewDataTable
so the view can scroll by individual pixels rather than snapping to full
row/column boundaries.

Key changes:
- ScViewData: add nPixOffsetX/Y[2] fields, SetPixOffsetX/Y, GetPixOffsetX/Y;
  propagate into GetLogicMode() (origin shift) and GetScrPos() (accumulator
  initialised to sub-cell offset inside the visible-range guard only, so
  off-screen sentinels are unaffected); reset on SetPosX/Y and RecalcPixPos.
- ScTabView: add SmoothScrollY/X() that accumulate pixel deltas, advance or
  retreat rows/columns as boundaries are crossed, and blit via ScrollPixel().
  ScrollCommand() routes trackpad/pixel-delta wheel events directly to
  SmoothScrollY; GesturePanCommand() tracks cumulative pan offset.
- Vertical scrollbar precision (SC_VSCROLL_PRECISION = 100): UpdateScrollBars
  scales the vertical scrollbar range ×100 so each scrollbar unit is ~1% of a
  row height; SetLineSize(P) keeps arrow-button clicks at exactly one full row.
  ScrollHdl default case reconstructs the precision-unit delta from the thumb
  position and converts it to pixels for SmoothScrollY, avoiding any ScrollY
  cell-snap fallback.  nPrevDragPos is initialised in precision units on the
  first Drag event so the anti-jitter guard compares like-for-like.
- ScHeaderControl: virtual GetScrollPixelOffset() hook (overridden by
  ScRowBar/ScColBar) feeds nPixOffsetY/X into the row/column bar GetScrPos()
  and Paint() accumulators, keeping header labels aligned with cell content
  during sub-row scrolling.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Change-Id: I241c34f2583800a8661b46adb675491c14d0760c
Two rendering bugs caused gray artifact lines during sub-cell scrolling:

1. ScGridWindow::Paint() initialized AddPixelsWhile from nScrY=0, treating
   the top row as if it always starts at y=0. With nPixOffsetY<0 the
   post-loop nScrY was too large, so the nY2 range check fired too early
   and the exposed strip was clipped short by one row — leaving a thin
   unpainted gray strip on every upward scroll event that accumulated into
   wider bands after subsequent downward blits.
   Fix: initialize nScrY from GetPixOffsetY(eVWhich) so AddPixelsWhile
   correctly resolves which rows cover the clip rectangle.

2. SmoothScrollY used ScrollPixel (blit + DrawAfterScroll). ScrollPixel
   sets the mm100 MapMode — which embeds a fractional nPixOffsetY origin —
   before calling PaintImmediately. VCL then delivers the paint rect in
   mm100 logical units; the LogicToPixel round-trip could drop ±1 px from
   the clip rect, leaving a 1-pixel artifact line. Fix: replace ScrollPixel
   with Invalidate + PaintImmediately, which does a full pixel-exact repaint
   via the compositor's double-buffering and is artifact-free.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Change-Id: I49f3cff0742c8b947cd9985a55f40bc9807f519e
The scrollbar drag handler computed the pixel scroll distance as:

    nPixFinal = nDelta_precision_units * currentTopRow_height / P

This used the CURRENT top row's height as the conversion factor. When
the drag crosses into a row with a different height (e.g. a tall merged
cell), the factor is wrong: the pixel delta under-shoots, so the view
never smoothly transits through the large cell and instead jumps to its
boundary — reverting to old snap-to-row behaviour.

Fix: instead of computing a relative precision-unit delta and scaling by
the current row height, derive the target (row, sub-row offset) directly
from the absolute scrollbar thumb position and compute the exact pixel
distance by summing the actual heights of every row between the current
and target positions. This is correct for any mixture of row heights.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Change-Id: I603072e5ea858eb5cde3081dd83d05046015732c
Replace the SC_VSCROLL_PRECISION (100 units/row) scrollbar with a fully
pixel-proportional one where 1 thumb unit = 1 document pixel.

Previously every row occupied 100 thumb units regardless of height, so
the pixel movement per unit of thumb travel was proportional to the
current row height — large cells scrolled faster than small ones.

With the new design each row occupies thumb range equal to its pixel
height, giving uniform scroll speed across all row sizes. The thumb delta
during drag is now just:

    nPixDelta = nNewThumb − GetScaledRowHeight(nScrollMin, nCurPosY−1)
              − (−nPixOffsetY)

with no row-height conversion factor at all.

The visible page size is taken from the actual grid window height instead
of nVisYB×currentRowHeight; the latter ballooned when a large row was
at the top, clamping the thumb via lcl_UpdateBar and triggering a
spurious scroll-back.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Change-Id: I4a8a6ebeaa0585b2b9be15a2e28fe8f5be6150f7
…0917)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Change-Id: I10c6ce452830262137265316279eadc919efa721
@kkettinger kkettinger closed this Jun 17, 2026
@kkettinger

Copy link
Copy Markdown
Author

Sorry, created PR on the wrong repo.

tdf-gerrit pushed a commit that referenced this pull request Jun 23, 2026
As is the case in other weld methods, signals about
the change of the toggle status for entries in weld::TreeView
are not supposed to be emitted when the change happens
programatically and not by manual user interaction.

Therefore, disable notify events in weld::TreeView::set_toggle
by renaming the actual toolkit-specific implementations to
do_set_toggle and making the weld::TreeView::set_toggle
base class method block signals while calling
the virtual methods.

See also e.g. weld::TreeView::insert which
uses the same approach.

This aligns the behavior of the Qt implementation
with the other ones. For example, the vcl/SalInstanceTreeView
implementation only calls weld::TreeView::signal_toggled
from SalInstanceTreeView::ToggleHdl. That one is set
via SvLBoxButtonData::SetLink in the SalInstanceTreeView ctor.
The link is called in SvLBoxButtonData::CallLink, called from
SvLBoxButton::ClickHdl, which only gets called in response
to either mouse or keyboard events.

This fixes a nullptr deref seen with the qt6 VCL
plugin and env var SAL_VCL_QT_USE_WELDED_WIDGETS=1
for the following scenario:

* start Writer
* insert an Image via "Insert" -> "Image"
* with image selected, open context menu
* activate the "Insert Caption" context menu
  entry
* in the "Insert Caption" dialog, press the
  "Auto..." button

Crash/Backtrace without this commit in place:

    Thread 1 received signal SIGSEGV, Segmentation fault.
    rtl::OUString::isEmpty (this=0x18) at include/rtl/ustring.hxx:831
    831             return pData->length == 0;
    (rr) bt
    #0  rtl::OUString::isEmpty (this=0x18) at include/rtl/ustring.hxx:831
    #1  0x00007fd2dba98d4b in SwCaptionOptPage::UpdateEntry (this=0x55e123635a80, nSelEntry=0) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1238
    #2  0x00007fd2dba9e0aa in SwCaptionOptPage::ToggleEntryHdl (this=0x55e123635a80, rRowCol={...}) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1347
    #3  0x00007fd2dba9601d in SwCaptionOptPage::LinkStubToggleEntryHdl (instance=0x55e123635a80, data={...}) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1345
    #4  0x00007fd37d724a91 in Link<std::pair<weld::TreeIter const&, int> const&, void>::Call (this=0x55e11e257910, data={...}) at include/tools/link.hxx:105
    #5  0x00007fd37d71d2f1 in weld::TreeView::signal_toggled (this=0x55e11e2578e8, rIterCol={...}) at include/vcl/weld/TreeView.hxx:109
    #6  0x00007fd37d7052dd in QtInstanceTreeView::handleDataChanged (this=0x55e11e2576c0, rTopLeft=..., rBottomRight=..., rRoles=...) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:981
    #7  0x00007fd37d72529a in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtInstanceTreeView*, void**)::{lambda()#1}::operator()() const (this=0x7ffdc7bcb6b0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    #8  0x00007fd37d7251a9 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtInstanceTreeView*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtInstanceTreeView*, void**)::{lambda()#1}&&) (args=0x7ffdc7bcbaa0, fn=...)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    #9  0x00007fd37d7250e3 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call
        (f=(void (QtInstanceTreeView::*)(QtInstanceTreeView * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd37d705170 <QtInstanceTreeView::handleDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e11e2576c0, arg=0x7ffdc7bcbaa0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    #10 0x00007fd37d72505d in QtPrivate::FunctionPointer<void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call<QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>
        (f=(void (QtInstanceTreeView::*)(QtInstanceTreeView * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd37d705170 <QtInstanceTreeView::handleDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e11e2576c0, arg=0x7ffdc7bcbaa0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    #11 0x00007fd37d724f86 in QtPrivate::QCallableObject<void (QtInstanceTreeView::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>::impl
        (which=1, this_=0x55e1283a4630, r=0x55e11e2576c0, a=0x7ffdc7bcbaa0, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:546
    #12 0x00007fd37c4ee572 in QtPrivate::QSlotObjectBase::call (this=0x55e1283a4630, r=0x55e11e2576c0, a=0x7ffdc7bcbaa0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    #13 0x00007fd37c724c6c in doActivate<false> (sender=0x55e127fd8030, signal_index=3, argv=0x7ffdc7bcbaa0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4386
    #14 0x00007fd37c71af23 in QMetaObject::activate (sender=0x55e127fd8030, m=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, argv=0x7ffdc7bcbaa0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4447
    #15 0x00007fd37cbc76fe in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> > (sender=0x55e127fd8030, mo=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, ret=0x0, args=..., args=..., args=...)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    #16 0x00007fd37cbc27c0 in QAbstractItemModel::dataChanged (this=0x55e127fd8030, _t1=..., _t2=..., _t3=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
    #17 0x00007fd37cc6a184 in QSortFilterProxyModelPrivate::_q_sourceDataChanged (this=0x55e1285d77a0, source_top_left=..., source_bottom_right=..., roles=...)
        at /home/michi/development/git/qt5/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp:1627
    #18 0x00007fd37ccaf63e in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QSortFilterProxyModelPrivate*, void**)::{lambda()#1}::operator()() const
        (this=0x7ffdc7bcbff0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    #19 0x00007fd37ccaf59d in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QSortFilterProxyModelPrivate*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call(void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QSortFilterProxyModelPrivate*, void**)::{lambda()#1}&&)
        (args=0x7ffdc7bcc3f0, fn=...) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    #20 0x00007fd37ccaf557 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void, void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call
        (f=(void (QSortFilterProxyModelPrivate::*)(QSortFilterProxyModelPrivate * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd37cc691f0 <QSortFilterProxyModelPrivate::_q_sourceDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e1285d77a0, arg=0x7ffdc7bcc3f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    #21 0x00007fd37ccaf4c1 in QtPrivate::FunctionPointer<void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&)>::call<QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>
        (f=(void (QSortFilterProxyModelPrivate::*)(QSortFilterProxyModelPrivate * const, const QModelIndex &, const QModelIndex &, const QList<int> &)) 0x7fd37cc691f0 <QSortFilterProxyModelPrivate::_q_sourceDataChanged(QModelIndex const&, QModelIndex const&, QList<int> const&)>, o=0x55e1285d77a0, arg=0x7ffdc7bcc3f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    #22 0x00007fd37ccaf3f0 in QtPrivate::QPrivateSlotObject<void (QSortFilterProxyModelPrivate::*)(QModelIndex const&, QModelIndex const&, QList<int> const&), QtPrivate::List<QModelIndex const&, QModelIndex const&, QList<int> const&>, void>::impl (which=1, this_=0x55e127fd8a30, r=0x55e127fd8030, a=0x7ffdc7bcc3f0, ret=0x0) at qtbase/src/corelib/kernel/qobject_p.h:273
    #23 0x00007fd37c4ee572 in QtPrivate::QSlotObjectBase::call (this=0x55e127fd8a30, r=0x55e127fd8030, a=0x7ffdc7bcc3f0) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    #24 0x00007fd37c724c6c in doActivate<false> (sender=0x55e127fd75c0, signal_index=3, argv=0x7ffdc7bcc3f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4386
    #25 0x00007fd37c71af23 in QMetaObject::activate (sender=0x55e127fd75c0, m=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, argv=0x7ffdc7bcc3f0)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4447
    #26 0x00007fd37cbc76fe in QMetaObject::activate<void, QModelIndex, QModelIndex, QList<int> > (sender=0x55e127fd75c0, mo=0x7fd37d100d10 <QAbstractItemModel::staticMetaObject>, local_signal_index=0, ret=0x0, args=..., args=..., args=...)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    #27 0x00007fd37cbc27c0 in QAbstractItemModel::dataChanged (this=0x55e127fd75c0, _t1=..., _t2=..., _t3=...) at qtbase/src/corelib/Core_autogen/include/moc_qabstractitemmodel.cpp:658
    #28 0x00007fd37ba75cdd in QStandardItemModelPrivate::itemChanged (this=0x55e127fd8430, item=0x55e128008f00, roles=...) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:568
    #29 0x00007fd37ba78c11 in QStandardItem::setData (this=0x55e128008f00, value=..., role=10) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:909
    #30 0x00007fd37ba791dd in QStandardItem::setCheckable (this=0x55e128008f00, checkable=true) at /home/michi/development/git/qt5/qtbase/src/gui/itemmodels/qstandarditemmodel.cpp:1345
    #31 0x00007fd37d712230 in QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0::operator()() const (this=0x55e128009370) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:364
    #32 0x00007fd37d7121a5 in std::__invoke_impl<void, QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&>(std::__invoke_other, QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&) (__f=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:63
    #33 0x00007fd37d712165 in std::__invoke_r<void, QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&>(QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0&) (__fn=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/invoke.h:113
    #34 0x00007fd37d71203d in std::_Function_handler<void(), QtInstanceTreeView::set_toggle(weld::TreeIter const&, TriState, int)::$_0>::_M_invoke (__functor=...)
        at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:292
    #35 0x00007fd37d62b07e in std::function<void()>::operator() (this=0x7ffdc7bcc838) at /usr/lib/gcc/x86_64-linux-gnu/15/../../../../include/c++/15/bits/std_function.h:593
    #36 0x00007fd37d62282f in QtInstance::RunInMainThread (this=0x55e11e0d3580, func=...) at vcl/qt6/../qt5/QtInstance.cxx:216
    #37 0x00007fd37d708783 in QtInstanceTreeView::set_toggle (this=0x55e11e2576c0, rIter=..., eState=TRISTATE_FALSE, nCol=-1) at vcl/qt6/../qt5/QtInstanceTreeView.cxx:362
    #38 0x00007fd386df11c3 in weld::TreeView::set_toggle (this=0x55e11e2578e8, row=0, eState=TRISTATE_FALSE, col=-1) at /home/michi/development/git/libreoffice/vcl/source/weld/TreeView.cxx:37
    #39 0x00007fd2dba97561 in SwCaptionOptPage::Reset (this=0x55e123635a80, rSet=0x7ffdc7bccec0) at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:1100
    #40 0x00007fd38c0d8c50 in SfxSingleTabDialogController::SetTabPage (this=0x7ffdc7bcce68, xTabPage=std::unique_ptr<SfxTabPage> = {...}) at /home/michi/development/git/libreoffice/sfx2/source/dialog/basedlgs.cxx:269
    #41 0x00007fd2dba930fd in SwCaptionOptDlg::SwCaptionOptDlg (this=0x7ffdc7bcce68, pParent=0x55e1282eefa0, rSet=SfxItemSet of pool 0x55e11fee13b0 with parent 0x0 and Which ranges: [(1, 165), (1000, 1253), (4021, 4081)])
        at /home/michi/development/git/libreoffice/sw/source/ui/config/optload.cxx:857
    #42 0x00007fd2dbc1e524 in SwCaptionDialog::CaptionHdl (this=0x55e12817af00) at /home/michi/development/git/libreoffice/sw/source/ui/frmdlg/cption.cxx:376
    #43 0x00007fd2dbc1cc1d in SwCaptionDialog::LinkStubCaptionHdl (instance=0x55e12817af00, data=...) at /home/michi/development/git/libreoffice/sw/source/ui/frmdlg/cption.cxx:373
    #44 0x00007fd37d66c901 in Link<weld::Button&, void>::Call (this=0x55e128105858, data=...) at include/tools/link.hxx:105
    #45 0x00007fd37d66be5c in weld::Button::signal_clicked (this=0x55e128105850) at include/vcl/weld/Button.hxx:37
    #46 0x00007fd37d669b7d in QtInstanceButton::buttonClicked (this=0x55e1281056b0) at vcl/qt6/../qt5/QtInstanceButton.cxx:114
    #47 0x00007fd37d66cd21 in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)::{lambda()#1}::operator()() const (this=0x7ffdc7bcd0b0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:128
    #48 0x00007fd37d66cc59 in QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)::{lambda()#1}>(void**, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)::{lambda()#1}&&)
        (args=0x7ffdc7bcd490, fn=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:66
    #49 0x00007fd37d66cb8b in QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceButton::*)()>::call(void (QtInstanceButton::*)(), QtInstanceButton*, void**)
        (f=(void (QtInstanceButton::*)(QtInstanceButton * const)) 0x7fd37d669b40 <QtInstanceButton::buttonClicked()>, o=0x55e1281056b0, arg=0x7ffdc7bcd490) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:127
    #50 0x00007fd37d66cb0d in QtPrivate::FunctionPointer<void (QtInstanceButton::*)()>::call<QtPrivate::List<>, void>(void (QtInstanceButton::*)(), QtInstanceButton*, void**)
        (f=(void (QtInstanceButton::*)(QtInstanceButton * const)) 0x7fd37d669b40 <QtInstanceButton::buttonClicked()>, o=0x55e1281056b0, arg=0x7ffdc7bcd490) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:175
    #51 0x00007fd37d66ca36 in QtPrivate::QCallableObject<void (QtInstanceButton::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*)
        (which=1, this_=0x55e1285a0ac0, r=0x55e1281056b0, a=0x7ffdc7bcd490, ret=0x0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:546
    #52 0x00007fd37c4ee572 in QtPrivate::QSlotObjectBase::call (this=0x55e1285a0ac0, r=0x55e1281056b0, a=0x7ffdc7bcd490) at qtbase/src/corelib/kernel/qobjectdefs_impl.h:462
    #53 0x00007fd37c724c6c in doActivate<false> (sender=0x55e1283c55e0, signal_index=9, argv=0x7ffdc7bcd490) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4386
    #54 0x00007fd37c71af23 in QMetaObject::activate (sender=0x55e1283c55e0, m=0x7fd37b190f60 <QAbstractButton::staticMetaObject>, local_signal_index=2, argv=0x7ffdc7bcd490)
        at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qobject.cpp:4447
    #55 0x00007fd37a5a7bcb in QMetaObject::activate<void, bool> (sender=0x55e1283c55e0, mo=0x7fd37b190f60 <QAbstractButton::staticMetaObject>, local_signal_index=2, ret=0x0, args=@0x7ffdc7bcd4d7: false)
        at qtbase/src/corelib/kernel/qobjectdefs.h:320
    #56 0x00007fd37a803742 in QAbstractButton::clicked (this=0x55e1283c55e0, _t1=false) at qtbase/src/widgets/Widgets_autogen/include/moc_qabstractbutton.cpp:254
    #57 0x00007fd37a803657 in QAbstractButtonPrivate::emitClicked (this=0x55e128483d30) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:382
    #58 0x00007fd37a8034af in QAbstractButtonPrivate::click (this=0x55e128483d30) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:375
    #59 0x00007fd37a8049df in QAbstractButton::mouseReleaseEvent (this=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:984
    #60 0x00007fd37a673eed in QWidget::event (this=0x55e1283c55e0, event=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:8993
    #61 0x00007fd37a8047fc in QAbstractButton::event (this=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qabstractbutton.cpp:941
    #62 0x00007fd37a988051 in QPushButton::event (this=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/widgets/qpushbutton.cpp:697
    #63 0x00007fd37a5b2db0 in QApplicationPrivate::notify_helper (this=0x55e11e0d3900, receiver=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3264
    #64 0x00007fd37a5b4a4c in QApplication::notify (this=0x55e11e0792f0, receiver=0x55e1283c55e0, e=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2744
    #65 0x00007fd37c63e8b9 in QCoreApplication::notifyInternal2 (receiver=0x55e1283c55e0, event=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1117
    #66 0x00007fd37c63f5b9 in QCoreApplication::sendSpontaneousEvent (receiver=0x55e1283c55e0, event=0x7ffdc7bce8a0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1576
    #67 0x00007fd37a5b36d3 in QApplicationPrivate::sendMouseEvent
        (receiver=0x55e1283c55e0, event=0x7ffdc7bce8a0, alienWidget=0x55e1283c55e0, nativeWidget=0x55e124371270, buttonDown=0x7fd37b1cd6b0 <qt_button_down>, lastMouseReceiver=..., spontaneous=true, onlyDispatchEnterLeave=false)
        at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2343
    #68 0x00007fd37a6b373d in QWidgetWindow::handleMouseEvent (this=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:696
    #69 0x00007fd37a6b1da7 in QWidgetWindow::event (this=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:301
    #70 0x00007fd37a5b2db0 in QApplicationPrivate::notify_helper (this=0x55e11e0d3900, receiver=0x55e125710bd0, e=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3264
    #71 0x00007fd37a5b6caf in QApplication::notify (this=0x55e11e0792f0, receiver=0x55e125710bd0, e=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3214
    #72 0x00007fd37c63e8b9 in QCoreApplication::notifyInternal2 (receiver=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1117
    #73 0x00007fd37c63f5b9 in QCoreApplication::sendSpontaneousEvent (receiver=0x55e125710bd0, event=0x7ffdc7bcf998) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1576
    #74 0x00007fd37b477f07 in QGuiApplicationPrivate::processMouseEvent (e=0x55e1281f8d90) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2513
    #75 0x00007fd37b477041 in QGuiApplicationPrivate::processWindowSystemEvent (e=0x55e1281f8d90) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qguiapplication.cpp:2237
    #76 0x00007fd37b565bcd in QWindowSystemInterface::sendWindowSystemEvents (flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindowsysteminterface.cpp:1112
    #77 0x00007fd37bdc179b in userEventSourceDispatch (source=0x55e11e0ed250) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:39
    #78 0x00007fd38150f68e in g_main_dispatch (context=context@entry=0x7fd370000fd0) at ../../../glib/gmain.c:3591
    #79 0x00007fd381512a1f in g_main_context_dispatch_unlocked (context=0x7fd370000fd0) at ../../../glib/gmain.c:4451
    #80 g_main_context_iterate_unlocked (context=context@entry=0x7fd370000fd0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4516
    #81 0x00007fd3815131b0 in g_main_context_iteration (context=0x7fd370000fd0, may_block=1) at ../../../glib/gmain.c:4582
    #82 0x00007fd37ccd3c9b in QEventDispatcherGlib::processEvents (this=0x55e11e079ad0, flags=...) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:402
    #83 0x00007fd37bdc1598 in QPAEventDispatcherGlib::processEvents (this=0x55e11e079ad0, flags=...) at /home/michi/development/git/qt5/qtbase/src/gui/platform/unix/qeventdispatcher_glib.cpp:90
    #84 0x00007fd37d622092 in QtInstance::ImplYield (this=0x55e11e0d3580, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:467
    #85 0x00007fd37d625251 in QtInstance::DoYield (this=0x55e11e0d3580, bWait=true, bHandleAllCurrentEvents=false) at vcl/qt6/../qt5/QtInstance.cxx:478
    #86 0x00007fd386a28a26 in InnerYield (i_bWait=true, i_bAllEvents=false) at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:389
    #87 0x00007fd386a282af in Application::Yield () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:502
    #88 0x00007fd386a28090 in Application::Execute () at /home/michi/development/git/libreoffice/vcl/source/app/svapp.cxx:364
    #89 0x00007fd39011f0f5 in desktop::Desktop::Main (this=0x7ffdc7bd1b40) at /home/michi/development/git/libreoffice/desktop/source/app/app.cxx:1679
    #90 0x00007fd386a51c0c in ImplSVMainRun () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:234
    #91 0x00007fd37d62d751 in SalInstance::SVMainRun (this=0x55e11e0d3590) at vcl/inc/salinst.hxx:108
    #92 0x00007fd386a51132 in ImplSVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:221
    #93 0x00007fd386a52cc9 in SVMain () at /home/michi/development/git/libreoffice/vcl/source/app/svmain.cxx:252
    #94 0x00007fd39019916a in soffice_main () at /home/michi/development/git/libreoffice/desktop/source/app/sofficemain.cxx:122
    #95 0x000055e0e26279fd in sal_main () at /home/michi/development/git/libreoffice/desktop/source/app/main.c:51
    #96 0x000055e0e26279d7 in main (argc=2, argv=0x7ffdc7bd1d48) at /home/michi/development/git/libreoffice/desktop/source/app/main.c:49

Change-Id: Idc24e1eacdb512ec288476712a53fd5dc606f246
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/207156
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant