basic/source/inc/runtime.hxx | 1 basic/source/runtime/runtime.cxx | 11 - configure.ac | 2 cui/uiconfig/ui/widgettestdialog.ui | 2 external/skia/Library_skia.mk | 1 external/skia/UnpackedTarball_skia.mk | 1 external/skia/missing-include.patch.0 | 10 + external/skia/tdf147342.patch.0 | 95 ++++++++++ hwpfilter/source/hbox.cxx | 7 include/rtl/string.hxx | 2 oox/qa/unit/data/tdf153260_VML_trim_export.odt |binary oox/qa/unit/vml.cxx | 23 ++ oox/source/crypto/AgileEngine.cxx | 4 oox/source/export/shapes.cxx | 64 ++++-- oox/source/export/vmlexport.cxx | 6 sc/source/core/tool/interpr3.cxx | 7 sc/source/core/tool/scmatrix.cxx | 45 ++-- sc/source/ui/dbgui/csvgrid.cxx | 18 - sd/qa/unit/data/odp/linked_ole.odp |binary sd/qa/unit/export-tests-ooxml3.cxx | 18 + svx/source/sdr/contact/objectcontactofpageview.cxx | 36 ++- sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx | 2 sw/qa/uitest/sidebar/stylesSidebar.py | 15 - sw/qa/uitest/writer_tests6/edit_file_properties_before_saving.py | 87 ++++----- sw/source/core/crsr/swcrsr.cxx | 7 sw/source/filter/ww8/ww8atr.cxx | 6 sysui/desktop/debian/postinst | 2 sysui/desktop/freedesktop/freedesktop-menus.spec | 4 sysui/desktop/macosx/Info.plist.in | 2 sysui/desktop/menus/base.desktop | 2 sysui/desktop/solaris/mailcap | 2 vcl/Library_vcl.mk | 4 vcl/inc/headless/svpframe.hxx | 1 vcl/inc/ios/iosinst.hxx | 15 + vcl/inc/osx/salframeview.h | 1 vcl/inc/quartz/salgdi.h | 10 - vcl/inc/salbmp.hxx | 16 - vcl/inc/skia/gdiimpl.hxx | 3 vcl/inc/skia/osx/gdiimpl.hxx | 1 vcl/inc/unx/gendata.hxx | 15 + vcl/ios/clipboard.cxx | 1 vcl/ios/dummies.cxx | 3 vcl/ios/iosinst.cxx | 11 - vcl/ios/salios.cxx | 1 vcl/osx/salframe.cxx | 2 vcl/osx/salframeview.mm | 21 ++ vcl/osx/salgdiutils.cxx | 27 ++ vcl/quartz/AquaGraphicsBackend.cxx | 2 vcl/quartz/cgutils.mm | 4 vcl/quartz/salbmp.cxx | 2 vcl/quartz/salgdi.cxx | 8 vcl/quartz/salvd.cxx | 1 vcl/skia/gdiimpl.cxx | 13 + vcl/skia/osx/gdiimpl.cxx | 2 vcl/source/uitest/uno/uiobject_uno.cxx | 2 vcl/unx/generic/app/gendata.cxx | 15 + vcl/win/gdi/salnativewidgets-luna.cxx | 27 ++ vcl/win/window/salframe.cxx | 7 writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx | 18 + writerfilter/qa/cppunittests/dmapper/data/tdf152884_Char_Transparency.docx |binary writerfilter/source/dmapper/TextEffectsHandler.cxx | 4 61 files changed, 538 insertions(+), 181 deletions(-)
New commits: commit cee266b09fa7e33d594fff585ccfaa704c123912 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Wed Feb 1 15:23:10 2023 +0000 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:09 2023 +0100 tdf#148085 get a more readable hyperlink color under windows dark mode Change-Id: I392206eb9fcff7fca39c6efee747486f4dfa925e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146405 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx index e1333b4a6c67..6a7eecdb71b1 100644 --- a/vcl/win/window/salframe.cxx +++ b/vcl/win/window/salframe.cxx @@ -2683,6 +2683,13 @@ void WinSalFrame::UpdateSettings( AllSettings& rSettings ) aStyleSettings.SetInactiveTabColor( ImplWinColorToSal( color ) ); CloseThemeData(hTheme); + if (hTheme = OpenThemeData(mhWnd, L"Textstyle")) + { + GetThemeColor(hTheme, TEXT_HYPERLINKTEXT, TS_HYPERLINK_NORMAL, TMT_TEXTCOLOR, &color); + aStyleSettings.SetLinkColor(ImplWinColorToSal(color)); + CloseThemeData(hTheme); + } + // tdf#148448 pick a warning color more likely to be readable as a // background in a dark theme aStyleSettings.SetWarningColor(Color(0xf5, 0x79, 0x00)); commit 02e178448e472169ace21e0ab8e4e1d7d9261d83 Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Wed Feb 1 11:29:14 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:09 2023 +0100 Let executeAction always ProcessEventsToIdle An ASan UITest_writer_tests7 UITEST_TEST_NAME=tdf135938.tdf135938.test_tdf135938_cross_reference_update occasionally failed for me with > ==1994973==ERROR: AddressSanitizer: heap-use-after-free on address 0x60f00014d718 at pc 0x7f95f4946ffa bp 0x7f95907fd720 sp 0x7f95907fd718 > READ of size 8 at 0x60f00014d718 thread T33 > #0 in std::__cxx1998::vector<std::unique_ptr<SvLBoxItem, std::default_delete<SvLBoxItem>>, std::allocator<std::unique_ptr<SvLBoxItem, std::default_delete<SvLBoxItem>>>>::size() const at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/stl_vector.h:988:40 > #1 in SvTreeListEntry::ItemCount() const at vcl/source/treelist/treelistentry.cxx:110:20 > #2 in SvTabListBox::GetEntryText(SvTreeListEntry const*, unsigned short) at vcl/source/treelist/svtabbx.cxx:289:37 > #3 in SvTabListBox::GetEntryText(SvTreeListEntry*) const at vcl/source/treelist/svtabbx.cxx:280:12 > #4 in TreeListEntryUIObject::get_state() at vcl/source/treelist/uiobject.cxx:119:32 > #5 in UIObjectUnoObj::getState() at vcl/source/uitest/uno/uiobject_uno.cxx:164:29 > #6 in non-virtual thunk to UIObjectUnoObj::getState() at vcl/source/uitest/uno/uiobject_uno.cxx > #7 in gcc3::callVirtualMethod(void*, unsigned int, void*, _typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int, unsigned long*, double*) at bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx:77:5 > #8 in cpp_call(bridges::cpp_uno::shared::UnoInterfaceProxy*, bridges::cpp_uno::shared::VtableSlot, _typelib_TypeDescriptionReference*, int, _typelib_MethodParameter*, void*, void**, _uno_Any**) at bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:233:13 > #9 in unoInterfaceProxyDispatch at bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:413:13 > #10 in binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*, std::__debug::vector<binaryurp::BinaryAny, std::allocator<binaryurp::BinaryAny>>*) const at binaryurp/source/incomingrequest.cxx:236:13 > #11 in binaryurp::IncomingRequest::execute() const at binaryurp/source/incomingrequest.cxx:79:26 > #12 in request at binaryurp/source/reader.cxx:86:9 > #13 in cppu_threadpool::JobQueue::enter(void const*, bool) at cppu/source/threadpool/jobqueue.cxx:100:17 > #14 in cppu_threadpool::ORequestThread::run() at cppu/source/threadpool/thread.cxx:165:31 > > 0x60f00014d718 is located 120 bytes inside of 168-byte region [0x60f00014d6a0,0x60f00014d748) > freed by thread T0 here: > #0 in operator delete(void*, unsigned long) at ~/github.com/llvm/llvm-project/compiler-rt/lib/asan/asan_new_delete.cpp:164:3 > #1 in SvTreeListEntry::~SvTreeListEntry() at vcl/source/treelist/treelistentry.cxx:62:1 > #2 in std::default_delete<SvTreeListEntry>::operator()(SvTreeListEntry*) const at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/unique_ptr.h:102:2 > #3 in std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>::~unique_ptr() at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/unique_ptr.h:407:4 > #4 in void std::destroy_at<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>>(std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*) at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/stl_construct.h:88:15 > #5 in void std::_Destroy<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>>(std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*) at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/stl_construct.h:149:7 > #6 in void std::_Destroy_aux<false>::__destroy<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*>(std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*, std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*) at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/stl_construct.h:163:6 > #7 in void std::_Destroy<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*>(std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*, std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*) at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/stl_construct.h:195:7 > #8 in void std::_Destroy<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*, std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>>(std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*, std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*, std::allocator<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>>&) at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/alloc_traits.h:947:7 > #9 in std::__cxx1998::vector<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>, std::allocator<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>>>::_M_erase_at_end(std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>*) at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/stl_vector.h:1932:6 > #10 in std::__cxx1998::vector<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>, std::allocator<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>>>::clear() at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/bits/stl_vector.h:1601:9 > #11 in std::__debug::vector<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>, std::allocator<std::unique_ptr<SvTreeListEntry, std::default_delete<SvTreeListEntry>>>>::clear() at ~/gcc/trunk/inst/lib/gcc/x86_64-pc-linux-gnu/13.0.0/../../../../include/c++/13.0.0/debug/vector:729:9 > #12 in SvTreeListEntry::ClearChildren() at vcl/source/treelist/treelistentry.cxx:28:16 > #13 in SvTreeList::Clear() at vcl/source/treelist/treelist.cxx:123:16 > #14 in SvTreeListBox::Clear() at vcl/source/treelist/treelistbox.cxx:422:17 > #15 in SalInstanceTreeView::clear() at vcl/source/app/salvtables.cxx:4240:18 > #16 in SwFieldRefPage::Reset(SfxItemSet const*) at sw/source/ui/fldui/fldref.cxx:175:16 > #17 in SwFieldPage::EditNewField(bool) at sw/source/ui/fldui/fldpage.cxx:111:5 > #18 in SwFieldDlg::ReInitTabPage(std::basic_string_view<char, std::char_traits<char>>, bool) at sw/source/ui/fldui/fldtdlg.cxx:218:16 > #19 in SwFieldDlg::Activate() at sw/source/ui/fldui/fldtdlg.cxx:239:9 > #20 in SwChildWinWrapper::UpdateHdl(Timer*) at sw/source/uibase/fldui/fldwrap.cxx:42:26 > #21 in SwChildWinWrapper::LinkStubUpdateHdl(void*, Timer*) at sw/source/uibase/fldui/fldwrap.cxx:39:1 > #22 in Link<Timer*, void>::Call(Timer*) const at include/tools/link.hxx:111:45 > #23 in Timer::Invoke() at vcl/source/app/timer.cxx:75:21 > #24 in Scheduler::CallbackTaskScheduling() at vcl/source/app/scheduler.cxx:481:20 > #25 in SalTimer::CallCallback() at vcl/inc/saltimer.hxx:54:13 > #26 in SvpSalInstance::CheckTimeout(bool) at vcl/headless/svpinst.cxx:161:53 > #27 in SvpSalInstance::ImplYield(bool, bool) at vcl/headless/svpinst.cxx:399:17 > #28 in SvpSalInstance::DoYield(bool, bool) at vcl/headless/svpinst.cxx:471:21 > #29 in ImplYield(bool, bool) at vcl/source/app/svapp.cxx:475:48 > #30 in Application::Yield() at vcl/source/app/svapp.cxx:559:5 > #31 in Application::Execute() at vcl/source/app/svapp.cxx:453:13 > #32 in desktop::Desktop::Main() at desktop/source/app/app.cxx:1604:13 causing > ERROR: test_tdf135938_cross_reference_update (tdf135938.tdf135938) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "uitest/uitest/test.py", line 125, in execute_dialog_through_command > yield xDialog > File "uitest/uitest/test.py", line 140, in execute_modeless_dialog_through_command > yield xDialog > File "sw/qa/uitest/writer_tests7/tdf135938.py", line 40, in test_tdf135938_cross_reference_update > self.assertEqual("ABC", get_state_as_dict(xSelect.getChild(0))["Text"]) > File "uitest/uitest/uihelper/common.py", line 13, in get_state_as_dict > return convert_property_values_to_dict(ui_object.getState()) > uitest.uihelper.common.com.sun.star.lang.DisposedException: Binary URP bridge disposed during call at binaryurp/source/bridge.cxx:613 The issue apparently is that TreeListEntryUIObject UNO objects, introduced in 71f562f8f77f14b76fde4329f7238fe2e7d6a054 "uitest: support tree lists", reference SvTreeListEntry instances by pointers that can apparently go stale while those UNO objects are still alive. I'm not sure there would be an easy fix for this, short of making those SvTreeListEntry instances ref-counted, or ripping out UITest support for those TreeListEntryUIObjects again. However, that underlying issue would presumably not be of practical concern if the test_tdf135938_cross_reference_update Python code would have waited for processEventsToIdle between its > xInsert.executeAction("CLICK", tuple()) and the following block > self.assertEqual("2", get_state_as_dict(xSelect)["Children"]) > self.assertEqual("ABC", get_state_as_dict(xSelect.getChild(0))["Text"]) > self.assertEqual("DEF", get_state_as_dict(xSelect.getChild(1))["Text"]) That way, there should be no more opportunity for the pointers in the passed-out TreeListEntryUIObjects to become stale while the Python code accesses them. And in Python UITest code, having to follow a call to executeAction by a call to processEventsToIdle appears to be a common and recurring requirement, just look at the most recent af1ca684bb12ff62e3df995ad44aefdb57a51af7 "another stab at making this test reliable", d183daea1abbd7b564d083298874dd7c40d5a5b3 "tdf#153161: (Ab)use a call to XTextRange::getString to flush edits", 3cc6b870c48b23418f65d2c3cd6eab72ef0680de "make an effort to fix the UITest_inputLine intermittent failure", f4668540ff7256bb0ddd382dfaf9f3499e99128a "tdf#150443 sw: fix crash of rejecting table row deletion". So make executeAction always call ProcessEventsToIdle, to simplify this and hopefully make UITests more robust. (Removing any now-redundant calls to processEventsToIdle, following calls to executeAction, from Python test code is left as follow-up clean up for now.) (I /think/ that the implementation of UIObjectUnoObj::executeAction could be simplified now, as waiting for Scheduler::ProcessEventsToIdle() should already make sure that aIdle has been processed, removing the need for the Notifier. But lets leave that as a follow-up TODO for now.) Change-Id: I41a5d51515dedaae44fb810b0ad3b0264c90abf3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146434 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sberg...@redhat.com> (cherry picked from commit 51a2e1a3963aae3228c9ddf78d0039c7c063393c) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146404 diff --git a/vcl/source/uitest/uno/uiobject_uno.cxx b/vcl/source/uitest/uno/uiobject_uno.cxx index 042b2fcf5cbb..06ec96a45ab6 100644 --- a/vcl/source/uitest/uno/uiobject_uno.cxx +++ b/vcl/source/uitest/uno/uiobject_uno.cxx @@ -19,6 +19,7 @@ #include <comphelper/propertyvalue.hxx> #include <cppuhelper/supportsservice.hxx> #include <tools/link.hxx> +#include <vcl/scheduler.hxx> #include <vcl/svapp.hxx> #include <vcl/idle.hxx> #include <vcl/window.hxx> @@ -153,6 +154,7 @@ void SAL_CALL UIObjectUnoObj::executeAction(const OUString& rAction, const css:: SolarMutexGuard aGuard; aIdle.reset(); + Scheduler::ProcessEventsToIdle(); } css::uno::Sequence<css::beans::PropertyValue> UIObjectUnoObj::getState() commit f0059d33a43ea178de4b12b771a14265584c8de4 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Wed Feb 1 14:24:04 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:08 2023 +0100 sw: restructure tests a bit Follow-up to 3ac5bfec2f73c55e99c4410f7559db86b875a269 "uitest: Always change doc info setting back to false" it seems it fails sometimes when using .uno:CloseDoc Seen in https://ci.libreoffice.org/job/gerrit_linux_clang_dbgutil/132728/consoleFull#-45932801048ce9c26-9d0a-43a8-83d8-c44f54920d59 Change-Id: I384e40a31735738c622277ccdbdb75babb185d85 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146448 Tested-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146457 Tested-by: Jenkins diff --git a/sw/qa/uitest/writer_tests6/edit_file_properties_before_saving.py b/sw/qa/uitest/writer_tests6/edit_file_properties_before_saving.py index 0df0dc504dde..d8d30d0aff74 100644 --- a/sw/qa/uitest/writer_tests6/edit_file_properties_before_saving.py +++ b/sw/qa/uitest/writer_tests6/edit_file_properties_before_saving.py @@ -35,10 +35,10 @@ class edit_file_properties_before_saving(UITestCase): with TemporaryDirectory() as tempdir: xFilePath = os.path.join(tempdir, "tdf117895-temp.odt") - with self.ui_test.create_doc_in_start_center("writer"): + try: + self.change_doc_info_setting("true") - try: - self.change_doc_info_setting("true") + with self.ui_test.create_doc_in_start_center("writer"): # Save Copy as with self.ui_test.execute_dialog_through_command('.uno:SaveAs', close_button="") as xDialog: @@ -52,25 +52,26 @@ class edit_file_properties_before_saving(UITestCase): xReadOnly = xPropertiesDialog.getChild("readonly") xReadOnly.executeAction("CLICK", tuple()) self.assertEqual("true", get_state_as_dict(xReadOnly)['Selected']) - finally: - # Put this setting back to false, otherwise it might affect other tests - self.change_doc_info_setting("false") - self.ui_test.wait_until_file_is_available(xFilePath) + self.ui_test.wait_until_file_is_available(xFilePath) - with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as doc2: - # Without the fix in place, this test would have failed here - self.assertTrue(doc2.isReadonly()) + with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as doc2: + # Without the fix in place, this test would have failed here + self.assertTrue(doc2.isReadonly()) + + finally: + # Put this setting back to false, otherwise it might affect other tests + self.change_doc_info_setting("false") def test_tdf119206(self): with TemporaryDirectory() as tempdir: xFilePath = os.path.join(tempdir, "tdf119206-temp.odt") - with self.ui_test.create_doc_in_start_center("writer"): + try: + self.change_doc_info_setting("true") - try: - self.change_doc_info_setting("true") + with self.ui_test.create_doc_in_start_center("writer"): xWriterDoc = self.xUITest.getTopFocusWindow() xWriterEdit = xWriterDoc.getChild("writer_edit") @@ -92,13 +93,14 @@ class edit_file_properties_before_saving(UITestCase): xReadOnly = xPropertiesDialog.getChild("readonly") xReadOnly.executeAction("CLICK", tuple()) self.assertEqual("true", get_state_as_dict(xReadOnly)['Selected']) - finally: - # Put this setting back to false, otherwise it might affect other tests - self.change_doc_info_setting("false") - self.ui_test.wait_until_file_is_available(xFilePath) + self.ui_test.wait_until_file_is_available(xFilePath) + + with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as doc2: + self.assertTrue(doc2.isReadonly()) - with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as doc2: - self.assertTrue(doc2.isReadonly()) + finally: + # Put this setting back to false, otherwise it might affect other tests + self.change_doc_info_setting("false") # vim: set shiftwidth=4 softtabstop=4 expandtab: commit 905c577d25477604fd36ffd4d80aaf28928c7e13 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Wed Feb 1 11:32:38 2023 +0000 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:08 2023 +0100 add missing id-column Change-Id: Ia6b1a4daa2a3327faa33d60289c4dd4c12deefbc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146442 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/cui/uiconfig/ui/widgettestdialog.ui b/cui/uiconfig/ui/widgettestdialog.ui index 787deda37171..1bf515198a73 100644 --- a/cui/uiconfig/ui/widgettestdialog.ui +++ b/cui/uiconfig/ui/widgettestdialog.ui @@ -88,6 +88,7 @@ <property name="button-sensitivity">off</property> <property name="has-entry">True</property> <property name="entry-text-column">0</property> + <property name="id-column">1</property> <child internal-child="entry"> <object class="GtkEntry"> <property name="sensitive">False</property> @@ -264,6 +265,7 @@ <property name="model">liststore1</property> <property name="has-entry">True</property> <property name="entry-text-column">0</property> + <property name="id-column">1</property> <child internal-child="entry"> <object class="GtkEntry"> <property name="can-focus">False</property> commit c62fce489c8a4c67bd67d0abce5d7f55b8d24998 Author: Regina Henschel <rb.hensc...@t-online.de> AuthorDate: Mon Jan 30 15:32:54 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:08 2023 +0100 tdf#153260 VML export write trim value true in any case LO renders Fontwork shapes always so as if trim=true is set. But the default value for trim attribute is 'false'. Therefore always write out 'true'. Otherwise the import will treat it as 'false' and apply the shape height reducing workaround. Change-Id: I626c5a84627f16011198a9a4e35d8fedf1fd1b3e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146361 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.hensc...@t-online.de> Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146436 diff --git a/oox/qa/unit/data/tdf153260_VML_trim_export.odt b/oox/qa/unit/data/tdf153260_VML_trim_export.odt new file mode 100644 index 000000000000..407a27fff254 Binary files /dev/null and b/oox/qa/unit/data/tdf153260_VML_trim_export.odt differ diff --git a/oox/qa/unit/vml.cxx b/oox/qa/unit/vml.cxx index 6a8eab8098ab..be99a281af04 100644 --- a/oox/qa/unit/vml.cxx +++ b/oox/qa/unit/vml.cxx @@ -17,6 +17,7 @@ #include <com/sun/star/drawing/PointSequenceSequence.hpp> #include <com/sun/star/drawing/PolygonKind.hpp> #include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp> +#include <com/sun/star/drawing/XDrawPageSupplier.hpp> #include <com/sun/star/drawing/XDrawPagesSupplier.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/drawing/ColorMode.hpp> @@ -201,6 +202,28 @@ CPPUNIT_TEST_FIXTURE(OoxVmlTest, testWatermark) CPPUNIT_ASSERT_EQUAL(drawing::ColorMode_WATERMARK, eMode); } +CPPUNIT_TEST_FIXTURE(OoxVmlTest, testWriterFontworkTrimTrue) +{ + // The document contains a shape, that will be exported as VML shape to docx. Error was that the + // attribute trim was not written out and thus import had treated it as the default 'false' and + // had reduced the shape height. + loadFromURL(u"tdf153260_VML_trim_export.odt"); + + // FIXME: tdf#153183 validation error in OOXML export: Errors: 1 + // Attribute 'ID' is not allowed to appear in element 'v:shape'. + skipValidation(); + saveAndReload("Office Open XML Text"); + + uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<drawing::XShape> xShape(xDrawPageSupplier->getDrawPage()->getByIndex(0), + uno::UNO_QUERY); + + // Make sure the shape height is not changed. + // Without the fix the test would have failed with expected 4999 actual 1732. + awt::Size aSize = xShape->getSize(); + CPPUNIT_ASSERT_DOUBLES_EQUAL(4999, aSize.Height, 2); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index 4fa1e6cf7764..0ef1d3a05447 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -960,8 +960,10 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const tools::Rectangle& OUString aSize = OUString::number(nSizeF); aStyle += ";font-size:" + aSize + "pt"; } - if (IsWaterMarkShape(m_pSdrObject->GetName())) - pAttrList->add(XML_trim, "t"); + // tdf#153260. LO renders all Fontwork shapes as if trim="t" is set. Default + // value is "f". So always write out "t", otherwise import will reduce the + // shape height as workaround for "f". + pAttrList->add(XML_trim, "t"); if (!aStyle.isEmpty()) pAttrList->add(XML_style, aStyle); commit aa7618a7761b97c90ea1214f354c7af91fd9e16b Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Thu Jan 26 22:03:42 2023 +0300 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:08 2023 +0100 tdf#153235: Optimize Application::Reschedule calls in SbiRuntime::Step Setup the "last reschedule time" counter at the first pass, to avoid useless immediate reschedule. Update the counter when running "when blocked" reschedules. This seems to avoid the problem with the bugdoc. Change-Id: Ib5958a1a2b048f5ec654c69ee9e977e8a26de6f5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146215 Tested-by: Mike Kaganski <mike.kagan...@collabora.com> Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146246 Tested-by: Jenkins diff --git a/basic/source/inc/runtime.hxx b/basic/source/inc/runtime.hxx index d0922e6a0e0a..a6e12b50106d 100644 --- a/basic/source/inc/runtime.hxx +++ b/basic/source/inc/runtime.hxx @@ -250,7 +250,6 @@ class SbiRuntime BasicDebugFlags nFlags; // Debugging-Flags ErrCode nError; sal_uInt16 nOps; // opcode counter - sal_uInt32 m_nLastTime; std::vector<SbxVariableRef> aRefSaved; // #74254 save temporary references std::vector<SbiGosub> pGosubStk; // GOSUB stack diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx index 6a15cb1606e6..23e65805240c 100644 --- a/basic/source/runtime/runtime.cxx +++ b/basic/source/runtime/runtime.cxx @@ -599,7 +599,7 @@ SbMethod* SbiInstance::GetCaller( sal_uInt16 nLevel ) SbiRuntime::SbiRuntime( SbModule* pm, SbMethod* pe, sal_uInt32 nStart ) : rBasic( *static_cast<StarBASIC*>(pm->pParent) ), pInst( GetSbData()->pInst ), - pMod( pm ), pMeth( pe ), pImg( pMod->pImage.get() ), mpExtCaller(nullptr), m_nLastTime(0) + pMod( pm ), pMeth( pe ), pImg( pMod->pImage.get() ), mpExtCaller(nullptr) { nFlags = pe ? pe->GetDebugFlags() : BasicDebugFlags::NONE; pIosys = pInst->GetIoSystem(); @@ -792,23 +792,26 @@ bool SbiRuntime::Step() { if( bRun ) { + static sal_uInt32 nLastTime = osl_getGlobalTimer(); + // in any case check casually! if( !( ++nOps & 0xF ) && pInst->IsReschedule() ) { sal_uInt32 nTime = osl_getGlobalTimer(); - if (nTime - m_nLastTime > 5 ) // 20 ms + if (nTime - nLastTime > 5) // 20 ms { + nLastTime = nTime; Application::Reschedule(); - m_nLastTime = nTime; } } // #i48868 blocked by next call level? while( bBlocked ) { - if( pInst->IsReschedule() ) + if( pInst->IsReschedule() ) // And what if not? Busy loop? { Application::Reschedule(); + nLastTime = osl_getGlobalTimer(); } } commit ef9d11c10457e530c06037a7a363bcb3aa8998f8 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Thu Jan 26 20:55:57 2023 +0000 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:08 2023 +0100 crashtesting: crash on forum-mso-en4-719754.xlsx with fPercentile ~== 1 input is fPercentile of near 1 where approxFloor would give nIndex of nSize-1 resulting in a non-zero tiny negative fDiff, when the assumption is fDiff will be 0 or some positive value. Change-Id: I8fe5520f2b3c68f3204d435337df527185dcb0d3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146218 Tested-by: Jenkins Tested-by: Caolán McNamara <caol...@redhat.com> Reviewed-by: Caolán McNamara <caol...@redhat.com> (cherry picked from commit 1371ba2bcbcce57ba5cbd7a199ae8feceb22d0d0) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146203 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/source/core/tool/interpr3.cxx b/sc/source/core/tool/interpr3.cxx index f55fc1636959..12e49de73972 100644 --- a/sc/source/core/tool/interpr3.cxx +++ b/sc/source/core/tool/interpr3.cxx @@ -3409,8 +3409,13 @@ double ScInterpreter::GetPercentile( vector<double> & rArray, double fPercentile OSL_ENSURE(nIndex < nSize, "GetPercentile: wrong index(1)"); vector<double>::iterator iter = rArray.begin() + nIndex; ::std::nth_element( rArray.begin(), iter, rArray.end()); - if (fDiff == 0.0) + if (fDiff <= 0.0) + { + // Note: neg fDiff seen with forum-mso-en4-719754.xlsx with + // fPercentile of near 1 where approxFloor gave nIndex of nSize-1 + // resulting in a non-zero tiny negative fDiff. return *iter; + } else { OSL_ENSURE(nIndex < nSize-1, "GetPercentile: wrong index(2)"); commit b1caf3d66f6edff599e376e6ecbb037ca529ef28 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Mon Jan 30 13:44:49 2023 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:08 2023 +0100 tdf#152726 Pasting Selection to Sheet as BMP Image, button test is larger regression from commit 720e4258ab5f00287098ff945a184bfb43911841 Author: Noel Grandin <n...@peralex.com> Date: Fri Aug 20 11:30:35 2021 +0200 use Primitive2DDecompositionVisitor in ViewObjectContact (tdf#105575) Revert the relevant piece, no idea what the underlying problem is. I suspect something is being tricksy and using settings from the current OutputDevice even though the point of the drawinglayer getPrimitive2DSequenceHierarchy is supposedly to be independant of that. Change-Id: I3026ff2ba5ce3751a4e4ebdf15954aae548493c6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146352 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> (cherry picked from commit 4fde49387eeecc35d1ead6305b1fe1e30e09cccc) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146322 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/svx/source/sdr/contact/objectcontactofpageview.cxx b/svx/source/sdr/contact/objectcontactofpageview.cxx index e4cec99e5e53..9d47bab76dd2 100644 --- a/svx/source/sdr/contact/objectcontactofpageview.cxx +++ b/svx/source/sdr/contact/objectcontactofpageview.cxx @@ -216,25 +216,12 @@ namespace sdr::contact aNewViewInformation2D.setViewTime(fCurrentTime); updateViewInformation2D(aNewViewInformation2D); - // if there is something to show, use a primitive processor to render it. There - // is a choice between VCL and Canvas processors currently. The decision is made in - // createProcessor2DFromOutputDevice and takes into account things like the - // Target is a MetaFile, a VDev or something else. The Canvas renderer is triggered - // currently using the shown boolean. Canvas is not yet the default. - - // prepare OutputDevice (historical stuff, maybe soon removed) - rDisplayInfo.ClearGhostedDrawMode(); // reset, else the VCL-paint with the processor will not do the right thing - pOutDev->SetLayoutMode(vcl::text::ComplexTextLayoutFlags::Default); // reset, default is no BiDi/RTL - - // create renderer - std::unique_ptr<drawinglayer::processor2d::BaseProcessor2D> pProcessor2D( - drawinglayer::processor2d::createProcessor2DFromOutputDevice( - rTargetOutDev, getViewInformation2D())); + drawinglayer::primitive2d::Primitive2DContainer xPrimitiveSequence; #if HAVE_FEATURE_DESKTOP || defined( ANDROID ) // get whole Primitive2DContainer; this will already make use of updated ViewInformation2D // and may use the MapMode from the Target OutDev in the DisplayInfo - rDrawPageVOContact.getPrimitive2DSequenceHierarchy(rDisplayInfo, *pProcessor2D); + rDrawPageVOContact.getPrimitive2DSequenceHierarchy(rDisplayInfo, xPrimitiveSequence); #else // Hmm, !HAVE_FEATURE_DESKTOP && !ANDROID means iOS, // right? But does it makes sense to use a different code @@ -270,9 +257,26 @@ namespace sdr::contact if (bGetHierarchy) // get whole Primitive2DContainer; this will already make use of updated ViewInformation2D // and may use the MapMode from the Target OutDev in the DisplayInfo - rDrawPageVOContact.getPrimitive2DSequenceHierarchy(rDisplayInfo, *pProcessor2D); + rDrawPageVOContact.getPrimitive2DSequenceHierarchy(rDisplayInfo, xPrimitiveSequence); #endif + // if there is something to show, use a primitive processor to render it. There + // is a choice between VCL and Canvas processors currently. The decision is made in + // createProcessor2DFromOutputDevice and takes into account things like the + // Target is a MetaFile, a VDev or something else. The Canvas renderer is triggered + // currently using the shown boolean. Canvas is not yet the default. + if(!xPrimitiveSequence.empty()) + { + // prepare OutputDevice (historical stuff, maybe soon removed) + rDisplayInfo.ClearGhostedDrawMode(); // reset, else the VCL-paint with the processor will not do the right thing + pOutDev->SetLayoutMode(vcl::text::ComplexTextLayoutFlags::Default); // reset, default is no BiDi/RTL + // create renderer + std::unique_ptr<drawinglayer::processor2d::BaseProcessor2D> pProcessor2D( + drawinglayer::processor2d::createProcessor2DFromOutputDevice( + rTargetOutDev, getViewInformation2D())); + pProcessor2D->process(xPrimitiveSequence); + } + // #114359# restore old ClipReghion if(bClipRegionPushed) { commit 44eaf53ba0077987b65cc7bc198845ba65eba0d6 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Tue Jan 31 10:22:35 2023 +0000 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:07 2023 +0100 tdf#153287 rollover in dark mode with "Explorer" is incongruous Using "CFD" gives a brighter border with rollover, but no notable focus state when focused. Try a combination here to get something decent. Change-Id: If7844cb0f1e88410959aa622b0271c3f3954230e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146395 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/vcl/win/gdi/salnativewidgets-luna.cxx b/vcl/win/gdi/salnativewidgets-luna.cxx index 5ab4c6cb4dd6..1cd6245658d6 100644 --- a/vcl/win/gdi/salnativewidgets-luna.cxx +++ b/vcl/win/gdi/salnativewidgets-luna.cxx @@ -1189,7 +1189,11 @@ bool WinSalGraphics::drawNativeControl( ControlType nType, break; case ControlType::Combobox: if( nPart == ControlPart::Entire ) + { + if (bUseDarkMode && !(nState & ControlState::FOCUSED)) + SetWindowTheme(mhWnd, L"CFD", nullptr); hTheme = getThemeHandle(mhWnd, L"Edit", mWinSalGraphicsImplBase); + } else if( nPart == ControlPart::ButtonDown ) { if (bUseDarkMode) @@ -1199,7 +1203,11 @@ bool WinSalGraphics::drawNativeControl( ControlType nType, break; case ControlType::Spinbox: if( nPart == ControlPart::Entire ) + { + if (bUseDarkMode && !(nState & ControlState::FOCUSED)) + SetWindowTheme(mhWnd, L"CFD", nullptr); hTheme = getThemeHandle(mhWnd, L"Edit", mWinSalGraphicsImplBase); + } else hTheme = getThemeHandle(mhWnd, L"Spin", mWinSalGraphicsImplBase); break; @@ -1207,6 +1215,10 @@ bool WinSalGraphics::drawNativeControl( ControlType nType, hTheme = getThemeHandle(mhWnd, L"Spin", mWinSalGraphicsImplBase); break; case ControlType::Editbox: + if (bUseDarkMode && !(nState & ControlState::FOCUSED)) + SetWindowTheme(mhWnd, L"CFD", nullptr); + hTheme = getThemeHandle(mhWnd, L"Edit", mWinSalGraphicsImplBase); + break; case ControlType::MultilineEditbox: hTheme = getThemeHandle(mhWnd, L"Edit", mWinSalGraphicsImplBase); break; commit 1654556e88615dd932875a766bb57eee879db238 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Tue Jan 31 10:49:51 2023 +0000 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:07 2023 +0100 tdf#153273 bodge dark scrollbar into drop downs Change-Id: I9c53b931feb7f720f86edfbb6ae88ff5ee436cef Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146396 Tested-by: Jenkins Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/vcl/win/gdi/salnativewidgets-luna.cxx b/vcl/win/gdi/salnativewidgets-luna.cxx index 1c177a1b2a97..5ab4c6cb4dd6 100644 --- a/vcl/win/gdi/salnativewidgets-luna.cxx +++ b/vcl/win/gdi/salnativewidgets-luna.cxx @@ -1172,7 +1172,20 @@ bool WinSalGraphics::drawNativeControl( ControlType nType, hTheme = getThemeHandle(mhWnd, L"Button", mWinSalGraphicsImplBase); break; case ControlType::Scrollbar: - hTheme = getThemeHandle(mhWnd, L"Scrollbar", mWinSalGraphicsImplBase); + if (bUseDarkMode) + { + // tdf#153273 undo the earlier SetWindowTheme, and use an explicit Explorer::Scrollbar + // a) with "Scrollbar" and SetWindowTheme(... "Explorer" ...) then scrollbars in dialog + // and main windows are dark, but dropdowns are light + // b) with "Explorer::Scrollbar" and SetWindowTheme(... "Explorer" ...) then scrollbars + // in dropdowns are dark, but scrollbars in dialogs and main windows are sort of "extra + // dark" + // c) with "Explorer::Scrollbar" and no SetWindowTheme both cases are dark + SetWindowTheme(mhWnd, nullptr, nullptr); + hTheme = getThemeHandle(mhWnd, L"Explorer::Scrollbar", mWinSalGraphicsImplBase); + } + else + hTheme = getThemeHandle(mhWnd, L"Scrollbar", mWinSalGraphicsImplBase); break; case ControlType::Combobox: if( nPart == ControlPart::Entire ) commit 0e08fc6ebacfded92e3b895d1b576fbcebce03cd Author: Patrick Luby <plub...@neooffice.org> AuthorDate: Tue Jan 24 20:28:22 2023 -0500 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:07 2023 +0100 tdf#147342 Notify Skia that the window's backing properties changed Change-Id: I4185a240a2ca6df1c92e86ff9950f86234d4ace8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146142 Tested-by: Jenkins Reviewed-by: Patrick Luby <plub...@neooffice.org> (cherry picked from commit a0d825133656c6329c0e7e3b0b6bafbd51e87271) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146210 Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com> diff --git a/external/skia/Library_skia.mk b/external/skia/Library_skia.mk index c0f91e1a463a..3bb9cc3eed40 100644 --- a/external/skia/Library_skia.mk +++ b/external/skia/Library_skia.mk @@ -950,6 +950,7 @@ ifeq ($(SKIA_GPU),METAL) $(eval $(call gb_Library_add_generated_objcxxobjects,skia,\ UnpackedTarball/skia/tools/sk_app/MetalWindowContext \ UnpackedTarball/skia/tools/sk_app/mac/MetalWindowContext_mac \ + UnpackedTarball/skia/tools/sk_app/mac/WindowContextFactory_mac \ )) # Not used, uses OpenGL - UnpackedTarball/skia/tools/sk_app/mac/RasterWindowContext_mac diff --git a/external/skia/UnpackedTarball_skia.mk b/external/skia/UnpackedTarball_skia.mk index e8a75960658c..f5c199aff4e4 100644 --- a/external/skia/UnpackedTarball_skia.mk +++ b/external/skia/UnpackedTarball_skia.mk @@ -40,6 +40,7 @@ skia_patches := \ tdf148624.patch.1 \ constexpr-template.patch.0 \ missing-include.patch.0 \ + tdf147342.patch.0 \ $(eval $(call gb_UnpackedTarball_set_patchlevel,skia,1)) diff --git a/external/skia/tdf147342.patch.0 b/external/skia/tdf147342.patch.0 new file mode 100644 index 000000000000..72ec8adf9a46 --- /dev/null +++ b/external/skia/tdf147342.patch.0 @@ -0,0 +1,95 @@ +--- tools/sk_app/mac/WindowContextFactory_mac.h 2022-02-16 06:03:39.000000000 -0500 ++++ tools/sk_app/mac/WindowContextFactory_mac.h 2023-01-25 08:09:00.000000000 -0500 +@@ -19,15 +19,8 @@ + + struct DisplayParams; + +-static inline CGFloat GetBackingScaleFactor(NSView* view) { +- #ifdef SK_BUILD_FOR_IOS +- UIScreen* screen = view.window.screen ?: [UIScreen mainScreen]; +- return screen.nativeScale; +- #else +- NSScreen* screen = view.window.screen ?: [NSScreen mainScreen]; +- return screen.backingScaleFactor; +- #endif +-} ++SK_API CGFloat GetBackingScaleFactor(NSView* view); ++SK_API void ResetBackingScaleFactor(); + + namespace window_context_factory { + +--- tools/sk_app/mac/MetalWindowContext_mac.mm 2021-11-25 10:39:27.000000000 -0500 ++++ tools/sk_app/mac/MetalWindowContext_mac.mm 2023-01-25 08:20:32.000000000 -0500 +@@ -87,6 +91,12 @@ + fMetalLayer.drawableSize = backingSize; + fMetalLayer.contentsScale = backingScaleFactor; + ++ // Related tdf#147342 Copy layer's colorspace to window's colorspace ++ // This method is now called when the window's backing properties have ++ // changed so copy any colorspace changes. ++ NSColorSpace* cs = fMainView.window.colorSpace; ++ fMetalLayer.colorspace = cs.CGColorSpace; ++ + fWidth = backingSize.width; + fHeight = backingSize.height; + } +--- /dev/null 2023-01-25 09:20:55.000000000 -0500 ++++ tools/sk_app/mac/WindowContextFactory_mac.mm 2023-01-25 09:21:22.000000000 -0500 +@@ -0,0 +1,57 @@ ++/* ++ * Use of this source code is governed by a BSD-style license that can be ++ * found in the LICENSE file. ++ */ ++ ++#include "tools/sk_app/mac/WindowContextFactory_mac.h" ++ ++namespace sk_app { ++ ++static bool bWindowScaling = false; ++static float fWindowScale = 1.0f; ++ ++CGFloat GetBackingScaleFactor(NSView* view) { ++ #ifdef SK_BUILD_FOR_IOS ++ UIScreen* screen = view.window.screen ?: [UIScreen mainScreen]; ++ return screen.nativeScale; ++ #else ++ // Related: tdf#147342 This should always be an exact copy of the ++ // sal::aqua::getWindowScaling() function in the following file: ++ // vcl/osx/salgdiutils.cxx ++ (void)view; ++ ++ if (!bWindowScaling) ++ { ++ NSArray *aScreens = [NSScreen screens]; ++ if (aScreens) ++ { ++ for (NSScreen *aScreen : aScreens) ++ { ++ float fScale = [aScreen backingScaleFactor]; ++ if (fScale > fWindowScale) ++ fWindowScale = fScale; ++ } ++ bWindowScaling = true; ++ } ++ if( const char* env = getenv("SAL_FORCE_HIDPI_SCALING")) ++ { ++ fWindowScale = atof(env); ++ bWindowScaling = true; ++ } ++ } ++ return fWindowScale; ++ #endif ++} ++ ++void ResetBackingScaleFactor() { ++ #ifndef SK_BUILD_FOR_IOS ++ // Related: tdf#147342 Force recalculation of the window scaling but keep ++ // the previous window scaling as the minimum so that we don't lose the ++ // resolution in cached images if a HiDPI monitor is disconnected and ++ // then reconnected. ++ bWindowScaling = false; ++ GetBackingScaleFactor(nil); ++ #endif ++} ++ ++} // namespace sk_app diff --git a/vcl/inc/osx/salframeview.h b/vcl/inc/osx/salframeview.h index 6242f3d4146a..1282eb10cbee 100644 --- a/vcl/inc/osx/salframeview.h +++ b/vcl/inc/osx/salframeview.h @@ -45,6 +45,7 @@ enum class SalEvent; -(void)windowDidMiniaturize: (NSNotification*)pNotification; -(void)windowDidDeminiaturize: (NSNotification*)pNotification; -(BOOL)windowShouldClose: (NSNotification*)pNotification; +-(void)windowDidChangeBackingProperties:(NSNotification *)pNotification; //-(void)willEncodeRestorableState:(NSCoder*)pCoderState; //-(void)didDecodeRestorableState:(NSCoder*)pCoderState; //-(void)windowWillEnterVersionBrowser:(NSNotification*)pNotification; diff --git a/vcl/inc/quartz/salgdi.h b/vcl/inc/quartz/salgdi.h index 0a4291d5692d..6d1668c1f913 100644 --- a/vcl/inc/quartz/salgdi.h +++ b/vcl/inc/quartz/salgdi.h @@ -134,6 +134,7 @@ private: namespace sal::aqua { float getWindowScaling(); +void resetWindowScaling(); } struct AquaSharedAttributes @@ -292,6 +293,7 @@ public: virtual void drawTextLayout(const GenericSalLayout& layout, bool bTextRenderModeForResolutionIndependentLayout) = 0; virtual void Flush() {} virtual void Flush( const tools::Rectangle& ) {} + virtual void WindowBackingPropertiesChanged() {}; protected: AquaGraphicsBackendBase(AquaSharedAttributes& rShared, SalGraphicsImpl * impl) : mrShared( rShared ), mpImpl(impl) @@ -487,6 +489,7 @@ public: void Flush(); void Flush( const tools::Rectangle& ); + void WindowBackingPropertiesChanged(); void UnsetState(); // InvalidateContext does an UnsetState and sets mrContext to 0 diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx index b2814b2a6463..cc515272e9bd 100644 --- a/vcl/inc/skia/gdiimpl.hxx +++ b/vcl/inc/skia/gdiimpl.hxx @@ -339,6 +339,8 @@ protected: return stream; } + void windowBackingPropertiesChanged(); + SalGraphics& mParent; /// Pointer to the SalFrame or SalVirtualDevice SalGeometryProvider* mProvider; @@ -370,6 +372,7 @@ protected: LastPolyPolygonInfo mLastPolyPolygonInfo; inline static int pendingOperationsToFlush = 0; int mScaling; // The scale factor for HiDPI screens. + bool mInWindowBackingPropertiesChanged; }; inline SkPaint SkiaSalGraphicsImpl::makePaintInternal() const diff --git a/vcl/inc/skia/osx/gdiimpl.hxx b/vcl/inc/skia/osx/gdiimpl.hxx index 71baf24625fc..b90b576a873f 100644 --- a/vcl/inc/skia/osx/gdiimpl.hxx +++ b/vcl/inc/skia/osx/gdiimpl.hxx @@ -43,6 +43,7 @@ public: virtual void Flush() override; virtual void Flush(const tools::Rectangle&) override; + virtual void WindowBackingPropertiesChanged() override; private: virtual int getWindowScaling() const override; diff --git a/vcl/osx/salframe.cxx b/vcl/osx/salframe.cxx index 90dd38704bcd..02a3879648db 100644 --- a/vcl/osx/salframe.cxx +++ b/vcl/osx/salframe.cxx @@ -287,6 +287,8 @@ void AquaSalFrame::screenParametersChanged() { OSX_SALDATA_RUNINMAIN( screenParametersChanged() ) + sal::aqua::resetWindowScaling(); + UpdateFrameGeometry(); if( mpGraphics ) diff --git a/vcl/osx/salframeview.mm b/vcl/osx/salframeview.mm index 8445a6c40904..b1d44b612e51 100644 --- a/vcl/osx/salframeview.mm +++ b/vcl/osx/salframeview.mm @@ -501,6 +501,27 @@ static AquaSalFrame* getMouseContainerFrame() (void)pNotification; } +-(void)windowDidChangeBackingProperties:(NSNotification *)pNotification +{ + (void)pNotification; +#if HAVE_FEATURE_SKIA + SolarMutexGuard aGuard; + + sal::aqua::resetWindowScaling(); + + if( mpFrame && AquaSalFrame::isAlive( mpFrame ) ) + { + // tdf#147342 Notify Skia that the window's backing properties changed + if ( SkiaHelper::isVCLSkiaEnabled() ) + { + AquaSalGraphics* pGraphics = mpFrame->mpGraphics; + if ( pGraphics ) + pGraphics->WindowBackingPropertiesChanged(); + } + } +#endif +} + -(void)dockMenuItemTriggered: (id)sender { (void)sender; diff --git a/vcl/osx/salgdiutils.cxx b/vcl/osx/salgdiutils.cxx index 603a8b612d42..d65897e25a83 100644 --- a/vcl/osx/salgdiutils.cxx +++ b/vcl/osx/salgdiutils.cxx @@ -35,6 +35,11 @@ #include <osx/salframe.h> #include <osx/saldata.hxx> +#if HAVE_FEATURE_SKIA +#include <tools/sk_app/mac/WindowContextFactory_mac.h> +#include <vcl/skia/SkiaHelper.hxx> +#endif + // TODO: Scale will be set to 2.0f as default after implementation of full scaled display support . This will allow moving of // windows between non retina and retina displays without blurry text and graphics. Static variables have to be removed thereafter. @@ -50,15 +55,17 @@ namespace sal::aqua { float getWindowScaling() { + // Related: tdf#147342 Any changes to this function must be copied to the + // sk_app::GetBackingScaleFactor() function in the following file: + // workdir/UnpackedTarball/skia/tools/sk_app/mac/WindowContextFactory_mac.h if (!bWindowScaling) { NSArray *aScreens = [NSScreen screens]; if (aScreens != nullptr) { - int nScreens = [aScreens count]; - for (int i = 0; i < nScreens; i++) + for (NSScreen *aScreen : aScreens) { - float fScale = [[aScreens objectAtIndex:i] backingScaleFactor]; + float fScale = [aScreen backingScaleFactor]; if (fScale > fWindowScale) fWindowScale = fScale; } @@ -72,6 +79,20 @@ float getWindowScaling() } return fWindowScale; } + +void resetWindowScaling() +{ + // Related: tdf#147342 Force recalculation of the window scaling but keep + // the previous window scaling as the minimum so that we don't lose the + // resolution in cached images if a HiDPI monitor is disconnected and + // then reconnected. +#if HAVE_FEATURE_SKIA + if ( SkiaHelper::isVCLSkiaEnabled() ) + sk_app::ResetBackingScaleFactor(); +#endif + bWindowScaling = false; + getWindowScaling(); +} } // end aqua void AquaSalGraphics::SetWindowGraphics( AquaSalFrame* pFrame ) diff --git a/vcl/quartz/salgdi.cxx b/vcl/quartz/salgdi.cxx index 439612a6a4b2..0793c15dd4ab 100644 --- a/vcl/quartz/salgdi.cxx +++ b/vcl/quartz/salgdi.cxx @@ -488,6 +488,11 @@ void AquaSalGraphics::Flush( const tools::Rectangle& rRect ) mpBackend->Flush( rRect ); } +void AquaSalGraphics::WindowBackingPropertiesChanged() +{ + mpBackend->WindowBackingPropertiesChanged(); +} + #ifdef IOS bool AquaSharedAttributes::checkContext() diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index c218d5d565e1..269c536abc7d 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -267,6 +267,7 @@ SkiaSalGraphicsImpl::SkiaSalGraphicsImpl(SalGraphics& rParent, SalGeometryProvid , mXorMode(XorMode::None) , mFlush(new SkiaFlushIdle(this)) , mScaling(1) + , mInWindowBackingPropertiesChanged(false) { } @@ -485,7 +486,7 @@ void SkiaSalGraphicsImpl::checkSurface() SAL_INFO("vcl.skia.trace", "create(" << this << "): " << Size(mSurface->width(), mSurface->height())); } - else if (GetWidth() * mScaling != mSurface->width() + else if (mInWindowBackingPropertiesChanged || GetWidth() * mScaling != mSurface->width() || GetHeight() * mScaling != mSurface->height()) { if (!avoidRecreateByResize()) @@ -2184,4 +2185,14 @@ void SkiaSalGraphicsImpl::dump(const char* file) const SkiaHelper::dump(mSurface, file); } +void SkiaSalGraphicsImpl::windowBackingPropertiesChanged() +{ + if (mInWindowBackingPropertiesChanged || !isGPU()) + return; + + mInWindowBackingPropertiesChanged = true; + performFlush(); + mInWindowBackingPropertiesChanged = false; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/skia/osx/gdiimpl.cxx b/vcl/skia/osx/gdiimpl.cxx index 1c1b7d2955c3..fcb2d2181fc4 100644 --- a/vcl/skia/osx/gdiimpl.cxx +++ b/vcl/skia/osx/gdiimpl.cxx @@ -95,6 +95,8 @@ void AquaSkiaSalGraphicsImpl::Flush() { performFlush(); } void AquaSkiaSalGraphicsImpl::Flush(const tools::Rectangle&) { performFlush(); } +void AquaSkiaSalGraphicsImpl::WindowBackingPropertiesChanged() { windowBackingPropertiesChanged(); } + void AquaSkiaSalGraphicsImpl::flushSurfaceToWindowContext() { if (!isGPU()) commit bfe39509676601262acfce217b0392763f738cd5 Author: PL <pluby@guibomacbookpro.local> AuthorDate: Fri Jan 27 19:04:23 2023 -0500 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:07 2023 +0100 Fix iOS build errors Recent code reorganization and macOS changes caused the iOS build to fail. This change fixes the build errors and updates the iOS code to use the same headless data structures as other headless builds. Also, the following commits were backported so that the Collabora iOS app would build with this branch: include/rtl/string.hxx: a771945f982a228e9076195bae5bdd0c8aaf60b3 include/LibreOfficeKit/LibreOfficeKitEnums.h and libreofficekit/source/gtk/lokdocview.cxx: 89f5912ad2eee786508414791653a017206a7c04 Change-Id: I9c5329eb6376120d6789447f991c93eb9839d595 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146265 Tested-by: Jenkins Reviewed-by: Tor Lillqvist <t...@collabora.com> Reviewed-by: Patrick Luby <plub...@neooffice.org> (cherry picked from commit 5473f185eab53e4389859473f104e697db3ae879) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146324 Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/include/rtl/string.hxx b/include/rtl/string.hxx index 24c6a64008cf..0a90fc9f04a3 100644 --- a/include/rtl/string.hxx +++ b/include/rtl/string.hxx @@ -457,7 +457,7 @@ public: rtl_string_release( pData ); } -#if LIBO_INTERNAL_ONLY +#if defined LIBO_INTERNAL_ONLY /** Provides an OString const & passing a storage pointer of an rtl_String * handle. It is more convenient to use C++ OString member functions when dealing diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk index 7b985b13711c..e8e4b116656f 100644 --- a/vcl/Library_vcl.mk +++ b/vcl/Library_vcl.mk @@ -684,9 +684,6 @@ $(eval $(call gb_Library_add_cxxflags,vcl,\ )) $(eval $(call gb_Library_add_objcxxobjects,vcl,\ vcl/quartz/cgutils \ - $(if $(filter SKIA,$(BUILD_TYPE)), \ - vcl/skia/quartz/salbmp \ - ) \ )) $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/ios/iosinst \ @@ -704,6 +701,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\ vcl/quartz/utils \ vcl/quartz/AquaGraphicsBackend \ $(vcl_headless_code) \ + vcl/unx/generic/app/gendata \ )) $(eval $(call gb_Library_use_system_darwin_frameworks,vcl,\ UIKit \ diff --git a/vcl/inc/headless/svpframe.hxx b/vcl/inc/headless/svpframe.hxx index bb15711aef53..1d8d11926e2f 100644 --- a/vcl/inc/headless/svpframe.hxx +++ b/vcl/inc/headless/svpframe.hxx @@ -27,6 +27,7 @@ #include <vector> #ifdef IOS +#include <quartz/salgdi.h> #define SvpSalInstance AquaSalInstance #define SvpSalGraphics AquaSalGraphics #endif diff --git a/vcl/inc/ios/iosinst.hxx b/vcl/inc/ios/iosinst.hxx index f1269cabe75e..6ba433eed104 100644 --- a/vcl/inc/ios/iosinst.hxx +++ b/vcl/inc/ios/iosinst.hxx @@ -30,6 +30,8 @@ #include "headless/svpframe.hxx" class IosSalFrame; +class SystemFontList; + class IosSalInstance : public SvpSalInstance { public: @@ -47,6 +49,19 @@ public: SalFrame* CreateChildFrame(SystemParentData* pParent, SalFrameStyleFlags nStyle) override; }; +class SalData +{ +public: + std::unique_ptr<SystemFontList> mpFontList; + CGColorSpaceRef mxRGBSpace; + CGColorSpaceRef mxGraySpace; + + static void ensureThreadAutoreleasePool(){}; + + explicit SalData(); + virtual ~SalData(); +}; + #endif // INCLUDED_VCL_INC_IOS_IOSINST_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/inc/quartz/salgdi.h b/vcl/inc/quartz/salgdi.h index 9e070c4215ce..0a4291d5692d 100644 --- a/vcl/inc/quartz/salgdi.h +++ b/vcl/inc/quartz/salgdi.h @@ -34,10 +34,15 @@ #else #include <CoreGraphics/CoreGraphics.h> #include <CoreText/CoreText.h> -#include "salgeom.hxx" #endif #include <postmac.h> +#ifdef IOS +// iOS defines a different Point class so include salgeom.hxx after postmac.h +// so that it will use the Point class in tools/gen.hxx +#include "salgeom.hxx" +#endif + #include <vcl/fontcapabilities.hxx> #include <vcl/metric.hxx> diff --git a/vcl/inc/salbmp.hxx b/vcl/inc/salbmp.hxx index 6abaa30ea4a7..2ffffb93fb4d 100644 --- a/vcl/inc/salbmp.hxx +++ b/vcl/inc/salbmp.hxx @@ -112,13 +112,15 @@ public: // almost always makes two copies of the SkiaSalBitmap's bitmap data: the // first copy is made in SkiaSalBitmap::AcquireBuffer() and then // QuartzSalBitmap makes a copy of the first copy. - // By making QuartzSalBitmap's methods that return a CGImageRef pure - // virtual, a non-Skia SalGraphics can now create a CGImageRef directly - // from a SkiaSalBitmap's Skia bitmap data without copying to any - // intermediate buffers. - virtual CGImageRef CreateWithMask( const SalBitmap& rMask, int nX, int nY, int nWidth, int nHeight ) const = 0; - virtual CGImageRef CreateColorMask( int nX, int nY, int nWidth, int nHeight, Color nMaskColor ) const = 0; - virtual CGImageRef CreateCroppedImage( int nX, int nY, int nWidth, int nHeight ) const = 0; + // By making QuartzSalBitmap's methods that return a CGImageRef virtual, + // a non-Skia SalGraphics can now create a CGImageRef directly from a + // SkiaSalBitmap's Skia bitmap data without copying to any intermediate + // buffers. + // Note: these methods are not pure virtual as the SvpSalBitmap class + // extends this class directly. + virtual CGImageRef CreateWithMask( const SalBitmap&, int, int, int, int ) const { return nullptr; } + virtual CGImageRef CreateColorMask( int, int, int, int, Color ) const { return nullptr; } + virtual CGImageRef CreateCroppedImage( int, int, int, int ) const { return nullptr; } #endif BitmapChecksum GetChecksum() const diff --git a/vcl/inc/unx/gendata.hxx b/vcl/inc/unx/gendata.hxx index f276b988fe4a..f0b769da08e7 100644 --- a/vcl/inc/unx/gendata.hxx +++ b/vcl/inc/unx/gendata.hxx @@ -16,8 +16,13 @@ #include <memory> +#ifndef IOS class FreetypeManager; +#endif class SalGenericDisplay; + +#ifndef IOS + namespace psp { class PrintFontManager; @@ -38,12 +43,16 @@ public: virtual ~SalData(); }; +#endif + // This class is kind of a misnomer. What this class is mainly about is the // usage of Freetype and Fontconfig, which happens to match all *nix backends; // except that the osx and ios backends are *nix but don't use this. class VCL_PLUGIN_PUBLIC GenericUnixSalData : public SalData { +#ifndef IOS friend class ::psp::PrinterInfoManager; +#endif SalGenericDisplay* m_pDisplay; // cached hostname to avoid slow lookup @@ -51,9 +60,11 @@ class VCL_PLUGIN_PUBLIC GenericUnixSalData : public SalData // for transient storage of unicode strings eg. 'u123' by input methods OUString m_aUnicodeEntry; +#ifndef IOS std::unique_ptr<FreetypeManager> m_pFreetypeManager; std::unique_ptr<psp::PrintFontManager> m_pPrintFontManager; std::unique_ptr<psp::PrinterInfoManager> m_pPrinterInfoManager; +#endif void InitFreetypeManager(); void InitPrintFontManager(); @@ -75,6 +86,8 @@ public: OUString& GetUnicodeCommand() { return m_aUnicodeEntry; } +#ifndef IOS + FreetypeManager* GetFreetypeManager() { if (!m_pFreetypeManager) @@ -91,6 +104,8 @@ public: return m_pPrintFontManager.get(); } +#endif + // Mostly useful for remote protocol backends virtual void ErrorTrapPush() = 0; virtual bool ErrorTrapPop(bool bIgnoreError = true) = 0; // true on error diff --git a/vcl/ios/clipboard.cxx b/vcl/ios/clipboard.cxx index 46dfa92bfcd7..61530b926e2a 100644 --- a/vcl/ios/clipboard.cxx +++ b/vcl/ios/clipboard.cxx @@ -18,6 +18,7 @@ */ #include "ios/iosinst.hxx" +#include "quartz/utils.h" #include "clipboard.hxx" diff --git a/vcl/ios/dummies.cxx b/vcl/ios/dummies.cxx index 9e03f598f0ff..51fd5c26164a 100644 --- a/vcl/ios/dummies.cxx +++ b/vcl/ios/dummies.cxx @@ -17,11 +17,12 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #include <vcl/svapp.hxx> +#include "ios/iosinst.hxx" #include "salprn.hxx" #include "quartz/salgdi.h" +#include "headless/svpdata.hxx" #include "headless/svpinst.hxx" #include "unx/fontmanager.hxx" -#include "unx/gendata.hxx" std::unique_ptr<SalPrinter> SvpSalInstance::CreatePrinter( SalInfoPrinter* /* pInfoPrinter */ ) { diff --git a/vcl/ios/iosinst.cxx b/vcl/ios/iosinst.cxx index a9fa27e5ea82..533fef269a07 100644 --- a/vcl/ios/iosinst.cxx +++ b/vcl/ios/iosinst.cxx @@ -22,8 +22,9 @@ #include <postmac.h> #include "ios/iosinst.hxx" +#include "quartz/salgdi.h" +#include "headless/svpdata.hxx" #include "headless/svpdummies.hxx" -#include <osx/saldata.hxx> #include "quartz/utils.h" #include <vcl/layout.hxx> #include <vcl/settings.hxx> @@ -120,7 +121,7 @@ public: SalFrame *IosSalInstance::CreateChildFrame( SystemParentData* pParent, SalFrameStyleFlags nStyle ) { - pParent = NULL; + (void)pParent; return new IosSalFrame( this, NULL, nStyle ); } @@ -130,10 +131,10 @@ SalFrame *IosSalInstance::CreateFrame( SalFrame* pParent, SalFrameStyleFlags nSt } SalData::SalData() : - mpFontList( 0 ), mxRGBSpace( CGColorSpaceCreateDeviceRGB() ), mxGraySpace( CGColorSpaceCreateDeviceGray() ) { + SetSalData(this); } SalData::~SalData() @@ -142,12 +143,10 @@ SalData::~SalData() CGColorSpaceRelease(mxGraySpace); } -void SalData::ensureThreadAutoreleasePool() {} - extern "C" SalInstance *create_SalInstance() { IosSalInstance* pInstance = new IosSalInstance( std::make_unique<SvpSalYieldMutex>() ); - new SvpSalData(pInstance); + new SvpSalData(); return pInstance; } diff --git a/vcl/ios/salios.cxx b/vcl/ios/salios.cxx index 52e94b109e1c..362fa258ea9c 100644 --- a/vcl/ios/salios.cxx +++ b/vcl/ios/salios.cxx @@ -27,6 +27,7 @@ #include <vcl/bitmap.hxx> +#include <ios/iosinst.hxx> #include <quartz/salbmp.h> #include <quartz/salgdi.h> #include <quartz/salvd.h> diff --git a/vcl/quartz/AquaGraphicsBackend.cxx b/vcl/quartz/AquaGraphicsBackend.cxx index f94c26f062d1..6caa99a28915 100644 --- a/vcl/quartz/AquaGraphicsBackend.cxx +++ b/vcl/quartz/AquaGraphicsBackend.cxx @@ -41,7 +41,7 @@ #endif #include <quartz/utils.h> #ifdef IOS -#include <svdata.hxx> +#include <ios/iosinst.hxx> #endif using namespace vcl; diff --git a/vcl/quartz/cgutils.mm b/vcl/quartz/cgutils.mm index 61935acc7fdd..c28391c48395 100644 --- a/vcl/quartz/cgutils.mm +++ b/vcl/quartz/cgutils.mm @@ -20,7 +20,11 @@ #include <quartz/cgutils.h> #include <salbmp.hxx> +#ifdef MACOSX #include <osx/saldata.hxx> +#else +#include <ios/iosinst.hxx> +#endif static void CFRTLFree(void* /*info*/, const void* data, size_t /*size*/) { diff --git a/vcl/quartz/salbmp.cxx b/vcl/quartz/salbmp.cxx index e71c35612cb4..afd65d863370 100644 --- a/vcl/quartz/salbmp.cxx +++ b/vcl/quartz/salbmp.cxx @@ -43,7 +43,7 @@ #ifdef MACOSX #include <osx/saldata.hxx> #else -#include <svdata.hxx> +#include <ios/iosinst.hxx> #endif const unsigned long k32BitRedColorMask = 0x00ff0000; diff --git a/vcl/quartz/salgdi.cxx b/vcl/quartz/salgdi.cxx index 571e44f23e71..439612a6a4b2 100644 --- a/vcl/quartz/salgdi.cxx +++ b/vcl/quartz/salgdi.cxx @@ -51,7 +51,7 @@ #endif #include <quartz/utils.h> #ifdef IOS -#include <svdata.hxx> +#include <ios/iosinst.hxx> #endif #include <sallayout.hxx> @@ -154,6 +154,7 @@ AquaSalGraphics::AquaSalGraphics(bool bPrinter) if(!bPrinter && SkiaHelper::isVCLSkiaEnabled()) mpBackend.reset(new AquaSkiaSalGraphicsImpl(*this, maShared)); #else + (void)bPrinter; if(false) ; #endif diff --git a/vcl/quartz/salvd.cxx b/vcl/quartz/salvd.cxx index 7cd82fbcbb96..4e0c295a17f4 100644 --- a/vcl/quartz/salvd.cxx +++ b/vcl/quartz/salvd.cxx @@ -28,6 +28,7 @@ #include <osx/saldata.hxx> #include <osx/salframe.h> #else +#include <ios/iosinst.hxx> #include "headless/svpframe.hxx" #include "headless/svpinst.hxx" #include "headless/svpvd.hxx" diff --git a/vcl/unx/generic/app/gendata.cxx b/vcl/unx/generic/app/gendata.cxx index 444d653023a7..79175217c89a 100644 --- a/vcl/unx/generic/app/gendata.cxx +++ b/vcl/unx/generic/app/gendata.cxx @@ -17,9 +17,16 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#ifdef IOS +#include <ios/iosinst.hxx> +#endif + #include <unx/gendata.hxx> #include <unx/fontmanager.hxx> + +#ifndef IOS + #include <unx/glyphcache.hxx> #include <printerinfomanager.hxx> @@ -27,6 +34,8 @@ SalData::SalData() { SetSalData(this); } SalData::~SalData() {} +#endif + GenericUnixSalData::GenericUnixSalData() : m_pDisplay(nullptr) { @@ -34,21 +43,27 @@ GenericUnixSalData::GenericUnixSalData() GenericUnixSalData::~GenericUnixSalData() { +#ifndef IOS // at least for InitPrintFontManager the sequence is important m_pPrintFontManager.reset(); m_pFreetypeManager.reset(); m_pPrinterInfoManager.reset(); +#endif } void GenericUnixSalData::Dispose() {} +#ifndef IOS void GenericUnixSalData::InitFreetypeManager() { m_pFreetypeManager.reset(new FreetypeManager); } +#endif void GenericUnixSalData::InitPrintFontManager() { +#ifndef IOS GetFreetypeManager(); m_pPrintFontManager.reset(new psp::PrintFontManager); m_pPrintFontManager->initialize(); +#endif } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit b1be348a7f263e44bd4e1f23a37b7bcfca1aa06e Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Tue Jan 31 11:39:42 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:07 2023 +0100 uitest: Always change doc info setting back to false otherwise it won't be changed if an exception is raised affering other tests as seen in https://gerrit.libreoffice.org/c/core/+/130530/2/sw/qa/uitest/writer_tests6/save_readonly_with_password.py#50 Change-Id: Ife443cc6627025a05a0a33ba1c86140f087dd70c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146333 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sw/qa/uitest/writer_tests6/edit_file_properties_before_saving.py b/sw/qa/uitest/writer_tests6/edit_file_properties_before_saving.py index 746d9a75075c..0df0dc504dde 100644 --- a/sw/qa/uitest/writer_tests6/edit_file_properties_before_saving.py +++ b/sw/qa/uitest/writer_tests6/edit_file_properties_before_saving.py @@ -19,7 +19,6 @@ class edit_file_properties_before_saving(UITestCase): def change_doc_info_setting(self, enabled): with self.ui_test.execute_dialog_through_command(".uno:OptionsTreeDialog") as xDialog: - xPages = xDialog.getChild("pages") xLoadSaveEntry = xPages.getChild('1') xLoadSaveEntry.executeAction("EXPAND", tuple()) @@ -38,27 +37,28 @@ class edit_file_properties_before_saving(UITestCase): with self.ui_test.create_doc_in_start_center("writer"): - self.change_doc_info_setting("true") + try: + self.change_doc_info_setting("true") - # Save Copy as - with self.ui_test.execute_dialog_through_command('.uno:SaveAs', close_button="") as xDialog: - xFileName = xDialog.getChild('file_name') - xFileName.executeAction('TYPE', mkPropertyValues({'KEYCODE':'CTRL+A'})) - xFileName.executeAction('TYPE', mkPropertyValues({'KEYCODE':'BACKSPACE'})) - xFileName.executeAction('TYPE', mkPropertyValues({'TEXT': xFilePath})) + # Save Copy as + with self.ui_test.execute_dialog_through_command('.uno:SaveAs', close_button="") as xDialog: + xFileName = xDialog.getChild('file_name') + xFileName.executeAction('TYPE', mkPropertyValues({'KEYCODE':'CTRL+A'})) + xFileName.executeAction('TYPE', mkPropertyValues({'KEYCODE':'BACKSPACE'})) + xFileName.executeAction('TYPE', mkPropertyValues({'TEXT': xFilePath})) - xOpen = xDialog.getChild("open") - with self.ui_test.execute_dialog_through_action(xOpen, "CLICK") as xPropertiesDialog: - xReadOnly = xPropertiesDialog.getChild("readonly") - xReadOnly.executeAction("CLICK", tuple()) - self.assertEqual("true", get_state_as_dict(xReadOnly)['Selected']) + xOpen = xDialog.getChild("open") + with self.ui_test.execute_dialog_through_action(xOpen, "CLICK") as xPropertiesDialog: + xReadOnly = xPropertiesDialog.getChild("readonly") + xReadOnly.executeAction("CLICK", tuple()) + self.assertEqual("true", get_state_as_dict(xReadOnly)['Selected']) + finally: + # Put this setting back to false, otherwise it might affect other tests + self.change_doc_info_setting("false") self.ui_test.wait_until_file_is_available(xFilePath) with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as doc2: - - self.change_doc_info_setting("false") - # Without the fix in place, this test would have failed here self.assertTrue(doc2.isReadonly()) @@ -69,35 +69,36 @@ class edit_file_properties_before_saving(UITestCase): with self.ui_test.create_doc_in_start_center("writer"): - self.change_doc_info_setting("true") - - xWriterDoc = self.xUITest.getTopFocusWindow() - xWriterEdit = xWriterDoc.getChild("writer_edit") - type_text(xWriterEdit, "XXXX") - - # Close document and save - with self.ui_test.execute_dialog_through_command('.uno:CloseDoc', close_button="") as xConfirmationDialog: - xSave = xConfirmationDialog.getChild("save") - - with self.ui_test.execute_dialog_through_action(xSave, "CLICK", close_button="") as xDialog: - xFileName = xDialog.getChild('file_name') - xFileName.executeAction('TYPE', mkPropertyValues({'KEYCODE':'CTRL+A'})) - xFileName.executeAction('TYPE', mkPropertyValues({'KEYCODE':'BACKSPACE'})) - xFileName.executeAction('TYPE', mkPropertyValues({'TEXT': xFilePath})) - - xOpen = xDialog.getChild("open") - with self.ui_test.execute_dialog_through_action(xOpen, "CLICK") as xPropertiesDialog: - # Without the fix in place, this test would have crashed here - xReadOnly = xPropertiesDialog.getChild("readonly") - xReadOnly.executeAction("CLICK", tuple()) - self.assertEqual("true", get_state_as_dict(xReadOnly)['Selected']) + try: + self.change_doc_info_setting("true") + + xWriterDoc = self.xUITest.getTopFocusWindow() + xWriterEdit = xWriterDoc.getChild("writer_edit") + type_text(xWriterEdit, "XXXX") + + # Close document and save + with self.ui_test.execute_dialog_through_command('.uno:CloseDoc', close_button="") as xConfirmationDialog: + xSave = xConfirmationDialog.getChild("save") + + with self.ui_test.execute_dialog_through_action(xSave, "CLICK", close_button="") as xDialog: + xFileName = xDialog.getChild('file_name') + xFileName.executeAction('TYPE', mkPropertyValues({'KEYCODE':'CTRL+A'})) + xFileName.executeAction('TYPE', mkPropertyValues({'KEYCODE':'BACKSPACE'})) + xFileName.executeAction('TYPE', mkPropertyValues({'TEXT': xFilePath})) + + xOpen = xDialog.getChild("open") + with self.ui_test.execute_dialog_through_action(xOpen, "CLICK") as xPropertiesDialog: + # Without the fix in place, this test would have crashed here + xReadOnly = xPropertiesDialog.getChild("readonly") + xReadOnly.executeAction("CLICK", tuple()) + self.assertEqual("true", get_state_as_dict(xReadOnly)['Selected']) + finally: + # Put this setting back to false, otherwise it might affect other tests + self.change_doc_info_setting("false") self.ui_test.wait_until_file_is_available(xFilePath) with self.ui_test.load_file(systemPathToFileUrl(xFilePath)) as doc2: - - self.change_doc_info_setting("false") - self.assertTrue(doc2.isReadonly()) # vim: set shiftwidth=4 softtabstop=4 expandtab: commit a82600d2a7d4ab692ad53670cb383a140af8bd74 Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Thu Jan 26 13:43:28 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:07 2023 +0100 tdf#114973 sw: IsSelOvr() should not leave the text Jumping from body to header is certainly unexpected, call FindNextCnt() which does additional checks to stay in the same text environment. Change-Id: If54bff62cac420dc0990b6be070b81fa56365c50 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146256 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> (cherry picked from commit 5aeee226479427062ac885be407671981d6940ef) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146205 Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/sw/source/core/crsr/swcrsr.cxx b/sw/source/core/crsr/swcrsr.cxx index 132bbe644610..e3bb1a02c8d8 100644 --- a/sw/source/core/crsr/swcrsr.cxx +++ b/sw/source/core/crsr/swcrsr.cxx @@ -219,7 +219,7 @@ namespace } } -bool SwCursor::IsSelOvr( SwCursorSelOverFlags eFlags ) +bool SwCursor::IsSelOvr(SwCursorSelOverFlags const eFlags) { SwDoc& rDoc = GetDoc(); SwNodes& rNds = rDoc.GetNodes(); @@ -341,7 +341,7 @@ bool SwCursor::IsSelOvr( SwCursorSelOverFlags eFlags ) bool bGoNxt = m_vSavePos.back().nNode < rPtPos.GetNodeIndex(); for (;;) { - pFrame = bGoNxt ? pFrame->GetNextContentFrame() : pFrame->GetPrevContentFrame(); + pFrame = bGoNxt ? pFrame->FindNextCnt(true) : pFrame->FindPrevCnt(); if (!pFrame || 0 != pFrame->getFrameArea().Height() ) break; } @@ -354,8 +354,7 @@ bool SwCursor::IsSelOvr( SwCursorSelOverFlags eFlags ) pFrame = static_cast<const SwContentNode*>(pNd)->getLayoutFrame( rDoc.getIDocumentLayoutAccess().GetCurrentLayout() ); while ( pFrame && 0 == pFrame->getFrameArea().Height() ) { - pFrame = bGoNxt ? pFrame->GetNextContentFrame() - : pFrame->GetPrevContentFrame(); + pFrame = bGoNxt ? pFrame->FindNextCnt(true) : pFrame->FindPrevCnt(); } } commit 82b940f5b94967540e4feb6c7eadd89346ba6e3f Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Mon Jan 23 19:44:03 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:07 2023 +0100 tdf#45854 sysui: replace wrong ODB mime type https://issues.oasis-open.org/browse/OFFICE-3745 was resolved. Replace all wrong: application/vnd.oasis.opendocument.database with: application/vnd.oasis.opendocument.base There is an identifier "org.oasis-open.opendocument.database" being used in some MacOSX Info.plist files - there is no indication that it needs to "match" the mime-type so leave it as is. Change-Id: Ic8e0d24e3aa74743801a670846daf2d322c33d70 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146040 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> (cherry picked from commit 53fe1f0880bc7e8a467404cddabb27daecfc37cb) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146074 Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/sysui/desktop/debian/postinst b/sysui/desktop/debian/postinst index dcb91680cb4e..f3220f311fdf 100755 --- a/sysui/desktop/debian/postinst +++ b/sysui/desktop/debian/postinst @@ -166,7 +166,7 @@ application/vnd.sun.xml.draw; %PREFIX -view %s application/vnd.sun.xml.draw.template; %PREFIX -view %s application/vnd.stardivision.draw; %PREFIX -view %s application/x-stardraw; %PREFIX -view %s -application/vnd.oasis.opendocument.database; %PREFIX -view %s +application/vnd.oasis.opendocument.base; %PREFIX -view %s application/vnd.sun.xml.base; %PREFIX -view %s application/vnd.writerperfect; %PREFIX -view %s application/wordperfect5.1; %PREFIX -view %s diff --git a/sysui/desktop/freedesktop/freedesktop-menus.spec b/sysui/desktop/freedesktop/freedesktop-menus.spec index 2452a44b99dc..8ed6793a0de4 100644 --- a/sysui/desktop/freedesktop/freedesktop-menus.spec +++ b/sysui/desktop/freedesktop/freedesktop-menus.spec @@ -138,7 +138,7 @@ do icon=${link_dir}/%iconprefix-formula.png; test -f ${icon} && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.sun.xml.math.png icon=${link_dir}/%iconprefix-master-document.png; test -f ${icon} && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.sun.xml.writer.global.png icon=${link_dir}/%iconprefix-oasis-database.png; test -f ${icon} && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.sun.xml.base.png - icon=${link_dir}/%iconprefix-oasis-database.png; test -f ${icon} && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.database.png + icon=${link_dir}/%iconprefix-oasis-database.png; test -f ${icon} && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.base.png icon=${link_dir}/%iconprefix-oasis-drawing.png; test -f ${icon} && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.graphics.png icon=${link_dir}/%iconprefix-oasis-drawing-template.png; test -f ${icon} && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png icon=${link_dir}/%iconprefix-oasis-formula.png; test -f ${icon} && ln -sf ${icon} ${link_dir}/gnome-mime-application-vnd.oasis.opendocument.formula.png @@ -307,7 +307,7 @@ application/vnd.sun.xml.draw; %unixfilename -view %s application/vnd.sun.xml.draw.template; %unixfilename -view %s application/vnd.stardivision.draw; %unixfilename -view %s application/x-stardraw; %unixfilename -view %s -application/vnd.oasis.opendocument.database; %unixfilename -view %s +application/vnd.oasis.opendocument.base; %unixfilename -view %s application/vnd.sun.xml.base; %unixfilename -view %s application/vnd.openofficeorg.extension; %unixfilename %s application/vnd.openxmlformats-officedocument.wordprocessingml.document; %unixfilename -view %s diff --git a/sysui/desktop/macosx/Info.plist.in b/sysui/desktop/macosx/Info.plist.in index 23e7794d8c49..91b43b21ec21 100644 --- a/sysui/desktop/macosx/Info.plist.in +++ b/sysui/desktop/macosx/Info.plist.in @@ -688,7 +688,7 @@ </array> <key>public.mime-type</key> <array> - <string>application/vnd.oasis.opendocument.database</string> + <string>application/vnd.oasis.opendocument.base</string> </array> </dict> <key>UTTypeIconFile</key> diff --git a/sysui/desktop/menus/base.desktop b/sysui/desktop/menus/base.desktop index c2087120d532..7a678ca6bc18 100644 --- a/sysui/desktop/menus/base.desktop +++ b/sysui/desktop/menus/base.desktop @@ -22,7 +22,7 @@ Icon=base Type=Application Categories=Office;Database;X-Red-Hat-Base; Exec=${UNIXBASISROOTNAME} --base %%FILE%% -MimeType=application/vnd.oasis.opendocument.database;application/vnd.sun.xml.base; +MimeType=application/vnd.oasis.opendocument.base;application/vnd.sun.xml.base; Name=%PRODUCTNAME Base GenericName=Database Development Comment=Manage databases, create queries and reports to track and manage your information. diff --git a/sysui/desktop/solaris/mailcap b/sysui/desktop/solaris/mailcap index 910fcbeb89cd..30b15ab90727 100755 --- a/sysui/desktop/solaris/mailcap +++ b/sysui/desktop/solaris/mailcap @@ -86,7 +86,7 @@ application/vnd.sun.xml.draw.template; %PREFIX -view %s application/vnd.stardivision.draw; %PREFIX -view %s application/x-stardraw; %PREFIX -view %s application/vnd.sun.xml.base; %PREFIX -view %s -application/vnd.oasis.opendocument.database; %PREFIX -view %s +application/vnd.oasis.opendocument.base; %PREFIX -view %s application/vnd.writerperfect; %PREFIX -view %s application/wordperfect5.1; %PREFIX -view %s application/x-wordperfect; %PREFIX -view %s commit a792d870ec7782caefac28a2bdf821c1680fbbea Author: Michael Stahl <michael.st...@allotropia.de> AuthorDate: Fri Jan 20 15:09:22 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:06 2023 +0100 sw: Word export: hyperlinks for ToX Figures/Objects/Tables This was missing, and lcl_IsHyperlinked() has a wrong termination check, which is noticable here because these have only 1 level (+ title at 0). Change-Id: I56a8622ee2c9df2167e26863cb3797b01434553c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145903 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> (cherry picked from commit 97cd92f3dee199d50856f24d51d7d7a236ae7bbe) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145951 Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx index 2210231b661b..1073f28dd30f 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlfieldexport.cxx @@ -165,7 +165,7 @@ CPPUNIT_TEST_FIXTURE(Test, testFDO77715) loadAndReload("FDO77715.docx"); xmlDocUniquePtr pXmlDoc = parseExport("word/document.xml"); - assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[2]/w:instrText[1]", " TOC \\c "); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p[3]/w:r[2]/w:instrText[1]", " TOC \\c \\h "); } CPPUNIT_TEST_FIXTURE(Test, testTOCFlag_u) diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx index 862dbbe70e66..7c3d9e0879b9 100644 --- a/sw/source/filter/ww8/ww8atr.cxx +++ b/sw/source/filter/ww8/ww8atr.cxx @@ -2053,7 +2053,7 @@ static int lcl_CheckForm( const SwForm& rForm, sal_uInt8 nLvl, OUString& rText ) static bool lcl_IsHyperlinked(const SwForm& rForm, sal_uInt16 nTOXLvl) { bool bRes = false; - for (sal_uInt16 nI = 1; nI < nTOXLvl; ++nI) + for (sal_uInt16 nI = 1; nI <= nTOXLvl; ++nI) { // #i21237# SwFormTokens aPattern = rForm.GetPattern(nI); @@ -2364,6 +2364,10 @@ void AttributeOutputBase::StartTOX( const SwSection& rSect ) sStr += "\\p \"" + aText + sEntryEnd; } } + if (lcl_IsHyperlinked(pTOX->GetTOXForm(), 1)) + { + sStr += "\\h "; + } break; case TOX_AUTHORITIES: commit c3facfa5c45fead141f2bb6b4ea17c1be643050e Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Mon Jan 16 08:16:00 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:06 2023 +0100 external/skia: Missing include > In file included from workdir/UnpackedTarball/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp:27: > In file included from workdir/UnpackedTarball/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.h:35: > workdir/UnpackedTarball/skia/third_party/vulkanmemoryallocator/include/vk_mem_alloc.h:2817:9: error: use of undeclared identifier 'snprintf' > snprintf(outStr, strLen, "%u", static_cast<unsigned int>(num)); > ^ etc. Change-Id: I4f13c8a137f23ef62d67c3b4dfa8f1c0ddfc5ec9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145552 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sberg...@redhat.com> (cherry picked from commit 5877c6b118c99c9ec807a111471bfd67720a5086) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146328 Reviewed-by: Sam James <s...@gentoo.org> Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/external/skia/missing-include.patch.0 b/external/skia/missing-include.patch.0 index 6b15e87590b5..5d1d0609b989 100644 --- a/external/skia/missing-include.patch.0 +++ b/external/skia/missing-include.patch.0 @@ -8,3 +8,13 @@ #include <unordered_map> #include <vector> #include "include/core/SkSpan.h" +--- third_party/vulkanmemoryallocator/include/vk_mem_alloc.h ++++ third_party/vulkanmemoryallocator/include/vk_mem_alloc.h +@@ -2570,6 +2570,7 @@ + #include <cstring> + #include <utility> + #include <type_traits> ++#include <stdio.h> + + #ifdef _MSC_VER + #include <intrin.h> // For functions like __popcnt, _BitScanForward etc. commit c5eac7b3ccf15d7944055ded77d6627df2283383 Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Mon Jan 30 13:05:32 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:06 2023 +0100 sw: blind fix for uitest hang Seen in https://ci.libreoffice.org/job/gerrit_linux_clang_dbgutil/132028/consoleFull#101810144248ce9c26-9d0a-43a8-83d8-c44f54920d59 Change-Id: I67312b3f7e6c6192e14a6bb3236ba4ff959002f5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146353 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> (cherry picked from commit 72f3df889a950218c9e801aa93bb2e755d26f3e1) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146397 Tested-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sw/qa/uitest/sidebar/stylesSidebar.py b/sw/qa/uitest/sidebar/stylesSidebar.py index ec376a164b1d..ee20ef23d5eb 100644 --- a/sw/qa/uitest/sidebar/stylesSidebar.py +++ b/sw/qa/uitest/sidebar/stylesSidebar.py @@ -46,16 +46,17 @@ class StylesSidebar(UITestCase): xWriterDoc = self.xUITest.getTopFocusWindow() xWriterEdit = xWriterDoc.getChild("writer_edit") - self.xUITest.executeCommand(".uno:Sidebar") - xWriterEdit.executeAction("SIDEBAR", mkPropertyValues({"PANEL": "StyleListPanel"})) - - xFilter = xWriterEdit.getChild('filter') - select_by_text(xFilter, "Custom Styles") - expectedResults = ["customParagraphStyle", "customCharacterStyle", "customFrameStyle", "customPageStyle", "customNumberingStyle"] for i in range(5): + + self.xUITest.executeCommand(".uno:Sidebar") + xWriterEdit.executeAction("SIDEBAR", mkPropertyValues({"PANEL": "StyleListPanel"})) + + xFilter = xWriterEdit.getChild('filter') + select_by_text(xFilter, "Custom Styles") + xLeft = xWriterEdit.getChild('left') #change to another style type @@ -69,7 +70,7 @@ class StylesSidebar(UITestCase): self.ui_test.wait_until_property_is_updated(xFlatView, "SelectEntryText", expectedResults[i]) self.assertEqual(expectedResults[i], get_state_as_dict(xFlatView)['SelectEntryText']) - self.xUITest.executeCommand(".uno:Sidebar") + self.xUITest.executeCommand(".uno:Sidebar") # vim: set shiftwidth=4 softtabstop=4 expandtab: commit fbf2312317fdfd6288b077ec3741fd0399973c5c Author: Tünde Tóth <toth.tu...@nisz.hu> AuthorDate: Tue Jan 24 15:02:09 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:06 2023 +0100 tdf#153185 PPTX: fix export of linked OLE objects Linked OLE objects were not exported. Change-Id: If6e8c6e0d0c9917e8ec476ad14dcaa1602c74b29 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146073 Tested-by: Jenkins Tested-by: László Németh <nem...@numbertext.org> Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit f589d7e769bee4b82826a944fed3cf2382d84fb2) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146319 Reviewed-by: Michael Stahl <michael.st...@allotropia.de> diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx index 4b41f56d79cd..4ef05ba80cab 100644 --- a/oox/source/export/shapes.cxx +++ b/oox/source/export/shapes.cxx @@ -2601,49 +2601,60 @@ ShapeExport& ShapeExport::WriteOLE2Shape( const Reference< XShape >& xShape ) OUString sRelationType; OUString sSuffix; const char * pProgID(nullptr); + OString anotherProgID; uno::Reference<io::XInputStream> const xInStream = oox::GetOLEObjectStream( mpFB->getComponentContext(), xObj, progID, sMediaType, sRelationType, sSuffix, pProgID); + OUString sURL; + OUString sRelId; if (!xInStream.is()) { - return *this; - } + xPropSet->getPropertyValue("LinkURL") >>= sURL; + if (sURL.isEmpty()) + return *this; - OString anotherProgID; - if (!pProgID && !progID.isEmpty()) - { - anotherProgID = OUStringToOString(progID, RTL_TEXTENCODING_UTF8); - pProgID = anotherProgID.getStr(); + sRelId = mpFB->addRelation(mpFS->getOutputStream(), + oox::getRelationship(Relationship::OLEOBJECT), sURL, true); } + else + { + if (!pProgID && !progID.isEmpty()) + { + anotherProgID = OUStringToOString(progID, RTL_TEXTENCODING_UTF8); + pProgID = anotherProgID.getStr(); + } + + assert(!sMediaType.isEmpty()); + assert(!sRelationType.isEmpty()); + assert(!sSuffix.isEmpty()); - assert(!sMediaType.isEmpty()); - assert(!sRelationType.isEmpty()); - assert(!sSuffix.isEmpty()); + OUString sFileName + = "embeddings/oleObject" + OUString::number(++m_nEmbeddedObjects) + "." + sSuffix; + uno::Reference<io::XOutputStream> const xOutStream(mpFB->openFragmentStream( + OUString::createFromAscii(GetComponentDir()) + "/" + sFileName, sMediaType)); + assert(xOutStream.is()); // no reason why that could fail - OUString sFileName = "embeddings/oleObject" + OUString::number(++m_nEmbeddedObjects) + "." + sSuffix; - uno::Reference<io::XOutputStream> const xOutStream( - mpFB->openFragmentStream( - OUString::createFromAscii(GetComponentDir()) + "/" + sFileName, - sMediaType)); - assert(xOutStream.is()); // no reason why that could fail + try + { + ::comphelper::OStorageHelper::CopyInputToOutput(xInStream, xOutStream); + } + catch (uno::Exception const&) + { + TOOLS_WARN_EXCEPTION("oox.shape", "ShapeExport::WriteOLEObject"); + } - try { - ::comphelper::OStorageHelper::CopyInputToOutput(xInStream, xOutStream); - } catch (uno::Exception const&) { - TOOLS_WARN_EXCEPTION("oox.shape", "ShapeExport::WriteOLEObject"); + sRelId = mpFB->addRelation( + mpFS->getOutputStream(), sRelationType, + Concat2View(OUString::createFromAscii(GetRelationCompPrefix()) + sFileName)); } sal_Int64 nAspect; bool bShowAsIcon = (xPropSet->getPropertyValue("Aspect") >>= nAspect) && nAspect == embed::Aspects::MSOLE_ICON; - OUString const sRelId = mpFB->addRelation( - mpFS->getOutputStream(), sRelationType, - Concat2View(OUString::createFromAscii(GetRelationCompPrefix()) + sFileName)); - mpFS->startElementNS(mnXmlNamespace, XML_graphicFrame); mpFS->startElementNS(mnXmlNamespace, XML_nvGraphicFramePr); @@ -2681,7 +2692,10 @@ ShapeExport& ShapeExport::WriteOLE2Shape( const Reference< XShape >& xShape ) XML_spid, "" ); } - mpFS->singleElementNS( mnXmlNamespace, XML_embed ); + if (sURL.isEmpty()) + mpFS->singleElementNS(mnXmlNamespace, XML_embed); + else + mpFS->singleElementNS(mnXmlNamespace, XML_link, XML_updateAutomatic, "1"); // pic element SdrObject* pSdrOLE2(SdrObject::getSdrObjectFromXShape(xShape)); diff --git a/sd/qa/unit/data/odp/linked_ole.odp b/sd/qa/unit/data/odp/linked_ole.odp new file mode 100644 index 000000000000..13fb0a845a13 Binary files /dev/null and b/sd/qa/unit/data/odp/linked_ole.odp differ diff --git a/sd/qa/unit/export-tests-ooxml3.cxx b/sd/qa/unit/export-tests-ooxml3.cxx index db023bef2592..287f35cc3637 100644 --- a/sd/qa/unit/export-tests-ooxml3.cxx +++ b/sd/qa/unit/export-tests-ooxml3.cxx @@ -131,6 +131,7 @@ public: void testAutofittedTextboxIndent(); void testTdf151622_oleIcon(); void testTdf152436(); + void testLinkedOLE(); CPPUNIT_TEST_SUITE(SdOOXMLExportTest3); @@ -223,6 +224,7 @@ public: CPPUNIT_TEST(testAutofittedTextboxIndent); CPPUNIT_TEST(testTdf151622_oleIcon); CPPUNIT_TEST(testTdf152436); + CPPUNIT_TEST(testLinkedOLE); CPPUNIT_TEST_SUITE_END(); virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override @@ -2117,6 +2119,22 @@ void SdOOXMLExportTest3::testTdf152436() CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getPage(0)->getCount()); } +void SdOOXMLExportTest3::testLinkedOLE() +{ + createSdImpressDoc("odp/linked_ole.odp"); + + save("Impress Office Open XML"); + + xmlDocUniquePtr pXml = parseExport("ppt/slides/slide1.xml"); + + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 1 + // - Actual : 0 + // - In<>, XPath '//p:oleObj' number of nodes is incorrect + // i.e. the linked ole object wasn't exported. + assertXPath(pXml, "//p:oleObj", 1); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdOOXMLExportTest3); CPPUNIT_PLUGIN_IMPLEMENT(); commit 3be06fa1591963912600ad46920ff16b51fa5855 Author: Andreas Heinisch <andreas.heini...@yahoo.de> AuthorDate: Tue Jan 24 16:15:13 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:06 2023 +0100 tdf#45147 - CSV Import: Remove special handling for mixed script types In the CSV import dialog, remove the special handling for mixed script types. Otherwise, right-to-left words appear in the wrong order. The special handling of mixed script types was introduced in https://bz.apache.org/ooo/show_bug.cgi?id=60296 which is handled in the edit engine now. Change-Id: Ic6dc3f2051ea41f79db5398a8442f78116da52de Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146096 Tested-by: Jenkins Reviewed-by: Eike Rathke <er...@redhat.com> (cherry picked from commit a362c0145731031834bc3a73c8e3577bf6c12720) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146331 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sc/source/ui/dbgui/csvgrid.cxx b/sc/source/ui/dbgui/csvgrid.cxx index b44cca04dee7..16b7ca61e35f 100644 --- a/sc/source/ui/dbgui/csvgrid.cxx +++ b/sc/source/ui/dbgui/csvgrid.cxx @@ -1130,22 +1130,8 @@ void ScCsvGrid::ImplDrawCellText( const Point& rPos, const OUString& rText ) OUString aPlainText = rText.replaceAll( "\t", " " ); aPlainText = aPlainText.replaceAll( "\n", " " ); mpEditEngine->SetPaperSize( maEdEngSize ); - - /* #i60296# If string contains mixed script types, the space character - U+0020 may be drawn with a wrong width (from non-fixed-width Asian or - Complex font). Now we draw every non-space portion separately. */ - sal_Int32 nCharIxInt {aPlainText.isEmpty() ? -1 : 0}; - while (nCharIxInt>=0) - { - sal_Int32 nBeginIx = nCharIxInt; - const OUString aToken = aPlainText.getToken( 0, ' ', nCharIxInt ); - if( !aToken.isEmpty() ) - { - sal_Int32 nX = rPos.X() + GetCharWidth() * nBeginIx; - mpEditEngine->SetTextCurrentDefaults( aToken ); - mpEditEngine->Draw(*mpBackgrDev, Point(nX, rPos.Y())); - } - } + mpEditEngine->SetTextCurrentDefaults(aPlainText); + mpEditEngine->Draw(*mpBackgrDev, rPos); sal_Int32 nCharIx = 0; while( (nCharIx = rText.indexOf( '\t', nCharIx )) != -1 ) commit aee42e2fa685cdf24369024e3bab6e2b1b2c752a Author: Regina Henschel <rb.hensc...@t-online.de> AuthorDate: Thu Jan 5 18:33:46 2023 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Feb 2 09:44:06 2023 +0100 tdf#152884 import alpha too for schemeClr Without fix the alpha child element was only read for w14:srgbClr but no for w14:schemeClr. Thus character colored by theme color had no transparency. Change-Id: I73c01b7142d3eab83400d2e5eb9dce01ff8d4a19 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145099 Tested-by: Jenkins Reviewed-by: Regina Henschel <rb.hensc...@t-online.de> (cherry picked from commit 585f65738270ba8ab2fdc4c49063c3b5663fe768) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146332 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx b/writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx index 7788abe1a62b..f31d9862a1ac 100644 --- a/writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx +++ b/writerfilter/qa/cppunittests/dmapper/TextEffectsHandler.cxx @@ -47,6 +47,24 @@ CPPUNIT_TEST_FIXTURE(Test, testSemiTransparentText) // i.e. text was imported as regular text with solid color only. CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(74), nCharTransparence); } + +CPPUNIT_TEST_FIXTURE(Test, testThemeColorTransparency) +{ + // Load a document with a single paragraph. It has semi-transparent text and the color is + // determined by a w14:schemeClr element. + loadFromURL(u"tdf152884_Char_Transparency.docx"); + uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), + uno::UNO_QUERY); + uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration(); ... etc. - the rest is truncated