diff options
Diffstat (limited to 'qt')
-rw-r--r-- | qt/ScintillaEditBase/ScintillaEditBase.cpp | 15 | ||||
-rw-r--r-- | qt/ScintillaEditBase/ScintillaEditBase.h | 2 | ||||
-rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.cpp | 16 | ||||
-rw-r--r-- | qt/ScintillaEditBase/ScintillaQt.h | 2 |
4 files changed, 30 insertions, 5 deletions
diff --git a/qt/ScintillaEditBase/ScintillaEditBase.cpp b/qt/ScintillaEditBase/ScintillaEditBase.cpp index dabdce105..bfd9ddd14 100644 --- a/qt/ScintillaEditBase/ScintillaEditBase.cpp +++ b/qt/ScintillaEditBase/ScintillaEditBase.cpp @@ -376,7 +376,9 @@ void ScintillaEditBase::contextMenuEvent(QContextMenuEvent *event) void ScintillaEditBase::dragEnterEvent(QDragEnterEvent *event) { - if (event->mimeData()->hasText()) { + if (event->mimeData()->hasUrls()) { + event->acceptProposedAction(); + } else if (event->mimeData()->hasText()) { event->acceptProposedAction(); Point point = PointFromQPoint(event->pos()); @@ -393,7 +395,9 @@ void ScintillaEditBase::dragLeaveEvent(QDragLeaveEvent * /* event */) void ScintillaEditBase::dragMoveEvent(QDragMoveEvent *event) { - if (event->mimeData()->hasText()) { + if (event->mimeData()->hasUrls()) { + event->acceptProposedAction(); + } else if (event->mimeData()->hasText()) { event->acceptProposedAction(); Point point = PointFromQPoint(event->pos()); @@ -405,7 +409,10 @@ void ScintillaEditBase::dragMoveEvent(QDragMoveEvent *event) void ScintillaEditBase::dropEvent(QDropEvent *event) { - if (event->mimeData()->hasText()) { + if (event->mimeData()->hasUrls()) { + event->acceptProposedAction(); + sqt->DropUrls(event->mimeData()); + } else if (event->mimeData()->hasText()) { event->acceptProposedAction(); Point point = PointFromQPoint(event->pos()); @@ -746,7 +753,7 @@ void ScintillaEditBase::notifyParent(SCNotification scn) break; case SCN_URIDROPPED: - emit uriDropped(); + emit uriDropped(QString::fromUtf8(scn.text)); break; case SCN_DWELLSTART: diff --git a/qt/ScintillaEditBase/ScintillaEditBase.h b/qt/ScintillaEditBase/ScintillaEditBase.h index 8ca05da46..257c06a34 100644 --- a/qt/ScintillaEditBase/ScintillaEditBase.h +++ b/qt/ScintillaEditBase/ScintillaEditBase.h @@ -95,7 +95,7 @@ signals: void needShown(int position, int length); void painted(); void userListSelection(); // Wants some args. - void uriDropped(); // Wants some args. + void uriDropped(const QString &uri); void dwellStart(int x, int y); void dwellEnd(int x, int y); void zoom(int zoom); diff --git a/qt/ScintillaEditBase/ScintillaQt.cpp b/qt/ScintillaEditBase/ScintillaQt.cpp index 54e5ccbde..73319bda8 100644 --- a/qt/ScintillaEditBase/ScintillaQt.cpp +++ b/qt/ScintillaEditBase/ScintillaQt.cpp @@ -401,6 +401,15 @@ void ScintillaQt::NotifyParent(SCNotification scn) emit notifyParent(scn); } +void ScintillaQt::NotifyURIDropped(const char *uri) +{ + SCNotification scn = {}; + scn.nmhdr.code = SCN_URIDROPPED; + scn.text = uri; + + NotifyParent(scn); +} + bool ScintillaQt::FineTickerRunning(TickReason reason) { return timers[reason] != 0; @@ -748,6 +757,13 @@ void ScintillaQt::Drop(const Point &point, const QMimeData *data, bool move) DropAt(movePos, bytes, len, move, rectangular); } +void ScintillaQt::DropUrls(const QMimeData *data) +{ + foreach(const QUrl &url, data->urls()) { + NotifyURIDropped(url.toString().toUtf8().constData()); + } +} + void ScintillaQt::timerEvent(QTimerEvent *event) { for (TickReason tr=tickCaret; tr<=tickDwell; tr = static_cast<TickReason>(tr+1)) { diff --git a/qt/ScintillaEditBase/ScintillaQt.h b/qt/ScintillaEditBase/ScintillaQt.h index e4471572b..fa6992c7c 100644 --- a/qt/ScintillaEditBase/ScintillaQt.h +++ b/qt/ScintillaEditBase/ScintillaQt.h @@ -120,6 +120,7 @@ private: void NotifyChange() override; void NotifyFocus(bool focus) override; void NotifyParent(SCNotification scn) override; + void NotifyURIDropped(const char *uri); int timers[tickDwell+1]; bool FineTickerRunning(TickReason reason) override; void FineTickerStart(TickReason reason, int millis, int tolerance) override; @@ -151,6 +152,7 @@ protected: void DragMove(const Point &point); void DragLeave(); void Drop(const Point &point, const QMimeData *data, bool move); + void DropUrls(const QMimeData *data); void timerEvent(QTimerEvent *event) override; |