summaryrefslogtreecommitdiff
path: root/vcl
AgeCommit message (Collapse)Author
2024-05-18tdf#160565 tdf#145735 qt: Avoid native window handles for Qt 6Michael Weghorn
Similar to the tdf#122293 scenario with Qt 5 on Wayland, using native windows causes unresponsive UI even with the xcb Qt QPA plugin when using Qt 6. Therefore, don't call `QWidget::winId()` at all when using Qt 6, but just refuse to resolve a native window handle, the same way that is already done here for the wayland Qt QPA plugin with qt5. Add a comment based on the one originally added with commit 0e3c3b842e14b9646d3697cf1266be21359e0f13 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Sat May 11 21:31:33 2019 +0200 tdf#122293 qt5: Use "alien widgets" by default on Wayland that was later dropped during a refactoring. This code path is triggered when trying to resolve the parent window for a file picker (s. `QtFilePicker::initialize`). In a quick test in a KDE Plasma 5 Wayland session on Debian testing, the modality behavior was unchanged with or without this change in place: * With qt6 xcb, the main window nicely gets grayed out and is unresponsive while the file dialog gets shown when using e.g. "File" -> "Open" in Writer. * With qt6 wayland, the main window is not grayed out and looks more "active" still, but doesn't actually accept keyboard or mouse input. This is basically the same in other Qt/KDE applications, e.g. a self-compiled Kate from git master, so not LO-specific. If resolving the parent for the file picker turns out to be necessary, maybe something similar to what commit commit 3ff4800fe400de916c97f587322104af06cc0879 Author: Caolán McNamara <caolanm@redhat.com> Date: Wed Apr 4 10:22:34 2018 +0100 weld SvInsertOleDlg and weld SfxInsertFloatingFrameDialog and smuggle in the parent widget for the Gtk File dialog via an XWindow interface did for gtk3 might be worth looking into. However, I can at least not reproduce issues like the one described for gtk3 in commit 203d96787969f707c78101be18d51b44ace98f93 Author: Caolán McNamara <caolanm@redhat.com> Date: Mon Jun 21 13:01:52 2021 +0100 give folderpicker an optional parent so, like a file picker, it can make its parent modal while its operating. Otherwise its possible to interact with the parent dialog in undesirable ways, e.g. file, export as, export as epub, the folder picker of 'media directory' with the qt6 VCL plugin even with this commit in place. Another scenario relying on a native window handle is video playback with GStreamer's x11 video sink. That still works for qt5 with the xcb plugin as the handle is still returned for that one. For qt6 with the xcb plugin, that didn't work properly without this commit either (at least not in my tests with current qtbase dev as of commit 70a2e7f32b9f9ce19d1538f14fbde7b0d1e77ffd), s. tdf#145735 comment 7. It's now broken a different way than before (extra windows show up instead of no video being shown). This will be further tracked together with a solution for Wayland in tdf#125219. As a side note, forcing native windows for everything using `QT_USE_NATIVE_WINDOWS=1` as described at [1] causes more sever brokenness with the qt6 xcb plugin (mostly black window in Writer instead of showing the actual content). [1] https://doc.qt.io/qt-6/qwidget.html#native-widgets-vs-alien-widgets Change-Id: I9718c680bd8bc4ff0574f171403d965c1beac781 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167783 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-18qt: Run QtFrame::SetWindowState in main threadMichael Weghorn
Fixes this crash/assertion seen when starting Writer with the qt6 VCL plugin with a fresh user profile with qtbase debug build (as of commit 70a2e7f32b9f9ce19d1538f14fbde7b0d1e77ffd): ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread 0x0x7fff9c454020. Receiver 'QtMainWindowClassWindow' (of type 'QWidgetWindow') was created in thread 0x0x55555560dc50", file /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp, line 547 Thread 19 "soffice.bin" received signal SIGABRT, Aborted. [Switching to Thread 0x7fffada006c0 (LWP 10947)] __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 44 ./nptl/pthread_kill.c: No such file or directory. (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007ffff78a6b7f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 0x00007ffff78584e2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x00007ffff78414ed in __GI_abort () at ./stdlib/abort.c:79 #4 0x00007fffe34f95c9 in qAbort() () at /home/michi/development/git/qt5/qtbase/src/corelib/global/qassert.cpp:49 #5 0x00007fffe350d459 in qt_message_fatal<QString&>(QtMsgType, QMessageLogContext const&, QString&) (context=..., message=...) at /home/michi/development/git/qt5/qtbase/src/corelib/global/qlogging.cpp:2112 #6 0x00007fffe35063e6 in qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *) (msgType=QtFatalMsg, context=..., msg=0x7fffe3b8afa8 "ASSERT failure in %s: \"%s\", file %s, line %d", ap=0x7fffad9fb108) at /home/michi/development/git/qt5/qtbase/src/corelib/global/qlogging.cpp:380 #7 0x00007fffe35084b1 in QMessageLogger::fatal(char const*, ...) const (this=0x7fffad9fb350, msg=0x7fffe3b8afa8 "ASSERT failure in %s: \"%s\", file %s, line %d") at /home/michi/development/git/qt5/qtbase/src/corelib/global/qlogging.cpp:880 #8 0x00007fffe34f969c in qt_assert_x(char const*, char const*, char const*, int) (where=0x7fffe3bae469 "QCoreApplication::sendEvent", what=0x7fff9cd289a0 "Cannot send events to objects owned by a different thread. Current thread 0x0x7fff9c454020. Receiver 'QtMainWindowClassWindow' (of type 'QWidgetWindow') was created in thread 0x0x55555560dc50", file=0x7fffe3bae098 "/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp", line=547) at /home/michi/development/git/qt5/qtbase/src/corelib/global/qassert.cpp:114 #9 0x00007fffe35f54e6 in QCoreApplicationPrivate::checkReceiverThread(QObject*) (receiver=0x55555bb8b4a0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:547 #10 0x00007fffe15a786e in QApplication::notify(QObject*, QEvent*) (this=0x55555560d9d0, receiver=0x55555bb8b4a0, e=0x7fffad9fb7f0) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2580 #11 0x00007fffe35f68be in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x55555bb8b4a0, event=0x7fffad9fb7f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1154 #12 0x00007fffe35f7677 in QCoreApplication::sendEvent(QObject*, QEvent*) (receiver=0x55555bb8b4a0, event=0x7fffad9fb7f0) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1598 #13 0x00007fffe24f6299 in QWindowPrivate::create(bool) (this=0x5555569bd9a0, recursive=false) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindow.cpp:589 #14 0x00007fffe24f6759 in QWindow::create() (this=0x55555bb8b4a0) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindow.cpp:720 #15 0x00007fffe1643f45 in QWidgetPrivate::create() (this=0x55555b24c140) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:1341 #16 0x00007fffe16433c3 in QWidget::create(unsigned long long, bool, bool) (this=0x5555572554a0, window=0, initializeWindow=true, destroyOldWindow=true) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:1206 #17 0x00007fffe1649dd5 in QWidget::setWindowState(QFlags<Qt::WindowState>) (this=0x5555572554a0, newstate=...) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:2946 #18 0x00007fffe4235db6 in QtFrame::SetWindowStateImpl(QFlags<Qt::WindowState>) (this=0x55555bba8cf0, eState=...) at vcl/qt6/../qt5/QtFrame.cxx:340 #19 0x00007fffe4237fc0 in QtFrame::SetWindowState(vcl::WindowData const*) (this=0x55555bba8cf0, pState=0x7fffad9fbdc0) at vcl/qt6/../qt5/QtFrame.cxx:677 #20 0x00007fffee0a4c63 in SystemWindow::SetWindowState(vcl::WindowData const&) (this=0x7fff9d689d50, rData=...) at /home/michi/development/git/libreoffice/vcl/source/window/syswin.cxx:708 #21 0x00007fffee0a5802 in SystemWindow::SetWindowState(std::basic_string_view<char16_t, std::char_traits<char16_t> >) (this=0x7fff9d689d50, rStr=u",,,;4;") at /home/michi/development/git/libreoffice/vcl/source/window/syswin.cxx:840 #22 0x00007ffff4ddc4c4 in framework::LoadEnv::impl_applyPersistentWindowState(com::sun::star::uno::Reference<com::sun::star::awt::XWindow> const&) (this=0x7fffad9fcbb8, xWindow=uno::Reference to (VCLXTopWindow *) 0x7fff9c003810) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:1809 #23 0x00007ffff4dd6f5b in framework::LoadEnv::impl_loadContent() (this=0x7fffad9fcbb8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:1081 #24 0x00007ffff4dd48e4 in framework::LoadEnv::start() (this=0x7fffad9fcbb8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:412 #25 0x00007ffff4dd21b2 in framework::LoadEnv::startLoading(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&, rtl::OUString const&, int, LoadEnvFeatures) (this=0x7fffad9fcbb8, sURL="file:///home/michi/development/git/libreoffice/instdir/program/../program/opencl/cl-test.ods", lMediaDescriptor=uno::Sequence of length 1 = {...}, xBaseFrame=uno::Reference to (framework::Desktop *) 0x5555569d5c68, sTarget="_blank", nSearchFlags=0, eFeature=LoadEnvFeatures::NONE) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:308 #26 0x00007ffff4dd0998 in framework::LoadEnv::loadComponentFromURL(com::sun::star::uno::Reference<com::sun::star::frame::XComponentLoader> const&, com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> const&, rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (xLoader=uno::Reference to (framework::Desktop *) 0x5555569d5c78, xContext=uno::Reference to (cppu::(anonymous namespace)::ComponentContext *) 0x555555623d38, sURL="file:///home/michi/development/git/libreoffice/instdir/program/../program/opencl/cl-test.ods", sTarget="_blank", nSearchFlags=0, lArgs=uno::Sequence of length 1 = {...}) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:168 #27 0x00007ffff4e06a3f in framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (this=0x5555569d5c00, sURL="file:///home/michi/development/git/libreoffice/instdir/program/../program/opencl/cl-test.ods", sTargetFrameName="_blank", nSearchFlags=0, lArguments=uno::Sequence of length 1 = {...}) at /home/michi/development/git/libreoffice/framework/source/services/desktop.cxx:592 #28 0x00007ffff4e06b34 in non-virtual thunk to framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) () at /home/michi/development/git/libreoffice/instdir/program/libfwklo.so #29 0x00007ffff7ba9147 in desktop::testOpenCLCompute(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&, rtl::OUString const&) (xDesktop=uno::Reference to (framework::Desktop *) 0x5555569d5c58, rURL="file:///home/michi/development/git/libreoffice/instdir/program/../program/opencl/cl-test.ods") at /home/michi/development/git/libreoffice/desktop/source/app/opencl.cxx:132 #30 0x00007ffff7ba7f54 in desktop::Desktop::CheckOpenCLCompute(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&) (xDesktop=uno::Reference to (framework::Desktop *) 0x5555569d5c58) at /home/michi/development/git/libreoffice/desktop/source/app/opencl.cxx:241 #31 0x00007ffff7b5719d in std::__invoke_impl<void, void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> >(std::__invoke_other, void (*&&)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2>&&) (__f=@0x555556fbe460: 0x7ffff7ba7760 <desktop::Desktop::CheckOpenCLCompute(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&)>, __args=...) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61 #32 0x00007ffff7b5712d in std::__invoke<void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> >(void (*&&)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2>&&) (__fn=@0x555556fbe460: 0x7ffff7ba7760 <desktop::Desktop::CheckOpenCLCompute(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&)>, __args=...) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:96 #33 0x00007ffff7b57102 in std::thread::_Invoker<std::tuple<void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> > >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) (this=0x555556fbe458) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_thread.h:292 #34 0x00007ffff7b570c5 in std::thread::_Invoker<std::tuple<void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> > >::operator()() (this=0x555556fbe458) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_thread.h:299 #35 0x00007ffff7b56e69 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> > > >::_M_run() (this=0x555556fbe450) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_thread.h:244 #36 0x00007ffff74dee24 in () at /lib/x86_64-linux-gnu/libstdc++.so.6 #37 0x00007ffff78a4dbb in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:444 #38 0x00007ffff79269f8 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78 Change-Id: I35024670cf4e4a6c00762be71fa051cc9417ef75 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167779 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-18qt: Run QtFrame::SetIcon in main threadMichael Weghorn
Fixes this crash/assertion seen when starting Writer with the qt6 VCL plugin with a fresh user profile with qtbase debug build (as of commit 70a2e7f32b9f9ce19d1538f14fbde7b0d1e77ffd): Thread 19 "soffice.bin" received signal SIGABRT, Aborted. [Switching to Thread 0x7fffada006c0 (LWP 150142)] __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 44 ./nptl/pthread_kill.c: No such file or directory. (gdb) bt #0 __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44 #1 0x00007ffff78a6b7f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78 #2 0x00007ffff78584e2 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x00007ffff78414ed in __GI_abort () at ./stdlib/abort.c:79 #4 0x00007fffe34f95c9 in qAbort() () at /home/michi/development/git/qt5/qtbase/src/corelib/global/qassert.cpp:49 #5 0x00007fffe350d459 in qt_message_fatal<QString&>(QtMsgType, QMessageLogContext const&, QString&) (context=..., message=...) at /home/michi/development/git/qt5/qtbase/src/corelib/global/qlogging.cpp:2112 #6 0x00007fffe35063e6 in qt_message(QtMsgType, const QMessageLogContext &, const char *, typedef __va_list_tag __va_list_tag *) (msgType=QtFatalMsg, context=..., msg=0x7fffe3b8afa8 "ASSERT failure in %s: \"%s\", file %s, line %d", ap=0x7fffad9faab8) at /home/michi/development/git/qt5/qtbase/src/corelib/global/qlogging.cpp:380 #7 0x00007fffe35084b1 in QMessageLogger::fatal(char const*, ...) const (this=0x7fffad9fad00, msg=0x7fffe3b8afa8 "ASSERT failure in %s: \"%s\", file %s, line %d") at /home/michi/development/git/qt5/qtbase/src/corelib/global/qlogging.cpp:880 #8 0x00007fffe34f969c in qt_assert_x(char const*, char const*, char const*, int) (where=0x7fffe3bae469 "QCoreApplication::sendEvent", what=0x7fff9d691f60 "Cannot send events to objects owned by a different thread. Current thread 0x0x7fff9c456670. Receiver 'QtMainWindowClassWindow' (of type 'QWidgetWindow') was created in thread 0x0x55555560dc60", file=0x7fffe3bae098 "/home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp", line=547) at /home/michi/development/git/qt5/qtbase/src/corelib/global/qassert.cpp:114 #9 0x00007fffe35f54e6 in QCoreApplicationPrivate::checkReceiverThread(QObject*) (receiver=0x55555bb8a180) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:547 #10 0x00007fffe15a786e in QApplication::notify(QObject*, QEvent*) (this=0x55555560d9e0, receiver=0x55555bb8a180, e=0x7fffad9fb120) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2580 #11 0x00007fffe35f68be in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x55555bb8a180, event=0x7fffad9fb120) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1154 #12 0x00007fffe35f7677 in QCoreApplication::sendEvent(QObject*, QEvent*) (receiver=0x55555bb8a180, event=0x7fffad9fb120) at /home/michi/development/git/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1598 #13 0x00007fffe24f74d0 in QWindow::setIcon(QIcon const&) (this=0x55555bb8a180, icon=...) at /home/michi/development/git/qt5/qtbase/src/gui/kernel/qwindow.cpp:1094 #14 0x00007fffe165564d in QWidgetPrivate::setWindowIcon_sys() (this=0x55555b24b370) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:6208 #15 0x00007fffe1655598 in QWidget::setWindowIcon(QIcon const&) (this=0x55555735d7a0, icon=...) at /home/michi/development/git/qt5/qtbase/src/widgets/kernel/qwidget.cpp:6198 #16 0x00007fffe42362a9 in QtFrame::SetIcon(unsigned short) (this=0x55555bba7d30, nIcon=4) at vcl/qt6/../qt5/QtFrame.cxx:378 #17 0x00007fffee0a2aa6 in SystemWindow::SetIcon(unsigned short) (this=0x7fff9d68a7c0, nIcon=4) at /home/michi/development/git/libreoffice/vcl/source/window/syswin.cxx:332 #18 0x00007ffff4c843f1 in framework::TitleBarUpdate::impl_updateIcon(com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&) (this=0x7fff9c452fe0, xFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x7fff9d68c690) at /home/michi/development/git/libreoffice/framework/source/helper/titlebarupdate.cxx:278 #19 0x00007ffff4c831c2 in framework::TitleBarUpdate::impl_forceUpdate() (this=0x7fff9c452fe0) at /home/michi/development/git/libreoffice/framework/source/helper/titlebarupdate.cxx:214 #20 0x00007ffff4c8304b in framework::TitleBarUpdate::frameAction(com::sun::star::frame::FrameActionEvent const&) (this=0x7fff9c452fe0, aEvent=...) at /home/michi/development/git/libreoffice/framework/source/helper/titlebarupdate.cxx:95 #21 0x00007ffff4e25397 in (anonymous namespace)::XFrameImpl::implts_sendFrameActionEvent(com::sun::star::frame::FrameAction const&) (this=0x7fff9d68c620, aAction=@0x7ffff4a01f68: com::sun::star::frame::FrameAction::FrameAction_COMPONENT_ATTACHED) at /home/michi/development/git/libreoffice/framework/source/services/frame.cxx:2960 #22 0x00007ffff4e1df33 in (anonymous namespace)::XFrameImpl::setComponent(com::sun::star::uno::Reference<com::sun::star::awt::XWindow> const&, com::sun::star::uno::Reference<com::sun::star::frame::XController> const&) (this=0x7fff9d68c620, xComponentWindow=uno::Reference to (VCLXContainer *) 0x7fff9dd02cd0, xController=uno::Reference to (ScTabViewObj *) 0x7fff9d8d82d8) at /home/michi/development/git/libreoffice/framework/source/services/frame.cxx:1552 #23 0x00007ffff40291b3 in utl::ConnectFrameControllerModel(com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&, com::sun::star::uno::Reference<com::sun::star::frame::XController2> const&, com::sun::star::uno::Reference<com::sun::star::frame::XModel> const&) (xFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x7fff9d68c690, xController=uno::Reference to (ScTabViewObj *) 0x7fff9d8d82d8, xModel=uno::Reference to (ScModelObj *) 0x7fff9c471680) at include/unotools/fcm.hxx:45 #24 0x00007ffff402551a in (anonymous namespace)::SfxFrameLoader_Impl::impl_createDocumentView(com::sun::star::uno::Reference<com::sun::star::frame::XModel2> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&, comphelper::NamedValueCollection const&, rtl::OUString const&) (i_rModel=uno::Reference to (ScModelObj *) 0x7fff9c471680, i_rFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x7fff9d68c690, i_rViewFactoryArgs=..., i_rViewName="Default") at /home/michi/development/git/libreoffice/sfx2/source/view/frmload.cxx:584 #25 0x00007ffff402272f in (anonymous namespace)::SfxFrameLoader_Impl::load(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&) (this=0x7fff9c451600, rArgs=uno::Sequence of length 11 = {...}, _rTargetFrame=uno::Reference to ((anonymous namespace)::XFrameImpl *) 0x7fff9d68c690) at /home/michi/development/git/libreoffice/sfx2/source/view/frmload.cxx:759 #26 0x00007ffff4dd7b61 in framework::LoadEnv::impl_loadContent() (this=0x7fffad9fcbb8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:1176 #27 0x00007ffff4dd48e4 in framework::LoadEnv::start() (this=0x7fffad9fcbb8) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:412 #28 0x00007ffff4dd21b2 in framework::LoadEnv::startLoading(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&, rtl::OUString const&, int, LoadEnvFeatures) (this=0x7fffad9fcbb8, sURL="file:///home/michi/development/git/libreoffice/instdir/program/../program/opencl/cl-test.ods", lMediaDescriptor=uno::Sequence of length 1 = {...}, xBaseFrame=uno::Reference to (framework::Desktop *) 0x5555569ad308, sTarget="_blank", nSearchFlags=0, eFeature=LoadEnvFeatures::NONE) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:308 #29 0x00007ffff4dd0998 in framework::LoadEnv::loadComponentFromURL(com::sun::star::uno::Reference<com::sun::star::frame::XComponentLoader> const&, com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext> const&, rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (xLoader=uno::Reference to (framework::Desktop *) 0x5555569ad318, xContext=uno::Reference to (cppu::(anonymous namespace)::ComponentContext *) 0x555555623d48, sURL="file:///home/michi/development/git/libreoffice/instdir/program/../program/opencl/cl-test.ods", sTarget="_blank", nSearchFlags=0, lArgs=uno::Sequence of length 1 = {...}) at /home/michi/development/git/libreoffice/framework/source/loadenv/loadenv.cxx:168 #30 0x00007ffff4e06a3f in framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (this=0x5555569ad2a0, sURL="file:///home/michi/development/git/libreoffice/instdir/program/../program/opencl/cl-test.ods", sTargetFrameName="_blank", nSearchFlags=0, lArguments=uno::Sequence of length 1 = {...}) at /home/michi/development/git/libreoffice/framework/source/services/desktop.cxx:592 #31 0x00007ffff4e06b34 in non-virtual thunk to framework::Desktop::loadComponentFromURL(rtl::OUString const&, rtl::OUString const&, int, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) () at /home/michi/development/git/libreoffice/instdir/program/libfwklo.so #32 0x00007ffff7ba9147 in desktop::testOpenCLCompute(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&, rtl::OUString const&) (xDesktop=uno::Reference to (framework::Desktop *) 0x5555569ad2f8, rURL="file:///home/michi/development/git/libreoffice/instdir/program/../program/opencl/cl-test.ods") at /home/michi/development/git/libreoffice/desktop/source/app/opencl.cxx:132 #33 0x00007ffff7ba7f54 in desktop::Desktop::CheckOpenCLCompute(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&) (xDesktop=uno::Reference to (framework::Desktop *) 0x5555569ad2f8) --Type <RET> for more, q to quit, c to continue without paging-- at /home/michi/development/git/libreoffice/desktop/source/app/opencl.cxx:241 #34 0x00007ffff7b5719d in std::__invoke_impl<void, void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> >(std::__invoke_other, void (*&&)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2>&&) (__f=@0x5555573c20b0: 0x7ffff7ba7760 <desktop::Desktop::CheckOpenCLCompute(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&)>, __args=...) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:61 #35 0x00007ffff7b5712d in std::__invoke<void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> >(void (*&&)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2>&&) (__fn=@0x5555573c20b0: 0x7ffff7ba7760 <desktop::Desktop::CheckOpenCLCompute(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&)>, __args=...) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/invoke.h:96 #36 0x00007ffff7b57102 in std::thread::_Invoker<std::tuple<void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> > >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) (this=0x5555573c20a8) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_thread.h:292 #37 0x00007ffff7b570c5 in std::thread::_Invoker<std::tuple<void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> > >::operator()() (this=0x5555573c20a8) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_thread.h:299 #38 0x00007ffff7b56e69 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> const&), com::sun::star::uno::Reference<com::sun::star::frame::XDesktop2> > > >::_M_run() (this=0x5555573c20a0) at /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/std_thread.h:244 #39 0x00007ffff74dee24 in () at /lib/x86_64-linux-gnu/libstdc++.so.6 #40 0x00007ffff78a4dbb in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:444 #41 0x00007ffff79269f8 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78 Change-Id: Ic611eb26b140c060cba4d81603e506806cf43bab Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167778 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-17tdf#61444 Correct Writer text layout across formatting changesJonathan Clark
Previously, Writer performed text layout for each span of text separately. This caused incorrect kerning when the text style changed mid-word, for example by highlighting or changing the color of a single letter. This change updates Writer so it will also consider neighboring text while performing text layout. Change-Id: I511096c009343f39cc1b9ba745909c5b8cbad86f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167016 Tested-by: Jenkins Reviewed-by: Jonathan Clark <jonathan@libreoffice.org>
2024-05-16WaE: C6011 Dereferencing NULL pointer warningsCaolán McNamara
Change-Id: I710ff75d387b2d452cb80911c9f0092948453ef8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167751 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> Tested-by: Jenkins
2024-05-16VCL: Windows: more usecases for FlashWindow() API to inform on changesVasily Melenchuk
FlashWindow() can be used to bring user attention to application in background. Right now in LO it has implementation only for Windows. Here some new cases were added when flashing is used: * dialog window did open * document loaded * LO started Some redesign of previous solution is also performed: no manual search for top window, let's reuse existing code. Changed behavior for bringing LO window to foreground: it is made always and not depending on current value of NewDocumentHandling:ForceFocusAndToFront. It has no sense to tweak this behavior: if user clicks on document in file explorer, LO should came to foreground, no exceptions. Change-Id: I22b5b4e2b170cd25632083a55b3e9f0358bcae03 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166615 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
2024-05-16tdf#146619 Drop unused 'using namespace com::sun::star'Gabor Kelemen
now that find-unused-includes was expanded with detecting these Change-Id: I9f21ad1a85c1e3178cad98464b2ba407d909b62d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167638 Reviewed-by: Gabor Kelemen <gabor.kelemen.extern@allotropia.de> Tested-by: Jenkins
2024-05-15tdf#160690 set an opaque alpha mask for non-transparent framesPatrick Luby
Due to the switch from transparency to alpha in commit 81994cb2b8b32453a92bcb011830fcb884f22ff3, an empty alpha mask is treated as a completely transparent bitmap. So revert all of the previous commits for tdf#157576, tdf#157635, and tdf#157793 and create a completely opaque bitmap instead. Note: this fix also fixes tdf#157576, tdf#157635, and tdf#157793. Change-Id: Ic2ccad6ab94e4d43b1b66013f85955d474dc0151 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167563 Reviewed-by: Patrick Luby <guibomacdev@gmail.com> Tested-by: Jenkins
2024-05-15tdf#161073 handle is supposed to be freed automatically on failureCaolán McNamara
and is since: https://gitlab.gnome.org/GNOME/glib/-/commit/747e3af9987b37847d7d5acbf882d1ee4a6bd91b Change-Id: Ibb648ccf69ff892fc1e2a3c3dc4da1fffd577c92 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167657 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> Tested-by: Jenkins
2024-05-14WaE: C6011 Dereferencing NULL pointer warningsCaolán McNamara
Change-Id: I3a65485cc890d6bb6bf1197a3f296634ebffa02c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167612 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-05-14tdf#160824 vcl: Require mouse over spinfield to mouse-wheel through valuesMichael Weghorn
In the same way that commit 22250df05830700b2555348b8ac46ee1007d0e5d Author: Michael Weghorn <m.weghorn@posteo.de> Date: Fri Dec 8 11:50:40 2023 +0100 tdf#158548 vcl: Require mouse over listbox to mouse-wheel through entries restricted changing listbox values for the focused listbox on mouse-wheel to the case when the listbox is also hovered over by the mouse, do the same for `SpinField` as well, to avoid accidently changing the value as described e.g. for the tdf#160824 scenario. This is also in line with Qt spin boxes that only change their values on mouse-wheel when the mouse pointer is above them. For the gtk3 VCL plugin that uses native spin boxes, this commit has no effect, and the value doesn't change on mouse-wheel at all. Change-Id: I22277294f76655cd13b1dc57416c82afe44460d1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167604 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-13WaE: C6011 Dereferencing NULL pointer warningsCaolán McNamara
Change-Id: Ib624737d838dfde29018e343f6b51501a5d7f7f9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167265 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> Tested-by: Jenkins
2024-05-13cool#5839 fire a clipboard changed event in the iOS appPatrick Luby
A clipboard changed event needs to be fired whenever the native general pasteboard changes. Otherwise, if the clipboard is empty when a document is opened, the Paste and Paste Special menu items and toolbar buttons will be disabled and will never be enabled even after something has been copied to the general pasteboard. Change-Id: I8a70a2ac4de55593a886233d144dc18c3c57178e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166073 Reviewed-by: Patrick Luby <guibomacdev@gmail.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Andras Timar <andras.timar@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167570 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-05-13vcl: Merge ComboBox and ComboBox::ImplMichael Weghorn
This removes one level of indirection. `ComboBox::Impl` had originally been introduced in commit ece8699f8f22f6bae137c601bc29b83b75dc3bf3 Author: Michael Stahl <mstahl@redhat.com> Date: Fri Jul 10 12:05:48 2015 +0200 vcl: pImplify ComboBox The boost::signal stuff is quite heavy (33 kloc), so try to hide it from the header. Change-Id: I87826ccfd2a151aff274ffa6b7159a988f751808 , but all of the boost usage in here has been replaced since then. Change-Id: Ia8fb5cb895800edae104857c7713fa65e509a3c2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167485 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-12createFromAscii -> OUString literals in attribute_set_map_to_property_valuesNoel Grandin
Change-Id: I98f40cba9baf2a21d095af84a07cd794723cb75d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167552 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-12replace createFromAscii with OUString literals in FilterConfigCacheNoel Grandin
Change-Id: I31a16e4b709955cb01d6aebaf169d40f71f7ea09 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167551 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
2024-05-12replace createFromAscii with OUString literals in getImportFormatShortNameNoel Grandin
Change-Id: I3f62ea563af8e2c9aa5ed558370b49f05804c632 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167550 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-12jsdialog: enable Object Name and Description dialogSzymon Kłos
and send uno command enable/disable status Signed-off-by: Szymon Kłos <szymon.klos@collabora.com> Change-Id: Id643a27308809b6960be72fb368b9f078ff9cf6c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167296 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167521 Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com> Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-05-12WaE: C6011 Dereferencing NULL pointer warningsCaolán McNamara
Change-Id: I85aa6c2f100823d1d39e24ab3ffcb0c44f66354e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167519 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> Tested-by: Jenkins
2024-05-12Related: tdf#96671 Also handle other Windows architecturesMike Kaganski
Change-Id: I8b3a9c10781450083ae2cdeb8614b42e33bf9520 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167531 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-05-11replace createFromAscii with OUString literals in OConfigurationNodeNoel Grandin
Change-Id: I19017bc993f0adafdae32313e0e01e69e1bbe80b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167517 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-11WaE: C6011 Dereferencing NULL pointer warningsCaolán McNamara
Change-Id: I95441e62c33bdc5c22dad2fc25a072d9ce93e4d7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167514 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-05-11WaE: C6011 Dereferencing NULL pointer warningsCaolán McNamara
Change-Id: Ic703c92165ba7f0a43d25bb2899b6455e2e2f312 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167513 Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com> Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-05-11tdf#96671 - Correctly detect windows 64-bit OSkubak
Adds detection: - Windows X86_64, - Windows X86_32 - WoW64 (Windows 32 on Windows 64). Change-Id: Ic40ec8bdfb206a7ad3045edf7ecef3cb97cc08f7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167144 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins
2024-05-11workaround clang segfault on macos-intelNoel Grandin
Change-Id: Icfced4a990e2d02995bff4078f14b8ee26e9cca3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167497 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-11lok: Don't dump empty aria properties in every JSON element.Michael Meeks
They simply bloat the json to no benefit if the properties are empty, avoid serializing empty values. Change-Id: I83c780d01820ec39acc85899d45ad9e929ad7e76 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167496 Reviewed-by: Marco Cecchetti <marco.cecchetti@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com> (cherry picked from commit 24876e5611abbaec9b2fe5fcbcf4be71a10ee366) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167457 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> Tested-by: Jenkins
2024-05-10lok: dumpState should truncate very long JSON messages.Michael Meeks
Otherwise we get huge dumps which can overwhelm our logging and hide more useful information, and/or the journal can drop them on the ground. Change-Id: Ie942c70a90a6df60ccd8986444362d622c213e15 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167456 Tested-by: Jenkins Reviewed-by: Michael Meeks <michael.meeks@collabora.com>
2024-05-10loplugin:ostr in vclNoel Grandin
Change-Id: I5b6ee5bda0c5ff69d297f7f8e87d4c3f3d21791c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167470 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
2024-05-09lok: don't try to search for legacy label from/toTomaž Vajngerl
Searching for legacy label from/to can take quite some time in complex hierarchies (wallclock timed to 100ms) and this quickly can add up. In case of accessibility checker sidebar with many entries it could add up to 10s or more (depending on the amount of accessibility issues found in the document). The legacy label from/to is not used when we load from .ui file so it is not relevant for online currently. It is only relevant for ui found in extensions or starbasic ui. Also avoid making a copy of the vector of mnemonic label for no particular reason. Change-Id: I72002e6440a06f6e8548b7bddb46c3ab283ea283 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167347 Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com> Reviewed-by: Szymon Kłos <szymon.klos@collabora.com> Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com> Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> (cherry picked from commit 1353ae001ed83c1f20b81df1708f694427c587a4) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167315 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
2024-05-09update crcs for --enable-cairo-rgba caseCaolán McNamara
Change-Id: If0588a018564a708361b0246b294520ac5d2d1db Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167368 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-05-08gtk3 a11y: Drop superfluous checkMichael Weghorn
If `nStateSet` is 0, no states will be set int the loop anyway, so the extra check is not needed. Change-Id: Id26f2210c51cb6bf952720f9a84696a327992df6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167330 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-08gtk3 a11y: No longer manually add focused state for focus objectMichael Weghorn
No longer manually add `ATK_STATE_FOCUSED` to the ATK focus object. The focused object should should have the `css::accessbibility::AccessibleStateType::FOCUSED` state set on UNO level, in which case this is already mapped to the focused state in the lines above the newly removed code, so explicitly addding it again shouldn't be necessary. If the state is missing, that most likely needs to be fixed in the underlying `XAccessibleStateSet` implementation. Therefore, remove what looks like a workaround. If any issues show up after this, let's rather take a look at the underlying issues and try to fix things there. Change-Id: Ie7252c4b2dd2ec15c7a3bbc6a1a5e2830cdd39a7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167309 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-08tdf#160767 skip fix for tdf#155266 when the event hasn't changedPatrick Luby
When scrolling in Writer with automatic spellchecking enabled, the current event never changes because the fix for tdf#155266 causes Writer to get stuck in a loop. So, if the current event has not changed since the last pass through this code, skip the fix for tdf#155266. Change-Id: I97265a7698756c5fb65b6686f6bb77c1caa08862 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167298 Reviewed-by: Patrick Luby <guibomacdev@gmail.com> Tested-by: Jenkins
2024-05-07Revert "make skia into static library"Noel Grandin
This reverts commit 6517ce70e50e61441484e7ee7a4be0e265020175. Reason for revert: <_rene__> noelgrandin: ping? <_rene__> noelgrandin: /usr/bin/ld: /home/rene/LibreOffice/git/master/workdir/LinkTarget/StaticLibrary/libskia.a: error adding symbols: archive has no index; run ranlib to add one <_rene__> noelgrandin: caused by your skia static library change. I think I pointed that out once already... <_rene__> $ ld -v <_rene__> GNU ld (GNU Binutils for Debian) 2.42 <noelgrandin> hmm, it's not an ld version issue, because I have ld 2.41 <_rene__> gcc version 13.2.0 (Debian 13.2.0-24) <_rene__> and <_rene__> Debian clang version 16.0.6 (27) <_rene__> fwiw, too <noelgrandin> is that a mergelibs build, or a regular build? <_rene__> mergelibs <_rene__> (the "normal" one, not =more) <_rene__> noelgrandin: ... and LTO <_rene__> noelgrandin: (saying because googling gives me https://github.com/mesonbuild/meson/issues/8371. and yes, .a is built with clang and the rest with gcc "of course") <_rene__> noelgrandin: but the Linux release builds _do_ that: <_rene__> $ grep -E "(lto|merge)" distro-configs/LibreOfficeLinux.conf <_rene__> --enable-mergelibs <_rene__> --enable-lto <_rene__> $ <loircbot> LibreOffice (core) [libreoffice-7-6-7] lohmaier+LibreOffice · readlicense_oo/license/CREDITS.fodt · update credits <noelgrandin> oh yeah, good spotting <noelgrandin> yes, LTO is going to be a problem because skia is built with clang Change-Id: I96c63109d2856c6e4cb22cf9ac945d4cfa9848c9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167227 Tested-by: René Engelhard <rene@debian.org> Reviewed-by: René Engelhard <rene@debian.org> Tested-by: Jenkins
2024-05-07tdf#160971 gtk3 a11y: Set role for custom editable comboboxMichael Weghorn
Set the combobox a11y role for the box in the .ui file used for the custom gtk3 combobox implementation. With this in place, moving focus to the "Font Name" or another editable combobox in the Writer toolbar now makes Orca announce that one as "editable combobox" rather than just "text". See also commit 1e851093f0148d2c55fc3fd377d274f6703c71c9 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Thu Apr 18 14:02:25 2024 +0200 tdf#159910 gtk3 a11y: Keep a11y props for combobox for a very similar change that caused the proper role to be announced for non-editable comboboxes. Change-Id: I3062e5c062911040ef0ec5721d15fee78d85d0dd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167262 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-07gtk3 a11y: Drop WindowEventHandler completelyMichael Weghorn
As mentioned in commit c45c64aeb57dce91965d7be54601128946455c90 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Mon May 6 14:44:36 2024 +0200 tdf#160806 tdf#160837 gtk3 a11y: Drop handling of some VclEventIds , the a11y bridge should not have to handle VCL events itself, but all relevant events should be forwarded to the a11y event listener as appropriate `AccessibleEventObject` and be handled by the a11y event listener instead, see `AtkListener::notifyEvent` for the gtk3 implementation. Now that handling of all VCL events has been dropped in previous commits, drop the `WindowEventHandler` completely. This also means that the call to `InitAtkBridge` when initializing the `GtkInstance` and the `DeInitAtkBridge` on destruction is no longer necessary. In a quick test with the Orca screen reader and the gtk3 VCL plugin, nothing suspicious showed up, things were still working as expected and experienced prior to the change series dropping the VCL event handling from the gtk3 a11y bridge. Change-Id: Ieed270b636f361c57cd4e78aceaecc7d174409d6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167256 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-07gtk3 a11y: Drop VclEventId::TabpageActivate processingMichael Weghorn
Drop the manual processing of `VclEventId::TabpageActivate` in the gtk3 a11y bridge. As mentioned in commit c45c64aeb57dce91965d7be54601128946455c90 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Mon May 6 14:44:36 2024 +0200 tdf#160806 tdf#160837 gtk3 a11y: Drop handling of some VclEventIds , the a11y bridge should not have to handle VCL events itself, but all relevant events should be forwarded to the a11y event listener as appropriate `AccessibleEventObject` and be handled by the a11y event listener instead, see `AtkListener::notifyEvent` for the gtk3 implementation. By now, most if not all tab pages should be native GTK widgets anyway. For non-native ones, `VCLXAccessibleTabControl::ProcessWindowEvent` contains handling for the `VclEventId::TabpageActivate` event that should be taking care of forwarding that as the corresponding a11y event to the a11y bridges. If anything is still missing after this commit, that's probably a good starting point for further analysis. Change-Id: I5b3f64c973d4030d2b68be6dff1d771bc0cef405 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167255 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-07gtk3 a11y: Drop VclEventId::MenuHighlight processingMichael Weghorn
Drop the manual processing of `VclEventId::MenuHighlight` in the gtk3 a11y bridge. As mentioned in commit c45c64aeb57dce91965d7be54601128946455c90 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Mon May 6 14:44:36 2024 +0200 tdf#160806 tdf#160837 gtk3 a11y: Drop handling of some VclEventIds , the a11y bridge should not have to handle VCL events itself, but all relevant events should be forwarded to the a11y event listener as appropriate `AccessibleEventObject` and be handled by the a11y event listener instead, see `AtkListener::notifyEvent` for the gtk3 implementation. In a quick test, menu items were still announced just fine by the Orca screen reader when using the gtk3 VCL plugin with this commit in place. By now, most menus should be native GTK widgets anyway. For non-native menus, `OAccessibleMenuBaseComponent::ProcessMenuEvent` contains handling for the `VclEventId::MenuHighlight` event that should be taking care of forwarding that as the corresponding a11y event to the a11y bridges. If anything is missing after this commit, that's probably a good starting point for further analysis. Change-Id: Ia8686101dc559ed98b48285eac15c35fc10818af Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167254 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-07gtk3 a11y: Drop VclEventId::ToolboxHighlight{,Off} processingMichael Weghorn
Drop the manual processing of `VclEventId::ToolboxHighlight` in the gtk3 a11y bridge. As mentioned in commit c45c64aeb57dce91965d7be54601128946455c90 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Mon May 6 14:44:36 2024 +0200 tdf#160806 tdf#160837 gtk3 a11y: Drop handling of some VclEventIds , the a11y bridge should not have to handle VCL events itself, but all relevant events should be forwarded to the a11y event listener as appropriate `AccessibleEventObject` and be handled by the a11y event listener instead, see `AtkListener::notifyEvent` for the gtk3 implementation. In a quick test, toolbar items were still announced just fine by the Orca screen reader when using the gtk3 VCL plugin with this commit in place. `VCLXAccessibleToolBox::ProcessWindowEvent` handles `VclEventId::ToolboxHighlight` and `VclEventId::ToolboxHighlightOff` whose manual processing is now dropped from gtk3, so the former might be a good place to further look into if anything is still missing after this commit. The now dropped handling was originally added in commit e9816343cd71dfe556e6ace12d67c642a8dde635 Author: Jens-Heiner Rechtien <hr@openoffice.org> Date: Thu May 11 12:32:22 2006 +0000 INTEGRATION: CWS atkbridge2 (1.2.4); FILE MERGED 2006/05/08 13:45:15 obr 1.2.4.1: #135353# fixed crashes when closing sub-toolbars and application exit Change-Id: Ib6cfafbc3711fce6a48120439654dc6e6c15971a Change-Id: I87061fdc595a0a29c2a3dce88ab13c9d7d7ba1b0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167253 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-07make skia into static libraryNoel Grandin
(1) we only use it from inside vcl (2) it exports a boatload of symbols (3) its a performance hotspot so lets link it inside and give the optimiser as much room as possible. Change-Id: If19d5556e3b45f40ef09d1e9225d12ef5f1ec32a Change-Id: I3d5edca20f5a15e8981f17fe9fcb9a338006eaff Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167273 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-07tdf#160806 tdf#160837 gtk3 a11y: Drop VclEventId::ToolboxButtonStateChangedMichael Weghorn
Similar to how the previous Change-Id: I00e62016ced2fbb8796960671f5e58a3ceac4b29 Author: Michael Weghorn <m.weghorn@posteo.de> Date: Mon May 6 14:44:36 2024 +0200 tdf#160806 tdf#160837 gtk3 a11y: Drop handling of some VclEventIds dropped handling for `VclEventId::WindowGetFocus` and `VclEventId::ObjectDying` in the gtk3 a11y bridge, do the same for `VclEventId::ToolboxButtonStateChanged`. And drop `VclEventId::ObjectDying` completely, as the gtk3 a11y bridge was the only place processing it. That event and the handling had been introduced in commit 3b40f502341272e989ae5266a1f8a03f2736449b Author: Ivo Hinkelmann <ihi@openoffice.org> Date: Tue Feb 5 11:30:51 2008 +0000 INTEGRATION: CWS fwk83_SRC680 (1.7.186); FILE MERGED 2008/01/30 12:40:39 obr 1.7.186.2: fix for fedora tinderbox (64bit) 2008/01/15 23:49:28 obr 1.7.186.1: #i70872# create wrapper for toolbox items that change state commit a1cbbd113da4ce3d5342d9ae5ff1c8d2137aa59c Author: Ivo Hinkelmann <ihi@openoffice.org> Date: Tue Feb 5 11:30:25 2008 +0000 INTEGRATION: CWS fwk83_SRC680 (1.51.160); FILE MERGED 2008/01/14 14:35:26 cd 1.51.160.1: #i70872# Added VCLEVENT_TOOLBOX_BUTTONCHANGED to notify accessibility implementation that an action happens to a toolbox button commit 3f1afd178875babe7ab79d22ab260221665bfb3f Author: Ivo Hinkelmann <ihi@openoffice.org> Date: Tue Feb 5 11:29:57 2008 +0000 INTEGRATION: CWS fwk83_SRC680 (1.2.262); FILE MERGED 2008/01/14 14:35:26 cd 1.2.262.1: #i70872# Added VCLEVENT_TOOLBOX_BUTTONCHANGED to notify accessibility implementation that an action happens to a toolbox button to ensure that an a11y object is created for toolbar buttons whose state changes, so that the corresponding a11y events are forwarded to the platform layer, see the referenced OOo bug #i70872# [1] for more details. This seems to be no longer necessary. By now, at least the scenario of toggling the bold/italics/underline status of text is announced just fine by Orca 46.1-1 on Debian testing with this change in place. (FWIW, tdf#123864 and the corresponding commits are more recent tickets/commits related to the topic.) Like for the above-mentioned change, dropping that handling addresses another case where the work window/root pane's a11y object when walking up the a11y hierarchy would be problematic, as it doesn't take into account the GtkWidget hierarchy. Sample backtrace of how the "problematic" a11y object was created (frame 1 below is the one where the a11y object with role root pane is created.) 1 atk_object_wrapper_new atkwrapper.cxx 983 0x7f620365672b 2 atk_object_wrapper_ref atkwrapper.cxx 948 0x7f62036560a0 3 atk_object_wrapper_new atkwrapper.cxx 1000 0x7f6203656952 4 atk_object_wrapper_ref atkwrapper.cxx 948 0x7f62036560a0 5 atk_object_wrapper_new atkwrapper.cxx 1000 0x7f6203656952 6 atk_object_wrapper_ref atkwrapper.cxx 948 0x7f62036560a0 7 atk_object_wrapper_new atkwrapper.cxx 1000 0x7f6203656952 8 atk_object_wrapper_ref atkwrapper.cxx 948 0x7f62036560a0 9 create_wrapper_for_child atkutil.cxx 359 0x7f620364c740 10 handle_toolbox_buttonchange atkutil.cxx 376 0x7f620364c1ef 11 WindowEventHandler atkutil.cxx 438 0x7f620364bd7f 12 Link<VclSimpleEvent&, void>::Call link.hxx 111 0x7f620dfd4ef8 13 VclEventListeners::Call vclevent.cxx 46 0x7f620dfd3f1a 14 Application::ImplCallEventListeners svapp.cxx 725 0x7f620df96b0d 15 vcl::Window::CallEventListeners event.cxx 225 0x7f620d59f6ee 16 ToolBox::SetItemState toolbox2.cxx 1197 0x7f620d6afd81 17 ToolBox::CheckItem toolbox.hxx 515 0x7f6214502c53 18 (anonymous namespace)::PopupMenuToolbarController::statusChanged popuptoolbarcontroller.cxx 180 0x7f621454205d 19 (anonymous namespace)::GenericPopupToolbarController::statusChanged popuptoolbarcontroller.cxx 373 0x7f6214540855 20 SfxDispatchController_Impl::addStatusListener unoctitm.cxx 797 0x7f6213090e95 21 SfxOfficeDispatch::addStatusListener unoctitm.cxx 279 0x7f6213090ade 22 svt::ToolboxController::bindListener toolboxcontroller.cxx 558 0x7f620fe9fbce 23 svt::ToolboxController::update toolboxcontroller.cxx 235 0x7f620fe9f207 24 framework::ToolBarManager::UpdateControllers toolbarmanager.cxx 726 0x7f62145b0f25 25 framework::ToolBarManager::AsyncUpdateControllersHdl toolbarmanager.cxx 2291 0x7f62145bdbfc 26 framework::ToolBarManager::LinkStubAsyncUpdateControllersHdl toolbarmanager.cxx 2278 0x7f62145aff9d 27 Link<Timer *, void>::Call link.hxx 111 0x7f620dfbc618 28 Timer::Invoke timer.cxx 75 0x7f620dfbc46c 29 Scheduler::CallbackTaskScheduling scheduler.cxx 509 0x7f620df5fa08 30 SalTimer::CallCallback saltimer.hxx 54 0x7f620368b566 31 sal_gtk_timeout_dispatch gtkdata.cxx 733 0x7f620368a573 32 ?? 0x7f62097110d9 33 ?? 0x7f6209714317 34 g_main_context_iteration 0x7f6209714930 35 GtkSalData::Yield gtkdata.cxx 405 0x7f62036888ef 36 GtkInstance::DoYield gtkinst.cxx 435 0x7f620368dd73 37 ImplYield svapp.cxx 378 0x7f620df94dfc 38 Application::Yield svapp.cxx 466 0x7f620df9470b 39 Application::Execute svapp.cxx 353 0x7f620df944a2 40 desktop::Desktop::Main app.cxx 1615 0x7f62171254fc 41 ImplSVMain svmain.cxx 229 0x7f620dfb760e 42 SVMain svmain.cxx 261 0x7f620dfb9659 43 soffice_main sofficemain.cxx 93 0x7f62171a7eb3 44 sal_main main.c 51 0x56162eceea5d 45 main main.c 49 0x56162eceea37 [1] https://bz.apache.org/ooo/show_bug.cgi?id=70872 Change-Id: I7409806071a00f32b201b08a831dc6941f072047 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167209 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-07tdf#160806 tdf#160837 gtk3 a11y: Drop handling of some VclEventIdsMichael Weghorn
Drop custom handling for VCL events `VclEventId::WindowGetFocus` and `VclEventId::ObjectDying` in the gtk3 a11y bridge. In my understanding, the a11y bridge should not have to handle any of these by itself, but all relevant a11y events should be forwarded to the a11y listener as an appropriate `AccessibleEventObject` and be handled by the a11y event listener instead, see `AtkListener::notifyEvent` for the gtk3 implementation. In a quick test with Orca, I didn't notice anything not being announced anymore with this change in place. If something is still not announced due to this change, a proper fix is likely to make sure that a proper a11y event is emitted and handled in `AtkListener::notifyEvent` instead. Note how `VCLXAccessibleComponent::ProcessWindowEvent` already handles the `VclEventId::WindowGetFocus` and `VclEventId::ObjectDying` window events. This (or a corresponding override in a subclass) and `VclEventId::ObjectDying` are potentially good places to start analysis if this change here results in any regressions. Dropping this custom handling also fixes one problematic way that an accessible object would be created for the work window/root panel (e.g. in Writer) from the corresponding XAccessible independent of the corresponding GTK Widget hierarchy, thus breaking the a11y hierarchy (ascending the tree doesn't work, see tdf#160806). This could be observed by starting LO Writer with the gtk3 VCL plugin first, then start Accerciser. Printing the a11y info for the parent of the object with role root pane as shown in Accerciser: In [1]: acc.parent Out[1]: <Atspi.Accessible object at 0x7f1f0f5b7780 (AtspiAccessible at 0x41f9c60)> In [2]: acc.parent.role Out[2]: <enum ATSPI_ROLE_FRAME of type Atspi.Role> In [3]: acc.parent.role Out[3]: <enum ATSPI_ROLE_FRAME of type Atspi.Role> Selecting the object shown as the parent in Accerciser's tree of LO's a11y hierarchy shows that this is not the same object: In [4]: acc Out[4]: <Atspi.Accessible object at 0x7f1f05f92100 (AtspiAccessible at 0x2d45c80)> In [5]: acc.role Out[5]: <enum ATSPI_ROLE_PANEL of type Atspi.Role> and consequently, the first child of that accessible doesn't report the accessible itself as its parent: In [6]: acc.get_child_at_index(0).parent == acc Out[6]: False The commit message of commit 252b1591d5e4e3adbf7063b56c2b578fe046ad3d Author: Michael Weghorn <m.weghorn@posteo.de> Date: Tue Apr 30 15:30:52 2024 +0200 tdf#159369 tdf#160806 tdf#160837 gtk3 a11y: Don't skip parents one way has some more background information. Extra local change in place showing where the accessible object gets created (used for analysis with rr): diff --git a/vcl/unx/gtk3/a11y/atkwrapper.cxx b/vcl/unx/gtk3/a11y/atkwrapper.cxx index db0aa1dbc907..c73d28987f26 100644 --- a/vcl/unx/gtk3/a11y/atkwrapper.cxx +++ b/vcl/unx/gtk3/a11y/atkwrapper.cxx @@ -977,6 +977,10 @@ atk_object_wrapper_new( const css::uno::Reference< css::accessibility::XAccessib AtkObject* atk_obj = ATK_OBJECT(pWrap); atk_obj->role = mapToAtkRole(xContext->getAccessibleRole(), xContext->getAccessibleStateSet()); + // NOTE: the object of interest is root pane, breaks the a11y hierarchy + // as it reports wrong parent + if (atk_obj->role == ATK_ROLE_ROOT_PANE) + SAL_WARN("vcl.gtk", "Creating wrapper for root pane"); atk_obj->accessible_parent = parent; ooo_wrapper_registry_add( rxAccessible, atk_obj ); Sample backtrace of how the problematic accessible object got created without this commit in place: 1 atk_object_wrapper_new atkwrapper.cxx 983 0x7fb5dda5ae8b 2 atk_object_wrapper_ref atkwrapper.cxx 948 0x7fb5dda5a800 3 atk_wrapper_notify_focus_change atkutil.cxx 47 0x7fb5dda4cab0 4 handle_get_focus atkutil.cxx 451 0x7fb5dda4debd 5 WindowEventHandler atkutil.cxx 512 0x7fb5dda4d9e3 6 Link<VclSimpleEvent&, void>::Call link.hxx 111 0x7fb5e81d4ef8 7 VclEventListeners::Call vclevent.cxx 46 0x7fb5e81d3f1a 8 Application::ImplCallEventListeners svapp.cxx 725 0x7fb5e8196b0d 9 vcl::Window::CallEventListeners event.cxx 225 0x7fb5e779f6ee 10 vcl::Window::PreNotify event.cxx 70 0x7fb5e779f58c 11 SystemWindow::PreNotify syswin.cxx 245 0x7fb5e788e470 12 vcl::Window::CompatPreNotify window.cxx 3941 0x7fb5e790cddd 13 ImplCallPreNotify winproc.cxx 69 0x7fb5e791d061 14 vcl::Window::ImplGrabFocus mouse.cxx 383 0x7fb5e782ffc5 15 vcl::Window::GrabFocus window.cxx 2988 0x7fb5e78fa027 16 vcl::Window::ImplAsyncFocusHdl winproc.cxx 2061 0x7fb5e7923386 17 vcl::Window::LinkStubImplAsyncFocusHdl winproc.cxx 2035 0x7fb5e792318d 18 Link<void *, void>::Call link.hxx 111 0x7fb5e792c298 19 ImplHandleUserEvent winproc.cxx 2287 0x7fb5e7927f79 20 ImplWindowFrameProc winproc.cxx 2851 0x7fb5e7924930 21 SalFrame::CallCallback salframe.hxx 312 0x7fb5e85a0310 22 SalGenericDisplay::ProcessEvent gendisp.cxx 66 0x7fb5e85cae6f 23 SalUserEventList::DispatchUserEvents(bool)::$_0::operator()() const salusereventlist.cxx 119 0x7fb5e80b49bd 24 SalUserEventList::DispatchUserEvents salusereventlist.cxx 120 0x7fb5e80b4864 25 SalGenericDisplay::DispatchInternalEvent gendisp.cxx 51 0x7fb5e85cadc5 26 call_userEventFn gtkdata.cxx 824 0x7fb5dda8e216 27 ?? 0x7fb5e47110d9 28 ?? 0x7fb5e4714317 29 g_main_context_iteration 0x7fb5e4714930 30 GtkSalData::Yield gtkdata.cxx 405 0x7fb5dda8ccef 31 GtkInstance::DoYield gtkinst.cxx 435 0x7fb5dda92173 32 ImplYield svapp.cxx 378 0x7fb5e8194dfc 33 Application::Yield svapp.cxx 466 0x7fb5e819470b 34 Application::Execute svapp.cxx 353 0x7fb5e81944a2 35 desktop::Desktop::Main app.cxx 1615 0x7fb5f13254fc 36 ImplSVMain svmain.cxx 229 0x7fb5e81b760e 37 SVMain svmain.cxx 261 0x7fb5e81b9659 38 soffice_main sofficemain.cxx 93 0x7fb5f13a7eb3 39 sal_main main.c 51 0x55b83ad6da5d 40 main main.c 49 0x55b83ad6da37 Sample backtrace for how the root pane a11y object is created for the good case, i.e. the case where the root pane's parent is set properly as it uses the GTK widget hierarchy (backtrace obtained from an rr run when first starting Accerciser, then LO, with master as of 7a895ec4205659038aa95941b65715fed1a3e7be + the same local change as mentioned above): 1 atk_object_wrapper_new atkwrapper.cxx 983 0x7f3799a5b48b 2 wrapper_factory_create_accessible atkfactory.cxx 83 0x7f3799a2c9c1 3 ooo_fixed_get_accessible atkfactory.cxx 95 0x7f3799a2c6d2 4 ?? 0x7f37993ec4c8 5 ?? 0x7f3798c536d3 6 ?? 0x7f379f9110d9 7 ?? 0x7f379f914317 8 g_main_context_iteration 0x7f379f914930 9 GtkSalData::Yield gtkdata.cxx 405 0x7f3799a8d2df 10 GtkInstance::DoYield gtkinst.cxx 435 0x7f3799a92743 11 ImplYield svapp.cxx 378 0x7f37a4194dfc 12 Application::Yield svapp.cxx 466 0x7f37a419470b 13 Application::Execute svapp.cxx 353 0x7f37a41944a2 14 desktop::Desktop::Main app.cxx 1615 0x7f37ad3254fc 15 ImplSVMain svmain.cxx 229 0x7f37a41b760e 16 SVMain svmain.cxx 261 0x7f37a41b9659 17 soffice_main sofficemain.cxx 93 0x7f37ad3a7eb3 18 sal_main main.c 51 0x560d4a1f4a5d 19 main main.c 49 0x560d4a1f4a37 Similar changes for other events will follow. (Keeping them separate for easier bibisecting/analysis if any of those changes causes regressions.) Change-Id: I00e62016ced2fbb8796960671f5e58a3ceac4b29 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167208 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-05-07tdf#160806 tdf#160837 gtk3 a11y: Port from deprecated atk_focus_tracker_notifyMichael Weghorn
`atk_focus_tracker_notify` takes care of sending an "AtkObject:focus-event" event for the given object. However, both, `atk_focus_tracker_notify` and the "AtkObject:focus-event" ATK event (which triggers a "focus" AT-SPI event) are deprecated, quoting [1]: > Focus tracking has been dropped as a feature to be implemented by ATK > itself. As AtkObject::focus-event was deprecated in favor of a > AtkObject::state-change signal, in order to notify a focus change on > your implementation, you can use atk_object_notify_state_change() > instead. Move the existing call to `atk_object_notify_state_change` up and use instead of the deprecated function. For the example of the "Print" button in Writer's standard toolbar, it can now be seen that a "object:state-changed:focused" instead of a "focus" event is received with a corresponding listener when tabbing to the button and then further: Before: 88.7 focus:(0, 0, 0) source: [push button | Print] application: [application | soffice] 88.7 object:state-changed:focused(1, 0, 0) source: [push button | Print] application: [application | soffice] 89.4 object:state-changed:focused(0, 0, 0) source: [push button | Print] application: [application | soffice] After: 80.0 object:state-changed:focused(1, 0, 0) source: [push button | Print] application: [application | soffice] 80.0 object:state-changed:focused(1, 0, 0) source: [push button | Print] application: [application | soffice] 80.8 object:state-changed:focused(0, 0, 0) source: [push button | Print] application: [application | soffice] The first event is the one emitted fromt this place, the others are from elsewhere. This also already shows that duplicate events are sent. Eliminating those which also cause other problems is planned in upcoming steps. [1] https://docs.gtk.org/atk/func.focus_tracker_notify.html Change-Id: Ieb9d25445b620681b01b887c0c120c80a43379ef Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167207 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-07tdf#160806 tdf#160837 gtk3 a11y: Don't use idleMichael Weghorn
Don't use and idle to call the (deprecated) ATK focus tracker, but do so right away. Since this is no longer called in an idle, the SolarMutexGuard should also no longer be needed, so drop it. It's not clear why the focus event was handled in an idle ever since commit 3b5c378706e465f59d78f95fddc5eff9e1a8fe19 Author: Rüdiger Timm <rt@openoffice.org> Date: Fri May 5 09:58:25 2006 +0000 INTEGRATION: CWS atkbridge (1.1.2); FILE ADDED 2006/04/27 14:47:54 obr 1.1.2.17: #134576# move focus clearing code to atkwindow.cxx 2006/04/27 08:18:11 obr 1.1.2.16: #134571# toolbox items are no VCL windows 2006/03/31 12:19:40 obr 1.1.2.15: #i63583# eliminated warnings 2006/03/03 11:07:09 obr 1.1.2.14: #i47890# fixed a crash when event source does not implement XAccessibleContext 2006/03/01 11:04:11 obr 1.1.2.13: #i47890# recursivly attach listeners to windows of type TREELISTBOX 2006/02/16 11:07:11 obr 1.1.2.12: #i47890# ORoadmapIDHyperLabel is derived from FixedText 2006/02/15 12:42:56 obr 1.1.2.11: #i47890# simulate focus events for page tabs 2006/02/07 09:26:21 obr 1.1.2.10: #i47890# reduce amount of focus notifications 2006/01/12 13:56:14 obr 1.1.2.9: #i47890# Solaris compile fixes 2006/01/05 14:06:32 obr 1.1.2.8: #i47890# override toolkit name and version and reworked bridge initialization 2005/11/16 15:57:57 obr 1.1.2.7: fixed for menu state ARMED only valid during notification 2005/10/24 07:36:05 obr 1.1.2.6: #i47890# reset focused object on WINDOW_DEACTIVATE 2005/10/20 11:57:32 obr 1.1.2.5: #i47890# initially set name and description + disabled some tracing 2005/10/20 07:09:12 obr 1.1.2.4: #i47890# made cxx files standalone, avoid queryInterface on each API call and demacrofied try/catch to include appropriate warnings 2005/09/28 07:24:13 obr 1.1.2.3: #i47890# changed ref-counting/life cycle once again, adjust tree and role of dialogs and filter sub-menu windows 2005/09/26 11:01:01 obr 1.1.2.2: #i47890# reworked lifecycle of atk wrapper objects 2005/06/14 13:57:24 obr 1.1.2.1: #i47890# global focus event listening stuff With this in place, watching for "object:focus" events in Accerciser still shows such an event when e.g. tabbing through the standard toolbar in Writer. Example for when the "Save" button receives focus: 37.9 focus:(0, 0, 0) source: [push button | Save] application: [application | soffice] This is one step to port from the use of that deprecated focus tracker and clean up a11y event handling in the gtk3 VCL plugin. (Take one step at a time to keep the scope of the changes clearer and simplify identifying causes of any potential regressions.) (`git show --ignore-space-change` helps to see the "actual change" more clearly). Change-Id: Ia71b70bdf5d9db8fbb389f3c7366af48ee723af7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167206 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-05-06throw more obvious error when a UITest fails to find a ui objectNoel Grandin
otherwise we might hit the assert inside the UIObjectUnoObj constructor Change-Id: I546964c0ec21bf4f874825dfd7dc11fc99ace502 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167099 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-06fix jenkins Windows buildNoel Grandin
after commit defc7a92064832423242635d48a7db4440a0b347 Author: Noel Grandin <noel.grandin@collabora.co.uk> Date: Fri May 3 09:20:04 2024 +0200 replace createFromAscii with OUString literals in vcl::pdf::BuildinFont my local version of Visual Studio seems to have better support for constinit than the jenkins one. Change-Id: If6aec53e8280c5afbd27bf53b7ac0cd1a5e742b0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167185 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-05replace createFromAscii with OUString literals in vcl::pdf::BuildinFontNoel Grandin
Change-Id: Ia5bf95a5474363e745517edce96a123764dcab73 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167151 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
2024-05-04ofz#68504 Integer-overflowCaolán McNamara
Change-Id: I38a5f6550e57875cea3d667a650e165b9d606fbe Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167131 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-05-03makefile simplification: replace $(call gb_CustomTarget_get_workdir,foo)Christian Lohmaier
…by a simple/static $(gb_CustomTarget_workdir)/foo The build system has a lot of overly complicated leftovers from when it was introduced and had not only deal with split repositories but also had to coexist with another buildsystem. Along with lots of copy'n'paste along the years the makefiles became hard to grasp for newcomers with all our calls and evals. As a first step to streamline that, the macros from TargetLocations that simply prefix a static path to the argument (and similar of the same kind) are a natural pick before simplifying the rules themselves/getting rid of a bunch of eval statements. Change-Id: Ia06dbbcd5d1994755a2ff05b84f72ccbc4e3cab5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167005 Tested-by: Jenkins Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
2024-05-03WaE: C6011 Dereferencing NULL pointer warningsCaolán McNamara
Change-Id: I9b2b86c26e08221c57735c6eda88727aa8a46b5f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167021 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>