mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-02 15:45:21 +00:00

The tray in fashion mode is not the same object as the tray in efficient mode, and only one xembedtray is vaild, so there will be a contention between the two. The latter xembedtray who call reparent() will be the vaild one. So drag from expandiconwidget, the xembed tray click in the efficient mode get no response while the tray click get response when switching from the fashion mode. log: make tray(both fashion and efficient mode) to be one object
85 lines
2.2 KiB
C++
85 lines
2.2 KiB
C++
// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
|
// SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd.
|
|
//
|
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
|
|
#ifndef TRAYGRIDVIEW_H
|
|
#define TRAYGRIDVIEW_H
|
|
|
|
#include "constants.h"
|
|
|
|
#include <DListView>
|
|
|
|
#include <QPropertyAnimation>
|
|
|
|
DWIDGET_USE_NAMESPACE
|
|
|
|
class TrayGridView : public DListView
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
static TrayGridView *getDockTrayGridView(QWidget *parent = Q_NULLPTR);
|
|
static TrayGridView *getIconTrayGridView(QWidget *parent = Q_NULLPTR);
|
|
|
|
void setPosition(Dock::Position position);
|
|
Dock::Position position() const;
|
|
QSize suitableSize() const;
|
|
QSize suitableSize(const Dock::Position &position) const;
|
|
void setDragDistance(int pixel);
|
|
void setAnimationProperty(const QEasingCurve::Type easing, const int duringTime = 250);
|
|
const QModelIndex modelIndex(const int index) const;
|
|
const QRect indexRect(const QModelIndex &index) const;
|
|
|
|
void handleDropEvent(QDropEvent *e);
|
|
|
|
public Q_SLOTS:
|
|
void onUpdateEditorView();
|
|
|
|
Q_SIGNALS:
|
|
void dragLeaved();
|
|
void dragEntered();
|
|
void dragFinished();
|
|
void requestHide();
|
|
|
|
private Q_SLOTS:
|
|
void clearDragModelIndex();
|
|
void dropSwap();
|
|
void moveAnimation();
|
|
|
|
protected:
|
|
void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
|
|
void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
|
|
void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
|
|
|
|
void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
|
|
void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
|
|
void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
|
|
void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
|
|
bool beginDrag(Qt::DropActions supportedActions);
|
|
|
|
private:
|
|
explicit TrayGridView(QWidget *parent = Q_NULLPTR);
|
|
|
|
void initUi();
|
|
void createAnimation(const int pos, const bool moveNext, const bool isLastAni);
|
|
const QModelIndex getIndexFromPos(QPoint currentPoint) const;
|
|
bool mouseInDock();
|
|
|
|
private:
|
|
QEasingCurve::Type m_aniCurveType;
|
|
int m_aniDuringTime;
|
|
|
|
QPoint m_dragPos;
|
|
QPoint m_dropPos;
|
|
|
|
int m_dragDistance;
|
|
|
|
QTimer *m_aniStartTime;
|
|
bool m_pressed;
|
|
bool m_aniRunning;
|
|
Dock::Position m_positon;
|
|
};
|
|
|
|
#endif // GRIDVIEW_H
|