summaryrefslogtreecommitdiff
path: root/include/svl/undo.hxx
AgeCommit message (Collapse)Author
2021-11-11sw, out of order undo: allow a subset of a non-empty redo listMiklos Vajna
Specifically, we used to not allow out of order undo at all if the redo list was non-empty. This relaxes that condition a bit. Out of order undo is OK with a non-empty redo list, in case all undo actions in the redo list are either 1) owned by the current view or 2) independent from the undo action to be executed I.e. if view1 has lots of type undo actions and an view2 adds a single type undo action on top of it, then allow view 1 to execute multiple of its typing undo actions, not just a single one. Change-Id: I2f5d9404a9994ed74b65233d2a315976c27b28b2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125023 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
2021-11-10sw: allow undo of typing in 2 views independent from each otherMiklos Vajna
Undoing out of order is dangerous by default, so limit this to a very specific case as a start, that allows growing in follow-up commits. For now, allow out of order undo if: 1) redo stack is empty 2) we're in LOK mode (different views represent different users) 3) we undo a single action (count is 1) 4) the top undo action doesn't belong to the current view 5) the top and the previous undo actions are independent Which only requires that SwUndoInsert::UndoImpl() is independent for two different paragraphs, which seems to be the case. Independent undo actions opt in for this, currently the only such allowed undo action is SwUndoInsert ("typing"), which adds characters to a single text node. Even those are only considered independent if they operate on different text nodes. On the positive side, this allows out of order undo in the frequent case where two users collaborate on a long document and they just type some new content into the document at different paragraphs. Change-Id: Ibb4551e8f7046b4947491b8bf751eaa0cbb2d060 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124949 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
2020-10-01tdf#136728: Revert "tdf#136238 speed up deleting large cross page table"Xisco Fauli
This reverts commit da5c289a9cae5d914937f235694fd5b0cb92547f. Change-Id: Ic6a77ec2cd3b502fb4e94159a0424340850590df Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103665 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2020-09-10tdf#136238 speed up deleting large cross page tableNoel Grandin
Goes from more than 30s to less than 1s on my pc. We were getting stuck inside the loop in sw::UndoManager::AddUndoAction, because the RemoveOldestUndoAction was continually doing nothing because it was hitting the if ( IsInListAction() { assert(!"SfxUndoManager::RemoveOldestUndoActions: cannot remove a not-yet-closed list action!"); return; } code. Which means that there is some bug here, but I'm not sure what. We are deep inside the delete logic at that point, and it doesn't seem unreasonable to opportunistically delete some of the UNDO list at that point. So the real fix is just the conversion from a while loop to an if-check. Change-Id: Ie2707009dd6574b996421f67d952ab9fdaaaf6aa Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102378 Tested-by: Noel Grandin <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2020-06-09tdf#128502: Try to support multiple documents in LibreOfficeKit-using processTor Lillqvist
The LibreOfficeKit-specific code typically has assumed that all the "views" (SfxViewShell instances) are for the same document, because all LibreOfficeKit-based application processes (including the "kit" processes in Online and the iOS app) so far have only had one document open at a time. It is now possible to pass several document file names on the command line to gtktiledviewer and that is an easy way to demonstrate how badly it still works even with this patch. Introduce a unique numeric document id that is increased in the LibLODocument_Impl constructor. Add APIs to access that. When iterating over views, try to skip views that are not of the document visible in the "current" view, if we know what the "current" view is. Also add a couple of FIXMEs at places where it is a bit unclear (to me) whether it is correct to iterate over all views, or whether only views for the "current" document are what we would want. Change-Id: Id5ebb92a115723cdeb23907163d5b5f282016252 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95353 Tested-by: Jenkins Reviewed-by: Tor Lillqvist <tml@collabora.com>
2020-05-03use more compact namespace syntax in /includeNoel Grandin
excluding the UDK headers of course Change-Id: Iac7ab83d60265f7d362c860776f1de9d5e444ec0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93268 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-10-30loplugin:finalclasses sot..svlNoel Grandin
Change-Id: I0814e98c82822752dd4410d595d35acb67d5a1d1 Reviewed-on: https://gerrit.libreoffice.org/81703 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-09-27loplugin:virtualdead in svlNoel Grandin
Change-Id: Idbb5d0a633f12d5813561a2ad8aed46ec6d67c48 Reviewed-on: https://gerrit.libreoffice.org/79639 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2019-02-28use the xmlTextWriterPtr typedef consistentlyNoel Grandin
this is the single biggest chunk of stuff my upcoming paramtypedef loplugin will warn about, so do it separately Change-Id: I412e69e76406d6d947101885d4cd92c65e021508 Reviewed-on: https://gerrit.libreoffice.org/68486 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-11-14tdf#42949 Fix IWYU warnings in include/svl/*Gabor Kelemen
Found with bin/find-unneeded-includes Only removal proposals are dealt with here. Change-Id: Ide75232858599c275e023c2300201090acd22307 Reviewed-on: https://gerrit.libreoffice.org/63237 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
2018-11-01use unique_ptr in markForDeletionNoel Grandin
Change-Id: I10e5ad02243c7045d51191c735163ee4a027126e Reviewed-on: https://gerrit.libreoffice.org/62695 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-11-01rename RemoveX->Remove in SfxUndoArrayNoel Grandin
accidentally left it this way when doing commit 19e715973e15f9e7cf6e8237643dbbc14f8eb87a Date: Mon Oct 29 16:15:27 2018 +0200 loplugin:useuniqueptr in MarkedUndoAction Change-Id: I250676df7af27f485c5d34281ef0da1e127eb24c Reviewed-on: https://gerrit.libreoffice.org/62694 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-10-30loplugin:useuniqueptr in MarkedUndoActionNoel Grandin
Change-Id: Ic06b990112df5bc135cfd7af6f1129580f294428 Reviewed-on: https://gerrit.libreoffice.org/62509 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-10-09use unique_ptr in SfxUndoManager::AddUndoActionNoel Grandin
Change-Id: I11483e3cece12a7373f4276972b4c899edf1ce15 Reviewed-on: https://gerrit.libreoffice.org/61566 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-09-19flatten SfxUndoArrayNoel Grandin
there is really no need to point to an impl which points to a std::vector Change-Id: I73c47cf3056a24d909e77b9b4cf9d9ae57c19c04 Reviewed-on: https://gerrit.libreoffice.org/60588 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-08-08loplugin:unnecessaryvirtualNoel Grandin
Change-Id: I3fe82f6e3aad299fe42d6256c0deaba1339df0c1 Reviewed-on: https://gerrit.libreoffice.org/58708 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-07-13merge IUndoManager into SfxUndoManagerNoel Grandin
SfxUndoManager is the only implementation of the IUnderManager "interface", and it lives in the same header. Plus this way we can get rid of some covariant parameters, which will make using std::unique_ptr easier. Change-Id: I6661b9876b18da830bead78794d237886cd3c5c9 Reviewed-on: https://gerrit.libreoffice.org/57317 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2018-05-25no need declare these tag structs separatelyNoel Grandin
Change-Id: I00f336ee4eced431155c79bee6e2373e145ae95c Reviewed-on: https://gerrit.libreoffice.org/54780 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-12-07lokit: add .uno:DocumentRepair commandHenry Castro
Change-Id: I5b13ea6f4785bc91c29111fa63c4a1b0ea9b2660 Reviewed-on: https://gerrit.libreoffice.org/38908 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Henry Castro <hcastro@collabora.com>
2017-06-06add COVERITY_NOEXCEPT_FALSECaolán McNamara
to markup dtors that coverity warns might throw exceptions which won't throw in practice, or where std::terminate is an acceptable response if they do Change-Id: I32b94814e8245372e1d1dc36be0d81e3564042f4 Reviewed-on: https://gerrit.libreoffice.org/38318 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
2017-03-29loplugin:unnecessaryvirtualNoel Grandin
Change-Id: I5076f8700ee29cfec3875dfbc4b149229d776712 Reviewed-on: https://gerrit.libreoffice.org/35823 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-03-24convert ViewShellId to o3tl::strong_intNoel Grandin
Change-Id: I45553d11d56aa8c4432aec126ca51f24bd3ead09 Reviewed-on: https://gerrit.libreoffice.org/35421 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-03-16drop GetId() from SfxUndoActionNoel Grandin
mostly so that the subclasses can use proper enum types for their own IDs. It turns out that nothing at the svl/sfx2 level needs an ID anyhow. Change-Id: I3c020aeafb812fa30d896216d4e3bc1a82cbfeab Reviewed-on: https://gerrit.libreoffice.org/35222 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2016-09-13loplugin:override: No more need for the "MSVC dtor override" workaroundStephan Bergmann
The issue of 362d4f0cd4e50111edfae9d30c90602c37ed65a2 "Explicitly mark overriding destructors as 'virtual'" appears to no longer be a problem with MSVC 2013. (The little change in the rewriting code of compilerplugins/clang/override.cxx was necessary to prevent an endless loop when adding "override" to OOO_DLLPUBLIC_CHARTTOOLS virtual ~CloseableLifeTimeManager(); in chart2/source/inc/LifeTime.hxx, getting stuck in the leading OOO_DLLPUBLIC_CHARTTOOLS macro. Can't remember what that isAtEndOfImmediateMacroExpansion thing was originally necessary for, anyway.) Change-Id: I534c634504d7216b9bb632c2775c04eaf27e927e
2016-08-05desktop: add undo/redo support to lok::Document::getCommandValues()Miklos Vajna
Expose the undo/redo stack and the metadata of each item. Change-Id: I66b81e855a945c97be3d491ed709959f310d4b73 Reviewed-on: https://gerrit.libreoffice.org/27905 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
2016-08-04svl: track creation time of SfxUndoAction instancesMiklos Vajna
It's not yet clear how to expose this on the UI, though. Change-Id: Iee6737922d36e896653b4fae557442747dda1b8b Reviewed-on: https://gerrit.libreoffice.org/27878 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
2016-08-01svl: implement SfxUndoAction::GetViewShellId() interface in SfxListUndoActionMiklos Vajna
Client code in sw, sd, sc and svx is adapted, the rest is just a placeholder for now. With this, e.g. the undo item for Writer's insert comment properly tracks which window was used for the insertion. Change-Id: Idad587e6ca07ba69bf59aa7013b251af8bf95bab Reviewed-on: https://gerrit.libreoffice.org/27781 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
2016-08-01svl: avoid defaulted parameter in SfxUndoManager::EnterListAction()Miklos Vajna
It's a virtual function, and defaulted parameters there are problematic. Change-Id: I3f110c7ac36dfda90811b033620286ad9fce1af1 Reviewed-on: https://gerrit.libreoffice.org/27772 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
2016-07-29svl: add SfxUndoAction::GetViewShellId()Miklos Vajna
In preparation of a Writer version that overrides this and remembers which view shell introduced which action. Change-Id: I4970f8ce9c56f1b57ab1ae92f3ea8be804ca27bf Reviewed-on: https://gerrit.libreoffice.org/27682 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Jenkins <ci@libreoffice.org>
2016-05-31loplugin:unusedmethodsNoel Grandin
Change-Id: Ifeb818227a960cab8fd2e8e7352468efbfe1232c Reviewed-on: https://gerrit.libreoffice.org/25668 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
2016-05-30loplugin:unusedmethods SfxLinkUndoActionNoel Grandin
Change-Id: I1ad7c2452dd9bc80e7404f41484b9667adbcfa7b Reviewed-on: https://gerrit.libreoffice.org/25542 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
2016-03-09loplugin:constantparam in svlNoel Grandin
Change-Id: Iefc441262cbdc6f115ea4ca5a673456b59477e13
2016-03-07loplugin:unuseddefaultparamsNoel Grandin
Change-Id: Ia414f7845425ef73859ed04853378e96cc738795 Reviewed-on: https://gerrit.libreoffice.org/22971 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
2016-03-01loplugin:unuseddefaultparam in svlNoel Grandin
Change-Id: Ifc82563c8930332d460df4d97935ba6e9946689f
2016-02-09Remove excess newlinesChris Sherlock
A ridiculously fast way of doing this is: for i in $(pcregrep -l -M -r --include='.*[hc]xx$' \ --exclude-dir=workdir --exclude-dir=instdir '^ {3,}' .) do perl -0777 -i -pe 's/^ {3,}/ /gm' $i done Change-Id: Iebb93eccbee9e4fc5c4380474ba595858a27ac2c Reviewed-on: https://gerrit.libreoffice.org/22224 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-11-18use unique_ptr for pImpl in svl/Noel Grandin
Change-Id: Ieef897314ac0f056c0a09a5182ca59800fd58f41
2015-11-115th step to remove tools/rtti.hxxOliver Specht
tools/rtti.hxx removed completed the interface of some Sdr.* Items and removed pseudo items Change-Id: I0cdcd01494be35b97a27d5985aa908affa96048a Reviewed-on: https://gerrit.libreoffice.org/19837 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Oliver Specht <oliver.specht@cib.de>
2015-11-10loplugin:nullptr (automatic rewrite)Stephan Bergmann
Change-Id: I0f2f81dae91f62639e79799b1bed1b2df1fd79ab
2015-10-12Replace "SAL_OVERRIDE" with "override" in LIBO_INTERNAL_ONLY codeStephan Bergmann
Change-Id: I2ea407acd763ef2d7dae2d3b8f32525523ac8274
2015-10-12Replace "SAL_DELETED_FUNCTION" with "= delete" in LIBO_INTERNAL_ONLY codeStephan Bergmann
Change-Id: I328ac7a95ccc87732efae48b567a0556865928f3
2015-07-06loplugin:unusedmethods svlNoel Grandin
Change-Id: Ic136cce6abef44291b7236a6d709f0eee391f311 Reviewed-on: https://gerrit.libreoffice.org/16784 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com> Tested-by: Noel Grandin <noelgrandin@gmail.com>
2015-07-03Fix typosAndrea Gelmini
Change-Id: Ie2bbe020fc6e3a4a4f913208c245f395849bb9ee Reviewed-on: https://gerrit.libreoffice.org/16708 Reviewed-by: Michael Stahl <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com>
2015-02-16boost::foo_ptr->std::foo_ptrCaolán McNamara
Change-Id: I9219619b538b6530a89f5932ac51eb3b62eb396a
2015-02-07loplugin:deletedspecialStephan Bergmann
Change-Id: Id4f2e6cd7d689ac0b4688d92780b48d51427307a
2015-02-01Extract SfxUndoManager::dumpAsXml() from swMiklos Vajna
Change-Id: Ic031b63641e0fd0fbd1524657082188d9ce78fcf
2015-01-31Extract SfxUndoAction::dumpAsXml() from swMiklos Vajna
Change-Id: I7ec2071150c03b61f3f681dbd26968ae3c535742
2015-01-22SAL_DLLPUBLIC_RTTI for proper RTTI visibility for LLVMStephan Bergmann
The Itanium C++ ABI mandates that for a unique (complete) C++ type a single unique symbol for the type's RTTI name is used across a process's dynamic objects (so type equivalence can be determined via pointer comparison on the RTTI names). GCC nowadays deviates from that, using strcmp to determine equivalence, so it is resilient to RTTI names being bound locally within dynamic objects (which has performance benefits, but also makes it impossible to have unrelated types that happen to have the same name "encapsulated" in individual dynamic objects--- whether or not that would violate the ODR would be open to interpretation of how dynamic objects fit into the C++ Standard). LLVM sticks to the Itanium ABI, which becomes notable in at least two places: For one, libc++abi's __dynamic_cast uses strict checking. It still has a _LIBCXX_DYNAMIC_FALLBACK for now that additionally uses strcmp checking and syslogs visibility violations. Mac OS X uses libc++abi with _LIBCXX_DYNAMIC_FALLBACK enabled, and running LO routinely logs dynamic_cast errors to the Console there. For another, RTTI-based UBSan checks unconditionally only use strict checking (cf. isDerivedFromAtOffset in lib/ubsan/ubsan_type_hash.cc). This causes false positives from Clang -fsanitize=function and -fsanitize=vptr even on Linux not using libc++abi. Therefore, introduce SAL_DLLPUBLIC_RTTI to mark types for which RTTI needs to have default visibility under the Itanium/LLVM semantics. There is unfortunately no way to mark only the (implicitly generated) RTTI symbols for default visibility, but at least with the cases where SAL_DLLPUBLIC_RTTI is used for now that is no real problem---any class type marked SAL_DLLPUBLIC_RTTI only has inline (covered by -fvisibility-inlines-hidden) or undefined pure virtual functions. It appears that even the vtables of those classes remain hidden, at least with Mach-O on Mac OS X. (That also means there is no need for a SAL_DLLPRIVATE_RTTI marker analoguous to the---also superfluous in retrospect--- CPPU_GCC_DLLPRIVATE one.) Nevertheless, the number of exported symbols of course increases when SAL_DLLPUBLIC_RTTI is "active." For a full-blown --enable-dbgutil build on Mac OS X, find instdir/LibreOffice.app/Contents -name \*.dylib\* -exec nm -gU {} \; \ wc -l increased from 125541 to 139239. For Linux, an option might be to "activate" SAL_DLLPUBLIC_RTTI only for __clang__ plus !ENABLE_RUNTIME_OPTIMIZATIONS. The set of types marked SAL_DLLPUBLIC_RTTI with this patch (wholesale cppumaker- generated UNO enum, struct, and interface types; plus some IEmbeddedHelper and IUndoManager) is chosen so that a full "make check" on Mac OS X no longer syslogs any dynamic_cast errors to the Console. Change-Id: I42fa6ec01c2503ec24bcd9c0518abb112afa3235
2014-12-07WaE: overriding destructor declaration not explicitly marked 'virtual'Tor Lillqvist
Change-Id: Ie2f07ae8c7b6cdf4ee3f49847b6fbf79895780db
2014-12-07Forward-declare MarkedUndoAction.Kohei Yoshida
Change-Id: I1c36077cada47bacfb8436cf3fb659e47d02da60
2014-12-07Pimplize SfxListUndoAction.Kohei Yoshida
Change-Id: Ic82755788df237c455c802a039881a9d056f4df2