From 96735846beb4d067eac220c48f5d8c18f178e4c1 Mon Sep 17 00:00:00 2001 From: Roland Knall Date: Tue, 7 Nov 2017 15:51:43 +0000 Subject: Qt: Clean Drag-n-Drop Mimetype for toolbar Cleans up the mime type to use a class instead of a mimetype string Change-Id: I122ba9b39de86d8e263f2204715911a2b0ac75cd Reviewed-on: https://code.wireshark.org/review/24286 Petri-Dish: Roland Knall Tested-by: Petri Dish Buildbot Reviewed-by: Roland Knall --- ui/qt/utils/wireshark_mime_data.cpp | 13 +++++++++++-- ui/qt/utils/wireshark_mime_data.h | 14 ++++++++++++++ ui/qt/widgets/drag_drop_toolbar.cpp | 23 +++++++++++++++-------- 3 files changed, 40 insertions(+), 10 deletions(-) (limited to 'ui') diff --git a/ui/qt/utils/wireshark_mime_data.cpp b/ui/qt/utils/wireshark_mime_data.cpp index 7844ee3fd2..690e1911f4 100644 --- a/ui/qt/utils/wireshark_mime_data.cpp +++ b/ui/qt/utils/wireshark_mime_data.cpp @@ -25,8 +25,7 @@ DisplayFilterMimeData::DisplayFilterMimeData(QString description, QString filter QMimeData(), description_(description), filter_(filter) -{ -} +{} QString DisplayFilterMimeData::description() const { @@ -38,6 +37,16 @@ QString DisplayFilterMimeData::filter() const return filter_; } +ToolbarEntryMimeData::ToolbarEntryMimeData(int pos) : + QMimeData(), + pos_(pos) +{} + +int ToolbarEntryMimeData::position() const +{ + return pos_; +} + /* * Editor modelines * diff --git a/ui/qt/utils/wireshark_mime_data.h b/ui/qt/utils/wireshark_mime_data.h index d2b4c79e82..da7417c41a 100644 --- a/ui/qt/utils/wireshark_mime_data.h +++ b/ui/qt/utils/wireshark_mime_data.h @@ -40,6 +40,20 @@ private: }; +class ToolbarEntryMimeData: public QMimeData { + Q_OBJECT +public: + + ToolbarEntryMimeData(int pos); + + int position() const; + +private: + + int pos_; + +}; + #endif /* UI_QT_UTILS_WIRESHARK_MIME_DATA_H_ */ /* diff --git a/ui/qt/widgets/drag_drop_toolbar.cpp b/ui/qt/widgets/drag_drop_toolbar.cpp index aa2f0f9aeb..526e2c48db 100644 --- a/ui/qt/widgets/drag_drop_toolbar.cpp +++ b/ui/qt/widgets/drag_drop_toolbar.cpp @@ -108,10 +108,7 @@ bool DragDropToolBar::eventFilter(QObject * obj, QEvent * event) > QApplication::startDragDistance()) { QDrag * drag = new QDrag(this); - QMimeData *mimeData = new QMimeData; - mimeData->setData("application/x-wireshark-toolbar-entry", - elem->property(drag_drop_toolbar_action_).toByteArray()); - drag->setMimeData(mimeData); + drag->setMimeData(new ToolbarEntryMimeData(elem->property(drag_drop_toolbar_action_).toInt())); #if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) qreal dpr = window()->windowHandle()->devicePixelRatio(); @@ -134,7 +131,7 @@ bool DragDropToolBar::eventFilter(QObject * obj, QEvent * event) void DragDropToolBar::dragEnterEvent(QDragEnterEvent *event) { - if (event->mimeData()->hasFormat("application/x-wireshark-toolbar-entry")) + if (qobject_cast(event->mimeData())) { if (event->source() == this) { event->setDropAction(Qt::MoveAction); @@ -150,6 +147,14 @@ void DragDropToolBar::dragEnterEvent(QDragEnterEvent *event) } else { event->acceptProposedAction(); } + } else if (qobject_cast(event->mimeData())) { + if ( event->source() != this ) + { + event->setDropAction(Qt::CopyAction); + event->accept(); + } else { + event->acceptProposedAction(); + } } else { event->ignore(); } @@ -157,7 +162,7 @@ void DragDropToolBar::dragEnterEvent(QDragEnterEvent *event) void DragDropToolBar::dragMoveEvent(QDragMoveEvent *event) { - if (event->mimeData()->hasFormat("application/x-wireshark-toolbar-entry")) + if (qobject_cast(event->mimeData())) { if (event->source() == this) { event->setDropAction(Qt::MoveAction); @@ -192,9 +197,11 @@ void DragDropToolBar::dragMoveEvent(QDragMoveEvent *event) void DragDropToolBar::dropEvent(QDropEvent *event) { /* Moving items around */ - if (event->mimeData()->hasFormat("application/x-wireshark-toolbar-entry")) + if (qobject_cast(event->mimeData())) { - int oldPos = event->mimeData()->data("application/x-wireshark-toolbar-entry").toInt(); + const ToolbarEntryMimeData * data = qobject_cast(event->mimeData()); + + int oldPos = data->position(); int newPos = -1; QAction * action = actionAt(event->pos()); if ( action && actions().at(oldPos) ) -- cgit v1.2.3