[Libreoffice-commits] core.git: vcl/inc vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Sun Oct 25 21:03:03 UTC 2020
vcl/inc/unx/gtk/gtkframe.hxx | 1
vcl/unx/gtk3/gtk3gtkframe.cxx | 50 ++++++++++++++++++++++++++++++++++++++++++
vcl/unx/gtk3/gtk3gtkinst.cxx | 48 ++--------------------------------------
3 files changed, 54 insertions(+), 45 deletions(-)
New commits:
commit 41df2d06cc13a1c60a4ea9671535afb8bd55b344
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sat Oct 24 21:12:52 2020 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Sun Oct 25 22:01:58 2020 +0100
Related: tdf#137620 factor out working IMDeleteSurrounding hunk
Change-Id: I7504e8670fb464fe3e76a3d38f1cac39ba2e9208
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104779
Tested-by: Caolán McNamara <caolanm at redhat.com>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index 820d796bf6e5..ad67070f2b0c 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -528,6 +528,7 @@ public:
static gboolean NativeWidgetHelpPressed(GtkAccelGroup*, GObject*, guint,
GdkModifierType, gpointer pFrame);
static OUString GetPreeditDetails(GtkIMContext* pIMContext, std::vector<ExtTextInputAttr>& rInputFlags, sal_Int32& rCursorPos, sal_uInt8& rCursorFlags);
+ static Selection CalcDeleteSurroundingSelection(const OUString& rSurroundingText, int nCursorIndex, int nOffset, int nChars);
void DisallowCycleFocusOut();
bool IsCycleFocusOutDisallowed() const;
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index eb964a790533..7da09d72d375 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -4400,6 +4400,56 @@ gboolean GtkSalFrame::IMHandler::signalIMRetrieveSurrounding( GtkIMContext* pCon
return false;
}
+Selection GtkSalFrame::CalcDeleteSurroundingSelection(const OUString& rSurroundingText, int nCursorIndex, int nOffset, int nChars)
+{
+ Selection aInvalid(-1, -1);
+
+ if (nCursorIndex == -1)
+ return aInvalid;
+
+ // Note that offset and n_chars are in characters not in bytes
+ // which differs from the usage other places in GtkIMContext
+
+ if (nOffset > 0)
+ {
+ while (nOffset && nCursorIndex < rSurroundingText.getLength())
+ {
+ rSurroundingText.iterateCodePoints(&nCursorIndex, 1);
+ --nOffset;
+ }
+ }
+ else if (nOffset < 0)
+ {
+ while (nOffset && nCursorIndex > 0)
+ {
+ rSurroundingText.iterateCodePoints(&nCursorIndex, -1);
+ ++nOffset;
+ }
+ }
+
+ if (nOffset)
+ {
+ SAL_WARN("vcl.gtk", "IM delete-surrounding, unable to move to offset: " << nOffset);
+ return aInvalid;
+ }
+
+ sal_Int32 nCursorEndIndex(nCursorIndex);
+ sal_Int32 nCount(0);
+ while (nCount < nChars && nCursorEndIndex < rSurroundingText.getLength())
+ {
+ rSurroundingText.iterateCodePoints(&nCursorEndIndex, 1);
+ ++nCount;
+ }
+
+ if (nCount != nChars)
+ {
+ SAL_WARN("vcl.gtk", "IM delete-surrounding, unable to select: " << nChars << " characters");
+ return aInvalid;
+ }
+
+ return Selection(nCursorIndex, nCursorEndIndex);
+}
+
gboolean GtkSalFrame::IMHandler::signalIMDeleteSurrounding( GtkIMContext*, gint offset, gint nchars,
gpointer /*im_handler*/ )
{
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 46baaf4bc6cf..6ee16f782503 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -13848,51 +13848,9 @@ public:
OUString sSurroundingText;
sal_Int32 nCursorIndex = pThis->m_pArea->im_context_get_surrounding(sSurroundingText);
- if (nCursorIndex != -1)
- {
- // Note that offset and n_chars are in characters not in bytes
- // which differs from the usage other places in GtkIMContext
-
- if (nOffset > 0)
- {
- while (nOffset && nCursorIndex < sSurroundingText.getLength())
- {
- sSurroundingText.iterateCodePoints(&nCursorIndex, 1);
- --nOffset;
- }
- }
- else if (nOffset < 0)
- {
- while (nOffset && nCursorIndex > 0)
- {
- sSurroundingText.iterateCodePoints(&nCursorIndex, -1);
- ++nOffset;
- }
- }
-
- if (nOffset)
- {
- SAL_WARN("vcl.gtk", "IM delete-surrounding, unable to move to offset: " << nOffset);
- return false;
- }
-
- sal_Int32 nCursorEndIndex(nCursorIndex);
- sal_Int32 nCount(0);
- while (nCount < nChars && nCursorEndIndex < sSurroundingText.getLength())
- {
- sSurroundingText.iterateCodePoints(&nCursorEndIndex, 1);
- ++nCount;
- }
-
- if (nCount != nChars)
- {
- SAL_WARN("vcl.gtk", "IM delete-surrounding, unable to select: " << nChars << " characters");
- return false;
- }
-
- bRet = pThis->m_pArea->im_context_delete_surrounding(Selection(nCursorIndex, nCursorEndIndex));
- }
-
+ Selection aSelection = GtkSalFrame::CalcDeleteSurroundingSelection(sSurroundingText, nCursorIndex, nOffset, nChars);
+ if (aSelection != Selection(-1, -1))
+ bRet = pThis->m_pArea->im_context_delete_surrounding(aSelection);
return bRet;
}
More information about the Libreoffice-commits
mailing list