Commit Graph

25 Commits

Author SHA1 Message Date
Chun-wei Fan
1ece556200 gtkimcontextime.c: Fix Korean input
Commit c255ba68 inadvertently introduced a regression that broke Korean
text input because the changes there resulted that only the last input
string that we have from ImmGetCompositionStringW() for each time the
commit signal is emitted is kept, and also as a result the final Korean
character that is input by hitting space is also lost as a result, as we
didn't check for whether we are done with preediting.

Fix these issues by doing the following when we receive the
WM_IME_COMPOSITION message with GCS_RESULTSTR from Windows:
-Do not emit the commit signal during WM_IME_ENDCOMPOSITION, and...
-Emit the commit signal anyways, as we did before, c255ba68, however...
-We still save up the string to commit, because we need to re-compute
 the cursor position when we do ->get_preedit_string(), which needs to
 take the GCS_RESULTSTR string we get from WM_IME_COMPOSITION into
 account as well, so that we avoid getting the Pango criticals that
 occur during Chinese (and most likely Japanese) input as the cursor
 position is out-of-range.

Fixes issue #1350.
2018-10-08 15:55:44 +08:00
Chun-wei Fan
c255ba68fc input/IME: Defer the emit of the "commit" signal
On Windows, when IME is used, each keystroke results in the
WM_IME_COMPOSITION event being sent first.  This means that in our case
when one decides on to accept the input that is in the preedit buffer,
we first get from Windows the WM_IME_COMPOSITION event
(where we emit the commit signal), followed by the WM_IME_ENDCOMPOSITION
event (where we emit the pair of preedit-changed and preedit-end
signals).

Since commit f11f989 (GtkEntry: Remove recompute idle), we do the input
recomputation directly, this will cause a pair of "Pango-WARNING:
Assertion failed: (index >= 0 && index <= layout->length)" being shown,
as gtkentry.c's priv->preedit_length and priv->preedit_cursor was unable
to be reset to 0 in time as a result of the recomputation triggered by
the commit being done before the reset of priv->preedit_length and
priv->preedit_cursor (which are no longer valid as we essentially say
that we are done with the preedit buffer).

As we could only acquire the final string that was entered in this
preedit session when we handle the WM_IME_COMPOSITION event, fix this by
saving up the final string we acquire from Windows IME in UTF-8 when we
handle the WM_IME_COMPOSITION event from Windows, and emit the commit
signal with that string after we emit the preedit-changed and
preedit-end signals when we handle the WM_IME_ENDCOMPOSITION event from
Windows, which comes afterwards.

Also fix the formatting of the code around the parts of the files that
was changed.

https://bugzilla.gnome.org/show_bug.cgi?id=787142
2017-10-30 14:33:23 +08:00
Chun-wei Fan
d07f00d98f CJK Windows: Silence gtk_style_context_set_state() warnings
We need to update calls to gtk_style_context_set_state() in
gtkimcontextime.c, so that the state passed into that function would be in
line with what GtkStyleContext expects, due to updates in the CSS
machinery, as outlined in this link[1], which is based on information in
in Matthias' blog[2].

Doing so will silence the gtk_style_context_set_state() warnings, which is
emitted when a widget uses gtkimcontext on Windows with CJK IME, which will
in turn call gtkimcontextime.

[1]: http://feaneron.com/2016/01/04/quick-guide-to-port-an-app-for-gtk-3-20/
[2]: https://blogs.gnome.org/mclasen/2015/11/20/a-gtk-update/

https://bugzilla.gnome.org/show_bug.cgi?id=760314
2016-01-08 23:37:31 +08:00
Руслан Ижбулатов
694c8d32d5 Fix various warnings about unused things
https://bugzilla.gnome.org/show_bug.cgi?id=734735
2014-08-13 23:38:47 +00:00
Chun-wei Fan
3b82b97e73 GTK-Win32: Avoid Using Deprecated API
Replace the deprecated API calls with the updated APIs, and fix the build
of modules/input/gtkimcontextime.c, as we really needed
gdk/gdkkeysyms-compat.h (gdk/gdkkeysyms.h was already included)

https://bugzilla.gnome.org/show_bug.cgi?id=705068
2013-08-14 08:05:53 +08:00
Carlos Garnacho
493ca20912 ime: Add builtin handling of dead keys
The IME input method has been both ignoring keypresses of
non-spacing characters (ditching these as non displayable),
and not letting IME do anything about those.

Even though, the sparse documentation on IMM/IME seems to
hint that applications can't pipe non-spacing characters to
the input method manager, and experimentation shown that
those characters are indeed handled differently than how
it'd be expected.

Then, add basic handling of dead keys on the IME input method
itself , as it's not mutually exclusive with regular keymaps
with dead keys.

https://bugzilla.gnome.org/show_bug.cgi?id=704937
2013-07-29 20:04:45 -04:00
Chun-wei Fan
656ec39c29 Bug 668239 - texts disappear when notebook switch page at zh_CN locate
In gtkimcontextime.c, use gdk_win32_window_get_impl_hwnd() to get to
the impl's existing native window instead of GDK_WINDOW_HWND() which
implicitly ensures a native window for the widget itself. This seems
to work around whatever GDK problem with native subwindows and fixes
the bug.

This is based on Michael Natterer's fix for gtk-2-24.
2012-12-13 11:03:56 +08:00
Matthias Clasen
352c7f5120 Avoid infinite recursion in the ime input module 2012-11-19 09:30:44 -05:00
Chun-wei Fan
a866ed7378 gtkimcontexttime.c: Check context_ime->client_window is not NULL
Be a bit more careful in get_pango_attr_list() and
get_utf8_preedit_string() to ensure that the client_window is properly
created before proceeding, to avoid access violation/segfault crashes on
Windows with IME installed, especially when running the pickers demo.

https://bugzilla.gnome.org/show_bug.cgi?id=682919
2012-09-03 16:03:58 -04:00
Javier Jardón
9d0febc9a6 Change FSF Address 2012-02-27 17:06:11 +00:00
Kazuki Iwamoto
74f57ee04d Avoid a crash in gtk_im_context_ime_reset
When GTK+ runs with inputim-ime.dll module, there is NULL
pointer reference. Because "context_ime->client_window" may
be NULL in gtk_im_context_ime_reset.

https://bugzilla.gnome.org/show_bug.cgi?id=644906
2011-06-06 19:33:23 -04:00
Fridrich Štrba
a606ea62a1 Fix win32 build 2011-01-11 17:28:37 +01:00
Tor Lillqvist
f76fddb8a7 Use accessor functions in Win32-only code 2010-09-09 11:09:55 +03:00
Tor Lillqvist
4aa75fcf43 Revert "Use wide character API in the Windows IME module"
Ha, pango_win32_font_logfontw hasn't been exported from libpangowin32
after all due to a typo. This will have to wait. And actually
libpangowin32 is supposed to be deprecated surely, so that
functionality should be moved to libpangocairo or something.

This reverts commit 804effba99.
2010-06-27 23:44:14 +03:00
Tor Lillqvist
804effba99 Use wide character API in the Windows IME module 2010-06-27 23:21:41 +03:00
Nicola Fontana
1e1131c959 Do not use static GTypeInfo and GInterfaceInfo
Either g_type_register_static_simple (used by G_DEFINE_TYPE_EXTENDED)
and G_IMPLEMENT_INTERFACE use automatic variables for GTypeInfo and
GInterfaceInfo structs, while tutorials and source code often use
static variables. This commit consistently adopts the former method.

https://bugzilla.gnome.org/show_bug.cgi?id=600158
2009-11-06 01:21:09 +01:00
Sven Neumann
e3e126ae9e modules/input/gtkimcontextime.c modules/input/gtkimcontextmultipress.c use
2008-08-11  Sven Neumann  <sven@gimp.org>

	* modules/input/gtkimcontextime.c
	* modules/input/gtkimcontextmultipress.c
	* modules/input/gtkimcontextxim.c: use canonical signal names.


svn path=/trunk/; revision=21070
2008-08-11 14:55:31 +00:00
Michael Natterer
d6ef4416f5 modules/input/gtkimcontextime.h modules/input/gtkimcontextmultipress.h
2008-05-28  Michael Natterer  <mitch@imendio.com>

	* modules/input/gtkimcontextime.h
	* modules/input/gtkimcontextmultipress.h
	* modules/input/gtkimcontextthai.h
	* modules/input/gtkimcontextxim.h: include <gtk/gtk.h> instead of
	individual files.

	* modules/input/gtkimcontextime.c
	* modules/input/gtkimcontextmultipress.c
	* modules/input/gtkimcontextxim.c
	* modules/input/imam-et.c
	* modules/input/imcedilla.c
	* modules/input/imcyrillic-translit.c
	* modules/input/iminuktitut.c
	* modules/input/imipa.c
	* modules/input/imti-er.c
	* modules/input/imti-et.c
	* modules/input/imviqr.c: ditto. Some minor cleanups like moving
	"gtk/gtkintl.h" to the end of includes.


svn path=/trunk/; revision=20200
2008-05-27 23:55:28 +00:00
Michael Natterer
53dd05475b include <pango/pango.h> instead of <pango/pango-layout.h>.
2008-04-25  Michael Natterer  <mitch@imendio.com>

	* gtk/gtkprintcontext.h: include <pango/pango.h> instead of
	<pango/pango-layout.h>.

	* gtk/gtkiconfactory.c
	* gtk/gtkimmodule.c
	* gtk/gtkmain.c
	* gtk/gtkmodules.c
	* gtk/queryimmodules.c: remove inclusion of single files from
	pango, none of them was actually needed.

	* modules/input/gtkimcontextime.c: include <pango/pango.h> instead of
	<pango/pango-utils.h>.


svn path=/trunk/; revision=20042
2008-04-25 15:18:07 +00:00
Tor Lillqvist
8a5d05e253 Use the wide character version of ImmGetCompositionString() here, too.
2005-02-03  Tor Lillqvist  <tml@novell.com>

	* modules/input/gtkimcontextime.c (get_pango_attr_list): Use the
	wide character version of ImmGetCompositionString() here,
	too. (#165278, Takuro Ashie)
2005-02-03 20:51:48 +00:00
Matthias Clasen
a1178ee76d Prevent double commits, don't commit when Ctrl is present. (#160376,
2004-12-06  Matthias Clasen  <mclasen@redhat.com>

	* modules/input/gtkimcontextime.c: Prevent double commits,
	don't commit when Ctrl is present.  (#160376, Kazuki IWAMOTO)
2004-12-06 05:21:39 +00:00
Manish Singh
54b45a19b9 modules/engines/ms-windows/msw_rc_style.c
Fri Nov 19 15:18:51 2004  Manish Singh  <yosh@gimp.org>

        * modules/engines/ms-windows/msw_rc_style.c
        * modules/engines/ms-windows/msw_style.c
        * modules/engines/ms-windows/msw_theme_main.c
        * modules/engines/pixbuf/pixbuf-main.c
        * modules/engines/pixbuf/pixbuf-rc-style.c
        * modules/input/gtkimcontextime.c
        * modules/input/gtkimcontextxim.c
        * modules/input/imam-et.c
        * modules/input/imcedilla.c
        * modules/input/imcyrillic-translit.c
        * modules/input/iminuktitut.c
        * modules/input/imipa.c
        * modules/input/imthai-broken.c
        * modules/input/imti-er.c
        * modules/input/imti-et.c
        * modules/input/imviqr.c
        * tests/prop-editor.c
        * tests/testentrycompletion.c
        * tests/testfilechooser.c
        * tests/testmerge.c
        * tests/testtoolbar.c
        * tests/testtreecolumns.c
        * tests/testtreeview.c: get rid of unnecessary casts.

        * tests/testgtk.c (create_labels): add GTK_LABEL() casts for
        gtk_label_set_ellipsize() calls.

        * tests/testicontheme.c (main): remove unused pixbuf variable.
2004-11-19 23:30:47 +00:00
Tor Lillqvist
8439956a9c Set _gdk_input_ignore_wintab to FALSE, thus enabling tablet input by
2004-10-01  Tor Lillqvist  <tml@iki.fi>

	* gdk/win32/gdkglobals-win32.c: Set _gdk_input_ignore_wintab to
	FALSE, thus enabling tablet input by default.

	* gdk/win32/gdkmain-win32.c (_gdk_windowing_args): Accept the
	--use-wintab option again (but without effect, as this is now the
	default, see above). (#153788)

	* modules/input/gtkimcontextime.c: Numerous changes.

	Remove the ifdef UNICODE conditionals. Always use the
	wide-character Imm* API. It is present also in Windows 98 and
	Me. (Not Windows 95, but I think we don't care about that.) Using
	the multibyte API wouldn't work anyway on systems where the system
	codepage doesn't support the language the user uses an IME for, so
	for instance I wouldn't be able to test this module on my English
	Windows 2000 although I do have C, J and K IMEs available.

	Guard against IMM not being active, always check ImmGetContext()
	returning NULL. Work to some extent even without any IME. Fixes
	#153800 at least partially.

	* modules/input/imime.c (ime_info): Rename to "ime" to match the
	naming pattern of other input modules. Make it default for
	ja:ko:zh only.
2004-10-01 19:53:55 +00:00
Tor Lillqvist
26526ea581 Link with -limm32.
2004-08-30  Tor Lillqvist  <tml@iki.fi>

	* modules/input/Makefile.am (im_ime_la_LIBADD): Link with -limm32.

	* modules/input/gtkimcontextime.c: Use quotes in #includes, to
	find headers when building inside GTK+ sources.
2004-08-30 04:53:23 +00:00
Matthias Clasen
24dd1030f0 Build imime.la on Windows.
2004-08-26  Matthias Clasen  <mclasen@redhat.com>

	* modules/input/Makefile.am: Build imime.la on Windows.

	* modules/input/gtkimcontextime.h:
	* modules/input/gtkimcontextime.c:
	* modules/input/imime.c:
	* modules/input/imm-extra.h: Add the IME input method for Win32
	written by Takuro Ashie and Kazuko IWAMOTO. The code was previously
	hosted at http://sourceforge.jp/projects/imime.  (#135195)
2004-08-26 14:29:25 +00:00