diff options
author | Kohei Yoshida <kohei.yoshida@collabora.com> | 2014-02-14 12:28:03 -0500 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-02-15 04:56:42 +0000 |
commit | 6fe0d38b6dc150544da30819da90a0c32e49f58a (patch) | |
tree | 5022144418448a8715f78e0d11ce6b1112041f76 | |
parent | b34c818bae7131c94f4a29257413c71536b8374d (diff) |
fdo#73773: Check if the *document* is closing, not the *app*.
Otherwise it would crash if the app has multiple document instances open
and only one of them is being closed.
Change-Id: Ib6e370037ab6097c9c6eff8035249663944b3a6c
(cherry picked from commit 76bdf523981d2bd983dac4e01bc5cc934118a73f)
Reviewed-on: https://gerrit.libreoffice.org/8053
Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r-- | sc/source/ui/app/inputhdl.cxx | 8 | ||||
-rw-r--r-- | sc/source/ui/inc/inputhdl.hxx | 3 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwsh4.cxx | 3 |
3 files changed, 13 insertions, 1 deletions
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx index 0c6bbc51a1cb..d96431229105 100644 --- a/sc/source/ui/app/inputhdl.cxx +++ b/sc/source/ui/app/inputhdl.cxx @@ -299,6 +299,11 @@ handle_r1c1: } } +void ScInputHandler::SetDocumentDisposing( bool b ) +{ + mbDocumentDisposing = b; +} + static void lcl_Replace( EditView* pView, const OUString& rNewStr, const ESelection& rOldSel ) { if ( pView ) @@ -519,6 +524,7 @@ ScInputHandler::ScInputHandler() bProtected( false ), bCellHasPercentFormat( false ), bLastIsSymbol( false ), + mbDocumentDisposing(false), nValidation( 0 ), eAttrAdjust( SVX_HOR_JUSTIFY_STANDARD ), aScaleX( 1,1 ), @@ -542,7 +548,7 @@ ScInputHandler::~ScInputHandler() // Wenn dies der Applikations-InputHandler ist, wird der dtor erst nach SfxApplication::Main // gerufen, darf sich also auf keine Sfx-Funktionen mehr verlassen - if ( !SFX_APP()->IsDowning() ) // inplace + if (!mbDocumentDisposing) // inplace EnterHandler(); // Eingabe noch abschliessen if (SC_MOD()->GetRefInputHdl()==this) diff --git a/sc/source/ui/inc/inputhdl.hxx b/sc/source/ui/inc/inputhdl.hxx index 1c2d9c36b278..528d5c1e8d6c 100644 --- a/sc/source/ui/inc/inputhdl.hxx +++ b/sc/source/ui/inc/inputhdl.hxx @@ -100,6 +100,7 @@ private: bool bProtected:1; bool bCellHasPercentFormat:1; bool bLastIsSymbol:1; + bool mbDocumentDisposing:1; sal_uLong nValidation; SvxCellHorJustify eAttrAdjust; @@ -256,6 +257,8 @@ public: // actually private, public for SID_INPUT_SUM void InitRangeFinder(const OUString& rFormula); + void SetDocumentDisposing( bool b ); + static void SetAutoComplete(bool bSet) { bAutoComplete = bSet; } }; diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx index 1c73dbe79fee..ec192dab5766 100644 --- a/sc/source/ui/view/tabvwsh4.cxx +++ b/sc/source/ui/view/tabvwsh4.cxx @@ -1739,6 +1739,9 @@ ScTabViewShell::~ScTabViewShell() // alles auf NULL, falls aus dem TabView-dtor noch darauf zugegriffen wird //! (soll eigentlich nicht !??!?!) + if (pInputHandler) + pInputHandler->SetDocumentDisposing(true); + DELETEZ(pFontworkBarShell); DELETEZ(pExtrusionBarShell); DELETEZ(pCellShell); |