summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/tagwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'desktop-widgets/tagwidget.cpp')
-rw-r--r--desktop-widgets/tagwidget.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/desktop-widgets/tagwidget.cpp b/desktop-widgets/tagwidget.cpp
index 743e4fbca..e7f2a9bfe 100644
--- a/desktop-widgets/tagwidget.cpp
+++ b/desktop-widgets/tagwidget.cpp
@@ -3,6 +3,7 @@
#include "mainwindow.h"
#include "tab-widgets/maintab.h"
#include <QCompleter>
+#include <QMimeData>
TagWidget::TagWidget(QWidget *parent) : GroupedLineEdit(parent), m_completer(NULL), lastFinishedTag(false)
{
@@ -211,3 +212,43 @@ void TagWidget::focusOutEvent(QFocusEvent *ev)
GroupedLineEdit::focusOutEvent(ev);
emit editingFinished();
}
+
+// Implement simple drag and drop: text dropped onto the widget
+// will be added as a new tag at the end. This overrides
+// Qt's implementation which resulted in weird UI behavior,
+// as the user may succeed in scrolling the view port.
+static void handleDragEvent(QDragMoveEvent *e)
+{
+ if (e->mimeData()->hasFormat(QStringLiteral("text/plain")))
+ e->acceptProposedAction();
+}
+
+void TagWidget::dragEnterEvent(QDragEnterEvent *e)
+{
+ handleDragEvent(e);
+}
+
+void TagWidget::dragMoveEvent(QDragMoveEvent *e)
+{
+ handleDragEvent(e);
+}
+
+void TagWidget::dragLeaveEvent(QDragLeaveEvent *)
+{
+}
+
+void TagWidget::dropEvent(QDropEvent *e)
+{
+ e->acceptProposedAction();
+
+ QString newTag = e->mimeData()->text().trimmed();
+ if (newTag.isEmpty())
+ return;
+
+ QString s = text().trimmed();
+ if (!s.isEmpty())
+ s += ", ";
+ s += newTag;
+ setText(s);
+ emit editingFinished();
+}