shift-shell/containments/homescreens/folio/widgetcontainer.h
2025-07-16 23:21:46 -04:00

48 lines
1.2 KiB
C++

// SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
#pragma once
#include <QMouseEvent>
#include <QQuickItem>
#include <QTimer>
class WidgetContainer : public QQuickItem
{
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(bool editMode READ editMode WRITE setEditMode NOTIFY editModeChanged)
public:
WidgetContainer(QQuickItem *parent = nullptr);
bool editMode() const;
void setEditMode(bool editMode);
Q_SIGNALS:
void editModeChanged();
void pressReleased();
void startEditMode(QPointF pressPoint);
protected:
bool childMouseEventFilter(QQuickItem *item, QEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseUngrabEvent() override;
private Q_SLOTS:
void startPressAndHold();
void onActiveFocusChanged(bool activeFocus);
private:
bool validMouseEvent(QMouseEvent *event);
bool m_pressed{false};
bool m_editMode{false};
QTimer *m_pressAndHoldTimer{nullptr};
QPointF m_mouseDownPosition{};
};
QML_DECLARE_TYPE(WidgetContainer)