diff --git a/frame/controller/dockpluginscontroller.cpp b/frame/controller/dockpluginscontroller.cpp index 115964a7f..e9dd2b6b2 100644 --- a/frame/controller/dockpluginscontroller.cpp +++ b/frame/controller/dockpluginscontroller.cpp @@ -81,7 +81,7 @@ void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, con void DockPluginsController::itemUpdate(PluginsItemInterface *const itemInter, const QString &itemKey) { - PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); + PluginsItem *item = getPluginItem(itemInter, itemKey); if (!item) return; @@ -92,7 +92,7 @@ void DockPluginsController::itemUpdate(PluginsItemInterface *const itemInter, co void DockPluginsController::itemRemoved(PluginsItemInterface *const itemInter, const QString &itemKey) { - PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); + PluginsItem *item = getPluginItem(itemInter, itemKey); if (!item) return; @@ -116,7 +116,7 @@ void DockPluginsController::itemRemoved(PluginsItemInterface *const itemInter, c void DockPluginsController::requestWindowAutoHide(PluginsItemInterface *const itemInter, const QString &itemKey, const bool autoHide) { - PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); + PluginsItem *item = getPluginItem(itemInter, itemKey); if (!item) return; @@ -125,7 +125,7 @@ void DockPluginsController::requestWindowAutoHide(PluginsItemInterface *const it void DockPluginsController::requestRefreshWindowVisible(PluginsItemInterface *const itemInter, const QString &itemKey) { - PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); + PluginsItem *item = getPluginItem(itemInter, itemKey); if (!item) return; @@ -134,7 +134,7 @@ void DockPluginsController::requestRefreshWindowVisible(PluginsItemInterface *co void DockPluginsController::requestSetAppletVisible(PluginsItemInterface *const itemInter, const QString &itemKey, const bool visible) { - PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); + PluginsItem *item = getPluginItem(itemInter, itemKey); if (!item) return; @@ -149,3 +149,16 @@ QMap> &DockPluginsController::p { return ProxyPluginController::instance(PluginType::FixedSystemPlugin)->pluginsMap(); } + +PluginsItem *DockPluginsController::getPluginItem(PluginsItemInterface * const itemInter, const QString &itemKey) const +{ + ProxyPluginController *proxyController = ProxyPluginController::instance(itemInter); + if (!proxyController) + return nullptr; + + const QMap> &plugins = proxyController->pluginsMap(); + if (plugins.contains(itemInter) && plugins[itemInter].contains(itemKey)) + return static_cast(plugins[itemInter][itemKey]); + + return nullptr; +} diff --git a/frame/controller/dockpluginscontroller.h b/frame/controller/dockpluginscontroller.h index f6aa22138..53143c195 100644 --- a/frame/controller/dockpluginscontroller.h +++ b/frame/controller/dockpluginscontroller.h @@ -49,6 +49,9 @@ public: void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) override; QMap> &pluginsMap(); +private: + PluginsItem *getPluginItem(PluginsItemInterface * const itemInter, const QString &itemKey) const; + signals: void pluginItemInserted(PluginsItem *pluginItem) const; void pluginItemRemoved(PluginsItem *pluginItem) const; diff --git a/frame/controller/proxyplugincontroller.cpp b/frame/controller/proxyplugincontroller.cpp index 925be4c8c..ba281b758 100644 --- a/frame/controller/proxyplugincontroller.cpp +++ b/frame/controller/proxyplugincontroller.cpp @@ -133,14 +133,11 @@ QString ProxyPluginController::itemKey(PluginsItemInterface *itemInter) const void ProxyPluginController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) { - m_pluginsItems << itemInter; - m_pluginsItemKeys[itemInter] = itemKey; - + addPluginItems(itemInter, itemKey); // 获取需要加载当前插件的监听者,然后将当前插件添加到监听者 QList validController = getValidController(itemInter); for (AbstractPluginsController *interface : validController) interface->itemAdded(itemInter, itemKey); - } void ProxyPluginController::itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) @@ -154,9 +151,10 @@ void ProxyPluginController::itemRemoved(PluginsItemInterface * const itemInter, { // 先获取可执行的controller,再移除,因为在判断当前插件是否加载的时候需要用到当前容器中的插件来获取当前代理 QList validController = getValidController(itemInter); - removePluginItem(itemInter); for (AbstractPluginsController *interface : validController) interface->itemRemoved(itemInter, itemKey); + + removePluginItem(itemInter); } void ProxyPluginController::requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) @@ -210,6 +208,15 @@ QList ProxyPluginController::getValidController(Plu return validController; } +void ProxyPluginController::addPluginItems(PluginsItemInterface * const itemInter, const QString &itemKey) +{ + if (!m_pluginsItems.contains(itemInter)) + m_pluginsItems << itemInter; + + if (!m_pluginsItemKeys.contains(itemInter)) + m_pluginsItemKeys[itemInter] = itemKey; +} + void ProxyPluginController::removePluginItem(PluginsItemInterface * const itemInter) { if (m_pluginsItems.contains(itemInter)) diff --git a/frame/controller/proxyplugincontroller.h b/frame/controller/proxyplugincontroller.h index f84f0ddfa..49e3575c1 100644 --- a/frame/controller/proxyplugincontroller.h +++ b/frame/controller/proxyplugincontroller.h @@ -67,6 +67,7 @@ protected: private: QList getValidController(PluginsItemInterface *itemInter) const; + void addPluginItems(PluginsItemInterface * const itemInter, const QString &itemKey); void removePluginItem(PluginsItemInterface * const itemInter); void startLoader(); diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 239dcc0dd..2884d5c1d 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -911,10 +911,13 @@ void MultiScreenWorker::onChildSizeChanged() QSize dockSize = dockRect(m_ds.current(), position(), HideMode::KeepShowing, displayMode()).size(); parent()->move(dockRect(m_ds.current()).topLeft()); - if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) + if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) { parent()->setFixedWidth(dockSize.width()); - else + parent()->panel()->setFixedWidth(dockSize.width()); + } else { parent()->setFixedHeight(dockSize.height()); + parent()->panel()->setFixedHeight(dockSize.height()); + } parent()->panel()->move(0, 0); parent()->panel()->update(); diff --git a/frame/window/mainpanelcontrol.cpp b/frame/window/mainpanelcontrol.cpp index 04c3d4415..09b8f19f2 100755 --- a/frame/window/mainpanelcontrol.cpp +++ b/frame/window/mainpanelcontrol.cpp @@ -1054,7 +1054,7 @@ QSize MainPanelControl::suitableSize(int screenSize, double deviceRatio) const int iconSize = (totalLength - redundantLength) / iconCount; if (m_position == Position::Top || m_position == Position::Bottom) { - iconSize = iconSize < height() ? iconSize : height(); + iconSize = qMin(iconSize, height()); int panelWidth = qMin(iconSize * iconCount + static_cast((m_fixedSpliter->width() + traySuitableSize.width() + 20) / ratio), static_cast(screenSize / deviceRatio));