diff options
| author | Justin Dailey <unknown> | 2017-07-04 09:54:16 +1000 | 
|---|---|---|
| committer | Justin Dailey <unknown> | 2017-07-04 09:54:16 +1000 | 
| commit | 8918bc9ca9d996d87f30a38fadfe3ae1dd180a5d (patch) | |
| tree | 249481119f27d48e9908c00723274699b20322d1 | |
| parent | 3352a72bcb283ed42d40b7903e058d7170a3db28 (diff) | |
| download | scintilla-mirror-8918bc9ca9d996d87f30a38fadfe3ae1dd180a5d.tar.gz | |
Dropping files fires the SCN_URIDROPPED notification instead of inserting text.
| -rw-r--r-- | doc/ScintillaHistory.html | 4 | ||||
| -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 | 
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;  | 
