summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl_x.cxx3
-rw-r--r--src/fl_dnd_x.cxx17
2 files changed, 18 insertions, 2 deletions
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx
index d930c2ec7..7b0f1149e 100644
--- a/src/Fl_x.cxx
+++ b/src/Fl_x.cxx
@@ -286,6 +286,7 @@ Atom fl_XdndStatus;
Atom fl_XdndActionCopy;
Atom fl_XdndFinished;
//Atom fl_XdndProxy;
+Atom fl_XdndURIList;
static void fd_callback(int,void *) {
@@ -339,6 +340,8 @@ void fl_open_display(Display* d) {
fl_XdndActionCopy = XInternAtom(d, "XdndActionCopy", 0);
fl_XdndFinished = XInternAtom(d, "XdndFinished", 0);
//fl_XdndProxy = XInternAtom(d, "XdndProxy", 0);
+ fl_XdndEnter = XInternAtom(d, "XdndEnter", 0);
+ fl_XdndURIList = XInternAtom(d, "text/uri-list", 0);
Fl::add_fd(ConnectionNumber(d), POLLIN, fd_callback);
diff --git a/src/fl_dnd_x.cxx b/src/fl_dnd_x.cxx
index feb83126f..6d7ac1590 100644
--- a/src/fl_dnd_x.cxx
+++ b/src/fl_dnd_x.cxx
@@ -28,6 +28,7 @@
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/x.H>
+#include "flstring.h"
extern Atom fl_XdndAware;
@@ -41,8 +42,10 @@ extern Atom fl_XdndStatus;
extern Atom fl_XdndActionCopy;
extern Atom fl_XdndFinished;
//extern Atom fl_XdndProxy;
+extern Atom fl_XdndURIList;
extern char fl_i_own_selection[2];
+extern char *fl_selection_buffer[2];
extern void fl_sendClientMessage(Window window, Atom message,
unsigned long d0,
@@ -122,8 +125,18 @@ int Fl::dnd() {
if (local_window) {
local_handle(FL_DND_ENTER, local_window);
} else if (dndversion) {
- fl_sendClientMessage(target_window, fl_XdndEnter, source_window,
- dndversion<<24, XA_STRING, 0, 0);
+ if (strncmp(fl_selection_buffer[0], "file:///", 8) &&
+ strncmp(fl_selection_buffer[0], "ftp://", 6) &&
+ strncmp(fl_selection_buffer[0], "http://", 7) &&
+ strncmp(fl_selection_buffer[0], "https://", 8)) {
+ // Send plain text...
+ fl_sendClientMessage(target_window, fl_XdndEnter, source_window,
+ dndversion<<24, XA_STRING, 0, 0);
+ } else {
+ // Send file/URI list...
+ fl_sendClientMessage(target_window, fl_XdndEnter, source_window,
+ dndversion<<24, fl_XdndURIList, XA_STRING, 0);
+ }
}
}
if (local_window) {