--- a/WinWorkstation.st Sat Sep 15 15:40:17 2001 +0200
+++ b/WinWorkstation.st Sat Sep 15 16:02:16 2001 +0200
@@ -12625,12 +12625,13 @@
%{
HANDLE hClip;
HANDLE hData;
- OBJ s;
- unsigned char *src, *p;
- int n, len, realLen;
/* check for format CF_TEXT */
if (IsClipboardFormatAvailable(CF_TEXT)) {
+ OBJ s;
+ unsigned char *src, *p;
+ int n, len, realLen;
+
hClip = OpenClipboard(NULL);
if (hClip) {
hData = GetClipboardData(CF_TEXT);
@@ -12667,6 +12668,48 @@
RETURN(s);
}
}
+
+ if (IsClipboardFormatAvailable(CF_UNICODETEXT)) {
+ OBJ s;
+ WIDECHAR *w_src, *w_p;
+ int n, len, realLen;
+
+ hClip = OpenClipboard(NULL);
+ if (hClip) {
+ hData = GetClipboardData(CF_UNICODETEXT);
+ w_src = GlobalLock(hData);
+ len = w_src ? wstrlen(w_src) : 0;
+
+ /* see how much we really need (when CRLF is replaced by LF) */
+ for (realLen = 0, n=len, w_p=w_src; n; ) {
+ WIDECHAR w_ch;
+
+ w_ch = *w_p++; n--; realLen++;
+ if (w_ch == 0x0D) {
+ if (n && (*w_p == 0x0A)) {
+ w_p++; n--;
+ }
+ }
+ }
+ s = __MKBYTEARRAY(realLen * 2);
+ for (n=0, w_p=__stringVal(s); len; ) {
+ WIDECHAR w_ch;
+
+ *w_p = w_ch = *w_src++;
+ len--;
+ if (len && (w_ch == 0x0D) && (*w_src == 0x0A)) {
+ *w_p = 0x0A;
+ w_src++;
+ len--;
+ }
+ w_p++;
+ }
+ GlobalUnlock(hData);
+ CloseClipboard();
+ __qClass(s) = @global(UnicodeString);
+ RETURN(s);
+ }
+ }
RETURN(nil);
%}
!
@@ -13835,6 +13878,6 @@
!WinWorkstation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.187 2001-09-15 13:40:17 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.188 2001-09-15 14:02:16 cg Exp $'
! !
WinWorkstation initialize!