Karsten Hopp 0a9640
To: vim_dev@googlegroups.com
Karsten Hopp 0a9640
Subject: Patch 7.3.277
Karsten Hopp 0a9640
Fcc: outbox
Karsten Hopp 0a9640
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp 0a9640
Mime-Version: 1.0
Karsten Hopp 0a9640
Content-Type: text/plain; charset=UTF-8
Karsten Hopp 0a9640
Content-Transfer-Encoding: 8bit
Karsten Hopp 0a9640
------------
Karsten Hopp 0a9640
Karsten Hopp 0a9640
Patch 7.3.277
Karsten Hopp 0a9640
Problem:    MS-Windows: some characters do not show in dialogs.
Karsten Hopp 0a9640
Solution:   Use the wide methods when available. (Yanwei Jia)
Karsten Hopp 0a9640
Files:      src/gui_w32.c, src/gui_w48.c, src/os_mswin.c, src/os_win32.c,
Karsten Hopp 0a9640
            src/os_win32.h
Karsten Hopp 0a9640
    
Karsten Hopp 0a9640
Karsten Hopp 0a9640
*** ../vim-7.3.276/src/gui_w32.c	2011-08-10 15:56:24.000000000 +0200
Karsten Hopp 0a9640
--- src/gui_w32.c	2011-08-10 16:52:55.000000000 +0200
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 1270,1275 ****
Karsten Hopp 0a9640
--- 1270,1294 ----
Karsten Hopp 0a9640
  	pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib,
Karsten Hopp 0a9640
  							  "GetMonitorInfoA");
Karsten Hopp 0a9640
      }
Karsten Hopp 0a9640
+ 
Karsten Hopp 0a9640
+ #ifdef FEAT_MBYTE
Karsten Hopp 0a9640
+     /* If the OS is Windows NT, use wide functions;
Karsten Hopp 0a9640
+      * this enables common dialogs input unicode from IME. */
Karsten Hopp 0a9640
+     if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
Karsten Hopp 0a9640
+     {
Karsten Hopp 0a9640
+ 	pDispatchMessage = DispatchMessageW;
Karsten Hopp 0a9640
+ 	pGetMessage = GetMessageW;
Karsten Hopp 0a9640
+ 	pIsDialogMessage = IsDialogMessageW;
Karsten Hopp 0a9640
+ 	pPeekMessage = PeekMessageW;
Karsten Hopp 0a9640
+     }
Karsten Hopp 0a9640
+     else
Karsten Hopp 0a9640
+     {
Karsten Hopp 0a9640
+ 	pDispatchMessage = DispatchMessageA;
Karsten Hopp 0a9640
+ 	pGetMessage = GetMessageA;
Karsten Hopp 0a9640
+ 	pIsDialogMessage = IsDialogMessageA;
Karsten Hopp 0a9640
+ 	pPeekMessage = PeekMessageA;
Karsten Hopp 0a9640
+     }
Karsten Hopp 0a9640
+ #endif
Karsten Hopp 0a9640
  }
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
  /*
Karsten Hopp 0a9640
*** ../vim-7.3.276/src/gui_w48.c	2010-10-20 21:22:17.000000000 +0200
Karsten Hopp 0a9640
--- src/gui_w48.c	2011-08-10 16:49:39.000000000 +0200
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 390,396 ****
Karsten Hopp 0a9640
      KillTimer(NULL, idEvent);
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
      /* Eat spurious WM_TIMER messages */
Karsten Hopp 0a9640
!     while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
Karsten Hopp 0a9640
  	;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
      if (blink_state == BLINK_ON)
Karsten Hopp 0a9640
--- 390,396 ----
Karsten Hopp 0a9640
      KillTimer(NULL, idEvent);
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
      /* Eat spurious WM_TIMER messages */
Karsten Hopp 0a9640
!     while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
Karsten Hopp 0a9640
  	;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
      if (blink_state == BLINK_ON)
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 418,424 ****
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
  	KillTimer(NULL, blink_timer);
Karsten Hopp 0a9640
  	/* Eat spurious WM_TIMER messages */
Karsten Hopp 0a9640
! 	while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
Karsten Hopp 0a9640
  	    ;
Karsten Hopp 0a9640
  	blink_timer = 0;
Karsten Hopp 0a9640
      }
Karsten Hopp 0a9640
--- 418,424 ----
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
  	KillTimer(NULL, blink_timer);
Karsten Hopp 0a9640
  	/* Eat spurious WM_TIMER messages */
Karsten Hopp 0a9640
! 	while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
Karsten Hopp 0a9640
  	    ;
Karsten Hopp 0a9640
  	blink_timer = 0;
Karsten Hopp 0a9640
      }
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 476,482 ****
Karsten Hopp 0a9640
      s_timed_out = TRUE;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
      /* Eat spurious WM_TIMER messages */
Karsten Hopp 0a9640
!     while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
Karsten Hopp 0a9640
  	;
Karsten Hopp 0a9640
      if (idEvent == s_wait_timer)
Karsten Hopp 0a9640
  	s_wait_timer = 0;
Karsten Hopp 0a9640
--- 476,482 ----
Karsten Hopp 0a9640
      s_timed_out = TRUE;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
      /* Eat spurious WM_TIMER messages */
Karsten Hopp 0a9640
!     while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
Karsten Hopp 0a9640
  	;
Karsten Hopp 0a9640
      if (idEvent == s_wait_timer)
Karsten Hopp 0a9640
  	s_wait_timer = 0;
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 1707,1713 ****
Karsten Hopp 0a9640
      static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
Karsten Hopp 0a9640
  #endif
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
!     GetMessage(&msg, NULL, 0, 0);
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
  #ifdef FEAT_OLE
Karsten Hopp 0a9640
      /* Look after OLE Automation commands */
Karsten Hopp 0a9640
--- 1707,1713 ----
Karsten Hopp 0a9640
      static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
Karsten Hopp 0a9640
  #endif
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
!     pGetMessage(&msg, NULL, 0, 0);
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
  #ifdef FEAT_OLE
Karsten Hopp 0a9640
      /* Look after OLE Automation commands */
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 1718,1724 ****
Karsten Hopp 0a9640
  	{
Karsten Hopp 0a9640
  	    /* Message can't be ours, forward it.  Fixes problem with Ultramon
Karsten Hopp 0a9640
  	     * 3.0.4 */
Karsten Hopp 0a9640
! 	    DispatchMessage(&msg;;
Karsten Hopp 0a9640
  	}
Karsten Hopp 0a9640
  	else
Karsten Hopp 0a9640
  	{
Karsten Hopp 0a9640
--- 1718,1724 ----
Karsten Hopp 0a9640
  	{
Karsten Hopp 0a9640
  	    /* Message can't be ours, forward it.  Fixes problem with Ultramon
Karsten Hopp 0a9640
  	     * 3.0.4 */
Karsten Hopp 0a9640
! 	    pDispatchMessage(&msg;;
Karsten Hopp 0a9640
  	}
Karsten Hopp 0a9640
  	else
Karsten Hopp 0a9640
  	{
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 1749,1762 ****
Karsten Hopp 0a9640
      if (msg.message == WM_USER)
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
  	MyTranslateMessage(&msg;;
Karsten Hopp 0a9640
! 	DispatchMessage(&msg;;
Karsten Hopp 0a9640
  	return;
Karsten Hopp 0a9640
      }
Karsten Hopp 0a9640
  #endif
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
  #ifdef MSWIN_FIND_REPLACE
Karsten Hopp 0a9640
      /* Don't process messages used by the dialog */
Karsten Hopp 0a9640
!     if (s_findrep_hwnd != NULL && IsDialogMessage(s_findrep_hwnd, &msg))
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
  	HandleMouseHide(msg.message, msg.lParam);
Karsten Hopp 0a9640
  	return;
Karsten Hopp 0a9640
--- 1749,1762 ----
Karsten Hopp 0a9640
      if (msg.message == WM_USER)
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
  	MyTranslateMessage(&msg;;
Karsten Hopp 0a9640
! 	pDispatchMessage(&msg;;
Karsten Hopp 0a9640
  	return;
Karsten Hopp 0a9640
      }
Karsten Hopp 0a9640
  #endif
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
  #ifdef MSWIN_FIND_REPLACE
Karsten Hopp 0a9640
      /* Don't process messages used by the dialog */
Karsten Hopp 0a9640
!     if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg))
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
  	HandleMouseHide(msg.message, msg.lParam);
Karsten Hopp 0a9640
  	return;
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 1928,1934 ****
Karsten Hopp 0a9640
      if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
Karsten Hopp 0a9640
  							  NULL, NULL) == NULL)
Karsten Hopp 0a9640
  #endif
Karsten Hopp 0a9640
! 	DispatchMessage(&msg;;
Karsten Hopp 0a9640
  }
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
  /*
Karsten Hopp 0a9640
--- 1928,1934 ----
Karsten Hopp 0a9640
      if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
Karsten Hopp 0a9640
  							  NULL, NULL) == NULL)
Karsten Hopp 0a9640
  #endif
Karsten Hopp 0a9640
! 	pDispatchMessage(&msg;;
Karsten Hopp 0a9640
  }
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
  /*
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 1943,1949 ****
Karsten Hopp 0a9640
      MSG	    msg;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
      if (!s_busy_processing)
Karsten Hopp 0a9640
! 	while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
Karsten Hopp 0a9640
  						  && !vim_is_input_buf_full())
Karsten Hopp 0a9640
  	    process_message();
Karsten Hopp 0a9640
  }
Karsten Hopp 0a9640
--- 1943,1949 ----
Karsten Hopp 0a9640
      MSG	    msg;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
      if (!s_busy_processing)
Karsten Hopp 0a9640
! 	while (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
Karsten Hopp 0a9640
  						  && !vim_is_input_buf_full())
Karsten Hopp 0a9640
  	    process_message();
Karsten Hopp 0a9640
  }
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 2019,2025 ****
Karsten Hopp 0a9640
  		KillTimer(NULL, s_wait_timer);
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
  		/* Eat spurious WM_TIMER messages */
Karsten Hopp 0a9640
! 		while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
Karsten Hopp 0a9640
  		    ;
Karsten Hopp 0a9640
  		s_wait_timer = 0;
Karsten Hopp 0a9640
  	    }
Karsten Hopp 0a9640
--- 2019,2025 ----
Karsten Hopp 0a9640
  		KillTimer(NULL, s_wait_timer);
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
  		/* Eat spurious WM_TIMER messages */
Karsten Hopp 0a9640
! 		while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
Karsten Hopp 0a9640
  		    ;
Karsten Hopp 0a9640
  		s_wait_timer = 0;
Karsten Hopp 0a9640
  	    }
Karsten Hopp 0a9640
*** ../vim-7.3.276/src/os_mswin.c	2011-06-19 01:30:01.000000000 +0200
Karsten Hopp 0a9640
--- src/os_mswin.c	2011-08-10 16:45:24.000000000 +0200
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 1856,1867 ****
Karsten Hopp 0a9640
  {
Karsten Hopp 0a9640
      MSG msg;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
!     while (!*bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
! 	if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg))
Karsten Hopp 0a9640
  	{
Karsten Hopp 0a9640
  	    TranslateMessage(&msg;;
Karsten Hopp 0a9640
! 	    DispatchMessage(&msg;;
Karsten Hopp 0a9640
  	}
Karsten Hopp 0a9640
      }
Karsten Hopp 0a9640
      return !*bUserAbort;
Karsten Hopp 0a9640
--- 1856,1867 ----
Karsten Hopp 0a9640
  {
Karsten Hopp 0a9640
      MSG msg;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
!     while (!*bUserAbort && pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
! 	if (!hDlgPrint || !pIsDialogMessage(hDlgPrint, &msg))
Karsten Hopp 0a9640
  	{
Karsten Hopp 0a9640
  	    TranslateMessage(&msg;;
Karsten Hopp 0a9640
! 	    pDispatchMessage(&msg;;
Karsten Hopp 0a9640
  	}
Karsten Hopp 0a9640
      }
Karsten Hopp 0a9640
      return !*bUserAbort;
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 3132,3141 ****
Karsten Hopp 0a9640
  {
Karsten Hopp 0a9640
      MSG msg;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
!     while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
  	TranslateMessage(&msg;;
Karsten Hopp 0a9640
! 	DispatchMessage(&msg;;
Karsten Hopp 0a9640
      }
Karsten Hopp 0a9640
  }
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
--- 3132,3141 ----
Karsten Hopp 0a9640
  {
Karsten Hopp 0a9640
      MSG msg;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
!     while (pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
Karsten Hopp 0a9640
      {
Karsten Hopp 0a9640
  	TranslateMessage(&msg;;
Karsten Hopp 0a9640
! 	pDispatchMessage(&msg;;
Karsten Hopp 0a9640
      }
Karsten Hopp 0a9640
  }
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
*** ../vim-7.3.276/src/os_win32.c	2011-07-07 16:20:45.000000000 +0200
Karsten Hopp 0a9640
--- src/os_win32.c	2011-08-10 16:54:50.000000000 +0200
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 152,157 ****
Karsten Hopp 0a9640
--- 152,165 ----
Karsten Hopp 0a9640
  # define wcsicmp(a, b) wcscmpi((a), (b))
Karsten Hopp 0a9640
  #endif
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
+ /* Enable common dialogs input unicode from IME if posible. */
Karsten Hopp 0a9640
+ #ifdef FEAT_MBYTE
Karsten Hopp 0a9640
+ LRESULT (WINAPI *pDispatchMessage)(LPMSG) = DispatchMessage;
Karsten Hopp 0a9640
+ BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT) = GetMessage;
Karsten Hopp 0a9640
+ BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG) = IsDialogMessage;
Karsten Hopp 0a9640
+ BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT) = PeekMessage;
Karsten Hopp 0a9640
+ #endif
Karsten Hopp 0a9640
+ 
Karsten Hopp 0a9640
  #ifndef FEAT_GUI_W32
Karsten Hopp 0a9640
  /* Win32 Console handles for input and output */
Karsten Hopp 0a9640
  static HANDLE g_hConIn  = INVALID_HANDLE_VALUE;
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 3284,3293 ****
Karsten Hopp 0a9640
  	{
Karsten Hopp 0a9640
  	    MSG	msg;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
! 	    if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
Karsten Hopp 0a9640
  	    {
Karsten Hopp 0a9640
  		TranslateMessage(&msg;;
Karsten Hopp 0a9640
! 		DispatchMessage(&msg;;
Karsten Hopp 0a9640
  	    }
Karsten Hopp 0a9640
  	    if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
Karsten Hopp 0a9640
  		break;
Karsten Hopp 0a9640
--- 3292,3301 ----
Karsten Hopp 0a9640
  	{
Karsten Hopp 0a9640
  	    MSG	msg;
Karsten Hopp 0a9640
  
Karsten Hopp 0a9640
! 	    if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
Karsten Hopp 0a9640
  	    {
Karsten Hopp 0a9640
  		TranslateMessage(&msg;;
Karsten Hopp 0a9640
! 		pDispatchMessage(&msg;;
Karsten Hopp 0a9640
  	    }
Karsten Hopp 0a9640
  	    if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
Karsten Hopp 0a9640
  		break;
Karsten Hopp 0a9640
*** ../vim-7.3.276/src/os_win32.h	2011-05-05 18:31:54.000000000 +0200
Karsten Hopp 0a9640
--- src/os_win32.h	2011-08-10 16:51:58.000000000 +0200
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 193,195 ****
Karsten Hopp 0a9640
--- 193,209 ----
Karsten Hopp 0a9640
  #else
Karsten Hopp 0a9640
  # define vim_mkdir(x, y) mch_mkdir(x)
Karsten Hopp 0a9640
  #endif
Karsten Hopp 0a9640
+ 
Karsten Hopp 0a9640
+ /* Enable common dialogs input unicode from IME if posible. */
Karsten Hopp 0a9640
+ #ifdef FEAT_MBYTE
Karsten Hopp 0a9640
+     /* The variables are defined in os_win32.c. */
Karsten Hopp 0a9640
+ extern LRESULT (WINAPI *pDispatchMessage)(LPMSG);
Karsten Hopp 0a9640
+ extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT);
Karsten Hopp 0a9640
+ extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG);
Karsten Hopp 0a9640
+ extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT);
Karsten Hopp 0a9640
+ #else
Karsten Hopp 0a9640
+ # define pDispatchMessage DispatchMessage
Karsten Hopp 0a9640
+ # define pGetMessage GetMessage
Karsten Hopp 0a9640
+ # define pIsDialogMessage IsDialogMessage
Karsten Hopp 0a9640
+ # define pPeekMessage PeekMessage
Karsten Hopp 0a9640
+ #endif
Karsten Hopp 0a9640
*** ../vim-7.3.276/src/version.c	2011-08-10 16:31:18.000000000 +0200
Karsten Hopp 0a9640
--- src/version.c	2011-08-10 17:06:55.000000000 +0200
Karsten Hopp 0a9640
***************
Karsten Hopp 0a9640
*** 711,712 ****
Karsten Hopp 0a9640
--- 711,714 ----
Karsten Hopp 0a9640
  {   /* Add new patch number below this line */
Karsten Hopp 0a9640
+ /**/
Karsten Hopp 0a9640
+     277,
Karsten Hopp 0a9640
  /**/
Karsten Hopp 0a9640
Karsten Hopp 0a9640
-- 
Karsten Hopp 0a9640
Veni, Vidi, VW -- I came, I saw, I drove around in a little car.
Karsten Hopp 0a9640
Karsten Hopp 0a9640
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp 0a9640
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp 0a9640
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
Karsten Hopp 0a9640
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///