*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Sat, 15 Sep 2001 16:45:51 +0200
changeset 3499 619ebebcb0cc
parent 3498 890cfcba79a5
child 3500 c918eb4a87a8
*** empty log message ***
WinWorkstation.st
--- a/WinWorkstation.st	Sat Sep 15 16:21:39 2001 +0200
+++ b/WinWorkstation.st	Sat Sep 15 16:45:51 2001 +0200
@@ -12625,11 +12625,76 @@
 %{
     HANDLE hClip;
     HANDLE hData;
+    OBJ s;
+    unsigned char *src, *p;
+    WIDECHAR *w_src, *w_p;
+
+    if (IsClipboardFormatAvailable(CF_UNICODETEXT)) {
+        int n, len, realLen;
+
+	hClip = OpenClipboard(NULL);
+	if (hClip) {
+	    int needUnicode = 0;
+
+	    hData = GetClipboardData(CF_UNICODETEXT);
+	    w_src = GlobalLock(hData);
+	    len = w_src ? wcslen(w_src) : 0;
+
+	    /* see how much we really need (when CRLF is replaced by LF)
+	     * and if result is really Unicode ...
+	     */
+	    for (realLen = 0, n=len, w_p=w_src; n; ) {
+		WIDECHAR w_ch;
+
+		w_ch = *w_p++; n--; realLen++;
+		if ((unsigned) w_ch > 0xFF) {
+		    needUnicode = 1;
+		}
+		if (w_ch == 0x0D) {
+		    if (n && (*w_p == 0x0A)) {
+			w_p++; n--;
+		    }
+		}
+	    }
+	    if (! needUnicode) {
+		s = __MKEMPTYSTRING(realLen);
+	        for (n=0, p=__stringVal(s); len; ) {
+		    unsigned char ch;
+
+		    *p = ch = *w_src++;
+		    len--;
+		    if (len && (ch == 0x0D) && (*w_src == 0x0A)) {
+		        *p = 0x0A;
+		        w_src++;
+		        len--;
+		    }
+		    p++;
+	        }
+		*p++ = '\0';
+	    } else {
+	        s = __MKBYTEARRAY(realLen * 2);
+	        __qClass(s) = @global(UnicodeString);
+	        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();
+	    RETURN(s);
+	}
+    }
 
     /* check for format CF_TEXT */
     if (IsClipboardFormatAvailable(CF_TEXT)) {
-        OBJ s;
-        unsigned char *src, *p;
         int n, len, realLen;
 
 	hClip = OpenClipboard(NULL);
@@ -12668,48 +12733,6 @@
 	    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 ? wcslen(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);
 %}
 !
@@ -13878,6 +13901,6 @@
 !WinWorkstation class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.190 2001-09-15 14:21:39 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.191 2001-09-15 14:45:51 cg Exp $'
 ! !
 WinWorkstation initialize!