Index: /trunk/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp
===================================================================
--- /trunk/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp	(revision 85926)
+++ /trunk/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp	(revision 85927)
@@ -48,4 +48,18 @@
 #ifdef DEBUG
 //# define VBOX_DND_DEBUG_WND
+#endif
+
+/* Enable this to handle drag'n drop "promises".
+ * This is needed for supporting certain applications (i.e. PcManFM on LXDE),
+ * which require the drag'n drop meta data a lot earlier than actually needed.
+ * That behavior is similar to macOS' drag'n drop promises, hence the name.
+ *
+ * Those applications query the data right while dragging over them (see GtkWidget::drag-motion),
+ * instead of when the source dropped the data (GtkWidget::drag-drop).
+ *
+ * This might be entirely implementation-specific, so not being a bug in GTK/GDK. Also see #9820.
+ */
+#ifdef VBOX_WITH_DRAG_AND_DROP_PROMISES
+# undef VBOX_WITH_DRAG_AND_DROP_PROMISES
 #endif
 
@@ -1338,4 +1352,7 @@
                             pEvReq->requestor, pszWndName, xAtomToString(pEvReq->target).c_str());
 
+#ifdef VBOX_WITH_DRAG_AND_DROP_PROMISES
+# error "Implement me!"
+#else
                 /* Did we not drop our stuff to the guest yet? Bail out. */
                 if (m_enmState != Dropped)
@@ -1347,4 +1364,5 @@
                 else
                 {
+#endif /* VBOX_WITH_DRAG_AND_DROP_PROMISES */
                     /* Get the data format the requestor wants from us. */
                     RTCString strFormat = xAtomToString(pEvReq->target);
@@ -1373,5 +1391,7 @@
                                  gX11->xErrorToString(xRc).c_str()));
                     RT_NOREF(xRc);
+#ifndef VBOX_WITH_DRAG_AND_DROP_PROMISES
                 }
+#endif
             }
             /* Anything else. */
