From 0e0eff2309583ea25b81006b5bc6879b86081a15 Mon Sep 17 00:00:00 2001 From: Ashod Nakashian Date: Thu, 4 Jan 2018 00:06:58 -0500 Subject: lok: send modified status when applying cell-formula before saving Without this, the modified status resulting from applying the cell-formula immediately before saving is lost, since it is clobbered after the save. Change-Id: Ie402812d0fc0528020161fffe57e8220c5abfeb5 Reviewed-on: https://gerrit.libreoffice.org/47366 Tested-by: Jenkins Reviewed-by: Ashod Nakashian --- sc/source/ui/inc/inputhdl.hxx | 1 + sc/source/ui/view/tabvwsha.cxx | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) (limited to 'sc') diff --git a/sc/source/ui/inc/inputhdl.hxx b/sc/source/ui/inc/inputhdl.hxx index 3bc760446b02..96450a842bc9 100644 --- a/sc/source/ui/inc/inputhdl.hxx +++ b/sc/source/ui/inc/inputhdl.hxx @@ -233,6 +233,7 @@ public: bool TakesReturn() const { return ( nTipVisible != nullptr ); } + bool GetModified() const { return bModified; } void SetModified() { bModified = true; } bool GetSelIsRef() const { return bSelIsRef; } diff --git a/sc/source/ui/view/tabvwsha.cxx b/sc/source/ui/view/tabvwsha.cxx index 64aee60e6b09..844eecb01f3a 100644 --- a/sc/source/ui/view/tabvwsha.cxx +++ b/sc/source/ui/view/tabvwsha.cxx @@ -56,6 +56,9 @@ #include #include #include +#include +#include +#include #include @@ -718,7 +721,22 @@ void ScTabViewShell::ExecuteSave( SfxRequest& rReq ) // Finish entering unless 'DontTerminateEdit' is specified, even if a formula is being processed if (bCommitChanges) + { + if (comphelper::LibreOfficeKit::isActive()) + { + // Normally this isn't needed, but in Calc when editing a cell formula + // and manually saving (without changing cells or hitting enter), while + // InputEnterHandler will mark the doc as modified (when it is), because + // we will save the doc immediately afterwards, the modified state event + // is clobbered. To avoid that, we notify all views immediately of the + // modified state, apply the modification, then save the document. + ScInputHandler* pHdl = SC_MOD()->GetInputHdl(); + if (pHdl != nullptr && pHdl->GetModified()) + SfxLokHelper::notifyAllViews(LOK_CALLBACK_STATE_CHANGED, ".uno:ModifiedStatus=true"); + } + SC_MOD()->InputEnterHandler(); + } if ( GetViewData().GetDocShell()->IsDocShared() ) { -- cgit