summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2014-01-12 13:24:51 +0100
committerBram Moolenaar <Bram@vim.org>2014-01-12 13:24:51 +0100
commitb0d5c96133f894c102eb695fcd7d93a54028cc99 (patch)
tree1e62f679916a37e46f45beb79a80db18bc35a5ee
parent78cf3f0de90613cc8621f806444120ee3b12b507 (diff)
updated for version 7.4.142v7.4.142
Problem: On MS-Windows 8 IME input doen't work correctly. Solution: Work around the problem. (Nobuhiro Takasaki)
-rw-r--r--src/os_win32.c71
-rw-r--r--src/version.c2
2 files changed, 30 insertions, 43 deletions
diff --git a/src/os_win32.c b/src/os_win32.c
index 4feb69791a..e9ec5f7c06 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -234,56 +234,42 @@ static char_u *exe_path = NULL;
/*
* Version of ReadConsoleInput() that works with IME.
+ * Works around problems on Windows 8.
*/
static BOOL
read_console_input(
- HANDLE hConsoleInput,
- PINPUT_RECORD lpBuffer,
- DWORD nLength,
- LPDWORD lpNumberOfEventsRead)
+ HANDLE hInput,
+ INPUT_RECORD *lpBuffer,
+ DWORD nLength,
+ LPDWORD lpEvents)
{
enum
{
- IRSIZE = 10, /* rough value */
+ IRSIZE = 10
};
- static INPUT_RECORD irCache[IRSIZE];
+ static INPUT_RECORD s_irCache[IRSIZE];
static DWORD s_dwIndex = 0;
static DWORD s_dwMax = 0;
-
- if (hConsoleInput == NULL || lpBuffer == NULL)
- return ReadConsoleInput(hConsoleInput, lpBuffer, nLength,
- lpNumberOfEventsRead);
-
- if (nLength == -1)
- {
- if (s_dwMax == 0)
- {
- PeekConsoleInput(hConsoleInput, lpBuffer, 1, lpNumberOfEventsRead);
- if (*lpNumberOfEventsRead == 0)
- return FALSE;
- ReadConsoleInput(hConsoleInput, irCache, IRSIZE, &s_dwMax);
- s_dwIndex = 0;
- }
- ((PINPUT_RECORD)lpBuffer)[0] = irCache[s_dwIndex];
- *lpNumberOfEventsRead = 1;
- return TRUE;
- }
+ DWORD dwEvents;
if (s_dwMax == 0)
{
- ReadConsoleInput(hConsoleInput, irCache, IRSIZE, &s_dwMax);
+ if (nLength == -1)
+ return PeekConsoleInput(hInput, lpBuffer, 1, lpEvents);
+ if (!ReadConsoleInput(hInput, s_irCache, IRSIZE, &dwEvents))
+ return FALSE;
s_dwIndex = 0;
- if (s_dwMax == 0)
+ s_dwMax = dwEvents;
+ if (dwEvents == 0)
{
- *lpNumberOfEventsRead = 0;
- return FALSE;
+ *lpEvents = 0;
+ return TRUE;
}
}
-
- ((PINPUT_RECORD)lpBuffer)[0] = irCache[s_dwIndex];
- if (++s_dwIndex == s_dwMax)
+ *lpBuffer = s_irCache[s_dwIndex];
+ if (nLength != -1 && ++s_dwIndex >= s_dwMax)
s_dwMax = 0;
- *lpNumberOfEventsRead = 1;
+ *lpEvents = 1;
return TRUE;
}
@@ -292,13 +278,12 @@ read_console_input(
*/
static BOOL
peek_console_input(
- HANDLE hConsoleInput,
- PINPUT_RECORD lpBuffer,
- DWORD nLength,
- LPDWORD lpNumberOfEventsRead)
+ HANDLE hInput,
+ INPUT_RECORD *lpBuffer,
+ DWORD nLength,
+ LPDWORD lpEvents)
{
- return read_console_input(hConsoleInput, lpBuffer, -1,
- lpNumberOfEventsRead);
+ return read_console_input(hInput, lpBuffer, -1, lpEvents);
}
static void
@@ -585,10 +570,10 @@ static PSETHANDLEINFORMATION pSetHandleInformation;
static BOOL
win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
{
- BOOL bResult;
- LUID luid;
- HANDLE hToken;
- TOKEN_PRIVILEGES tokenPrivileges;
+ BOOL bResult;
+ LUID luid;
+ HANDLE hToken;
+ TOKEN_PRIVILEGES tokenPrivileges;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
diff --git a/src/version.c b/src/version.c
index 1fd98ead21..a468a79c31 100644
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 142,
+/**/
141,
/**/
140,