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]
|
- macOS: fix issue with HID dive computers like Suunto Eon Core/Steel [#2999]
|
||||||
- windows: add missing modern Vista theme
|
- windows: add missing modern Vista theme
|
||||||
- mobile: add location service warning as required by Google Play
|
- mobile: add location service warning as required by Google Play
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "tab-widgets/maintab.h"
|
#include "tab-widgets/maintab.h"
|
||||||
#include <QCompleter>
|
#include <QCompleter>
|
||||||
|
#include <QMimeData>
|
||||||
|
|
||||||
TagWidget::TagWidget(QWidget *parent) : GroupedLineEdit(parent), m_completer(NULL), lastFinishedTag(false)
|
TagWidget::TagWidget(QWidget *parent) : GroupedLineEdit(parent), m_completer(NULL), lastFinishedTag(false)
|
||||||
{
|
{
|
||||||
|
@ -211,3 +212,43 @@ void TagWidget::focusOutEvent(QFocusEvent *ev)
|
||||||
GroupedLineEdit::focusOutEvent(ev);
|
GroupedLineEdit::focusOutEvent(ev);
|
||||||
emit editingFinished();
|
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);
|
void completionHighlighted(const QString &text);
|
||||||
|
|
||||||
protected:
|
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:
|
private:
|
||||||
void focusOutEvent(QFocusEvent *ev) override;
|
void focusOutEvent(QFocusEvent *ev) override;
|
||||||
QCompleter *m_completer;
|
QCompleter *m_completer;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue