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

优化应用预览界面显示方式,使用滚动方式加载预览界面 在打开应用程序很多时,无法显示更多预览界面,不方便切换预览 Log: 修复可多开的应用打开超过20个后,任务栏预览效果不能全部展示的问题 Bug: https://pms.uniontech.com/bug-view-152143.html Bug: https://pms.uniontech.com/bug-view-162757.html Influence: 可多开的应用打开超过20个后,预览界面可以滚动选择未显示的界面
92 lines
2.3 KiB
C++
92 lines
2.3 KiB
C++
// SPDX-FileCopyrightText: 2011 - 2022 UnionTech Software Technology Co., Ltd.
|
|
//
|
|
// SPDX-License-Identifier: LGPL-3.0-or-later
|
|
|
|
#ifndef PREVIEWCONTAINER_H
|
|
#define PREVIEWCONTAINER_H
|
|
|
|
#include <QWidget>
|
|
#include <QBoxLayout>
|
|
#include <QTimer>
|
|
#include <QScrollArea>
|
|
#include <QScrollerProperties>
|
|
|
|
#include "constants.h"
|
|
#include "appsnapshot.h"
|
|
#include "floatingpreview.h"
|
|
|
|
#include <com_deepin_dde_daemon_dock_entry.h>
|
|
|
|
#include <DWindowManagerHelper>
|
|
|
|
DWIDGET_USE_NAMESPACE
|
|
|
|
class PreviewContainer : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit PreviewContainer(QWidget *parent = 0);
|
|
|
|
enum TitleDisplayMode {
|
|
HoverShow = 0,
|
|
AlwaysShow = 1,
|
|
AlwaysHide = 2,
|
|
};
|
|
|
|
signals:
|
|
void requestActivateWindow(const WId wid) const;
|
|
void requestPreviewWindow(const WId wid) const;
|
|
void requestCheckWindows() const;
|
|
void requestCancelPreviewWindow() const;
|
|
void requestHidePopup() const;
|
|
|
|
public:
|
|
void setWindowInfos(const WindowInfoMap &infos, const WindowList &allowClose);
|
|
void setTitleDisplayMode(int mode);
|
|
|
|
public slots:
|
|
void updateLayoutDirection(const Dock::Position dockPos);
|
|
void updateDockSize(const int size);
|
|
void checkMouseLeave();
|
|
void prepareHide();
|
|
|
|
private:
|
|
void adjustSize(bool composite);
|
|
void appendSnapWidget(const WId wid);
|
|
|
|
void enterEvent(QEvent *e) override;
|
|
void leaveEvent(QEvent *e) override;
|
|
void dragEnterEvent(QDragEnterEvent *e) override;
|
|
void dragLeaveEvent(QDragLeaveEvent *e) override;
|
|
bool eventFilter(QObject *watcher, QEvent *event) override;
|
|
|
|
private slots:
|
|
void onSnapshotClicked(const WId wid);
|
|
void previewEntered(const WId wid);
|
|
void previewFloating();
|
|
void onRequestCloseAppSnapshot();
|
|
|
|
private:
|
|
bool m_needActivate;
|
|
bool m_canPreview;
|
|
int m_dockSize;
|
|
Dock::Position m_dockPos;
|
|
QMap<WId, AppSnapshot *> m_snapshots;
|
|
|
|
FloatingPreview *m_floatingPreview;
|
|
QScrollArea * m_scrollArea;
|
|
QWidget *m_windowListWidget;
|
|
QBoxLayout *m_windowListLayout;
|
|
QScrollerProperties m_sp;
|
|
|
|
QTimer *m_preparePreviewTimer;
|
|
QTimer *m_mouseLeaveTimer;
|
|
DWindowManagerHelper *m_wmHelper;
|
|
QTimer *m_waitForShowPreviewTimer;
|
|
WId m_currentWId;
|
|
TitleDisplayMode m_titleMode;
|
|
};
|
|
|
|
#endif // PREVIEWCONTAINER_H
|