summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2013-12-05 01:50:38 +0100
committerEike Rathke <erack@redhat.com>2013-12-05 02:15:19 +0100
commit4bea81272d502c044febc419a16c86bbdadf5513 (patch)
tree32a2e50b232b77212c170c0f177b991305f4c719
parentc6e36556c14612aa1eaf976efc10db6c88e23fb0 (diff)
resolved fdo#71667 and fdo#72278, fdo#69971 follow-up fix
a9d85d62a889288b17899c8defc020da487d8b36 used ScInputHandler::EnterHandler() to reset all sort of things related to input EditEngine, but that is a handler for Enter and does not enter a handler and actually attempts to finalize input, which lead to various unwanted side effects. Introduced ScInputHandler::InputTurnOffWinEngine() as only the input bar window EditEngine needs to be reset in the window switching case (which EnterHandler also does hence it did prevent that bug). The approach could be polished with further refinement but most importantly fixes the actual problems now. Change-Id: I9a0bc452b49ba11a3313cafbc1e5972f41dc65c7 (cherry picked from commit dfd1a47a38dac743f9ed0f1e9507714bac027d35)
-rw-r--r--sc/inc/scmod.hxx1
-rw-r--r--sc/source/ui/app/inputhdl.cxx14
-rw-r--r--sc/source/ui/app/scmod.cxx7
-rw-r--r--sc/source/ui/formdlg/formula.cxx2
-rw-r--r--sc/source/ui/inc/inputhdl.hxx1
5 files changed, 24 insertions, 1 deletions
diff --git a/sc/inc/scmod.hxx b/sc/inc/scmod.hxx
index a871663f2102..5d7572e0dea9 100644
--- a/sc/inc/scmod.hxx
+++ b/sc/inc/scmod.hxx
@@ -217,6 +217,7 @@ SC_DLLPUBLIC void SetAppOptions ( const ScAppOptions& rO
void InputGetSelection( xub_StrLen& rStart, xub_StrLen& rEnd );
void InputSetSelection( xub_StrLen nStart, xub_StrLen nEnd );
void InputReplaceSelection( const OUString& rStr );
+ void InputTurnOffWinEngine();
OUString InputGetFormulaStr();
void ActivateInputWindow( const OUString* pStr = NULL,
sal_Bool bMatrix = false );
diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index 6f901ced2534..8001e678489d 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -3906,6 +3906,20 @@ void ScInputHandler::InputReplaceSelection( const OUString& rStr )
bModified = true;
}
+void ScInputHandler::InputTurnOffWinEngine()
+{
+ bInOwnChange = true; // disable ModifyHdl (reset below)
+
+ eMode = SC_INPUT_NONE;
+ /* TODO: it would be better if there was some way to reset the input bar
+ * engine instead of deleting and having it recreate through
+ * GetFuncEditView(), but first least invasively let this fix fdo#71667 and
+ * fdo#72278 without reintroducing fdo#69971. */
+ StopInputWinEngine(true);
+
+ bInOwnChange = false;
+}
+
//========================================================================
// ScInputHdlState
//========================================================================
diff --git a/sc/source/ui/app/scmod.cxx b/sc/source/ui/app/scmod.cxx
index b4398e570b79..7dcbc9ff9f23 100644
--- a/sc/source/ui/app/scmod.cxx
+++ b/sc/source/ui/app/scmod.cxx
@@ -1543,6 +1543,13 @@ void ScModule::InputReplaceSelection( const OUString& rStr )
pHdl->InputReplaceSelection( rStr );
}
+void ScModule::InputTurnOffWinEngine()
+{
+ ScInputHandler* pHdl = GetInputHdl();
+ if (pHdl)
+ pHdl->InputTurnOffWinEngine();
+}
+
OUString ScModule::InputGetFormulaStr()
{
ScInputHandler* pHdl = GetInputHdl();
diff --git a/sc/source/ui/formdlg/formula.cxx b/sc/source/ui/formdlg/formula.cxx
index 70571d23e22e..1503a8ccaef0 100644
--- a/sc/source/ui/formdlg/formula.cxx
+++ b/sc/source/ui/formdlg/formula.cxx
@@ -623,7 +623,7 @@ void ScFormulaDlg::setCurrentFormula(const OUString& _sReplacement)
//ScMultiTextWnd::Paint a new editengine will have been created via
//GetEditView with its default Modification handler enabled. So ensure
//its off when we will access it via InputReplaceSelection
- pScMod->InputEnterHandler();
+ pScMod->InputTurnOffWinEngine();
}
pScMod->InputReplaceSelection(_sReplacement);
}
diff --git a/sc/source/ui/inc/inputhdl.hxx b/sc/source/ui/inc/inputhdl.hxx
index 73e97c4a4337..1c2d9c36b278 100644
--- a/sc/source/ui/inc/inputhdl.hxx
+++ b/sc/source/ui/inc/inputhdl.hxx
@@ -233,6 +233,7 @@ public:
void InputGetSelection ( xub_StrLen& rStart, xub_StrLen& rEnd );
void InputSetSelection ( xub_StrLen nStart, xub_StrLen nEnd );
void InputReplaceSelection ( const OUString& rStr );
+ void InputTurnOffWinEngine();
bool IsFormulaMode() const { return bFormulaMode; }
ScInputWindow* GetInputWindow() { return pInputWin; }