static void queryNewDropContextData(DroppingContext* dropContext, GtkWidget* widget, guint time) { GdkDragContext* gdkContext = dropContext->gdkContext; Vector<GdkAtom> acceptableTargets(PasteboardHelper::defaultPasteboardHelper()->dropAtomsForContext(widget, gdkContext)); dropContext->pendingDataRequests = acceptableTargets.size(); for (size_t i = 0; i < acceptableTargets.size(); i++) gtk_drag_get_data(widget, gdkContext, acceptableTargets.at(i), time); }
DataObjectGtk* DragAndDropHandler::requestDragData(GdkDragContext* context, const IntPoint& position, unsigned time) { std::unique_ptr<DroppingContext>& droppingContext = m_droppingContexts.add(context, nullptr).iterator->value; if (!droppingContext) { GtkWidget* widget = m_page.viewWidget(); droppingContext = std::make_unique<DroppingContext>(context, position); Vector<GdkAtom> acceptableTargets(PasteboardHelper::defaultPasteboardHelper()->dropAtomsForContext(widget, droppingContext->gdkContext)); droppingContext->pendingDataRequests = acceptableTargets.size(); for (auto& target : acceptableTargets) gtk_drag_get_data(widget, droppingContext->gdkContext, target, time); } else droppingContext->lastMotionPosition = position; // Don't send any drag information to WebCore until we've retrieved all the data for this drag operation. // Otherwise we'd have to block to wait for the drag's data. if (droppingContext->pendingDataRequests > 0) return nullptr; return droppingContext->dataObject.get(); }