summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGreg Ercolano <erco@seriss.com>2013-02-14 18:40:04 +0000
committerGreg Ercolano <erco@seriss.com>2013-02-14 18:40:04 +0000
commit8f8c52939e19ac3da43aa72e782ec69a6c85cdde (patch)
tree1072ec0967158557fa92794dfc7cf9137e01a05e /src
parentef67cdc9d0b2eb67ed33ccce2e955436c1eefc73 (diff)
Fixes STR#2930:
Applying Chris's patch to fix d+d of text selections from Firefox/Thunderbird -> FLTK. Also applied Greg's fix for d+d of utf8 text in same use case. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9824 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
-rw-r--r--src/Fl_x.cxx54
1 files changed, 31 insertions, 23 deletions
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx
index 44380e5a1..17a65fb3c 100644
--- a/src/Fl_x.cxx
+++ b/src/Fl_x.cxx
@@ -319,6 +319,7 @@ Atom fl_XdndFinished;
//Atom fl_XdndProxy;
Atom fl_XdndURIList;
Atom fl_Xatextplainutf;
+Atom fl_Xatextplainutf2; // STR#2930
Atom fl_Xatextplain;
static Atom fl_XaText;
Atom fl_XaCompoundText;
@@ -621,6 +622,7 @@ void fl_open_display(Display* d) {
fl_XdndEnter = XInternAtom(d, "XdndEnter", 0);
fl_XdndURIList = XInternAtom(d, "text/uri-list", 0);
fl_Xatextplainutf = XInternAtom(d, "text/plain;charset=UTF-8",0);
+ fl_Xatextplainutf2 = XInternAtom(d, "text/plain;charset=utf-8",0); // Firefox/Thunderbird needs this - See STR#2930
fl_Xatextplain = XInternAtom(d, "text/plain", 0);
fl_XaText = XInternAtom(d, "TEXT", 0);
fl_XaCompoundText = XInternAtom(d, "COMPOUND_TEXT", 0);
@@ -1023,13 +1025,17 @@ int fl_handle(const XEvent& thisevent)
Atom type = XA_STRING;
for (unsigned i = 0; i<count; i++) {
Atom t = ((Atom*)portion)[i];
- if (t == fl_Xatextplainutf ||
- t == fl_Xatextplain ||
- t == fl_XaUtf8String) {type = t; break;}
- // rest are only used if no utf-8 available:
- if (t == fl_XaText ||
- t == fl_XaTextUriList ||
- t == fl_XaCompoundText) type = t;
+ if (t == fl_Xatextplainutf ||
+ t == fl_Xatextplainutf2 ||
+ t == fl_Xatextplain ||
+ t == fl_XaUtf8String) {
+ type = t;
+ break;
+ }
+ // rest are only used if no utf-8 available:
+ if (t == fl_XaText ||
+ t == fl_XaTextUriList ||
+ t == fl_XaCompoundText) type = t;
}
XFree(portion);
Atom property = xevent.xselection.property;
@@ -1096,7 +1102,8 @@ int fl_handle(const XEvent& thisevent)
e.target == fl_XaCompoundText ||
e.target == fl_XaText ||
e.target == fl_Xatextplain ||
- e.target == fl_Xatextplainutf) {
+ e.target == fl_Xatextplainutf ||
+ e.target == fl_Xatextplainutf2) {
// clobber the target type, this seems to make some applications
// behave that insist on asking for XA_TEXT instead of UTF8_STRING
// Does not change XA_STRING as that breaks xclipboard.
@@ -1186,23 +1193,24 @@ int fl_handle(const XEvent& thisevent)
}
// Loop through the source types and pick the first text type...
- int i;
-
- for (i = 0; fl_dnd_source_types[i]; i ++)
- {
-// printf("fl_dnd_source_types[%d] = %ld (%s)\n", i,
-// fl_dnd_source_types[i],
-// XGetAtomName(fl_display, fl_dnd_source_types[i]));
-
- if (!strncmp(XGetAtomName(fl_display, fl_dnd_source_types[i]),
- "text/", 5))
+ unsigned i;
+ Atom type = ((Atom*)fl_dnd_source_types)[0];
+ for (i = 0; fl_dnd_source_types[i]; i ++) {
+ Atom t = ((Atom*)fl_dnd_source_types)[i];
+ //printf("fl_dnd_source_types[%d]=%ld(%s)\n",i,t,XGetAtomName(fl_display,t));
+ if (t == fl_Xatextplainutf || // "text/plain;charset=UTF-8"
+ t == fl_Xatextplainutf2 || // "text/plain;charset=utf-8" -- See STR#2930
+ t == fl_Xatextplain || // "text/plain"
+ t == fl_XaUtf8String) { // "UTF8_STRING"
+ type = t;
break;
+ }
+ // rest are only used if no utf-8 available:
+ if (t == fl_XaText || // "TEXT"
+ t == fl_XaTextUriList || // "text/uri-list"
+ t == fl_XaCompoundText) type = t; // "COMPOUND_TEXT"
}
-
- if (fl_dnd_source_types[i])
- fl_dnd_type = fl_dnd_source_types[i];
- else
- fl_dnd_type = fl_dnd_source_types[0];
+ fl_dnd_type = type;
event = FL_DND_ENTER;
Fl::e_text = unknown;