From 8cb6cb89d75501e8c46727774568b829d325118e Mon Sep 17 00:00:00 2001 From: donghualin Date: Wed, 30 Nov 2022 11:13:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=E7=AB=99=E5=92=8C=E7=94=B5=E6=BA=90=E6=8F=92=E4=BB=B6=E5=9C=A8?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E4=B8=AD=E5=BF=83=E7=9A=84=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=92=8C=E9=9A=90=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 响应DConfig配置文件的变化,根据当前新增或删除的配置来新增或删除插件 Log: Influence: 从控制中心勾选或者取消勾选回收站和电源插件,观察任务栏的变化 Task: https://pms.uniontech.com/task-view-216841.html Change-Id: Ia79ae924180d07e1b11f26bd119c83a8932cb80d --- frame/controller/proxyplugincontroller.cpp | 5 ++ frame/controller/proxyplugincontroller.h | 2 + frame/controller/toolapphelper.cpp | 81 +++++++++++++++++----- frame/controller/toolapphelper.h | 9 ++- frame/item/pluginsitem.cpp | 20 +++--- frame/util/abstractpluginscontroller.cpp | 60 +++++++++++++++- frame/util/abstractpluginscontroller.h | 20 ++++-- frame/window/docktraywindow.cpp | 19 ++++- frame/window/docktraywindow.h | 2 + frame/window/mainpanelcontrol.cpp | 6 +- frame/window/traymanagerwindow.cpp | 20 ++++-- 11 files changed, 194 insertions(+), 50 deletions(-) diff --git a/frame/controller/proxyplugincontroller.cpp b/frame/controller/proxyplugincontroller.cpp index d9a529b65..ff690f7d3 100644 --- a/frame/controller/proxyplugincontroller.cpp +++ b/frame/controller/proxyplugincontroller.cpp @@ -137,6 +137,11 @@ ProxyPluginController::ProxyPluginController(QObject *parent) QMetaObject::invokeMethod(this, &ProxyPluginController::startLoader, Qt::QueuedConnection); } +bool ProxyPluginController::pluginIsLoaded(PluginsItemInterface *itemInter) +{ + return m_pluginsItems.contains(itemInter); +} + QPluginLoader *ProxyPluginController::pluginLoader(PluginsItemInterface * const itemInter) { QMap > &plugin = pluginsMap(); diff --git a/frame/controller/proxyplugincontroller.h b/frame/controller/proxyplugincontroller.h index e52f738bb..6ed951f51 100644 --- a/frame/controller/proxyplugincontroller.h +++ b/frame/controller/proxyplugincontroller.h @@ -51,6 +51,8 @@ protected: explicit ProxyPluginController(QObject *parent = nullptr); ~ProxyPluginController() override {} + bool pluginIsLoaded(PluginsItemInterface *itemInter) override; + void pluginItemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) override; void pluginItemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) override; void pluginItemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) override; diff --git a/frame/controller/toolapphelper.cpp b/frame/controller/toolapphelper.cpp index 500f0445d..630dedf18 100644 --- a/frame/controller/toolapphelper.cpp +++ b/frame/controller/toolapphelper.cpp @@ -31,6 +31,7 @@ ToolAppHelper::ToolAppHelper(QWidget *toolAreaWidget, QObject *parent) : QObject(parent) , m_toolAreaWidget(toolAreaWidget) , m_displayMode(DisplayMode::Efficient) + , m_position(Dock::Position::Bottom) { connect(QuickSettingController::instance(), &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute pluginAttr) { if (pluginAttr != QuickSettingController::PluginAttribute::Tool) @@ -38,27 +39,28 @@ ToolAppHelper::ToolAppHelper(QWidget *toolAreaWidget, QObject *parent) pluginItemAdded(itemInter); }); + connect(QuickSettingController::instance(), &QuickSettingController::pluginRemoved, this, [ = ](PluginsItemInterface *itemInter) { + pluginItemRemoved(itemInter); + }); QList pluginItems = QuickSettingController::instance()->pluginItems(QuickSettingController::PluginAttribute::Tool); for (PluginsItemInterface *pluginItem : pluginItems) pluginItemAdded(pluginItem); + + updateToolArea(); } void ToolAppHelper::setDisplayMode(DisplayMode displayMode) { m_displayMode = displayMode; - updateWidgetStatus(); moveToolWidget(); + updateWidgetStatus(); } -void ToolAppHelper::removePluginItem(DockItem *dockItem) +void ToolAppHelper::setPosition(Position position) { - removeToolArea(dockItem); - - if (m_toolAreaWidget->layout()->count() == 0 && toolIsVisible()) - updateWidgetStatus(); - - Q_EMIT requestUpdate(); + m_toolAreaWidget->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); + m_position = position; } bool ToolAppHelper::toolIsVisible() const @@ -78,11 +80,12 @@ void ToolAppHelper::appendToToolArea(int index, DockItem *dockItem) Q_EMIT requestUpdate(); } -bool ToolAppHelper::removeToolArea(DockItem *dockItem) +bool ToolAppHelper::removeToolArea(PluginsItemInterface *itemInter) { QBoxLayout *boxLayout = static_cast(m_toolAreaWidget->layout()); for (int i = 0; i < boxLayout->count(); i++) { - if (boxLayout->itemAt(i)->widget() == dockItem) { + PluginsItem *dockItem = qobject_cast(boxLayout->itemAt(i)->widget()); + if (dockItem && dockItem->pluginItem() == itemInter) { boxLayout->removeWidget(dockItem); return true; } @@ -115,6 +118,38 @@ void ToolAppHelper::moveToolWidget() } } +void ToolAppHelper::updateToolArea() +{ + bool oldVisible = m_toolAreaWidget->isVisible(); + QLayout *layout = m_toolAreaWidget->layout(); + if (m_position == Dock::Position::Bottom || m_position == Dock::Position::Top) { + int size = 0; + for (int i = 0; i < layout->count(); i++) { + PluginsItem *dockItem = qobject_cast(layout->itemAt(i)->widget()); + if (!dockItem) + continue; + + size += dockItem->width(); + } + m_toolAreaWidget->setFixedWidth(size); + m_toolAreaWidget->setVisible(size > 0); + } else { + int size = 0; + for (int i = 0; i < layout->count(); i++) { + PluginsItem *dockItem = qobject_cast(layout->itemAt(i)->widget()); + if (!dockItem) + continue; + + size += dockItem->height(); + } + m_toolAreaWidget->setFixedHeight(size); + m_toolAreaWidget->setVisible(size > 0); + } + bool isVisible = m_toolAreaWidget->isVisible(); + if (oldVisible != isVisible) + Q_EMIT toolVisibleChanged(isVisible); +} + void ToolAppHelper::updateWidgetStatus() { bool oldVisible = toolIsVisible(); @@ -130,13 +165,9 @@ void ToolAppHelper::updateWidgetStatus() Q_EMIT toolVisibleChanged(visible); } -bool ToolAppHelper::pluginInTool(DockItem *dockItem) const +bool ToolAppHelper::pluginInTool(PluginsItemInterface *itemInter) const { - PluginsItem *pluginItem = qobject_cast(dockItem); - if (!pluginItem) - return false; - - return (QuickSettingController::instance()->pluginAttribute(pluginItem->pluginItem()) == QuickSettingController::PluginAttribute::Tool); + return (QuickSettingController::instance()->pluginAttribute(itemInter) == QuickSettingController::PluginAttribute::Tool); } void ToolAppHelper::pluginItemAdded(PluginsItemInterface *itemInter) @@ -145,9 +176,23 @@ void ToolAppHelper::pluginItemAdded(PluginsItemInterface *itemInter) return; QuickSettingController *quickController = QuickSettingController::instance(); - PluginsItem *pluginItem = quickController->pluginItemWidget(itemInter); - if (pluginInTool(pluginItem)) + if (pluginInTool(itemInter)) { + PluginsItem *pluginItem = quickController->pluginItemWidget(itemInter); appendToToolArea(0, pluginItem); + updateToolArea(); + Q_EMIT requestUpdate(); + } +} + +void ToolAppHelper::pluginItemRemoved(PluginsItemInterface *itemInter) +{ + QuickSettingController *quickController = QuickSettingController::instance(); + if (pluginInTool(itemInter)) { + PluginsItem *pluginItem = quickController->pluginItemWidget(itemInter); + removeToolArea(pluginItem->pluginItem()); + updateToolArea(); + Q_EMIT requestUpdate(); + } } bool ToolAppHelper::pluginExists(PluginsItemInterface *itemInter) const diff --git a/frame/controller/toolapphelper.h b/frame/controller/toolapphelper.h index ee152dafc..768b93a31 100644 --- a/frame/controller/toolapphelper.h +++ b/frame/controller/toolapphelper.h @@ -41,7 +41,7 @@ public: explicit ToolAppHelper(QWidget *toolAreaWidget, QObject *parent = nullptr); void setDisplayMode(DisplayMode displayMode); - void removePluginItem(DockItem *dockItem); + void setPosition(Dock::Position position); bool toolIsVisible() const; Q_SIGNALS: @@ -50,17 +50,20 @@ Q_SIGNALS: private: void appendToToolArea(int index, DockItem *dockItem); - bool removeToolArea(DockItem *dockItem); + bool removeToolArea(PluginsItemInterface *itemInter); void moveToolWidget(); + void updateToolArea(); void updateWidgetStatus(); - bool pluginInTool(DockItem *dockItem) const; + bool pluginInTool(PluginsItemInterface *itemInter) const; void pluginItemAdded(PluginsItemInterface *itemInter); + void pluginItemRemoved(PluginsItemInterface *itemInter); bool pluginExists(PluginsItemInterface *itemInter) const; private: QWidget *m_toolAreaWidget; DisplayMode m_displayMode; + Dock::Position m_position; QList m_sequentPluginItems; }; diff --git a/frame/item/pluginsitem.cpp b/frame/item/pluginsitem.cpp index c50355178..abb8e7027 100644 --- a/frame/item/pluginsitem.cpp +++ b/frame/item/pluginsitem.cpp @@ -48,17 +48,19 @@ PluginsItem::PluginsItem(PluginsItemInterface *const pluginInter, const QString { qDebug() << "load plugins item: " << pluginInter->pluginName() << itemKey << m_centralWidget; - m_centralWidget->setParent(this); - m_centralWidget->setVisible(true); - m_centralWidget->setObjectName(pluginInter->pluginName() + "-centralwidget"); - m_centralWidget->installEventFilter(this); + if (m_centralWidget) { + m_centralWidget->setParent(this); + m_centralWidget->setVisible(true); + m_centralWidget->setObjectName(pluginInter->pluginName() + "-centralwidget"); + m_centralWidget->installEventFilter(this); - QBoxLayout *hLayout = new QHBoxLayout; - hLayout->addWidget(m_centralWidget); - hLayout->setSpacing(0); - hLayout->setMargin(0); + QBoxLayout *hLayout = new QHBoxLayout; + hLayout->addWidget(m_centralWidget); + hLayout->setSpacing(0); + hLayout->setMargin(0); - setLayout(hLayout); + setLayout(hLayout); + } setAccessibleName(pluginInter->pluginName()); setAttribute(Qt::WA_TranslucentBackground); diff --git a/frame/util/abstractpluginscontroller.cpp b/frame/util/abstractpluginscontroller.cpp index 3f632ed5b..5d6d4f6ac 100644 --- a/frame/util/abstractpluginscontroller.cpp +++ b/frame/util/abstractpluginscontroller.cpp @@ -24,6 +24,7 @@ #include "pluginsiteminterface_v20.h" #include "pluginadapter.h" #include "utils.h" +#include "settingconfig.h" #include #include @@ -49,6 +50,7 @@ AbstractPluginsController::AbstractPluginsController(QObject *parent) refreshPluginSettings(); + connect(SETTINGCONFIG, &SettingConfig::valueChanged, this, &AbstractPluginsController::onConfigChanged); connect(m_dockDaemonInter, &DockInter::PluginSettingsSynced, this, &AbstractPluginsController::refreshPluginSettings, Qt::QueuedConnection); } @@ -95,7 +97,9 @@ void AbstractPluginsController::itemAdded(PluginsItemInterface * const itemInter pluginAdapter->setItemKey(itemKey); m_pluginExists << pluginItem; - pluginItemAdded(pluginItem, itemKey); + m_pluginItemKeyMap[pluginItem] = itemKey; + if (canAddedPlugin(pluginItem)) + pluginItemAdded(pluginItem, itemKey); } void AbstractPluginsController::itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) @@ -106,6 +110,7 @@ void AbstractPluginsController::itemUpdate(PluginsItemInterface * const itemInte void AbstractPluginsController::itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) { m_pluginExists.removeOne(itemInter); + m_pluginItemKeyMap.remove(itemInter); pluginItemRemoved(getPluginInterface(itemInter), itemKey); } @@ -483,3 +488,56 @@ bool AbstractPluginsController::eventFilter(QObject *o, QEvent *e) return false; } + +bool AbstractPluginsController::canAddRemove(PluginsItemInterface *plugin) const +{ + if (!plugin->flags() & PluginFlag::Attribute_CanSetting) + return false; + + if (plugin->flags() & PluginFlag::Type_Tool) + return true; + + if (plugin->flags() & PluginFlag::Type_System) + return true; + + return false; +} + +bool AbstractPluginsController::canAddedPlugin(PluginsItemInterface *plugin) const +{ + if (!canAddRemove(plugin)) + return true; + + const QStringList configPlugins = SETTINGCONFIG->value("Dock_Quick_Plugin_Name").toStringList(); + return configPlugins.contains(plugin->pluginName()); +} + +void AbstractPluginsController::onConfigChanged(const QString &key, const QVariant &value) +{ + QStringList pluginNames = value.toStringList(); + if (key == "Dock_Quick_Plugin_Name") { + // 这里只处理工具插件(回收站)和系统插件(电源插件) + for (PluginsItemInterface *plugin : pluginCurrent()) { + if (!canAddRemove(plugin)) + continue; + + const QString itemKey = m_pluginItemKeyMap.value(plugin); + if (!pluginNames.contains(plugin->pluginName()) && pluginIsLoaded(plugin)) { + // 如果当前配置中不包含当前插件,但是当前插件已经加载,那么就移除该插件 + pluginItemRemoved(plugin, itemKey); + QWidget *itemWidget = plugin->itemWidget(itemKey); + if (itemWidget) + itemWidget->setVisible(false); + } else if (pluginNames.contains(plugin->pluginName()) && !pluginIsLoaded(plugin)) { + // 如果当前配置中包含当前插件,但是当前插件并未加载,那么就加载该插件 + pluginItemAdded(plugin, itemKey); + // 只有工具插件是通过QWidget的方式进行显示的,因此,这里只处理工具插件 + if (plugin->flags() & PluginFlag::Type_Tool) { + QWidget *itemWidget = plugin->itemWidget(itemKey); + if (itemWidget) + itemWidget->setVisible(true); + } + } + } + } +} diff --git a/frame/util/abstractpluginscontroller.h b/frame/util/abstractpluginscontroller.h index a366c0426..028ca6909 100644 --- a/frame/util/abstractpluginscontroller.h +++ b/frame/util/abstractpluginscontroller.h @@ -62,6 +62,17 @@ public: Q_SIGNALS: void pluginLoaderFinished(); +protected: + virtual bool pluginIsLoaded(PluginsItemInterface *itemInter) { return true; } + + QObject *pluginItemAt(PluginsItemInterface * const itemInter, const QString &itemKey) const; + PluginsItemInterface *pluginInterAt(const QString &itemKey); + PluginsItemInterface *pluginInterAt(QObject *destItem); + bool eventFilter(QObject *o, QEvent *e) override; + + bool canAddRemove(PluginsItemInterface *plugin) const; + bool canAddedPlugin(PluginsItemInterface *plugin) const; + private: // implements PluginProxyInterface void saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) override; @@ -74,15 +85,8 @@ private: void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) override; void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) override; void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) override; - PluginsItemInterface *getPluginInterface(PluginsItemInterface * const itemInter); -protected: - QObject *pluginItemAt(PluginsItemInterface * const itemInter, const QString &itemKey) const; - PluginsItemInterface *pluginInterAt(const QString &itemKey); - PluginsItemInterface *pluginInterAt(QObject *destItem); - bool eventFilter(QObject *o, QEvent *e) override; - protected Q_SLOTS: void startLoader(PluginLoader *loader); @@ -92,6 +96,7 @@ private slots: void loadPlugin(const QString &pluginFile); void initPlugin(PluginsItemInterface *interface); void refreshPluginSettings(); + void onConfigChanged(const QString &key, const QVariant &value); private: QDBusConnectionInterface *m_dbusDaemonInterface; @@ -103,6 +108,7 @@ private: // filepath, interface, loaded QMap, bool> m_pluginLoadMap; QList m_pluginExists; + QMap m_pluginItemKeyMap; QJsonObject m_pluginSettingsObject; QMap m_pluginAdapterMap; diff --git a/frame/window/docktraywindow.cpp b/frame/window/docktraywindow.cpp index 761e8a2c1..32eb4a0de 100644 --- a/frame/window/docktraywindow.cpp +++ b/frame/window/docktraywindow.cpp @@ -45,6 +45,7 @@ DockTrayWindow::DockTrayWindow(DockInter *dockInter, QWidget *parent) , m_position(Dock::Position::Bottom) , m_displayMode(Dock::DisplayMode::Efficient) , m_mainBoxLayout(new QBoxLayout(QBoxLayout::Direction::RightToLeft, this)) + , m_frontWidget(new QWidget(this)) , m_toolWidget(new QWidget(this)) , m_toolLayout(new QBoxLayout(QBoxLayout::RightToLeft, m_toolWidget)) , m_toolLineLabel(new QLabel(this)) @@ -78,6 +79,7 @@ void DockTrayWindow::setDisplayMode(const Dock::DisplayMode &displayMode) { m_displayMode = displayMode; moveToolPlugin(); + updateToolWidget(); // 如果当前模式为高效模式,则设置当前的trayView为其计算位置的参照 if (displayMode == Dock::DisplayMode::Efficient) ExpandIconWidget::popupTrayView()->setReferGridView(m_trayView); @@ -131,6 +133,9 @@ void DockTrayWindow::resizeEvent(QResizeEvent *event) void DockTrayWindow::paintEvent(QPaintEvent *event) { QWidget::paintEvent(event); + if (!m_toolLineLabel->isVisible()) + return; + QPainter painter(this); QColor color; if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) { @@ -271,6 +276,13 @@ void DockTrayWindow::moveToolPlugin() } } +void DockTrayWindow::updateToolWidget() +{ + m_toolWidget->setVisible(m_toolLayout->count() > 0); + m_toolLineLabel->setVisible(m_toolLayout->count() > 0); + m_frontWidget->setVisible(m_toolLayout->count() > 0); +} + void DockTrayWindow::initUi() { m_toolLayout->setContentsMargins(0, 0, 0, 0); @@ -279,7 +291,7 @@ void DockTrayWindow::initUi() m_systemPuginWidget->setDisplayMode(Dock::DisplayMode::Efficient); m_mainBoxLayout->setContentsMargins(0, 0, 0, 0); m_mainBoxLayout->setSpacing(0); - m_mainBoxLayout->addSpacing(FRONTSPACING); + m_mainBoxLayout->addWidget(m_frontWidget); m_mainBoxLayout->addWidget(m_toolWidget); m_mainBoxLayout->addSpacing(SPLITESPACE); m_mainBoxLayout->addWidget(m_toolLineLabel); @@ -293,6 +305,7 @@ void DockTrayWindow::initUi() m_toolLineLabel->setFixedSize(0, 0); m_mainBoxLayout->addStretch(); + updateToolWidget(); } void DockTrayWindow::initConnection() @@ -353,6 +366,7 @@ void DockTrayWindow::onUpdateComponentSize() case Dock::Position::Left: case Dock::Position::Right: m_toolLineLabel->setFixedSize(width() * 0.6, SPLITERSIZE); + m_frontWidget->setFixedSize(QWIDGETSIZE_MAX, FRONTSPACING); m_dateTimeWidget->setFixedSize(QWIDGETSIZE_MAX, m_dateTimeWidget->suitableSize().height()); m_systemPuginWidget->setFixedSize(QWIDGETSIZE_MAX, m_systemPuginWidget->suitableSize().height()); m_quickIconWidget->setFixedSize(QWIDGETSIZE_MAX, m_quickIconWidget->suitableSize().height()); @@ -361,6 +375,7 @@ void DockTrayWindow::onUpdateComponentSize() case Dock::Position::Top: case Dock::Position::Bottom: m_toolLineLabel->setFixedSize(SPLITERSIZE, height() * 0.6); + m_frontWidget->setFixedSize(FRONTSPACING, QWIDGETSIZE_MAX); m_dateTimeWidget->setFixedSize(m_dateTimeWidget->suitableSize().width(), QWIDGETSIZE_MAX); m_systemPuginWidget->setFixedSize(m_systemPuginWidget->suitableSize().width(), QWIDGETSIZE_MAX); m_quickIconWidget->setFixedSize(m_quickIconWidget->suitableSize().width(), QWIDGETSIZE_MAX); @@ -380,6 +395,7 @@ void DockTrayWindow::onItemAdded(PluginsItemInterface *itemInter) pluginItem->setVisible(true); m_toolLayout->addWidget(pluginItem); + updateToolWidget(); Q_EMIT requestUpdate(); } @@ -396,6 +412,7 @@ void DockTrayWindow::onItemRemove(PluginsItemInterface *itemInter) continue; m_toolLayout->removeWidget(pluginItem); + updateToolWidget(); Q_EMIT requestUpdate(); break; diff --git a/frame/window/docktraywindow.h b/frame/window/docktraywindow.h index 4f12df02b..981ea1a6c 100644 --- a/frame/window/docktraywindow.h +++ b/frame/window/docktraywindow.h @@ -68,6 +68,7 @@ private: void resizeTool() const; bool pluginExists(PluginsItemInterface *itemInter) const; void moveToolPlugin(); + void updateToolWidget(); private Q_SLOTS: void onUpdateComponentSize(); @@ -80,6 +81,7 @@ private: Dock::Position m_position; Dock::DisplayMode m_displayMode; QBoxLayout *m_mainBoxLayout; + QWidget *m_frontWidget; QWidget *m_toolWidget; QBoxLayout *m_toolLayout; QLabel *m_toolLineLabel; diff --git a/frame/window/mainpanelcontrol.cpp b/frame/window/mainpanelcontrol.cpp index f56395710..3918c2cac 100755 --- a/frame/window/mainpanelcontrol.cpp +++ b/frame/window/mainpanelcontrol.cpp @@ -371,6 +371,7 @@ void MainPanelControl::setPositonValue(Dock::Position position) m_position = position; m_tray->setPositon(position); + m_toolHelper->setPosition(position); QMetaObject::invokeMethod(this, &MainPanelControl::updateMainPanelLayout, Qt::QueuedConnection); } @@ -428,9 +429,6 @@ void MainPanelControl::removeItem(DockItem *item) case DockItem::Placeholder: m_recentHelper->removeAppItem(item); break; - case DockItem::Plugins: - m_toolHelper->removePluginItem(item); - break; case DockItem::AppMultiWindow: m_multiHelper->removeMultiWindow(static_cast(item)); break; @@ -908,7 +906,6 @@ DockItem *MainPanelControl::dropTargetItem(DockItem *sourceItem, QPoint point) return targetItem; } - void MainPanelControl::updateDisplayMode() { updateModeChange(); @@ -918,7 +915,6 @@ void MainPanelControl::updateDisplayMode() void MainPanelControl::updateModeChange() { m_toolAreaWidget->setVisible(m_displayMode == DisplayMode::Fashion); - m_toolSonAreaWidget->setVisible(m_displayMode == DisplayMode::Fashion); onRecentVisibleChanged(m_recentHelper->recentIsVisible()); onDockAppVisibleChanged(m_recentHelper->dockAppIsVisible()); onToolVisibleChanged(m_toolHelper->toolIsVisible()); diff --git a/frame/window/traymanagerwindow.cpp b/frame/window/traymanagerwindow.cpp index 8facb65f0..3440f8ae2 100644 --- a/frame/window/traymanagerwindow.cpp +++ b/frame/window/traymanagerwindow.cpp @@ -177,14 +177,22 @@ QSize TrayManagerWindow::suitableSize(const Dock::Position &position) const { QMargins m = m_mainLayout->contentsMargins(); if (position == Dock::Position::Top || position == Dock::Position::Bottom) { - return QSize(appDatetimeSize(position) + - m_systemPluginWidget->suitableSize(position).width() + m_mainLayout->spacing() + - m.left() + m.right(), QWIDGETSIZE_MAX); + int width = appDatetimeSize(position); + int systemWidgetWidth = m_systemPluginWidget->suitableSize(position).width(); + if (systemWidgetWidth > 0) { + width += systemWidgetWidth + m_mainLayout->spacing(); + } + width += m.left() + m.right(); + return QSize(width, QWIDGETSIZE_MAX); } - return QSize(QWIDGETSIZE_MAX, appDatetimeSize(position) + - m_systemPluginWidget->suitableSize(position).height() + m_mainLayout->spacing() + - m.top() + m.bottom()); + int height = appDatetimeSize(position); + int systemWidgetHeight = m_systemPluginWidget->suitableSize(position).height(); + if (systemWidgetHeight > 0) { + height += systemWidgetHeight + m_mainLayout->spacing(); + } + height += m.top() + m.bottom(); + return QSize(QWIDGETSIZE_MAX, height); } // 用于返回需要绘制的圆形区域