summaryrefslogtreecommitdiff
path: root/src/winclip.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/winclip.c')
-rw-r--r--src/winclip.c141
1 files changed, 63 insertions, 78 deletions
diff --git a/src/winclip.c b/src/winclip.c
index 4bafa8d73..0285dc592 100644
--- a/src/winclip.c
+++ b/src/winclip.c
@@ -44,7 +44,6 @@ typedef int LPWSTR;
typedef int UINT;
#endif
-#if defined(FEAT_MBYTE) || defined(PROTO)
/*
* Convert an UTF-8 string to UTF-16.
* "instr[inlen]" is the input. "inlen" is in bytes.
@@ -179,7 +178,6 @@ WideCharToMultiByte_alloc(UINT cp, DWORD flags,
}
}
-#endif /* FEAT_MBYTE */
#ifdef FEAT_CLIPBOARD
/*
@@ -301,12 +299,10 @@ clip_mch_request_selection(VimClipboard *cbd)
VimClipType_t metadata = { -1, -1, -1, -1 };
HGLOBAL hMem = NULL;
char_u *str = NULL;
-#if defined(FEAT_MBYTE) && defined(WIN3264)
+#if defined(WIN3264)
char_u *to_free = NULL;
#endif
-#ifdef FEAT_MBYTE
HGLOBAL rawh = NULL;
-#endif
int str_size = 0;
int maxlen;
size_t n;
@@ -339,7 +335,6 @@ clip_mch_request_selection(VimClipboard *cbd)
}
}
-#ifdef FEAT_MBYTE
/* Check for Vim's raw clipboard format first. This is used without
* conversion, but only if 'encoding' matches. */
if (IsClipboardFormatAvailable(cbd->format_raw)
@@ -366,79 +361,75 @@ clip_mch_request_selection(VimClipboard *cbd)
}
if (str == NULL)
{
-#endif
-
-#if defined(FEAT_MBYTE) && defined(WIN3264)
- /* Try to get the clipboard in Unicode if it's not an empty string. */
- if (IsClipboardFormatAvailable(CF_UNICODETEXT) && metadata.ucslen != 0)
- {
- HGLOBAL hMemW;
-
- if ((hMemW = GetClipboardData(CF_UNICODETEXT)) != NULL)
+#if defined(WIN3264)
+ /* Try to get the clipboard in Unicode if it's not an empty string. */
+ if (IsClipboardFormatAvailable(CF_UNICODETEXT) && metadata.ucslen != 0)
{
- WCHAR *hMemWstr = (WCHAR *)GlobalLock(hMemW);
+ HGLOBAL hMemW;
- /* Use the length of our metadata if possible, but limit it to the
- * GlobalSize() for safety. */
- maxlen = (int)(GlobalSize(hMemW) / sizeof(WCHAR));
- if (metadata.ucslen >= 0)
+ if ((hMemW = GetClipboardData(CF_UNICODETEXT)) != NULL)
{
- if (metadata.ucslen > maxlen)
- str_size = maxlen;
+ WCHAR *hMemWstr = (WCHAR *)GlobalLock(hMemW);
+
+ /* Use the length of our metadata if possible, but limit it to
+ * the GlobalSize() for safety. */
+ maxlen = (int)(GlobalSize(hMemW) / sizeof(WCHAR));
+ if (metadata.ucslen >= 0)
+ {
+ if (metadata.ucslen > maxlen)
+ str_size = maxlen;
+ else
+ str_size = metadata.ucslen;
+ }
else
- str_size = metadata.ucslen;
- }
- else
- {
- for (str_size = 0; str_size < maxlen; ++str_size)
- if (hMemWstr[str_size] == NUL)
- break;
+ {
+ for (str_size = 0; str_size < maxlen; ++str_size)
+ if (hMemWstr[str_size] == NUL)
+ break;
+ }
+ to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
+ GlobalUnlock(hMemW);
}
- to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
- GlobalUnlock(hMemW);
}
- }
- else
+ else
#endif
- /* Get the clipboard in the Active codepage. */
- if (IsClipboardFormatAvailable(CF_TEXT))
- {
- if ((hMem = GetClipboardData(CF_TEXT)) != NULL)
+ /* Get the clipboard in the Active codepage. */
+ if (IsClipboardFormatAvailable(CF_TEXT))
{
- str = (char_u *)GlobalLock(hMem);
-
- /* The length is either what our metadata says or the strlen().
- * But limit it to the GlobalSize() for safety. */
- maxlen = (int)GlobalSize(hMem);
- if (metadata.txtlen >= 0)
+ if ((hMem = GetClipboardData(CF_TEXT)) != NULL)
{
- if (metadata.txtlen > maxlen)
- str_size = maxlen;
+ str = (char_u *)GlobalLock(hMem);
+
+ /* The length is either what our metadata says or the strlen().
+ * But limit it to the GlobalSize() for safety. */
+ maxlen = (int)GlobalSize(hMem);
+ if (metadata.txtlen >= 0)
+ {
+ if (metadata.txtlen > maxlen)
+ str_size = maxlen;
+ else
+ str_size = metadata.txtlen;
+ }
else
- str_size = metadata.txtlen;
- }
- else
- {
- for (str_size = 0; str_size < maxlen; ++str_size)
- if (str[str_size] == NUL)
- break;
- }
-
-# if defined(FEAT_MBYTE) && defined(WIN3264)
- /* The text is in the active codepage. Convert to 'encoding',
- * going through UTF-16. */
- acp_to_enc(str, str_size, &to_free, &maxlen);
- if (to_free != NULL)
- {
- str_size = maxlen;
- str = to_free;
+ {
+ for (str_size = 0; str_size < maxlen; ++str_size)
+ if (str[str_size] == NUL)
+ break;
+ }
+
+#if defined(WIN3264)
+ /* The text is in the active codepage. Convert to
+ * 'encoding', going through UTF-16. */
+ acp_to_enc(str, str_size, &to_free, &maxlen);
+ if (to_free != NULL)
+ {
+ str_size = maxlen;
+ str = to_free;
+ }
+#endif
}
-# endif
}
}
-#ifdef FEAT_MBYTE
- }
-#endif
if (str != NULL && *str != NUL)
{
@@ -460,12 +451,10 @@ clip_mch_request_selection(VimClipboard *cbd)
/* unlock the global object */
if (hMem != NULL)
GlobalUnlock(hMem);
-#ifdef FEAT_MBYTE
if (rawh != NULL)
GlobalUnlock(rawh);
-#endif
CloseClipboard();
-#if defined(FEAT_MBYTE) && defined(WIN3264)
+#if defined(WIN3264)
vim_free(to_free);
#endif
}
@@ -482,7 +471,7 @@ clip_mch_set_selection(VimClipboard *cbd)
HGLOBAL hMemRaw = NULL;
HGLOBAL hMem = NULL;
HGLOBAL hMemVim = NULL;
-# if defined(FEAT_MBYTE) && defined(WIN3264)
+# if defined(WIN3264)
HGLOBAL hMemW = NULL;
# endif
@@ -499,7 +488,6 @@ clip_mch_set_selection(VimClipboard *cbd)
metadata.ucslen = 0;
metadata.rawlen = 0;
-#ifdef FEAT_MBYTE
/* Always set the raw bytes: 'encoding', NUL and the text. This is used
* when copy/paste from/to Vim with the same 'encoding', so that illegal
* bytes can also be copied and no conversion is needed. */
@@ -519,9 +507,8 @@ clip_mch_set_selection(VimClipboard *cbd)
else
metadata.rawlen = 0;
}
-#endif
-# if defined(FEAT_MBYTE) && defined(WIN3264)
+# if defined(WIN3264)
{
WCHAR *out;
int len = metadata.txtlen;
@@ -603,7 +590,7 @@ clip_mch_set_selection(VimClipboard *cbd)
{
SetClipboardData(cbd->format, hMemVim);
hMemVim = 0;
-# if defined(FEAT_MBYTE) && defined(WIN3264)
+# if defined(WIN3264)
if (hMemW != NULL)
{
if (SetClipboardData(CF_UNICODETEXT, hMemW) != NULL)
@@ -624,7 +611,7 @@ clip_mch_set_selection(VimClipboard *cbd)
GlobalFree(hMemRaw);
if (hMem)
GlobalFree(hMem);
-# if defined(FEAT_MBYTE) && defined(WIN3264)
+# if defined(WIN3264)
if (hMemW)
GlobalFree(hMemW);
# endif
@@ -634,7 +621,6 @@ clip_mch_set_selection(VimClipboard *cbd)
#endif /* FEAT_CLIPBOARD */
-#if defined(FEAT_MBYTE) || defined(PROTO)
/*
* Note: the following two functions are only guaranteed to work when using
* valid MS-Windows codepages or when iconv() is available.
@@ -759,9 +745,8 @@ utf16_to_enc(short_u *str, int *lenp)
return enc_str;
}
-#endif /* FEAT_MBYTE */
-#if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
+#if defined(WIN3264) || defined(PROTO)
/*
* Convert from the active codepage to 'encoding'.
* Input is "str[str_size]".