forked from AuroraMiddleware/gtk
64ab82c403
ImmIsIME() doesn't work (always returns TRUE) since Vista. Use ITfActiveLanguageProfileNotifySink to detect TSF changes, which are equal to IME changes for us. Also make sure that IMMultiContext re-loads the IM when keyboard layout changes, otherwise there's a subtle bug that could happen: * Run GTK application with non-IME layout (US, for example) * Focus on an editable widget (GtkEntry, for example) * IM Context is initialized to use the simple IM * Switch to an IME layout (such as Korean) * Start typing * Since IME module is not loaded yet, keypresses are handled by a default MS IME handler * Once IME commits a character, GDK will get a WM_KEYDOWN, which will trigger a GdkKeyEvent, which will be handled by an event filter in IM Context, which will finally re-evaluate its status and load IME, and only after that GTK will get to handle IME by itself - but by that point input would already be broken. To avoid this we can emit a dummy event (with Void keyval), which will cause IM Context to load the appropriate module immediately.
54 lines
1.8 KiB
C
54 lines
1.8 KiB
C
/* GDK - The GIMP Drawing Kit
|
|
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
|
* Copyright (C) 1998-2002 Tor Lillqvist
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/*
|
|
* Modified by the GTK+ Team and others 1997-2000. See the AUTHORS
|
|
* file for a list of people on the GTK+ Team. See the ChangeLog
|
|
* files for a list of changes. These files are distributed with
|
|
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
|
|
*/
|
|
|
|
#include "config.h"
|
|
#include "gdktypes.h"
|
|
#include "gdkprivate-win32.h"
|
|
|
|
GdkDisplay *_gdk_display = NULL;
|
|
GdkDeviceManagerWin32 *_gdk_device_manager = NULL;
|
|
|
|
gint _gdk_offset_x, _gdk_offset_y;
|
|
|
|
HDC _gdk_display_hdc;
|
|
HINSTANCE _gdk_dll_hinstance;
|
|
HINSTANCE _gdk_app_hmodule;
|
|
|
|
gint _gdk_input_ignore_core;
|
|
|
|
HKL _gdk_input_locale;
|
|
gboolean _gdk_input_locale_is_ime = FALSE;
|
|
UINT _gdk_input_codepage;
|
|
|
|
gint _gdk_input_ignore_wintab = FALSE;
|
|
gint _gdk_max_colors = 0;
|
|
|
|
GdkWin32ModalOpKind _modal_operation_in_progress = GDK_WIN32_MODAL_OP_NONE;
|
|
HWND _modal_move_resize_window = NULL;
|
|
|
|
/* The singleton clipdrop object pointer */
|
|
GdkWin32Clipdrop *_win32_clipdrop = NULL;
|
|
|
|
GThread *_win32_main_thread = NULL; |