diff --git a/src/represent/resultwidget.cpp b/src/represent/resultwidget.cpp index 1f75fe2..6f69f07 100644 --- a/src/represent/resultwidget.cpp +++ b/src/represent/resultwidget.cpp @@ -150,19 +150,35 @@ void ResultWidget::updateSettings() bool ResultWidget::eventFilter(QObject *watched, QEvent *event) { - if (event->type() == QEvent::MouseButtonPress) { - const auto button = static_cast(event)->button(); - if (button == Qt::RightButton) { - contextMenu_->exec(QCursor::pos()); - } else { - hide(); - } - } else if (event->type() == QEvent::WindowDeactivate) { + if (event->type() == QEvent::WindowDeactivate) hide(); - } return QWidget::eventFilter(watched, event); } +void ResultWidget::mousePressEvent(QMouseEvent *event) +{ + const auto button = event->button(); + if (button == Qt::RightButton) { + contextMenu_->exec(QCursor::pos()); + return; + } + + if (button == Qt::MiddleButton) { + lastPos_ = event->pos(); + return; + } + + hide(); +} + +void ResultWidget::mouseMoveEvent(QMouseEvent *event) +{ + if (!(event->buttons() & Qt::MiddleButton)) + return; + + move(pos() + event->pos() - lastPos_); +} + void ResultWidget::edit() { representer_.edit(task_); diff --git a/src/represent/resultwidget.h b/src/represent/resultwidget.h index 6f645a3..0577e1b 100644 --- a/src/represent/resultwidget.h +++ b/src/represent/resultwidget.h @@ -21,6 +21,10 @@ public: bool eventFilter(QObject* watched, QEvent* event) override; +protected: + void mousePressEvent(QMouseEvent* event) override; + void mouseMoveEvent(QMouseEvent* event) override; + private: void edit(); void copyImage(); @@ -34,4 +38,5 @@ private: QLabel* separator_; QLabel* translated_; QMenu* contextMenu_; + QPoint lastPos_; };