[libreoffice/f18] Resolves: rhbz#890474 loss of IM support on losing focus
Caolán McNamara
caolanm at fedoraproject.org
Thu May 23 09:12:14 UTC 2013
commit 7163221702d2995cb93d4478a4ab897cce72b9a5
Author: Caolán McNamara <caolanm at redhat.com>
Date: Thu May 23 10:11:35 2013 +0100
Resolves: rhbz#890474 loss of IM support on losing focus
...o-63802-return-true-if-we-have-known-empt.patch | 119 ++++++++++++++++++++
libreoffice.spec | 9 ++-
2 files changed, 127 insertions(+), 1 deletions(-)
---
diff --git a/0001-Resolves-fdo-63802-return-true-if-we-have-known-empt.patch b/0001-Resolves-fdo-63802-return-true-if-we-have-known-empt.patch
new file mode 100644
index 0000000..8ccc91d
--- /dev/null
+++ b/0001-Resolves-fdo-63802-return-true-if-we-have-known-empt.patch
@@ -0,0 +1,119 @@
+From 6264733282ff93d8bbb561f67b880424f31a1f7d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm at redhat.com>
+Date: Thu, 25 Apr 2013 14:04:56 +0100
+Subject: [PATCH] Resolves: fdo#63802 return true if we have known empty
+ context
+
+i.e. false for "we can't provide context", and true for
+"we can provide context, even if there isn't any"
+
+Still looks to me that there's a bug in the si-phonetic-dynamic
+im (or something in the stack) that assumes that returning
+false once means it will always return false and give up
+for ever
+
+fix indent while I'm at it
+
+also let si-phonetic-dynamic survive libreoffice losing focus and regain it
+cycle and still use surrounding text. It should be safe to report that we can
+provide surrounding text but there isn't any during the time window when there
+is no focus window, because the focus in event was received but it hasn't
+arrived yet because that happens on a postuserevent.
+
+(cherry picked from commit 21fb092398fb21256b0e546e7f38c5e6de4654f2)
+
+Change-Id: I0481c42208953f2a0618aaed7b0d9e9f3e7bda07
+Reviewed-on: https://gerrit.libreoffice.org/3608
+Reviewed-by: Miklos Vajna <vmiklos at suse.cz>
+Tested-by: Miklos Vajna <vmiklos at suse.cz>
+---
+ vcl/unx/gtk/window/gtkframe.cxx | 38 +++++++++++++++++++-------------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/vcl/unx/gtk/window/gtkframe.cxx b/vcl/unx/gtk/window/gtkframe.cxx
+index 03f8c59..eb87e74 100644
+--- a/vcl/unx/gtk/window/gtkframe.cxx
++++ b/vcl/unx/gtk/window/gtkframe.cxx
+@@ -4223,13 +4223,9 @@ uno::Reference<accessibility::XAccessibleEditableText>
+ return uno::Reference< accessibility::XAccessibleEditableText >();
+ }
+
+-static uno::Reference<accessibility::XAccessibleEditableText> lcl_GetxText()
++static uno::Reference<accessibility::XAccessibleEditableText> lcl_GetxText(Window *pFocusWin)
+ {
+ uno::Reference<accessibility::XAccessibleEditableText> xText;
+- Window* pFocusWin = ImplGetSVData()->maWinData.mpFocusWin;
+- if (!pFocusWin)
+- return xText;
+-
+ try
+ {
+ uno::Reference< accessibility::XAccessible > xAccessible( pFocusWin->GetAccessible( true ) );
+@@ -4238,36 +4234,39 @@ static uno::Reference<accessibility::XAccessibleEditableText> lcl_GetxText()
+ }
+ catch(const uno::Exception& e)
+ {
+- g_warning( "Exception in getting input method surrounding text" );
+ }
+ return xText;
+ }
+
+ gboolean GtkSalFrame::IMHandler::signalIMRetrieveSurrounding( GtkIMContext* pContext, gpointer /*im_handler*/ )
+ {
+- uno::Reference<accessibility::XAccessibleEditableText> xText = lcl_GetxText();
++ Window *pFocusWin = Application::GetFocusWindow();
++ if (!pFocusWin)
++ return true;
+
++ uno::Reference<accessibility::XAccessibleEditableText> xText = lcl_GetxText(pFocusWin);
+ if (xText.is())
+ {
+ sal_uInt32 nPosition = xText->getCaretPosition();
+- rtl::OUString sAllText = xText->getText();
+- if (sAllText.isEmpty())
+- return sal_False;
+- rtl::OString sUTF = rtl::OUStringToOString(sAllText, RTL_TEXTENCODING_UTF8);
+- rtl::OUString sCursorText(sAllText.copy(0, nPosition));
+- gtk_im_context_set_surrounding(pContext, sUTF.getStr(), sUTF.getLength(),
+- rtl::OUStringToOString(sCursorText, RTL_TEXTENCODING_UTF8).getLength());
+- return sal_True;
++ OUString sAllText = xText->getText();
++ OString sUTF = OUStringToOString(sAllText, RTL_TEXTENCODING_UTF8);
++ OUString sCursorText(sAllText.copy(0, nPosition));
++ gtk_im_context_set_surrounding(pContext, sUTF.getStr(), sUTF.getLength(),
++ OUStringToOString(sCursorText, RTL_TEXTENCODING_UTF8).getLength());
++ return true;
+ }
+
+- return sal_False;
++ return false;
+ }
+
+ gboolean GtkSalFrame::IMHandler::signalIMDeleteSurrounding( GtkIMContext*, gint offset, gint nchars,
+ gpointer /*im_handler*/ )
+ {
+- uno::Reference<accessibility::XAccessibleEditableText> xText = lcl_GetxText();
++ Window *pFocusWin = Application::GetFocusWindow();
++ if (!pFocusWin)
++ return true;
+
++ uno::Reference<accessibility::XAccessibleEditableText> xText = lcl_GetxText(pFocusWin);
+ if (xText.is())
+ {
+ sal_uInt32 nPosition = xText->getCaretPosition();
+@@ -4282,10 +4282,10 @@ gboolean GtkSalFrame::IMHandler::signalIMDeleteSurrounding( GtkIMContext*, gint
+ nDeleteEnd = xText->getCharacterCount();
+
+ xText->deleteText(nDeletePos, nDeleteEnd);
+- return sal_True;
++ return true;
+ }
+
+- return sal_False;
++ return false;
+ }
+
+ Size GtkSalDisplay::GetScreenSize( int nDisplayScreen )
+--
+1.8.1.2
+
diff --git a/libreoffice.spec b/libreoffice.spec
index 67cc105..c246778 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -44,7 +44,7 @@ Summary: Free Software Productivity Suite
Name: libreoffice
Epoch: 1
Version: %{libo_version}.2
-Release: 6%{?libo_prerelease}%{?dist}
+Release: 7%{?libo_prerelease}%{?dist}
License: (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0
Group: Applications/Productivity
URL: http://www.documentfoundation.org/develop
@@ -264,6 +264,7 @@ Patch42: 0001-rhbz-954991-Avoid-static-data-causing-trouble-at-exi.patch
Patch43: 0001-resolved-rhbz-919020-Basic-CDbl-and-CSng-scan-locali.patch
Patch44: 0001-resolved-rhbz-918544-do-not-attempt-to-access-non-ex.patch
Patch45: 0001-Related-rhbz-761009-lp-766153-lp-892904-HandleFontOp.patch
+Patch46: 0001-Resolves-fdo-63802-return-true-if-we-have-known-empt.patch
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%define instdir %{_libdir}
@@ -1021,6 +1022,7 @@ mv -f redhat.soc extras/source/palettes/standard.soc
%patch43 -p1 -b .rhbz-919020-Basic-CDbl-and-CSng-scan-locali.patch
%patch44 -p1 -b .rhbz-918544-do-not-attempt-to-access-non-ex.patch
%patch45 -p1 -b .rhbz-761009-lp-766153-lp-892904-HandleFontOp.patch
+%patch46 -p1 -b .fdo-63802-return-true-if-we-have-known-empt.patch
# TODO: check this
# these are horribly incomplete--empty translations and copied english
@@ -2290,6 +2292,11 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
%endif
%changelog
+* Thu May 23 2013 Caolán McNamara <caolanm at redhat.com> - 1:3.6.6.2-7
+- Resolves: rhbz#890474 some IMs take a ret of false to mean "no
+ support for surrounding text" rather than "no surrounding text
+ at this point"
+
* Thu May 16 2013 Caolán McNamara <caolanm at redhat.com> - 1:3.6.6.2-6
- Resolves: rhbz#963276 font options cache crash
More information about the scm-commits
mailing list