8b9a1c
To: vim_dev@googlegroups.com
8b9a1c
Subject: Patch 7.4.142
8b9a1c
Fcc: outbox
8b9a1c
From: Bram Moolenaar <Bram@moolenaar.net>
8b9a1c
Mime-Version: 1.0
8b9a1c
Content-Type: text/plain; charset=UTF-8
8b9a1c
Content-Transfer-Encoding: 8bit
8b9a1c
------------
8b9a1c
8b9a1c
Patch 7.4.142 (after 7.4.137)
8b9a1c
Problem:    On MS-Windows 8 IME input doen't work correctly.
8b9a1c
Solution:   Work around the problem. (Nobuhiro Takasaki)
8b9a1c
Files:	    src/os_win32.c
8b9a1c
8b9a1c
8b9a1c
*** ../vim-7.4.141/src/os_win32.c	2014-01-10 18:16:00.000000000 +0100
8b9a1c
--- src/os_win32.c	2014-01-12 13:23:24.000000000 +0100
8b9a1c
***************
8b9a1c
*** 234,289 ****
8b9a1c
  
8b9a1c
  /*
8b9a1c
   * Version of ReadConsoleInput() that works with IME.
8b9a1c
   */
8b9a1c
      static BOOL
8b9a1c
  read_console_input(
8b9a1c
!     HANDLE hConsoleInput,
8b9a1c
!     PINPUT_RECORD lpBuffer,
8b9a1c
!     DWORD nLength,
8b9a1c
!     LPDWORD lpNumberOfEventsRead)
8b9a1c
  {
8b9a1c
      enum
8b9a1c
      {
8b9a1c
! 	IRSIZE = 10, /* rough value */
8b9a1c
      };
8b9a1c
!     static INPUT_RECORD irCache[IRSIZE];
8b9a1c
      static DWORD s_dwIndex = 0;
8b9a1c
      static DWORD s_dwMax = 0;
8b9a1c
! 
8b9a1c
!     if (hConsoleInput == NULL || lpBuffer == NULL)
8b9a1c
! 	return ReadConsoleInput(hConsoleInput, lpBuffer, nLength,
8b9a1c
! 							lpNumberOfEventsRead);
8b9a1c
! 
8b9a1c
!     if (nLength == -1)
8b9a1c
!     {
8b9a1c
! 	if (s_dwMax == 0)
8b9a1c
! 	{
8b9a1c
! 	    PeekConsoleInput(hConsoleInput, lpBuffer, 1, lpNumberOfEventsRead);
8b9a1c
! 	    if (*lpNumberOfEventsRead == 0)
8b9a1c
! 		return FALSE;
8b9a1c
! 	    ReadConsoleInput(hConsoleInput, irCache, IRSIZE, &s_dwMax);
8b9a1c
! 	    s_dwIndex = 0;
8b9a1c
! 	}
8b9a1c
! 	((PINPUT_RECORD)lpBuffer)[0] = irCache[s_dwIndex];
8b9a1c
! 	*lpNumberOfEventsRead = 1;
8b9a1c
! 	return TRUE;
8b9a1c
!     }
8b9a1c
  
8b9a1c
      if (s_dwMax == 0)
8b9a1c
      {
8b9a1c
! 	ReadConsoleInput(hConsoleInput, irCache, IRSIZE, &s_dwMax);
8b9a1c
  	s_dwIndex = 0;
8b9a1c
! 	if (s_dwMax == 0)
8b9a1c
  	{
8b9a1c
! 	    *lpNumberOfEventsRead = 0;
8b9a1c
! 	    return FALSE;
8b9a1c
  	}
8b9a1c
      }
8b9a1c
! 
8b9a1c
!     ((PINPUT_RECORD)lpBuffer)[0] = irCache[s_dwIndex];
8b9a1c
!     if (++s_dwIndex == s_dwMax)
8b9a1c
  	s_dwMax = 0;
8b9a1c
!     *lpNumberOfEventsRead = 1;
8b9a1c
      return TRUE;
8b9a1c
  }
8b9a1c
  
8b9a1c
--- 234,275 ----
8b9a1c
  
8b9a1c
  /*
8b9a1c
   * Version of ReadConsoleInput() that works with IME.
8b9a1c
+  * Works around problems on Windows 8.
8b9a1c
   */
8b9a1c
      static BOOL
8b9a1c
  read_console_input(
8b9a1c
!     HANDLE	    hInput,
8b9a1c
!     INPUT_RECORD    *lpBuffer,
8b9a1c
!     DWORD	    nLength,
8b9a1c
!     LPDWORD	    lpEvents)
8b9a1c
  {
8b9a1c
      enum
8b9a1c
      {
8b9a1c
! 	IRSIZE = 10
8b9a1c
      };
8b9a1c
!     static INPUT_RECORD s_irCache[IRSIZE];
8b9a1c
      static DWORD s_dwIndex = 0;
8b9a1c
      static DWORD s_dwMax = 0;
8b9a1c
!     DWORD dwEvents;
8b9a1c
  
8b9a1c
      if (s_dwMax == 0)
8b9a1c
      {
8b9a1c
! 	if (nLength == -1)
8b9a1c
! 	    return PeekConsoleInput(hInput, lpBuffer, 1, lpEvents);
8b9a1c
! 	if (!ReadConsoleInput(hInput, s_irCache, IRSIZE, &dwEvents))
8b9a1c
! 	    return FALSE;
8b9a1c
  	s_dwIndex = 0;
8b9a1c
! 	s_dwMax = dwEvents;
8b9a1c
! 	if (dwEvents == 0)
8b9a1c
  	{
8b9a1c
! 	    *lpEvents = 0;
8b9a1c
! 	    return TRUE;
8b9a1c
  	}
8b9a1c
      }
8b9a1c
!     *lpBuffer = s_irCache[s_dwIndex];
8b9a1c
!     if (nLength != -1 && ++s_dwIndex >= s_dwMax)
8b9a1c
  	s_dwMax = 0;
8b9a1c
!     *lpEvents = 1;
8b9a1c
      return TRUE;
8b9a1c
  }
8b9a1c
  
8b9a1c
***************
8b9a1c
*** 292,304 ****
8b9a1c
   */
8b9a1c
      static BOOL
8b9a1c
  peek_console_input(
8b9a1c
!     HANDLE hConsoleInput,
8b9a1c
!     PINPUT_RECORD lpBuffer,
8b9a1c
!     DWORD nLength,
8b9a1c
!     LPDWORD lpNumberOfEventsRead)
8b9a1c
  {
8b9a1c
!     return read_console_input(hConsoleInput, lpBuffer, -1,
8b9a1c
! 							lpNumberOfEventsRead);
8b9a1c
  }
8b9a1c
  
8b9a1c
      static void
8b9a1c
--- 278,289 ----
8b9a1c
   */
8b9a1c
      static BOOL
8b9a1c
  peek_console_input(
8b9a1c
!     HANDLE	    hInput,
8b9a1c
!     INPUT_RECORD    *lpBuffer,
8b9a1c
!     DWORD	    nLength,
8b9a1c
!     LPDWORD	    lpEvents)
8b9a1c
  {
8b9a1c
!     return read_console_input(hInput, lpBuffer, -1, lpEvents);
8b9a1c
  }
8b9a1c
  
8b9a1c
      static void
8b9a1c
***************
8b9a1c
*** 585,594 ****
8b9a1c
      static BOOL
8b9a1c
  win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
8b9a1c
  {
8b9a1c
!     BOOL             bResult;
8b9a1c
!     LUID             luid;
8b9a1c
!     HANDLE           hToken;
8b9a1c
!     TOKEN_PRIVILEGES tokenPrivileges;
8b9a1c
  
8b9a1c
      if (!OpenProcessToken(GetCurrentProcess(),
8b9a1c
  		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
8b9a1c
--- 570,579 ----
8b9a1c
      static BOOL
8b9a1c
  win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
8b9a1c
  {
8b9a1c
!     BOOL		bResult;
8b9a1c
!     LUID		luid;
8b9a1c
!     HANDLE		hToken;
8b9a1c
!     TOKEN_PRIVILEGES	tokenPrivileges;
8b9a1c
  
8b9a1c
      if (!OpenProcessToken(GetCurrentProcess(),
8b9a1c
  		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
8b9a1c
*** ../vim-7.4.141/src/version.c	2014-01-10 18:16:00.000000000 +0100
8b9a1c
--- src/version.c	2014-01-12 13:17:47.000000000 +0100
8b9a1c
***************
8b9a1c
*** 740,741 ****
8b9a1c
--- 740,743 ----
8b9a1c
  {   /* Add new patch number below this line */
8b9a1c
+ /**/
8b9a1c
+     142,
8b9a1c
  /**/
8b9a1c
8b9a1c
-- 
8b9a1c
Drink wet cement and get really stoned.
8b9a1c
8b9a1c
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
8b9a1c
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
8b9a1c
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
8b9a1c
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///