aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/ScintillaHistory.html4
-rw-r--r--qt/ScintillaEditBase/ScintillaEditBase.cpp15
-rw-r--r--qt/ScintillaEditBase/ScintillaEditBase.h2
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.cpp16
-rw-r--r--qt/ScintillaEditBase/ScintillaQt.h2
5 files changed, 34 insertions, 5 deletions
diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html
index 0df7cb172..ab34f6fa6 100644
--- a/doc/ScintillaHistory.html
+++ b/doc/ScintillaHistory.html
@@ -572,6 +572,10 @@
These changes make Qt behave more like the other platforms.
</li>
<li>
+ On Qt, dropping files on Scintilla now fires the SCN_URIDROPPED notification
+ instead of inserting text.
+ </li>
+ <li>
On Qt, mouse tracking is reenabled when the window is reshown.
<a href="http://sourceforge.net/p/scintilla/bugs/1948/">Bug #1948</a>.
</li>
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;