Skip to content

fix(bug38): intercept F5/Esc in CEF sidebar so Impress slideshow keys reach LO#61

Closed
Pher217 wants to merge 132 commits into
LibreOffice:masterfrom
Pher217:claude/2026-05-26-bug38-slideshow-fix
Closed

fix(bug38): intercept F5/Esc in CEF sidebar so Impress slideshow keys reach LO#61
Pher217 wants to merge 132 commits into
LibreOffice:masterfrom
Pher217:claude/2026-05-26-bug38-slideshow-fix

Conversation

@Pher217

@Pher217 Pher217 commented May 25, 2026

Copy link
Copy Markdown

Root cause

WebViewCefClient had no CefKeyboardHandler, so pressing F5 while the AI sidebar had keyboard focus was consumed by CEF as a browser page-reload instead of being dispatched to LibreOffice as .uno:Presentation.

This happens because:

  1. The user's registrymodifications.xcu sets LastActiveDeck = AIDeck for PresentationDocument, so the AI panel auto-opens and the CEF popup appears when Impress loads.
  2. Once the user types into the chat input, keyboard focus moves to the CEF popup (Win32 top-level WS_POPUP window).
  3. With no CefKeyboardHandler, F5 goes to Chrome's default keybinding (refresh page). LibreOffice never sees it.

Confirmed not the cause:

  • F5 accelerator binding in main.xcd is correct: .uno:Presentation for PresentationDocument
  • No inject-script patches touch slideshow or accelerators
  • slideshowlo.dll / sdlo.dll are installed and registered

Fix

Added CefKeyboardHandler to WebViewCefClient:

  • GetKeyboardHandler() returns this
  • OnPreKeyEvent() intercepts VK_F5 and VK_ESCAPE (before CEF processes them)
  • For those keys: SetForegroundWindow(hFrame) + PostMessage(hFrame, WM_KEYDOWN, ...) → the LO accelerator table fires
  • All other keys return false (pass through to CEF unchanged)
  • Shift+F5 is handled by passing lp with Shift scan-code set

Files changed

  • officelabs/inc/officelabs/WebViewPanel.hxx — added getFrameHwnd() accessor
  • officelabs/source/WebViewPanel.cxxCefKeyboardHandler on WebViewCefClient

Acceptance criteria

  • F5 in Impress opens fullscreen presentation (from first slide)
  • Shift+F5 starts from current slide
  • Esc exits the running slideshow
  • No regression: F5 in Writer/Calc still works as expected
  • AI sidebar chat still works normally (typing, Enter, Backspace all pass through)

Build note

This is a C++ change in the officelabs library. Requires a full LO fork rebuild before testing in the installed product (make officelabs.build or full incremental CI build).

Pher217 and others added 30 commits October 23, 2025 16:12
- Add AIAssistantPanel.cxx/hxx for sidebar AI chat functionality
- Add chatpanel.ui for the chat interface
- Update SwPanelFactory.cxx to register the AI panel
- Update sw/Library_sw.mk to include AI panel in build
- Add officelabs module with AgentConnection and DocumentController
- Integrate with officelabs backend for AI assistance
- Add build.log and config_attempt1.log for build tracking
- Update autogen.sh with configuration changes
- Update config.guess and config.sub
- Add backup files for configuration scripts
- ChatPanel: Docking window for AI chat interface
- AgentConnection: HTTP client for backend communication
- DocumentController: Document context extraction

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added ChatPanel class for the AI chat interface with docking capabilities.
- Introduced new identifiers for AI chat integration in sfxsids.hrc.
- Updated Library_officelabs.mk to include new source files.
- Removed obsolete AgentConnection and DocumentController implementations.

This commit enhances the OfficeLabs integration by providing a user interface for AI interactions and streamlining backend communication.

Change-Id: I1234567890abcdef1234567890abcdef12345678
Build fixes for Windows compilation with Visual Studio 2026:

- Fix CScript syntax: Change /e:javascript to //E:JScript in libxml2,
  libxslt, and xmlsec configure scripts for Windows Script Host
- Add --fuzz=3 to patch applications for glm, lpsolve, and redland
  to handle line number offsets in patches
- Regenerate clang-cl patches with correct line numbers for glm and redland
- Disable non-critical lpsolve const patch that fails to apply
- Fix ATL include paths in so_activex and oleautobridge libraries
  (change foreach loop to direct -I flag)
- Add cygpath conversion for harfbuzz meson build to handle
  Cygwin-to-Windows path translation for cl.exe
- Add -k || true workaround for libgpg-error and libassuan mkheader
  compilation issues on Windows

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Updated gpgmepp and libassuan makefiles to ensure proper handling of resource files during the build process.
- Added necessary library paths for libgpg-error and libassuan on Windows.
- Improved environment setup by exporting the PATH variable to include local binaries.

These changes aim to resolve build issues and improve compatibility with Windows environments.

Co-Authored-By: Pher
- Update ExternalProject_gpgmepp.mk configuration
- Fix disable-versioninfo.patch.1 for Windows build
- Update build.log with current progress

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove failing Skia patches (fix-pch.patch.1, fix-semaphore-include.patch.1)
- Fix OfficeLabs Library include order for proper SDK header resolution
- Fix git binary discovery in g script
- Fix CRLF line endings in solenv/bin scripts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update ChatPanel.hxx to use vcl/toolkit/ include paths for
widget headers (fixed.hxx, edit.hxx, button.hxx) which were
reorganized in modern LibreOffice.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- ChatPanel.hxx: Add VCL_INTERNALS define for deprecated toolkit headers
- ChatPanel.cxx: Fix OUString literal conversion (use u"..."_ustr)
- ChatPanelChildWindow.cxx: Add missing GetInfo() implementation
- AIAssistantPanel.hxx: Fix vcl/weld include paths and add TextView.hxx

All OfficeLabs code now compiles successfully.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Pher217 added 26 commits April 6, 2026 17:08
…ields, skip native tab/button rendering, ruler contrast
LineWidthValueSet: replace hardcoded blue selection fill and COL_WHITE
text/line colors with GetHighlightColor/GetHighlightTextColor so the
line width selector respects the active dark/light theme.

ThemePanel: replace COL_LIGHTGRAY label background and border colors
with GetDialogColor/GetDialogTextColor/GetShadowColor so document
theme color-set swatches render correctly in dark mode.
Panel::mxContents (the GtkBox 'contents' from panel.ui) was never
getting a background color assigned, so it defaulted to white on
Windows. All panel content areas (Character, Paragraph, Page, etc.)
appeared white behind their widgets even though the deck and title
bars were dark.

Set mxContents->set_background(Theme::Color_PanelBackground) in the
constructor and refresh it in DataChanged() so the panel content area
matches the active theme.
CreateChildFrame() creates a VclBin with no explicit background,
so it defaulted to system white. All AWT sidebar panels (Character,
Paragraph, Page, etc.) rendered white content areas because the
panel content is embedded into this VclBin, not directly into
mxContents.

Fix: after CreateChildFrame(), get the VclBin via VCLUnoHelper and
call SetBackground(Wallpaper(panelBg)). Also refresh on DataChanged()
for theme switching.
VclContainer (VclBox, VclGrid, VclBin) sets SetPaintTransparent(true)
in its constructor. When set_background() is called on a parent
container (e.g. the sidebar PanelLayout root), only the root gets
SetPaintTransparent(false) and the explicit background color.

Nested VclGrid/VclBox widgets created from .ui files remain
paint-transparent. On Windows, these transparent children show white
instead of the parent's dark background because WS_CLIPCHILDREN and
window creation order prevent the parent from painting under them.

Fix: after setting the root container background, recursively walk
all child windows and make any paint-transparent ones explicitly
opaque with the same background color. This ensures nested containers
in sidebar panels (Character, Paragraph, Page, etc.) match the dark
theme instead of defaulting to white.
- Replace Windows .ico files: soffice.ico, writer_app.ico, calc_app.ico, impress_app.ico
- Update sidebar panel icon to OfficeLabs brand (lc_aideck.png + 32px variant)
- Update Sidebar.xcu to reference new lc_aideck icon instead of lc_basicideappear
- All icons converted from 1024x1024 source PNGs using PIL
- ICO files created with 256x256 primary size for taskbar compatibility
…eming

fix: use theme-aware colors in sidebar panel rendering
…ors()

Deck.cxx and TabBar.cxx had Color(0x28, 0x2A, 0x36) hardcoded for sidebar
backgrounds, ignoring the selected theme. Now uses GetOLColors().bg/surface
which reads from officelabs_theme.txt. Also fixed Theme.cxx bDark check to
treat midnight-blue as dark (was only checking for 'dark', not 'midnight-blue').
Replace generated simplified icons with proper Apple-style icons from
officelabs-core/officelabs-icons source assets:
- soffice.ico: Blue orbs with sparkle (main app)
- writer_app.ico: Blue document with text lines
- calc_app.ico: Green 3x3 grid
- impress_app.ico: Orange presentation board

All icons normalized to 512x512 canvas, PNG-encoded at 7 sizes
(16-256px), brightness and saturation boosted for taskbar clarity.
Replace GetDarkShadowColor/GetShadowColor with GetWindowTextColor for
ruler tick marks, numbers, indent markers, and tab stops. WindowTextColor
is designed to contrast with WindowColor (the ruler background), ensuring
proper visibility across light, dark, and midnight-blue themes.
Co-Authored-By: Pher
Replaces the default LibreOffice Colibre brand shell SVGs (about, logo,
logo-sc, and their _inverted variants) with the OfficeLabs wordmark:
teal diamond icon + 'OfficeLabs' text in Segoe UI/Helvetica.
Shifts surface colors from Dracula blue-tinted (#1A1B26, #282A36) to
pure neutral darks (#0F0F0F, #1A1A1A, #2A2A2A) and text to pure white.
Reduces teal/purple tint in backgrounds for a cleaner dark mode.
Theme switching via cefQuery is no longer needed — theme is now set at
startup via junction/env var rather than runtime IPC. Removes:
- handleSwitchTheme() method declaration and implementation (~90 lines)
- switchTheme dispatch in OnQuery
- Windows.h / XRestartManager includes pulled in only for that handler
…cleanup

brand + theme + CEF cleanup (3 commits)
…Services()

The first configmgr access at app.cxx:502
(officecfg::Setup::Office::OfficeRestartInProgress::get()) has no surrounding
try-catch. When Components::Components() throws a RuntimeException (e.g. due to
a corrupt or partially-written user profile on second cold launch), the exception
propagates uncaught through Desktop::Init() → InitVCL() → ImplSVMain() →
soffice_main(), killing the process silently before any window appears.

This is the root cause of the P0 profile-rewrite crash: wipe profile, first
launch OK (creates profile from scratch), second launch crashes before window.
--safe-mode bypasses configmgr init on the hot path, which is why it always
works.

Fix: wrap the three unprotected officecfg::get() calls in try/catch blocks that
route to SetBootstrapError(BE_OFFICECONFIG_BROKEN), allowing the existing safe-
mode recovery path to activate instead of dying silently.

- app.cxx: wrap lines 502-506 (OfficeRestartInProgress + FirstRun checks)
- appinit.cxx RegisterServices(): wrap ooSetupConnectionURL::get() and
  CreateTemporaryDirectory() (which re-throws RuntimeException from SvtPathOptions)
…ite-crash

fix: P0 profile-rewrite crash — catch configmgr RuntimeException in Desktop::Init/RegisterServices
… reach LO

Root cause: WebViewCefClient had no CefKeyboardHandler, so pressing F5 while
the AI sidebar had keyboard focus was consumed by CEF as a browser page-reload
instead of being dispatched to LibreOffice as .uno:Presentation.

Fix: add CefKeyboardHandler to WebViewCefClient.  OnPreKeyEvent intercepts
VK_F5 and VK_ESCAPE (with/without Shift), calls SetForegroundWindow on the LO
frame HWND, then PostMessage(WM_KEYDOWN) so the LO accelerator table fires.
All other keys pass through to CEF unchanged.

Acceptance criteria: F5 starts Impress fullscreen presentation, Shift+F5 starts
from current slide, Esc exits the running slideshow, no regression in
Writer/Calc (VK_F5/VK_ESCAPE are not bound there while sidebar is not focused).
@github-actions

Copy link
Copy Markdown

Thank you for your contribution. We use GitHub as a read-only mirror, so please submit your patch into our own code review system: https://wiki.documentfoundation.org/Development/GetInvolved

@github-actions github-actions Bot closed this May 25, 2026
@Pher217 Pher217 deleted the claude/2026-05-26-bug38-slideshow-fix branch May 25, 2026 15:36
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