mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
desktop: overwrite drag & drop in TagWidget
The interaction of Qt's drag & drop with GroupedLineEdit was exceedingly weird. The user was able to scroll the viewport making the text invisible. This implements a very primitive alternative drag & drop functionality: dropped text is regarged as a distinct tag. This means that it is not possible to modify existing tags by dropping in the middle of them. Arguably, this might even be better than arbitrary drag & drop. But even if not perfect, this fixes a very nasty UI behavior. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
a9a4249b23
commit
d543196059
3 changed files with 47 additions and 1 deletions
|
@ -1,3 +1,4 @@
|
|||
- desktop: fix crash on drag&drop into tag widgets [#3030]
|
||||
- macOS: fix issue with HID dive computers like Suunto Eon Core/Steel [#2999]
|
||||
- windows: add missing modern Vista theme
|
||||
- mobile: add location service warning as required by Google Play
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -26,7 +26,11 @@ slots:
|
|||
void completionHighlighted(const QString &text);
|
||||
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent *e);
|
||||
void keyPressEvent(QKeyEvent *e) override;
|
||||
void dragEnterEvent(QDragEnterEvent *e) override;
|
||||
void dragLeaveEvent(QDragLeaveEvent *e) override;
|
||||
void dragMoveEvent(QDragMoveEvent *e) override;
|
||||
void dropEvent(QDropEvent *e) override;
|
||||
private:
|
||||
void focusOutEvent(QFocusEvent *ev) override;
|
||||
QCompleter *m_completer;
|
||||
|
|
Loading…
Add table
Reference in a new issue