summaryrefslogtreecommitdiff
path: root/dbaccess
AgeCommit message (Collapse)AuthorFilesLines
2017-10-06Related: tdf#107569 Remove useless slotsMaxim Monastirsky1-1/+0
With the current implementation of MenuBarManager, there is no need to have sdi slots for menu items with submenus, and moreover they have no effect at all. Note that SID_PICKLIST was also (mis)used as an argument to avoid adding a document to the recent list (which isn't related to its mapping to .uno:PickList). But there seem to be only read attempts, nothing actually sets it, so I think this usage can be removed too. (For information, at least in OOo 1.0.3 sources, there were 2 places where it was used as an argument for SID_SAVEASDOC, although it was not present there in the SID_SAVEASDOC def. in sfx.sdi.) Change-Id: I18b0afe106f858406e13188bbc004ac99a3a0246 Reviewed-on: https://gerrit.libreoffice.org/43184 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com>
2017-10-05Rename and move SAL_U/W to o3tl::toU/WMike Kaganski1-3/+7
Previosly (since commit 9ac98e6e3488e434bf4864ecfb13a121784f640b) it was expected to gradually remove SAL_U/W usage in Windows code by replacing with reinterpret_cast or changing to some bettertypes. But as it's useful to make use of fact that LibreOffice and Windows use compatible representation of strings, this commit puts these functions to a better-suited o3tl, and recommends that the functions be consistently used throughout Windows-specific code to reflect the compatibility and keep the casts safe. Change-Id: I2f7c65606d0e2d0c01a00f08812bb4ab7659c5f6 Reviewed-on: https://gerrit.libreoffice.org/43150 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2017-10-04add << operator for css::uno::ExceptionNoel Grandin4-10/+10
Change-Id: Ia23dafd07133779144965682df3b7125a3214235 Reviewed-on: https://gerrit.libreoffice.org/43046 Reviewed-by: Stephan Bergmann <sbergman@redhat.com> Tested-by: Jenkins <ci@libreoffice.org>
2017-10-03new loplugin:blockblockNoel Grandin3-78/+71
Change-Id: I7b68b70fa4c7234e8882f7627026959a596968fd Reviewed-on: https://gerrit.libreoffice.org/43025 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-10-01throw more useful uno::Exception'sNoel Grandin1-1/+1
if we're going to throw the base class of the exception hierarchy, we can at least put a useful message in there to make the source a little bit easier to locate. Change-Id: I2f3106c99ba25125eacef8fa77e2f3a2c89f2566 Reviewed-on: https://gerrit.libreoffice.org/42968 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2017-09-30Use SAL_W/SAL_U instead of reinterpret_cast btwn wchar_t* and sal_Unicode*Mike Kaganski1-3/+3
This is type-safe, and allows to catch cases where a source type is changed for some reason, but reinterpret_cast masks that Change-Id: Ib64b6fa2e22d94a6bba890f0ccc3e20325c6f0a1 Reviewed-on: https://gerrit.libreoffice.org/42961 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2017-09-29Remove empty menu labelsMaxim Monastirsky1-4/+4
Change-Id: Iea775fd3915c818c47cda88796f4eaa7c5254700
2017-09-25Fix typosAndrea Gelmini1-1/+1
Change-Id: I879a52820d78d9151ef64dd21612379f617f66e2 Reviewed-on: https://gerrit.libreoffice.org/42726 Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com> Tested-by: Tamás Zolnai <tamas.zolnai@collabora.com>
2017-09-25Rename GetSelectEntryCount -> GetSelectedEntryCountSamuel Mehrbrodt4-9/+9
Change-Id: I405b347b404ed0acb3b6a0204e0b914a7698ce25 Reviewed-on: https://gerrit.libreoffice.org/42284 Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de> Tested-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
2017-09-24Use a ref for arg of DirectSQLDialog::displayJulien Nabet2-2/+2
Change-Id: Ia30866edb5a243c09af3256bd963cafa9e2335ba Reviewed-on: https://gerrit.libreoffice.org/42705 Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Tested-by: Julien Nabet <serval2412@yahoo.fr>
2017-09-24tdf#103685: "Commands out of sync" when connecting to MySQL using directJulien Nabet2-35/+66
Thanks to Lionel for his great help Change-Id: Ifcc1d72cca29c031f31da203cd1e3302ea0ea3e3 Reviewed-on: https://gerrit.libreoffice.org/42688 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Lionel Elie Mamane <lionel@mamane.lu>
2017-09-23new loplugin unnecessarycatchthrowNoel Grandin2-62/+44
Change-Id: Iabab71ee076227bc38447ec109afaea1e53a86a6 Reviewed-on: https://gerrit.libreoffice.org/42643 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-09-22Fresh run of bin/update_pch.shMike Kaganski5-73/+107
Change-Id: I69d4157aaf6570cecd51ea59df20556914942e06 Reviewed-on: https://gerrit.libreoffice.org/42565 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2017-09-22Windows: avoid dependence on UNICODE define; prefer W functionsMike Kaganski1-13/+8
Change-Id: I95b90128e93f0d88ed73601bcc5a7ca9279d4cf1 Reviewed-on: https://gerrit.libreoffice.org/42560 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2017-09-22ofz: don't leak in face of exceptionsCaolán McNamara22-32/+32
Change-Id: Ic15590a13bd3770ee5dd7db76b21c830a4fe73e2 Reviewed-on: https://gerrit.libreoffice.org/42587 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-09-21Related tdf#112423: avoid crash when calling procedure twice (dbaccess)Julien Nabet1-0/+3
Since SbaTableQueryBrowser::implSelect returns a bool to indicate if everything is ok, should return false when we entered in a catch Change-Id: I9ae3ff3bf082278edb16a9b91701d6cf457e7179 Reviewed-on: https://gerrit.libreoffice.org/42564 Tested-by: Julien Nabet <serval2412@yahoo.fr> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2017-09-21loplugin:flatten in connectivity..desktopNoel Grandin4-79/+60
Change-Id: Iff59d3049ba40b4338ef8eec67d08a96b0834d2b Reviewed-on: https://gerrit.libreoffice.org/42578 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-09-21Rename GetSelectEntryPos -> GetSelectedEntryPosSamuel Mehrbrodt14-38/+38
Change-Id: I0bd4cb463575af843c72d9c8aaf91742203532a4 Reviewed-on: https://gerrit.libreoffice.org/42283 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
2017-09-21Rename GetSelectEntry -> GetSelectedEntrySamuel Mehrbrodt13-32/+32
Change-Id: Ibb7d8c59c0e61b0e87455bd78f241d8691dd9dce Reviewed-on: https://gerrit.libreoffice.org/42282 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
2017-09-20group java-requiring tests togetherDavid Tardon1-2/+1
Change-Id: Ie4e5422d2a6cb01b4a899ed0982d60fe65c386d7
2017-09-20unused m_sUpdateTableName in OQueryControllerNoel Grandin2-3/+2
ever since commit 2106d8e648449d34b195068eef5f672a14ea64a8 Date: Sun Jun 10 21:51:19 2012 +0100 callcatcher: update unused code Change-Id: I88a13c5c414a86a82efc6883d2e1602199569dc9
2017-09-19fix caching in OResultColumnNoel Grandin1-1/+1
this obviously never worked, because the template method was never updating the cache field, just a copy of the cache field Change-Id: Ibeed9a0f0764a4d398548c05aed466cd6cdfc266
2017-09-19Unify SolarMutex implementationsJan-Marek Glogowski2-5/+16
All backends implement the SolarMutex in mostly the same way. So this consolidates this code into a GenericSolarMutex. We still need the abstract SolarMutex class for the fake AKA fascade implementation in dbaccess. The patch also replaces various places of direct mutex usage with either SolarMutexGuard or SolarMutexReleaser objects. Change-Id: Ia0146dd6c51a3b9a513cc6af34a66def58aad831 Reviewed-on: https://gerrit.libreoffice.org/42325 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
2017-09-18Some more WIN32_LEAN_AND_MEANMike Kaganski1-0/+3
Change-Id: Iadb0ebb66809c192fb817b8c7cf2f8cdb4d0b874 Reviewed-on: https://gerrit.libreoffice.org/42419 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2017-09-18dbaccess: [loplugin:casttovoid]Michael Stahl1-2/+0
Change-Id: Ie1f63b6495997d518457fcac195fcfa903bc6af0
2017-09-18Removed duplicated includeAndrea Gelmini1-1/+0
Change-Id: I38e3ecdf892f5e5212e4332868e5811c347d6978 Reviewed-on: https://gerrit.libreoffice.org/42400 Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Tested-by: Julien Nabet <serval2412@yahoo.fr>
2017-09-17Replace some lists by vectors in dbaccessJulien Nabet5-16/+20
Change-Id: Ibf75bec826661fcff7d71e9e2f11884e498a299b Reviewed-on: https://gerrit.libreoffice.org/42382 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-09-17use more default copy ctorsJochen Nitschke2-7/+0
if ctor should be private or protected explicitly default them. boost::optional has copy ctors, so use them. Change-Id: If1855626b297e739afef0dc5ad57958f7ad199bc Reviewed-on: https://gerrit.libreoffice.org/42363 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-09-14improve redundantcast lopluginNoel Grandin1-1/+1
to find c-style casts where the expression is a templated method Change-Id: Ifbd1e2cdc72d906fc95a7ec0f9408c3f6d2a836b Reviewed-on: https://gerrit.libreoffice.org/42275 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-09-11clang-tidy modernize-use-emplace in d*Noel Grandin25-114/+111
Change-Id: I79ac90faf24b4c741545e411dbaea7826c2df531 Reviewed-on: https://gerrit.libreoffice.org/42150 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-09-10cppcheck: identicalConditionAfterEarlyExitJochen Nitschke1-2/+0
Change-Id: I0c9b2e8e92ae1b439b6df548daecff07714ea1d4 Reviewed-on: https://gerrit.libreoffice.org/42135 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2017-09-08set parent for file dialog helperCaolán McNamara2-8/+12
Change-Id: I3994ee48dcb5b2732cb27cb9ccb54926abf0828a Reviewed-on: https://gerrit.libreoffice.org/42048 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-09-07unotest.py: refactor confusing mess of openDoc functionsMichael Stahl1-1/+1
Change-Id: I148332c639510c55dea2d09bc7aa695708fbf34c
2017-09-04new loplugin:redundantpointeropsNoel Grandin1-1/+1
Change-Id: I8428d86ea9628d69c2b40b36feee3da428a9fe1d Reviewed-on: https://gerrit.libreoffice.org/41787 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-09-02tdf#96703: getDocumentStorage is called during initializationJulien Nabet1-1/+1
So use DocumentGuard::MethodUsedDuringInit instead of DocumentGuard::DefaultMethod to avoid com.sun.star.lang.NotInitializedException Then we'll got to tackle ODatabaseModelImpl::getOrCreateRootStorage: no source to create the storage from! Change-Id: I1f01bb46088445f3cb3264baee9ad4d45bb5fa8c Reviewed-on: https://gerrit.libreoffice.org/41837 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2017-09-01Fix typosAndrea Gelmini1-1/+1
Change-Id: I4496faa9ce7cad393bf06ca789099b045aea2741 Reviewed-on: https://gerrit.libreoffice.org/41785 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
2017-08-31loplugin:constparams: dbaccess (clang-cl)Stephan Bergmann2-2/+2
Change-Id: If41080debabff46d849dbd6e7f29a941f294c6ad
2017-08-29This should be ToolBoxItemBits::DROPDOWNONLYMaxim Monastirsky1-1/+1
as there is no select handler registered here. Change-Id: Ide822efe2bacbe791d950883f18e029b26517c6b
2017-08-28Replace use of oslInterlockedCount with std::atomic, ORowSet::m_nInAppendStephan Bergmann8-13/+35
Change-Id: I9040034d358e1f32ab052b70185a77da82f29ee4
2017-08-25loplugin:useuniqueptr in dbaccessNoel Grandin4-17/+8
Change-Id: Iecf167f2018537476107d0850bef6f6e8ae344a4 Reviewed-on: https://gerrit.libreoffice.org/41494 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-24dbaccess: avoid deadlock in ODatabaseContext::registerObject()Michael Stahl1-5/+7
Limit the scope of m_aMutex lock to what is necessary. As observed by Jan-Marek Glogowski: [Switching to thread 198 (Thread 0x2aab44e5b700 (LWP 46847))] 3 osl_acquireMutex(oslMutexImpl*) (pMutex=0x1e59d10) at sal/osl/unx/mutex.cxx:97 4 osl::Mutex::acquire() (this=0x1ebbe28) at include/osl/mutex.hxx:56 5 osl::Guard<osl::Mutex>::Guard(osl::Mutex&, bool) (this=0x2aab44e56198, rT=..., bAquire=true) at include/osl/mutex.hxx:135 6 dbaccess::ODatabaseContext::getElementNames() (this=0x1ebbd90) at dbaccess/source/core/dataaccess/databasecontext.cxx:661 7 non-virtual thunk to dbaccess::ODatabaseContext::getElementNames() () at dbaccess/source/core/dataaccess/databasecontext.cxx:659 8 dbaui::SbaTableQueryBrowser::initializeTreeModel() (this=0xb174890) at dbaccess/source/ui/browser/unodatbr.cxx:2086 9 dbaui::SbaTableQueryBrowser::impl_initialize() (this=0xb174890) at dbaccess/source/ui/browser/unodatbr.cxx:3201 10 dbaui::OGenericUnoController::initialize(com::sun::star::uno::Sequence<com::sun::star::uno::Any> const&) (this=0xb174890, aArguments=uno::Sequence of length 9 = {...}) at dbaccess/source/ui/browser/genericcontroller.cxx:299 11 DBContentLoader::load(com::sun::star::uno::Reference<com::sun::star::frame::XFrame> const&, rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&, com::sun::star::uno::Reference<com::sun::star::frame::XLoadEventListener> const&) (this=0xb1730a0, rFrame=uno::Reference to ((anonymous namespace)::Frame *) 0xb162690, rURL=".component:DB/DataSourceBrowser", rArgs=uno::Sequence of length 8 = {...}, rListener=uno::Reference to (framework::LoadEnvListener *) 0xb174228) at dbaccess/source/ui/browser/dbloader.cxx:270 12 framework::LoadEnv::impl_loadContent() (this=0xb16f5b8) at framework/source/loadenv/loadenv.cxx:1077 13 framework::LoadEnv::startLoading() (this=0xb16f5b8) at framework/source/loadenv/loadenv.cxx:372 [Switching to thread 196 (Thread 0x2aab4565f700 (LWP 42841))] 3 osl_acquireMutex(oslMutexImpl*) (pMutex=0x773cd0) at sal/osl/unx/mutex.cxx:97 4 osl::Mutex::acquire() (this=0x77b4a8) at include/osl/mutex.hxx:56 5 comphelper::GenericSolarMutex::doAcquire(unsigned int) (this=0x77b4a0, nLockCount=1) at comphelper/source/misc/solarmutex.cxx:61 6 comphelper::SolarMutex::acquire(unsigned int) (this=0x77b4a0, nLockCount=1) at include/comphelper/solarmutex.hxx:74 7 osl::ClearableGuard<comphelper::SolarMutex>::ClearableGuard(comphelper::SolarMutex&) (this=0x2aab4565d478, t=...) at include/osl/mutex.hxx:170 8 osl::ResettableGuard<comphelper::SolarMutex>::ResettableGuard(comphelper::SolarMutex&) (this=0x2aab4565d478, rT=...) at include/osl/mutex.hxx:215 9 SolarMutexResettableGuard::SolarMutexResettableGuard() (this=0x2aab4565d478) at include/vcl/svapp.hxx:1416 10 dbaccess::ModelMethodGuard::ModelMethodGuard(dbaccess::ModelDependentComponent const&) (this=0x2aab4565d478, _component=...) at dbaccess/source/core/dataaccess/ModelImpl.hxx:587 11 dbaccess::ODatabaseSource::getDatabaseDocument() (this=0x281d690) at dbaccess/source/core/dataaccess/datasource.cxx:1300 12 non-virtual thunk to dbaccess::ODatabaseSource::getDatabaseDocument() () at dbaccess/source/core/dataaccess/datasource.cxx:1298 13 dbaccess::ODatabaseContext::registerObject(rtl::OUString const&, com::sun::star::uno::Reference<com::sun::star::uno::XInterface> const&) (this=0x1ebbd90, _rName="MyFactory", _rxObject=uno::Reference to (dbaccess::ODatabaseSource *) 0x281d708) at dbaccess/source/core/dataaccess/databasecontext.cxx:433 14 gcc3::callVirtualMethod(void*, unsigned int, void*, _typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int, unsigned long*, double*) (pThis=0x1ebbdf8, nVtableIndex=4, pRegisterReturn=0x0, pReturnTypeRef=0x781090, bSimpleReturn=true, pStack=0x2aab4565d810, nStack=0, pGPR=0x2aab4565db30, pFPR=0x2aab4565daf0) at bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx:77 Change-Id: I06e91d9c4e193c97f98f29f6b73eaf01b12922c0
2017-08-23convert message box style bits to scoped enumNoel Grandin16-49/+50
and fix harmless bug in ImpSVGDialog::ImpSVGDialog, which there since commit 6456f1d81090dd5fe44455c09ae3ede7ec6ac38a Date: Fri Feb 4 14:52:54 2011 +0100 ka102: added/removed files for SVG import and module cleanup Change-Id: I66b2ec2b029431ab453e54e962863e4ed7d78962 Reviewed-on: https://gerrit.libreoffice.org/41412 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-22convert WB_QUICK_SEARCH/WB_FORCE_MAKEVISIBLE to bool fieldsNoel Grandin2-3/+3
Change-Id: Ic297d97911a6c0356d24ffe4b58442dfe866139f Reviewed-on: https://gerrit.libreoffice.org/41407 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-19convert extended WinBits to scoped enumNoel Grandin2-2/+2
Change-Id: If35f4fcda2415c858ba8f963e9f471c87169bc99 Reviewed-on: https://gerrit.libreoffice.org/41301 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-18convert ExtendedWinBits to a single bool flagNoel Grandin1-1/+1
Change-Id: I2ff15a7f485ffdfb78eaabd529d19065faeb4c53 Reviewed-on: https://gerrit.libreoffice.org/41277 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-18loplugin:unnecessaryparenNoel Grandin1-1/+1
look for statements like return (function()); Change-Id: I906cf2183489f87225b99b987caca67e39b26cc3 Reviewed-on: https://gerrit.libreoffice.org/41260 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-17remove unnecessary use of OUString::getStrNoel Grandin2-2/+2
Change-Id: I3d13e1c0bb6aa4a7aacc463198747c1368ebc9b4 Reviewed-on: https://gerrit.libreoffice.org/38114 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-16tdf#39468 Translate German comments/termsJens Carl1-1/+0
Change-Id: I3c8d8ba10de007429b1cdf26f5e8b207f7cc5eea Reviewed-on: https://gerrit.libreoffice.org/41201 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <mstahl@redhat.com>
2017-08-11convert std::map::insert to std::map::emplace IINoel Grandin5-12/+9
Change-Id: Ief8bd59c903625ba65b75114b7b52c3b7ecbd331 Reviewed-on: https://gerrit.libreoffice.org/41019 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-08-11convert std::map::insert to std::map::emplaceNoel Grandin20-74/+74
which is considerably less verbose Change-Id: Ifa373e8eb09e39bd6c8d3578641610a6055a187b Reviewed-on: https://gerrit.libreoffice.org/40978 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>