Warning, file /frameworks/kwidgetsaddons/src/kdragwidgetdecorator.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 2000 Carsten Pfeiffer <pfeiffer@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "kdragwidgetdecorator.h" 0009 0010 #include <QApplication> 0011 #include <QDrag> 0012 #include <QMouseEvent> 0013 #include <QWidget> 0014 0015 class KDragWidgetDecoratorBasePrivate 0016 { 0017 public: 0018 bool dragEnabled = true; 0019 QWidget *decoratedWidget = nullptr; 0020 QPoint startPos; 0021 }; 0022 0023 KDragWidgetDecoratorBase::KDragWidgetDecoratorBase(QWidget *parent) 0024 : QObject(parent) 0025 , d(new KDragWidgetDecoratorBasePrivate) 0026 { 0027 parent->installEventFilter(this); 0028 d->decoratedWidget = parent; 0029 } 0030 0031 KDragWidgetDecoratorBase::~KDragWidgetDecoratorBase() = default; 0032 0033 bool KDragWidgetDecoratorBase::isDragEnabled() const 0034 { 0035 return d->dragEnabled; 0036 } 0037 0038 void KDragWidgetDecoratorBase::setDragEnabled(bool enable) 0039 { 0040 d->dragEnabled = enable; 0041 } 0042 0043 bool KDragWidgetDecoratorBase::eventFilter(QObject *watched, QEvent *event) 0044 { 0045 Q_UNUSED(watched) // except in Q_ASSERT 0046 Q_ASSERT(watched == d->decoratedWidget); 0047 0048 if (!d->dragEnabled) { 0049 return false; 0050 } 0051 0052 if (event->type() == QEvent::MouseButtonPress) { 0053 QMouseEvent *e = static_cast<QMouseEvent *>(event); 0054 d->startPos = e->pos(); 0055 0056 } else if (event->type() == QEvent::MouseMove) { 0057 QMouseEvent *e = static_cast<QMouseEvent *>(event); 0058 if ((e->buttons() & Qt::LeftButton) && (e->pos() - d->startPos).manhattanLength() > QApplication::startDragDistance()) { 0059 startDrag(); 0060 d->decoratedWidget->setProperty("down", false); 0061 return true; 0062 } 0063 } 0064 0065 return false; 0066 } 0067 0068 QWidget *KDragWidgetDecoratorBase::decoratedWidget() const 0069 { 0070 return d->decoratedWidget; 0071 } 0072 0073 QDrag *KDragWidgetDecoratorBase::dragObject() 0074 { 0075 return nullptr; 0076 } 0077 0078 void KDragWidgetDecoratorBase::startDrag() 0079 { 0080 QDrag *drag = dragObject(); 0081 if (drag) { 0082 drag->exec(Qt::CopyAction); 0083 } 0084 } 0085 0086 #include "moc_kdragwidgetdecorator.cpp"