sc/source/ui/app/inputhdl.cxx |    2 -
 sc/source/ui/app/inputwin.cxx |   45 ++++++++++++++++++++++++++++++++----------
 2 files changed, 36 insertions(+), 11 deletions(-)

New commits:
commit a6586ab2e6a5bb352f2958067cbe88095b6e2ada
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Jul 14 16:52:23 2022 +0200
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Tue Jul 26 16:54:49 2022 +0200

    lok: formulabar: handle mobile IME
    
    Change-Id: I7cb69efaebb42020353133e590a161b2e4bc5210
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137086
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Mert Tumer <mert.tu...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/137457
    Tested-by: Jenkins
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/sc/source/ui/app/inputhdl.cxx b/sc/source/ui/app/inputhdl.cxx
index 56ba5cfd9e72..99b8be0284a8 100644
--- a/sc/source/ui/app/inputhdl.cxx
+++ b/sc/source/ui/app/inputhdl.cxx
@@ -4108,7 +4108,7 @@ void ScInputHandler::InputCommand( const CommandEvent& 
rCEvt )
             {
                 if (pTableView)
                     pTableView->Command( rCEvt );
-                if (pTopView && !comphelper::LibreOfficeKit::isActive())
+                if (pTopView)
                     pTopView->Command( rCEvt );
 
                 if ( rCEvt.GetCommand() == CommandEventId::EndExtTextInput )
diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx
index 395499a683d7..4ecd18c01bbf 100644
--- a/sc/source/ui/app/inputwin.cxx
+++ b/sc/source/ui/app/inputwin.cxx
@@ -412,9 +412,18 @@ void ScInputWindow::StartFormula()
         EditView* pView = mxTextWindow->GetEditView();
         if (pView)
         {
+            sal_Int32 nStartPara = 0, nEndPara = 0;
             if (comphelper::LibreOfficeKit::isActive())
+            {
                 TextGrabFocus();
-            pView->SetSelection( ESelection(0, nStartPos, 0, nEndPos) );
+                if (pViewSh && !pViewSh->isLOKDesktop())
+                {
+                    nStartPara = nEndPara = 
pView->GetEditEngine()->GetParagraphCount() ?
+                        (pView->GetEditEngine()->GetParagraphCount() - 1) : 0;
+                    nStartPos = nEndPos = 
pView->GetEditEngine()->GetTextLen(nStartPara);
+                }
+            }
+            pView->SetSelection(ESelection(nStartPara, nStartPos, nEndPara, 
nEndPos));
             pScMod->InputChanged(pView);
             SetOkCancelMode();
             pView->SetEditEngineUpdateLayout(true);
@@ -1779,10 +1788,26 @@ bool ScTextWnd::Command( const CommandEvent& rCEvt )
         // see vcl/jsdialog/executor.cxx "textselection" event
         const Point* pParaPoint = static_cast<const 
Point*>(rCEvt.GetEventData());
         Point aSelectionStartEnd = rCEvt.GetMousePosPixel();
-        m_xEditView->SetSelection(
-            ESelection((pParaPoint ? pParaPoint->X() : 0), 
aSelectionStartEnd.X(),
-                       (pParaPoint ? pParaPoint->Y() : 0), 
aSelectionStartEnd.Y()));
 
+        sal_Int32 nParaStart, nParaEnd, nPosStart, nPosEnd;
+
+        ScTabViewShell* pViewSh = ScTabViewShell::GetActiveViewShell();
+        if (pViewSh && pViewSh->isLOKMobilePhone())
+        {
+            // We use IME - do not select anything, put cursor at the end
+            nParaStart = nParaEnd = 
m_xEditView->GetEditEngine()->GetParagraphCount() ?
+                (m_xEditView->GetEditEngine()->GetParagraphCount() - 1) : 0;
+            nPosStart = nPosEnd = 
m_xEditView->GetEditEngine()->GetTextLen(nParaStart);
+        }
+        else
+        {
+            nParaStart = pParaPoint ? pParaPoint->X() : 0;
+            nParaEnd = pParaPoint ? pParaPoint->Y() : 0;
+            nPosStart = aSelectionStartEnd.X();
+            nPosEnd = aSelectionStartEnd.Y();
+        }
+
+        m_xEditView->SetSelection(ESelection(nParaStart, nPosStart, nParaEnd, 
nPosEnd));
         SC_MOD()->InputSelection( m_xEditView.get() );
 
         bConsumed = true;
@@ -1944,12 +1969,6 @@ static sal_Int32 findFirstNonMatchingChar(const 
OUString& rStr1, const OUString&
 
 void ScTextWnd::SetTextString( const OUString& rNewString )
 {
-    if (comphelper::LibreOfficeKit::isActive())
-    {
-        ESelection aSel = m_xEditView ? m_xEditView->GetSelection() : 
ESelection();
-        ScInputHandler::LOKSendFormulabarUpdate(SfxViewShell::Current(), 
rNewString, aSel);
-    }
-
     // Ideally it would be best to create on demand the EditEngine/EditView 
here, but... for
     // the initialisation scenario where a cell is first clicked on we end up 
with the text in the
     // inputbar window scrolled to the bottom if we do that here ( because the 
tableview and topview
@@ -2024,6 +2043,12 @@ void ScTextWnd::SetTextString( const OUString& 
rNewString )
         bInputMode = false;
     }
 
+    if (comphelper::LibreOfficeKit::isActive())
+    {
+        ESelection aSel = m_xEditView ? m_xEditView->GetSelection() : 
ESelection();
+        ScInputHandler::LOKSendFormulabarUpdate(SfxViewShell::Current(), 
rNewString, aSel);
+    }
+
     SetScrollBarRange();
     DoScroll();
 }

Reply via email to