support CJK text copy from wine to KDE and vice versa

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When copy text from wine to KDE programs, I only got
unreadable characters and vice versa. This patch
solves this.

CHANGELOG:
- dlls/x11drv/clipboard.c
  Add support for QT's "text/plain" property to
support for copying CJK text from KDE programs to
wine;
  In X11DRV_CLIPBOARD_CacheDataFormats, exit for loop
after getting the first recognized format;
  Remove unused variable lRequestLength.
- dlls/x11drv/event.c
  Add COMPOUND_TEXT property for STRING additionally
to support for copying CJK text from wine to KDE programs.

__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - File online, calculators, forms, and more
http://tax.yahoo.com
Index: dlls/x11drv/clipboard.c
===================================================================
RCS file: /home/wine/wine/dlls/x11drv/clipboard.c,v
retrieving revision 1.8
diff -u -r1.8 clipboard.c
--- dlls/x11drv/clipboard.c	23 Jan 2003 21:32:35 -0000	1.8
+++ dlls/x11drv/clipboard.c	5 Apr 2003 12:04:38 -0000
@@ -127,7 +127,7 @@
         return 0;
     else if ( 0 == strncmp(itemFmtName, FMT_PREFIX, strlen(FMT_PREFIX)) )
         return RegisterClipboardFormatA(itemFmtName + strlen(FMT_PREFIX));
-    else if ( 0 == strcmp(itemFmtName, "STRING") )
+    else if ( 0 == strcmp(itemFmtName, "STRING") || 0 == strcmp(itemFmtName, "text/plain"))
         return CF_UNICODETEXT;
     else if ( 0 == strcmp(itemFmtName, "PIXMAP")
                 ||  0 == strcmp(itemFmtName, "BITMAP") )
@@ -482,6 +482,7 @@
                       lpFormat->drvData = targetList[i];
                       TRACE("\tAtom# %d: '%s' --> FormatID(%d) %s\n",
                             i, itemFmtName, wFormat, lpFormat->Name);
+                      break;	//Exit after getting the First recognized format
                   }
               }
 
@@ -510,7 +511,7 @@
     Atom	      atype=AnyPropertyType;
     int		      aformat;
     unsigned long     total,nitems,remain,itemSize,val_cnt;
-    long              lRequestLength,bwc;
+    long              bwc;
     unsigned char*    val;
     unsigned char*    buffer;
     LPWINE_CLIPFORMAT lpFormat;
@@ -544,7 +545,6 @@
     }
 
     TRACE("\tretrieving %ld bytes...\n", itemSize * aformat/8);
-    lRequestLength = (itemSize * aformat/8)/4  + 1;
 
    bwc = aformat/8;
    /* we want to read the property, but not it too large of chunks or
@@ -583,8 +583,10 @@
      * Translate the X property into the appropriate Windows clipboard
      * format, if possible.
      */
-    if ( (reqType == XA_STRING)
-         && (atype == XA_STRING) && (aformat == 8) )
+    char *itemFmtName = TSXGetAtomName(display, atype);
+    if ( ( ((reqType == XA_STRING) && (atype == XA_STRING) )
+    	  	||  strcmp(itemFmtName, "text/plain") == 0 )
+          && (aformat == 8) )
     /* convert Unix text to CF_UNICODETEXT */
     {
       int 	   i,inlcount = 0;
Index: dlls/x11drv/event.c
===================================================================
RCS file: /home/wine/wine/dlls/x11drv/event.c,v
retrieving revision 1.18
diff -u -r1.18 event.c
--- dlls/x11drv/event.c	23 Jan 2003 01:29:58 -0000	1.18
+++ dlls/x11drv/event.c	5 Apr 2003 12:04:38 -0000
@@ -610,6 +610,10 @@
             }
             if (!bExists)
             {
+                /* Add COMPOUND_TEXT prop for STRING additionally */
+                if (prop == XA_STRING)
+                    targets[cTargets++] = TSXInternAtom(display, "COMPOUND_TEXT", False);
+
                 targets[cTargets++] = prop;
 
                 /* Add PIXMAP prop for bitmaps additionally */
@@ -721,7 +725,7 @@
     /* Update the X property */
     TRACE("\tUpdating property %s...\n", TSXGetAtomName(display, rprop));
     xRc = TSXChangeProperty(display, requestor, rprop,
-                            XA_STRING, 8, PropModeReplace,
+                            target, 8, PropModeReplace,
                             lpstr, j);
     TRACE("(Rc=%d)\n", xRc);
 
@@ -1007,7 +1011,7 @@
   Atom            xaClipboard = TSXInternAtom(display, "CLIPBOARD", False);
   Atom            xaTargets = TSXInternAtom(display, "TARGETS", False);
   Atom            xaMultiple = TSXInternAtom(display, "MULTIPLE", False);
-
+  Atom            xaCompoud = TSXInternAtom(display, "COMPOUND_TEXT", True);
   /*
    * We can only handle the selection request if :
    * The selection is PRIMARY or CLIPBOARD, AND we can successfully open the clipboard.
@@ -1038,7 +1042,7 @@
       /* MULTIPLE selection request */
       rprop = EVENT_SelectionRequest_MULTIPLE( hWnd, event );
   }
-  else if(event->target == XA_STRING)  /* treat CF_TEXT as Unix text */
+  else if(event->target == XA_STRING || event->target == xaCompoud)  /* treat CF_TEXT as Unix text */
   {
       /* XA_STRING selection request */
       rprop = EVENT_SelectionRequest_STRING( display, request, event->target, rprop );

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux