summaryrefslogtreecommitdiff
path: root/source/ap/vim/patches/7.2.093
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/vim/patches/7.2.093')
-rw-r--r--source/ap/vim/patches/7.2.093234
1 files changed, 234 insertions, 0 deletions
diff --git a/source/ap/vim/patches/7.2.093 b/source/ap/vim/patches/7.2.093
new file mode 100644
index 00000000..b0f44909
--- /dev/null
+++ b/source/ap/vim/patches/7.2.093
@@ -0,0 +1,234 @@
+To: vim-dev@vim.org
+Subject: Patch 7.2.093 (extra)
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.093 (extra)
+Problem: Win32: inputdialog() and find/replace dialogs can't handle
+ multi-byte text.
+Solution: Use the wide version of dialog functions when available. (Yanwei
+ Jia)
+Files: src/gui_w32.c, src/gui_w48.c
+
+
+*** ../vim-7.2.092/src/gui_w32.c Thu Nov 20 17:09:09 2008
+--- src/gui_w32.c Wed Jan 28 21:15:29 2009
+***************
+*** 1582,1587 ****
+--- 1582,1598 ----
+ s_findrep_struct.lpstrReplaceWith[0] = NUL;
+ s_findrep_struct.wFindWhatLen = MSWIN_FR_BUFSIZE;
+ s_findrep_struct.wReplaceWithLen = MSWIN_FR_BUFSIZE;
++ # if defined(FEAT_MBYTE) && defined(WIN3264)
++ s_findrep_struct_w.lStructSize = sizeof(s_findrep_struct_w);
++ s_findrep_struct_w.lpstrFindWhat =
++ (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR));
++ s_findrep_struct_w.lpstrFindWhat[0] = NUL;
++ s_findrep_struct_w.lpstrReplaceWith =
++ (LPWSTR)alloc(MSWIN_FR_BUFSIZE * sizeof(WCHAR));
++ s_findrep_struct_w.lpstrReplaceWith[0] = NUL;
++ s_findrep_struct_w.wFindWhatLen = MSWIN_FR_BUFSIZE;
++ s_findrep_struct_w.wReplaceWithLen = MSWIN_FR_BUFSIZE;
++ # endif
+ #endif
+
+ theend:
+***************
+*** 2938,2945 ****
+
+ /* If the edit box exists, copy the string. */
+ if (s_textfield != NULL)
+! GetDlgItemText(hwnd, DLG_NONBUTTON_CONTROL + 2,
+ s_textfield, IOSIZE);
+
+ /*
+ * Need to check for IDOK because if the user just hits Return to
+--- 2949,2975 ----
+
+ /* If the edit box exists, copy the string. */
+ if (s_textfield != NULL)
+! {
+! # if defined(FEAT_MBYTE) && defined(WIN3264)
+! /* If the OS is Windows NT, and 'encoding' differs from active
+! * codepage: use wide function and convert text. */
+! if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT
+! && enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+! {
+! WCHAR *wp = (WCHAR *)alloc(IOSIZE * sizeof(WCHAR));
+! char_u *p;
+!
+! GetDlgItemTextW(hwnd, DLG_NONBUTTON_CONTROL + 2, wp, IOSIZE);
+! p = utf16_to_enc(wp, NULL);
+! vim_strncpy(s_textfield, p, IOSIZE);
+! vim_free(p);
+! vim_free(wp);
+! }
+! else
+! # endif
+! GetDlgItemText(hwnd, DLG_NONBUTTON_CONTROL + 2,
+ s_textfield, IOSIZE);
++ }
+
+ /*
+ * Need to check for IDOK because if the user just hits Return to
+*** ../vim-7.2.092/src/gui_w48.c Wed Jan 28 14:17:21 2009
+--- src/gui_w48.c Wed Jan 28 21:10:26 2009
+***************
+*** 153,158 ****
+--- 153,161 ----
+ #ifdef MSWIN_FIND_REPLACE
+ static UINT s_findrep_msg = 0; /* set in gui_w[16/32].c */
+ static FINDREPLACE s_findrep_struct;
++ # if defined(FEAT_MBYTE) && defined(WIN3264)
++ static FINDREPLACEW s_findrep_struct_w;
++ # endif
+ static HWND s_findrep_hwnd = NULL;
+ static int s_findrep_is_find; /* TRUE for find dialog, FALSE
+ for find/replace dialog */
+***************
+*** 884,889 ****
+--- 887,931 ----
+ #endif
+
+ #ifdef MSWIN_FIND_REPLACE
++ # if defined(FEAT_MBYTE) && defined(WIN3264)
++ /*
++ * copy useful data from structure LPFINDREPLACE to structure LPFINDREPLACEW
++ */
++ static void
++ findrep_atow(LPFINDREPLACEW lpfrw, LPFINDREPLACE lpfr)
++ {
++ WCHAR *wp;
++
++ lpfrw->hwndOwner = lpfr->hwndOwner;
++ lpfrw->Flags = lpfr->Flags;
++
++ wp = enc_to_utf16(lpfr->lpstrFindWhat, NULL);
++ wcsncpy(lpfrw->lpstrFindWhat, wp, lpfrw->wFindWhatLen - 1);
++ vim_free(wp);
++
++ /* the field "lpstrReplaceWith" doesn't need to be copied */
++ }
++
++ /*
++ * copy useful data from structure LPFINDREPLACEW to structure LPFINDREPLACE
++ */
++ static void
++ findrep_wtoa(LPFINDREPLACE lpfr, LPFINDREPLACEW lpfrw)
++ {
++ char_u *p;
++
++ lpfr->Flags = lpfrw->Flags;
++
++ p = utf16_to_enc(lpfrw->lpstrFindWhat, NULL);
++ vim_strncpy(lpfr->lpstrFindWhat, p, lpfr->wFindWhatLen - 1);
++ vim_free(p);
++
++ p = utf16_to_enc(lpfrw->lpstrReplaceWith, NULL);
++ vim_strncpy(lpfr->lpstrReplaceWith, p, lpfr->wReplaceWithLen - 1);
++ vim_free(p);
++ }
++ # endif
++
+ /*
+ * Handle a Find/Replace window message.
+ */
+***************
+*** 893,898 ****
+--- 935,950 ----
+ int flags = 0;
+ int down;
+
++ # if defined(FEAT_MBYTE) && defined(WIN3264)
++ /* If the OS is Windows NT, and 'encoding' differs from active codepage:
++ * convert text from wide string. */
++ if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT
++ && enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++ {
++ findrep_wtoa(&s_findrep_struct, &s_findrep_struct_w);
++ }
++ # endif
++
+ if (s_findrep_struct.Flags & FR_DIALOGTERM)
+ /* Give main window the focus back. */
+ (void)SetFocus(s_hwnd);
+***************
+*** 2562,2568 ****
+ if (!IsWindow(s_findrep_hwnd))
+ {
+ initialise_findrep(eap->arg);
+! s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct);
+ }
+
+ set_window_title(s_findrep_hwnd,
+--- 2614,2632 ----
+ if (!IsWindow(s_findrep_hwnd))
+ {
+ initialise_findrep(eap->arg);
+! # if defined(FEAT_MBYTE) && defined(WIN3264)
+! /* If the OS is Windows NT, and 'encoding' differs from active
+! * codepage: convert text and use wide function. */
+! if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT
+! && enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+! {
+! findrep_atow(&s_findrep_struct_w, &s_findrep_struct);
+! s_findrep_hwnd = FindTextW(
+! (LPFINDREPLACEW) &s_findrep_struct_w);
+! }
+! else
+! # endif
+! s_findrep_hwnd = FindText((LPFINDREPLACE) &s_findrep_struct);
+ }
+
+ set_window_title(s_findrep_hwnd,
+***************
+*** 2587,2593 ****
+ if (!IsWindow(s_findrep_hwnd))
+ {
+ initialise_findrep(eap->arg);
+! s_findrep_hwnd = ReplaceText((LPFINDREPLACE) &s_findrep_struct);
+ }
+
+ set_window_title(s_findrep_hwnd,
+--- 2651,2668 ----
+ if (!IsWindow(s_findrep_hwnd))
+ {
+ initialise_findrep(eap->arg);
+! # if defined(FEAT_MBYTE) && defined(WIN3264)
+! if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT
+! && enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+! {
+! findrep_atow(&s_findrep_struct_w, &s_findrep_struct);
+! s_findrep_hwnd = ReplaceTextW(
+! (LPFINDREPLACEW) &s_findrep_struct_w);
+! }
+! else
+! # endif
+! s_findrep_hwnd = ReplaceText(
+! (LPFINDREPLACE) &s_findrep_struct);
+ }
+
+ set_window_title(s_findrep_hwnd,
+*** ../vim-7.2.092/src/version.c Wed Jan 28 19:08:31 2009
+--- src/version.c Wed Jan 28 21:19:56 2009
+***************
+*** 678,679 ****
+--- 678,681 ----
+ { /* Add new patch number below this line */
++ /**/
++ 93,
+ /**/
+
+--
+I'm not familiar with this proof, but I'm aware of a significant
+following of toddlers who believe that peanut butter is the solution
+to all of life's problems... -- Tim Hammerquist
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ download, build and distribute -- http://www.A-A-P.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///