summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohei Yoshida <kohei.yoshida@collabora.com>2014-02-14 12:28:03 -0500
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2014-02-18 00:21:07 +0000
commit3cc0ed80291b521375d00c1e0a15aa66e712ced6 (patch)
treef594ffcee99d655d4993adeaa3a97cafa940bc13
parent30363f94b94b183f4e9b0f6d9699e76f398154dc (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/8054 Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Jacobo Aragunde Pérez <jaragunde@igalia.com> Reviewed-by: Jacobo Aragunde Pérez <jaragunde@igalia.com>
-rw-r--r--sc/source/ui/app/inputhdl.cxx8
-rw-r--r--sc/source/ui/inc/inputhdl.hxx3
-rw-r--r--sc/source/ui/view/tabvwsh4.cxx3
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);