summaryrefslogtreecommitdiff
path: root/framework
AgeCommit message (Collapse)Author
2022-05-27tdf#149170 framework,sfx2: don't add ReadOnly=falseMichael Stahl
There is a non-obvious difference in error handling when opening the file read/write for type-detection fails in utl::MediaDescriptor::impl_openStreamWithURL() - if ReadOnly=false is given, it will abort the file loading, whereas without any ReadOnly it will fall-back to a read-only opening of the file for type detection. At this point a StillReadWriteInteraction is used, so the user is never notified of the failure. (regression from commit 404c51f3664ffd4f7e2c1c8bb8a12ac70954fec2) Change-Id: I8c06fe23cc0bc0767df83f680a1a59e3700bbbbb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135045 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
2022-05-26tdf#149261 sdext: fix crash on starting the presenter console for the 2nd timeMiklos Vajna
This started with commit 3f768cddd28a2f04eb1ffa30bed4474deb6fbfc4 (framework: avoid re-creating protocol handler instances all the time, 2022-05-02). In case there are 2 monitors, then one monitor shows the slideshow, the other shows the presenter console. The presenter console's protocol handler in sdext::presenter::PresenterProtocolHandler::Dispatch::Dispatch() has mpPresenterController->GetWindowManager() as an empty reference on the 2nd time the presentation starts. The above commit started to cache protocol handler instances at a frame level for performance reasons, and this is meant to be safe in general, but the presenter console's window manager is re-created between slideshow runs, so it depends on framework/ code to re-create the protocol handler all the time, which is problematic here. Fix the problem by introducing a framework::CacheInfo interface that allows protocol handler implementations to signal if they want to avoid being cached. This should be good enough for now, but if later it turns out that there are too many broken protocol handlers out there, then we can consider flipping the default and only cache handlers which explicitly opt in for this behavior. This is not done in this commit. Change-Id: Ic159813b1b339540bc8c4e780c4d6d7d2d4d2445 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/135020 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
2022-05-25elide temporary vector in PathSettings::impl_convertPath2OldStyleNoel Grandin
Change-Id: Ib86933ef564b0d27c47dbbaddaa55f03b8426c7b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134927 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-23tdf#149176 tdf#149178 fix Save autorecovery information.. optionTünde Tóth
Autorecovery information was saved in every 10 minutes, regardless of the "Save Autorecovery information every" setting. Change-Id: I1a52da2fa5febb53c270a8db7472e9a8c0e4c426 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134642 Tested-by: Jenkins Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org>
2022-05-17elide some OUString allocationNoel Grandin
Change-Id: Iadd73477bf3b0edaa0fb7db10f9ffca88fe737e7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134476 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-17tdf#123877 sc XLSX: don't freeze during saving recoveryLászló Németh
file by asking password re-typing unstoppably. Instead of this, skip recovery file saving, if the document contains password hashes which haven't been supported by the "calc8" filter of the recovery file (which triggered the "Re-type password" dialog). Solved problems: – Asking for passwords during a non-interactive background process. – A single Cancel didn't close the "Re-type password" dialog window, only pressing three times at least (according to the value of RETRY_STORE_ON_MIGHT_FULL_DISC_USEFULL), but waiting for the password for a while could result a frozen "Re-type password" dialog, where only retyping or removing the password(s) were the escape routes. – Re-typing the password required the password (but modifying the original document doesn't require this). – Removing the password resulted in loss of the protection after saving the original XLSX document. Add a UI test to keep the "Re-type password" dialog during Save As. Note: because of the regression reported in tdf#145757, it needs to wait 10 min for saving the recovery file, yet, despite the changed time in Tools->Options->Load/Save->General. Change-Id: Icc6ee4d67048cdf15ab75ef8e2ee8f1709cdd4c2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134409 Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org>
2022-05-17osl::Mutex->std::mutex in framework::TransactionManagerNoel Grandin
Change-Id: I8a1c8e8ccec8ca64cc4f615ea8e9e415a343996d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134396 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-16use more string_view in URLTransformer::parseStrictNoel Grandin
Change-Id: If3087253a75a1cba16f69eecccbaf845ed0b12bc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134344 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-14tdf#121740 cache hashcode in SequenceAsHashMapNoel Grandin
shaves 2% off load time Change-Id: I5bd4eabf61205df21a27d2822acd2676a7732a3d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134315 Tested-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-14simplify initialisation in ToolBarManager::CreateControllersNoel Grandin
Change-Id: I2e876f0bff180e569394e2fe3c102b658a55d170 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134309 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-12speed up simple use of NamedValueCollectionNoel Grandin
where instantiating and allocating a whole map just to extract a single key is way inefficient Change-Id: I55248bc71a9e8826cab9b76fa6916bfa888efa0b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134226 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-12tdf#121740 avoid some temporary OUString constructionNoel Grandin
Change-Id: Id70349e0e8f7d79bad693663ec3dc2963e0834b7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134205 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-12framework: fix lock assert in Job::execute()Michael Stahl
include/osl/mutex.hxx:196: void osl::ClearableGuard<T>::clear() [with T = comphelper::SolarMutex]: Assertion `pT' failed. because clear() was called, then an exception was thrown and reset() was omitted. Change-Id: Iaa6d26e23261c2426eb3cc465b212752c4f454e5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134195 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
2022-05-11Drop unnecessary cast to intStephan Bergmann
...when iterating over the enumerators of enum StatusBar_XML_Entry resp. enum ToolBox_XML_Entry Change-Id: I11904e941e98e0ffb96cf1ba4e61c91382944813 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/134169 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-05-10tdf#147590 update OLE object after document refreshJuergen Funk
Regression from b099da78a6f0b3e120f706714003b05d84d11e70 we didn't update linked OLE document after document reload Change-Id: I8e52f6430f454b276cb43449c6f7a3b0e07e909f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130692 Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de> Tested-by: Jenkins
2022-05-08osl::Mutex->std::mutex in framework::ToolBarManagerNoel Grandin
Change-Id: I6908dc61cbd6e6e4d11c52dfface1d863cd7e5c5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133977 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-07osl::Mutex->std::mutex in framework::StatusBarManagerNoel Grandin
Change-Id: I34cdb5ce7e9e5b3c3d8f985057bb7ff09f2b7f68 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133978 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-05loplugin:unusedvariableplusNoel Grandin
Change-Id: Id93086be1224b6f6bf0bdaa1d50b4f289099027e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133876 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-05use more o3tl::getTokenNoel Grandin
found by inspecting call sites of OUString::getToken Change-Id: I4269c7476c7aa46fac39528227e350568f0eb34a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132644 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-05-04Just use Any ctor instead of makeAny in frameworkStephan Bergmann
Change-Id: I9f4990cf58cc794408dd70cd7fbfb2a8effa138c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133806 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-05-02framework: avoid re-creating protocol handler instances all the timeMiklos Vajna
Once you install an extension that adds its own protocol handlers (e.g. <https://github.com/niocs/ProtocolHandlerExtension>), DispatchProvider re-creates this protocol handler every time the custom menu gets opened or a command gets dispatched. This allows the dispatch provider to avoid managing the lifecycle of those protocol handler instances, but in case the constructor of those handlers is expensive, this leads to performance problems. Introduce a map of handler instances in DispatchProvider to avoid unnecessary re-creation and re-initialization: these instances get the same XFrame anyway (the DispatchProvider is owned by the frame), so this is meant to be safe. No testcase for this -- the problem is only visible if you have an UNO service registered in the global UNO service registry, but by the time our cppunit tests run, that is already a fixed list, so this would be hard to test from code. Change-Id: I6d69906a795a2d5a67706002d635b6cb3091b856 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133706 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
2022-05-01Align macro menu in start center with other placesSamuel Mehrbrodt
Esp. "Edit Macros" was missing here - it's available in the other apps. Change-Id: I807e9c35da42729d3c3838266736fdfa5be23fcc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133434 Tested-by: Jenkins Reviewed-by: Heiko Tietze <heiko.tietze@documentfoundation.org> Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
2022-05-01use more string_view in variousNoel Grandin
found by examining uses of OUString::copy() for likely places Change-Id: I6ff20e7b273ad6005410b82719183c1122f8c018 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133617 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-04-29use more string_view in INetURLObjectNoel Grandin
Change-Id: I4462f7cf4740fa4d1b129d76a0775f4250f41bbd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133555 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-04-26officecfg,unotools,framework,sfx2: store ReadOnly for recent docsMichael Stahl
Add Office::Histories::HistoryItem::ReadOnly flag to configuration so that a document that was opened read-only isn't opened as editable from recent documents. Change-Id: I6985da287d3337a53a7e41e8e500421038eedb91 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133385 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
2022-04-22Drop a bit more special-casing for Chart's sidebar property deckMike Kaganski
Introduced in commit 2d01ed9e8be543460e41e009fa992103a7c8d4c0 Author Muhammet Kara <muhammet.kara@collabora.com> Date Mon Nov 25 21:55:31 2019 +0300 tdf#94288: Show chart props sidebar on activation The problem was that ChartController::attachFrame, that called SelectionChangeHandler::selectionChanged notification, did that *prior* to setting its m_xFrame - and the notification failed in ContextChangeEventMultiplexer::NotifyContextChange, that checks the frame first. That prevented the proper context (with correct application and context names) to arrive to listeners, and the sidebar didn't update properly. Changing the order of the calls should fix the original problem. Change-Id: I9da8465af2ee4ed1f8eabed1c65d1c318f81a3f9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133326 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2022-04-17loplugin:stringviewparam convert methods using copy()Noel Grandin
which converts to std::string_view::substr() Change-Id: I3f42213b41a97e77ddcc79d84d512f49d68ca559 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132729 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-04-13loplugin:stringviewparam whitelist some more functionsNoel Grandin
for which we have o3tl:: equivalents Change-Id: I4670fd8b703ac47214be213f41e88d1c6ede7032 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132913 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-04-12loplugin:stringview more o3tl conversionNoel Grandin
look for call sequences that can use string_view and the new o3tl functions in o3tl/string_view.hxx Also add a few more wrappers to said #include file Change-Id: I05d8752cc67a7b55b0b57e8eed803bd06bfcd9ea Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132840 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-04-11loplugin:stringview add check for getToken().toInt32Noel Grandin
where we can convert that to o3tl::toInt32(o3tl::getToken( and avoid the heap allocation of a temporary string Change-Id: Ib11c19c6e6cdc0de3e551affd3578d181e292de4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132810 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-04-08move comphelper::string::toInt32 to o3tlNoel Grandin
so we can use it in places where we cannot include comphelper Change-Id: Iba0ba3e4c0dcf0f9d1f09092a77c3b2010ec4f6d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132732 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-04-08use more subView when converting to Int32Noel Grandin
Change-Id: I54e3ddf79ba793fd4328bf8bda7f949b65349651 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132693 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-04-02loplugin:stringviewparam convert methods using indexOfNoel Grandin
.. and lastIndexOf, which convert to find and rfind Change-Id: I6c4156cf904774c0d867f85a4c2785dba7593f62 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132445 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-03-25Fold MenuBarManager::Destroy into its only call siteStephan Bergmann
...mainly to demonstrate that its SolarMutexGuard was redundant and that replacing it with DBG_TESTSOLARMUTEX() would be overkill Change-Id: I82f00873cd99cb5da1b644c40ba25f8c210503cd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132112 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2022-03-25tdf#147668: Destroy still needs to do its work when called from disposingStephan Bergmann
Regression introduced with d4257daba1155ebccbfebea99bad0e4152ca9b08 "use comphelper::WeakComponentImplHelper in MenuBarManager" changing - if ( rBHelper.bDisposed ) + if ( m_bDisposed ) in MenuBarManager::Destroy, but where comphelper::WeakComponentImplHelper sets m_bDisposed to true before calling disposing. And Destroy is only called from disposing, so the check can just be removed. Change-Id: I2625dff9fbb333435a0d1478b0f285c21cd3ee15 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132075 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Stephan Bergmann <sbergman@redhat.com> Tested-by: Jenkins
2022-03-22Solve exception in implts_flushConfigItemJuergen Funk
Regression from 4256c764aee0777770466115a97420d9b55c23ac in framework/source/services/autorecovery.cxx in line 1997 sloved the exception Change-Id: I4bee90b94307978c9c5186c1c5fdaca1aa420e21 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131901 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
2022-03-11loplugin:constparamsNoel Grandin
Change-Id: I5f184f93dbdb414514855c85c9dc1624e7ec8636 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131337 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-03-07do not pass XComponentContext to officecfg::...::get() callsLuboš Luňák
It's used only for the ConfigurationWrapper singleton, so it's used only the first time and then ignored. It also causes calls to comphelper::getProcessComponentContext() for every single invocation despite the value not being needed, and the calls may not be cheap (it's ~5% CPU during ODS save because relatively frequent calls to officecfg::Office::Common::Save::ODF::DefaultVersion::get()). Change-Id: I02c17a1a9cb498aeef220ddd5a0bde5523cb0ffb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/131056 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
2022-03-04tdf#45904: Remove ScHeaderFieldObj Java testJens Carl
The ScHeaderFieldObj Java tests are implemented in ScEditFieldObj_Header. Change-Id: I45d3b17bd244090c491c85475f20bc06eb92908f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130953 Tested-by: Jenkins Reviewed-by: Jens Carl <j.carl43@gmx.de>
2022-03-01Fix typosAndrea Gelmini
Change-Id: I9a98bac7c570f25ff7d77df98e93aaeed2665038 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130720 Tested-by: Julien Nabet <serval2412@yahoo.fr> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2022-03-01tdf#45904 Move XComponent Java test to C++Jens Carl
Move XComponent Jave tests to C++ for ScCellFieldObj_Cell and ScCellFieldObj_Header (formerly ScCellFieldObj). Change-Id: Ibf293a72801720fee49acdda5a3a463e9202bb58 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130742 Tested-by: Jenkins Reviewed-by: Jens Carl <j.carl43@gmx.de>
2022-02-28tdf#45904 Move XElementAccess Java test to C++Jens Carl
Move XElementAccess Java test to C++ for ScHeaderFieldsObj. Change-Id: I1bc29be9f17d117edecfd889b4f9784ffbd74d71 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130660 Tested-by: Jenkins Reviewed-by: Jens Carl <j.carl43@gmx.de>
2022-02-23CppunitTest_framework_dispatch: remove duplicated dispatchCommandXisco Fauli
it's already defined in unotest::MacrosTest Change-Id: I2abc4bea61f55242b9cf3c7f030f5c74f8a51efe Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130402 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
2022-02-22Add XWeak constructor and operator= to uno::WeakReferenceNoel Grandin
which is faster since we can skip the UNO_QUERY. Change-Id: Id95ad9f3568213e974bd13659d92d4ea94dbfbd6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130282 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2022-01-20WASM make test file loading workArmin Le Grand (Allotropia)
Change-Id: Ic34104534c3e0e73791cf867bfb2e1246dc79cf8 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128653 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2022-01-20WASM --enable-wasm-strip now skips lots of LO codeArmin Le Grand (Allotropia)
... resulting in a stripped-down, Writer-only build to decrease the resulting WASM bytecode size. It removes the following code from the build: * All other major modules: Base, Calc, Chart, Draw, Impress and Math and related writerperfect filters * The premultiply tables * The (auto-)recovery functionality * All accessibility (but not the accessibility document checker) * The LanguageGuess component * EPUB support * The start center / BackingWindow * The TipOfTheDay functionality * The splash screen communication Currently crashs with anything different then soffice --writer. Closing the document also still crashes. FYI: many of these features are now behind ENABLE_WASM_STRIP_* defines, but they normally don't work on their own, globally! That's because we started with stripping the main components. Change-Id: Ib9c0f9452815910c0a2aceaf142ba1ad4a9cb0d7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126182 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2022-01-17Recheck modules [e-f]* with IWYUGabor Kelemen
See tdf#42949 for motivation Change-Id: I49a3ce10dee4b03f99156f5b641f69448e1d5617 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128479 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
2022-01-15include memory for std::unique_ptrCaolán McNamara
Change-Id: I15f78ecfc53e75403bb8edbcd6e5400e8ecaaa44 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128465 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
2022-01-15tdf#146754: consider xyz:123 as host:port when parsing URLs smartMike Kaganski
... rather than scheme: and path. Change-Id: I9a48310b585b8fa3e31635f877a91f1560b065f0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128457 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2022-01-14make comphelper::OInterfaceContainerHelper4 more threadsafeNoel Grandin
(*) make all the methods that require an external mutex take a std::unique_lock as a parameter, so that call sites cannot forget (*) make the forEach method drop the lock when firing listener methods, to reduce the odds of deadlock Change-Id: I0a80e3b3d1c1c03b7de4a658d31fcc2847690903 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128415 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>