Author: manolo
Date: 2010-12-09 13:52:07 -0800 (Thu, 09 Dec 2010)
New Revision: 7992
Log:
STR #2472: X11 only: fixes DnD between FLTK and other apps for non-ASCII text.

Modified:
   branches/branch-1.3/src/Fl_x.cxx
   branches/branch-1.3/src/fl_dnd_x.cxx

Modified: branches/branch-1.3/src/Fl_x.cxx
===================================================================
--- branches/branch-1.3/src/Fl_x.cxx    2010-12-09 20:26:00 UTC (rev 7991)
+++ branches/branch-1.3/src/Fl_x.cxx    2010-12-09 21:52:07 UTC (rev 7992)
@@ -278,6 +278,20 @@
 #  endif
 }
 
+// replace \r\n by \n
+static void convert_crlf(unsigned char *string, long& len)
+{
+  unsigned char *p = string, *q = p + len;
+  while (p < q) {
+    if (*p == '\r' && *(p + 1) == '\n' && p + 1 < q) {
+      memmove(p, p + 1, q - p - 1);
+      q--;
+      len--;
+      }
+    p++;
+    }
+}
+
 ////////////////////////////////////////////////////////////////
 
 Display *fl_display;
@@ -955,23 +969,15 @@
       text_prop.encoding=actual;
       text_prop.nitems=count;
       char **text_list;
-#ifndef X_HAVE_UTF8_STRING
       text_list = (char**)&portion;
-#else
-      int list_count = 0;
-      Xutf8TextPropertyToTextList(fl_display, (const 
XTextProperty*)&text_prop, &text_list, &list_count);
-      if (list_count == 0) text_list = (char**)&portion;
-#endif
       int bytesnew = strlen(*text_list)+1; 
       buffer = (unsigned char*)realloc(buffer, bytesread+bytesnew+remaining);
       memcpy(buffer+bytesread, *text_list, bytesnew);
       XFree(portion); 
-#ifdef X_HAVE_UTF8_STRING
-      if (list_count > 0) XFreeStringList(text_list);
-#endif
       bytesread += bytesnew - 1;
       if (!remaining) break;
     }
+    convert_crlf(buffer, bytesread);
     Fl::e_text = buffer ? (char*)buffer : (char *)"";
     Fl::e_length = bytesread;
     int old_event = Fl::e_number;

Modified: branches/branch-1.3/src/fl_dnd_x.cxx
===================================================================
--- branches/branch-1.3/src/fl_dnd_x.cxx        2010-12-09 20:26:00 UTC (rev 
7991)
+++ branches/branch-1.3/src/fl_dnd_x.cxx        2010-12-09 21:52:07 UTC (rev 
7992)
@@ -43,6 +43,7 @@
 extern Atom fl_XdndFinished;
 //extern Atom fl_XdndProxy;
 extern Atom fl_XdndURIList;
+extern Atom fl_XaUtf8String;
 
 extern char fl_i_own_selection[2];
 extern char *fl_selection_buffer[2];
@@ -149,7 +150,7 @@
         } else {
          // Send plain text...
          fl_sendClientMessage(target_window, fl_XdndEnter, source_window,
-                              dndversion<<24, XA_STRING, 0, 0);
+                              dndversion<<24, fl_XaUtf8String, 0, 0);
        }
       }
     }

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to