summaryrefslogtreecommitdiff
path: root/src/mplayerwindow.cpp
diff options
context:
space:
mode:
authorMateusz Łukasik <mati75@linuxmint.pl>2015-10-06 15:06:23 +0200
committerMateusz Łukasik <mati75@linuxmint.pl>2015-10-06 15:06:23 +0200
commitcad53e4ce7061f8bc7d49c8123ca6fc6155c79fd (patch)
tree9da50be8116ad843a2f01441c1e65c4816e4927d /src/mplayerwindow.cpp
parentac1e595cfef357d7ef481dbbefb88996af72eb79 (diff)
Imported Upstream version 15.9.0~ds0
Diffstat (limited to 'src/mplayerwindow.cpp')
-rw-r--r--src/mplayerwindow.cpp117
1 files changed, 69 insertions, 48 deletions
diff --git a/src/mplayerwindow.cpp b/src/mplayerwindow.cpp
index 06e5c88..c961168 100644
--- a/src/mplayerwindow.cpp
+++ b/src/mplayerwindow.cpp
@@ -206,9 +206,9 @@ MplayerWindow::MplayerWindow(QWidget* parent, Qt::WindowFlags f)
, animated_logo(false)
#endif
, corner_widget(0)
- , mouse_drag_tracking(false)
- , isMoving(false)
- , startDrag(QPoint(0,0))
+ , drag_state(NOT_DRAGGING)
+ , start_drag(QPoint(0,0))
+ , mouse_drag_tracking(false)
{
setAutoFillBackground(true);
ColorUtils::setBackgroundColor( this, QColor(0,0,0) );
@@ -480,53 +480,74 @@ void MplayerWindow::wheelEvent( QWheelEvent * e ) {
}
}
-/* the code in eventFilter is based on dragmovecharm.cpp, under license GPL 2 or 3:
- https://qt.gitorious.org/qt-labs/graphics-dojo/source/8000ca3b229344ed2ba2ae81ed5ebaee86e9d63a:dragmove/dragmovecharm.cpp
-*/
bool MplayerWindow::eventFilter( QObject * object, QEvent * event ) {
- //qDebug() << "MplayerWindow::eventFilter" << object;
-
- if (!mouse_drag_tracking) return false;
-
- QWidget * w = qobject_cast<QWidget*>(object);
- if (!w) return false;
-
- QEvent::Type type = event->type();
- if (type != QEvent::MouseButtonPress && type != QEvent::MouseButtonRelease && type != QEvent::MouseMove) {
- return false;
- }
-
- QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
- if (!mouseEvent || mouseEvent->modifiers() != Qt::NoModifier) {
- return false;
- }
- Qt::MouseButton button = mouseEvent->button();
-
- bool consumed = false;
-
- if (type == QEvent::MouseButtonPress && button == Qt::LeftButton) {
- startDrag = mouseEvent->globalPos();
- //qDebug() << "MplayerWindow::eventFilter: startDrag:" << startDrag << "obj:" << object->objectName();
- isMoving = true;
- event->accept();
- consumed = true;
- }
-
- if (type == QEvent::MouseButtonRelease) {
- startDrag = QPoint(0, 0);
- isMoving = false;
- }
-
- if (type == QEvent::MouseMove && isMoving) {
- QPoint pos = mouseEvent->globalPos();
- QPoint diff = pos - startDrag;
- //qDebug() << "MplayerWindow:eventFilter: diff" << diff << "obj:" << object->objectName();
- emit mouseMovedDiff(diff);
- startDrag = pos;
- consumed = true;
- }
- return consumed;
+ if (!mouse_drag_tracking)
+ return false;
+
+ QEvent::Type type = event->type();
+ if (type != QEvent::MouseButtonPress
+ && type != QEvent::MouseButtonRelease
+ && type != QEvent::MouseMove)
+ return false;
+
+ QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
+ if (!mouseEvent)
+ return false;
+
+ if (mouseEvent->modifiers() != Qt::NoModifier) {
+ drag_state = NOT_DRAGGING;
+ return false;
+ }
+
+ if (type == QEvent::MouseButtonPress) {
+ if (mouseEvent->button() != Qt::LeftButton) {
+ drag_state = NOT_DRAGGING;
+ return false;
+ }
+
+ drag_state = START_DRAGGING;
+ start_drag = mouseEvent->globalPos();
+ // Don't filter, so others can have a look at it too
+ return false;
+ }
+
+ if (type == QEvent::MouseButtonRelease) {
+ if (drag_state != DRAGGING || mouseEvent->button() != Qt::LeftButton) {
+ drag_state = NOT_DRAGGING;
+ return false;
+ }
+
+ // Stop dragging and eat event
+ drag_state = NOT_DRAGGING;
+ event->accept();
+ return true;
+ }
+
+ // type == QEvent::MouseMove
+ if (drag_state == NOT_DRAGGING)
+ return false;
+
+ // buttons() note the s
+ if (mouseEvent->buttons() != Qt::LeftButton) {
+ drag_state = NOT_DRAGGING;
+ return false;
+ }
+
+ QPoint pos = mouseEvent->globalPos();
+ QPoint diff = pos - start_drag;
+ if (drag_state == START_DRAGGING) {
+ // Don't start dragging before moving at least DRAG_THRESHOLD pixels
+ if (abs(diff.x()) < DRAG_THRESHOLD && abs(diff.y()) < DRAG_THRESHOLD)
+ return false;
+
+ drag_state = DRAGGING;
+ }
+
+ emit mouseMovedDiff(diff);
+ start_drag = pos;
+ event->accept();
+ return true;
}
QSize MplayerWindow::sizeHint() const {