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

原来的TrayManagerWindow的类是放到MainPanelWindow类里面作为它的一部分,导致窗管在显示的时候有很多问题 修改方案: 1、将左右侧区域拆分成两个窗体,让它们继承自相同的基类MainWindowBase。 2、左右区域公共的部分,例如圆角、展示区域、动画获取等,都在基类中实现或者通过接口返回 3、增加WindowManager类,管理所有的界面,WindowManager类无需知道具体子类的指针,只需要根据相应的接口来获取即可 4、所有的界面类在main.cpp中创建,调用WindowManager对象设置 5、拆分MultiScreenWorker类,使MultiScreenWorker类只关心任务栏相关的逻辑,无需关心窗体或界面 Log: 优化任务栏的显示问题 Influence: 打开任务栏,观察时尚模式下圆角,左右侧区域中间是否连接在一起等 Bug: https://pms.uniontech.com/bug-view-137267.html Bug: https://pms.uniontech.com/bug-view-140029.html Bug: https://pms.uniontech.com/bug-view-134527.html Bug: https://pms.uniontech.com/bug-view-146743.html Bug: https://pms.uniontech.com/bug-view-150293.html Change-Id: I4266f6f8c983f61258b92834d93cdacd0221d7de
80 lines
2.4 KiB
C++
80 lines
2.4 KiB
C++
/*
|
||
* Copyright (C) 2011 ~ 2018 Deepin Technology Co., Ltd.
|
||
*
|
||
* Author: sbw <sbw@sbw.so>
|
||
*
|
||
* Maintainer: sbw <sbw@sbw.so>
|
||
* zhaolong <zhaolong@uniontech.com>
|
||
*
|
||
* This program is free software: you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation, either version 3 of the License, or
|
||
* any later version.
|
||
*
|
||
* This program is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
*/
|
||
|
||
#ifndef MAINWINDOW_H
|
||
#define MAINWINDOW_H
|
||
|
||
#include "xcb_misc.h"
|
||
#include "multiscreenworker.h"
|
||
#include "touchsignalmanager.h"
|
||
#include "imageutil.h"
|
||
#include "utils.h"
|
||
#include "mainwindowbase.h"
|
||
|
||
#include <DPlatformWindowHandle>
|
||
|
||
#include <QWidget>
|
||
|
||
DWIDGET_USE_NAMESPACE
|
||
|
||
class MainPanelControl;
|
||
class QTimer;
|
||
class MenuWorker;
|
||
class QScreen;
|
||
|
||
class MainWindow : public MainWindowBase
|
||
{
|
||
Q_OBJECT
|
||
|
||
public:
|
||
explicit MainWindow(MultiScreenWorker *multiScreenWorker, QWidget *parent = nullptr);
|
||
void setGeometry(const QRect &rect);
|
||
|
||
friend class MainPanelControl;
|
||
|
||
// 以下接口是实现基类的接口
|
||
// 用来更新子区域的位置,一般用于在执行动画的过程中,根据当前的位置来更新里面panel的大小
|
||
DockWindowType windowType() const override;
|
||
void setPosition(const Dock::Position &position) override;
|
||
void setDisplayMode(const Dock::DisplayMode &displayMode) override;
|
||
void updateParentGeometry(const Dock::Position &pos, const QRect &rect) override;
|
||
QSize suitableSize(const Dock::Position &pos, const int &screenSize, const double &deviceRatio) const override;
|
||
void resetPanelGeometry() override;
|
||
|
||
private:
|
||
using QWidget::show;
|
||
void resizeEvent(QResizeEvent *event) override;
|
||
void initConnections();
|
||
void resizeDockIcon();
|
||
|
||
private:
|
||
MainPanelControl *m_mainPanel; // 任务栏
|
||
MultiScreenWorker *m_multiScreenWorker; // 多屏幕管理
|
||
|
||
QString m_sniHostService;
|
||
|
||
QString m_registerKey;
|
||
QStringList m_registerKeys;
|
||
};
|
||
|
||
#endif // MAINWINDOW_H
|