mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00
fix: 修复任务栏没有加载显示桌面和多任务视图的问题
1、修改DBUS接口中获取当前已加载插件的接口 2、重新定义插件类型:快捷区域插件Quick, 工具插件(回收站等)Tool,托盘插件(U盘图标)Tray,系统插件(开机关机图标)System,固定区域插件(显示桌面和多任务视图)Fixed 3、加载固定区域插件(显示桌面和多任务视图) Log: Influence: 任务栏查看是否存在显示桌面和多任务栏视图的插件 Task: https://pms.uniontech.com/task-view-112073.html Change-Id: Ia7ee8f94ae89ebc93b239f1d078c44e37b50b8ac
This commit is contained in:
parent
b670c15d1d
commit
91d5bfbf07
@ -27,6 +27,7 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "appmultiitem.h"
|
#include "appmultiitem.h"
|
||||||
#include "quicksettingcontroller.h"
|
#include "quicksettingcontroller.h"
|
||||||
|
#include "proxyplugincontroller.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QGSettings>
|
#include <QGSettings>
|
||||||
@ -68,6 +69,18 @@ DockItemManager::DockItemManager(QObject *parent)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 托盘区域和插件区域 由DockPluginsController获取
|
// 托盘区域和插件区域 由DockPluginsController获取
|
||||||
|
QuickSettingController *quickController = QuickSettingController::instance();
|
||||||
|
connect(quickController, &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute &pluginAttr) {
|
||||||
|
if (pluginAttr != QuickSettingController::PluginAttribute::Fixed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_pluginItems << itemInter;
|
||||||
|
pluginItemInserted(quickController->pluginItemWidget(itemInter));
|
||||||
|
});
|
||||||
|
|
||||||
|
connect(quickController, &QuickSettingController::pluginRemoved, this, &DockItemManager::onPluginItemRemoved);
|
||||||
|
connect(quickController, &QuickSettingController::pluginUpdated, this, &DockItemManager::onPluginUpdate);
|
||||||
|
connect(ProxyPluginController::instance(), &ProxyPluginController::pluginLoaderFinished, this, &DockItemManager::onPluginLoadFinished, Qt::QueuedConnection);
|
||||||
|
|
||||||
// 应用信号
|
// 应用信号
|
||||||
connect(m_appInter, &DockInter::EntryAdded, this, &DockItemManager::appItemAdded);
|
connect(m_appInter, &DockInter::EntryAdded, this, &DockItemManager::appItemAdded);
|
||||||
@ -84,6 +97,13 @@ DockItemManager::DockItemManager(QObject *parent)
|
|||||||
|
|
||||||
connect(qApp, &QApplication::aboutToQuit, this, &QObject::deleteLater);
|
connect(qApp, &QApplication::aboutToQuit, this, &QObject::deleteLater);
|
||||||
|
|
||||||
|
// 读取已经加载的固定区域插件
|
||||||
|
QList<PluginsItemInterface *> plugins = quickController->pluginItems(QuickSettingController::PluginAttribute::Fixed);
|
||||||
|
for (PluginsItemInterface *plugin : plugins) {
|
||||||
|
m_pluginItems << plugin;
|
||||||
|
pluginItemInserted(quickController->pluginItemWidget(plugin));
|
||||||
|
}
|
||||||
|
|
||||||
// 刷新图标
|
// 刷新图标
|
||||||
QMetaObject::invokeMethod(this, "refreshItemsIcon", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "refreshItemsIcon", Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
@ -101,11 +121,6 @@ const QList<QPointer<DockItem>> DockItemManager::itemList() const
|
|||||||
return m_itemList;
|
return m_itemList;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QList<PluginsItemInterface *> DockItemManager::pluginList() const
|
|
||||||
{
|
|
||||||
return QuickSettingController::instance()->pluginsMap().keys();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DockItemManager::appIsOnDock(const QString &appDesktop) const
|
bool DockItemManager::appIsOnDock(const QString &appDesktop) const
|
||||||
{
|
{
|
||||||
return m_appInter->IsOnDock(appDesktop);
|
return m_appInter->IsOnDock(appDesktop);
|
||||||
@ -279,6 +294,88 @@ void DockItemManager::manageItem(DockItem *item)
|
|||||||
connect(item, &DockItem::requestWindowAutoHide, this, &DockItemManager::requestWindowAutoHide, Qt::UniqueConnection);
|
connect(item, &DockItem::requestWindowAutoHide, this, &DockItemManager::requestWindowAutoHide, Qt::UniqueConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DockItemManager::pluginItemInserted(PluginsItem *item)
|
||||||
|
{
|
||||||
|
manageItem(item);
|
||||||
|
|
||||||
|
DockItem::ItemType pluginType = item->itemType();
|
||||||
|
|
||||||
|
// find first plugins item position
|
||||||
|
int firstPluginPosition = -1;
|
||||||
|
for (int i(0); i != m_itemList.size(); ++i) {
|
||||||
|
DockItem::ItemType type = m_itemList[i]->itemType();
|
||||||
|
if (type != pluginType)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
firstPluginPosition = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (firstPluginPosition == -1)
|
||||||
|
firstPluginPosition = m_itemList.size();
|
||||||
|
|
||||||
|
// find insert position
|
||||||
|
int insertIndex = 0;
|
||||||
|
const int itemSortKey = item->itemSortKey();
|
||||||
|
if (itemSortKey == -1 || firstPluginPosition == -1) {
|
||||||
|
insertIndex = m_itemList.size();
|
||||||
|
} else if (itemSortKey == 0) {
|
||||||
|
insertIndex = firstPluginPosition;
|
||||||
|
} else {
|
||||||
|
insertIndex = m_itemList.size();
|
||||||
|
for (int i(firstPluginPosition + 1); i != m_itemList.size() + 1; ++i) {
|
||||||
|
PluginsItem *pItem = static_cast<PluginsItem *>(m_itemList[i - 1].data());
|
||||||
|
Q_ASSERT(pItem);
|
||||||
|
|
||||||
|
const int sortKey = pItem->itemSortKey();
|
||||||
|
if (pluginType == DockItem::FixedPlugin) {
|
||||||
|
if (sortKey != -1 && itemSortKey > sortKey)
|
||||||
|
continue;
|
||||||
|
insertIndex = i - 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (sortKey != -1 && itemSortKey > sortKey && pItem->itemType() != DockItem::FixedPlugin)
|
||||||
|
continue;
|
||||||
|
insertIndex = i - 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_itemList.insert(insertIndex, item);
|
||||||
|
if(pluginType == DockItem::FixedPlugin)
|
||||||
|
insertIndex ++;
|
||||||
|
|
||||||
|
if (!Utils::SettingValue(QString("com.deepin.dde.dock.module.") + item->pluginName(), QByteArray(), "enable", true).toBool())
|
||||||
|
item->setVisible(false);
|
||||||
|
|
||||||
|
emit itemInserted(insertIndex - firstPluginPosition, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DockItemManager::onPluginItemRemoved(PluginsItemInterface *itemInter)
|
||||||
|
{
|
||||||
|
if (!m_pluginItems.contains(itemInter))
|
||||||
|
return;
|
||||||
|
|
||||||
|
PluginsItem *item = QuickSettingController::instance()->pluginItemWidget(itemInter);
|
||||||
|
item->hidePopup();
|
||||||
|
|
||||||
|
emit itemRemoved(item);
|
||||||
|
|
||||||
|
m_itemList.removeOne(item);
|
||||||
|
|
||||||
|
if (m_loadFinished) {
|
||||||
|
updatePluginsItemOrderKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DockItemManager::onPluginUpdate(PluginsItemInterface *itemInter)
|
||||||
|
{
|
||||||
|
if (!m_pluginItems.contains(itemInter))
|
||||||
|
return;
|
||||||
|
|
||||||
|
Q_EMIT itemUpdated(QuickSettingController::instance()->pluginItemWidget(itemInter));
|
||||||
|
}
|
||||||
|
|
||||||
void DockItemManager::onPluginLoadFinished()
|
void DockItemManager::onPluginLoadFinished()
|
||||||
{
|
{
|
||||||
updatePluginsItemOrderKey();
|
updatePluginsItemOrderKey();
|
||||||
|
@ -31,6 +31,8 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
class AppMultiItem;
|
class AppMultiItem;
|
||||||
|
class PluginsItem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The DockItemManager class
|
* @brief The DockItemManager class
|
||||||
* 管理类,管理所有的应用数据,插件数据
|
* 管理类,管理所有的应用数据,插件数据
|
||||||
@ -43,7 +45,6 @@ public:
|
|||||||
static DockItemManager *instance(QObject *parent = nullptr);
|
static DockItemManager *instance(QObject *parent = nullptr);
|
||||||
|
|
||||||
const QList<QPointer<DockItem> > itemList() const;
|
const QList<QPointer<DockItem> > itemList() const;
|
||||||
const QList<PluginsItemInterface *> pluginList() const;
|
|
||||||
bool appIsOnDock(const QString &appDesktop) const;
|
bool appIsOnDock(const QString &appDesktop) const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@ -63,6 +64,8 @@ public slots:
|
|||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void onPluginLoadFinished();
|
void onPluginLoadFinished();
|
||||||
|
void onPluginItemRemoved(PluginsItemInterface *itemInter);
|
||||||
|
void onPluginUpdate(PluginsItemInterface *itemInter);
|
||||||
|
|
||||||
#ifdef USE_AM
|
#ifdef USE_AM
|
||||||
void onAppWindowCountChanged();
|
void onAppWindowCountChanged();
|
||||||
@ -77,6 +80,7 @@ private:
|
|||||||
void updatePluginsItemOrderKey();
|
void updatePluginsItemOrderKey();
|
||||||
void reloadAppItems();
|
void reloadAppItems();
|
||||||
void manageItem(DockItem *item);
|
void manageItem(DockItem *item);
|
||||||
|
void pluginItemInserted(PluginsItem *item);
|
||||||
|
|
||||||
#ifdef USE_AM
|
#ifdef USE_AM
|
||||||
void updateMultiItems(AppItem *appItem, bool emitSignal = false);
|
void updateMultiItems(AppItem *appItem, bool emitSignal = false);
|
||||||
@ -91,6 +95,7 @@ private:
|
|||||||
|
|
||||||
QList<QPointer<DockItem>> m_itemList;
|
QList<QPointer<DockItem>> m_itemList;
|
||||||
QList<QString> m_appIDist;
|
QList<QString> m_appIDist;
|
||||||
|
QList<PluginsItemInterface *> m_pluginItems;
|
||||||
|
|
||||||
bool m_loadFinished; // 记录所有插件是否加载完成
|
bool m_loadFinished; // 记录所有插件是否加载完成
|
||||||
|
|
||||||
|
@ -144,11 +144,6 @@ QPluginLoader *ProxyPluginController::pluginLoader(PluginsItemInterface * const
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<PluginsItemInterface *> ProxyPluginController::pluginsItems() const
|
|
||||||
{
|
|
||||||
return m_pluginsItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString ProxyPluginController::itemKey(PluginsItemInterface *itemInter) const
|
QString ProxyPluginController::itemKey(PluginsItemInterface *itemInter) const
|
||||||
{
|
{
|
||||||
if (m_pluginsItemKeys.contains(itemInter))
|
if (m_pluginsItemKeys.contains(itemInter))
|
||||||
|
@ -40,12 +40,11 @@ class ProxyPluginController : public AbstractPluginsController
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static ProxyPluginController *instance(PluginType instanceKey);
|
static ProxyPluginController *instance(PluginType instanceKey = PluginType::QuickPlugin);
|
||||||
static ProxyPluginController *instance(PluginsItemInterface *itemInter);
|
static ProxyPluginController *instance(PluginsItemInterface *itemInter);
|
||||||
void addProxyInterface(AbstractPluginsController *interface);
|
void addProxyInterface(AbstractPluginsController *interface);
|
||||||
void removeProxyInterface(AbstractPluginsController *interface);
|
void removeProxyInterface(AbstractPluginsController *interface);
|
||||||
QPluginLoader *pluginLoader(PluginsItemInterface * const itemInter);
|
QPluginLoader *pluginLoader(PluginsItemInterface * const itemInter);
|
||||||
QList<PluginsItemInterface *> pluginsItems() const;
|
|
||||||
QString itemKey(PluginsItemInterface *itemInter) const;
|
QString itemKey(PluginsItemInterface *itemInter) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -39,20 +39,7 @@ QuickSettingController::~QuickSettingController()
|
|||||||
void QuickSettingController::pluginItemAdded(PluginsItemInterface * const itemInter, const QString &itemKey)
|
void QuickSettingController::pluginItemAdded(PluginsItemInterface * const itemInter, const QString &itemKey)
|
||||||
{
|
{
|
||||||
// 根据读取到的metaData数据获取当前插件的类型,提供给外部
|
// 根据读取到的metaData数据获取当前插件的类型,提供给外部
|
||||||
PluginAttribute pluginClass = PluginAttribute::Quick;
|
PluginAttribute pluginClass = getPluginClass(itemInter);
|
||||||
QPluginLoader *pluginLoader = ProxyPluginController::instance(PluginType::QuickPlugin)->pluginLoader(itemInter);
|
|
||||||
if (pluginLoader) {
|
|
||||||
if (pluginLoader->fileName().contains("/plugins/system-trays")) {
|
|
||||||
// 如果是从系统托盘目录下加载的插件,则认为它是托盘插件,此时需要放入到托盘中
|
|
||||||
pluginClass = PluginAttribute::System;
|
|
||||||
} else {
|
|
||||||
QJsonObject meta = pluginLoader->metaData().value("MetaData").toObject();
|
|
||||||
if (meta.contains("tool") && meta.value("tool").toBool())
|
|
||||||
pluginClass = PluginAttribute::Tool;
|
|
||||||
else if (meta.contains("fixed") && meta.value("fixed").toBool())
|
|
||||||
pluginClass = PluginAttribute::Fixed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_quickPlugins[pluginClass] << itemInter;
|
m_quickPlugins[pluginClass] << itemInter;
|
||||||
m_quickPluginsMap[itemInter] = itemKey;
|
m_quickPluginsMap[itemInter] = itemKey;
|
||||||
@ -85,6 +72,37 @@ void QuickSettingController::updateDockInfo(PluginsItemInterface * const itemInt
|
|||||||
Q_EMIT pluginUpdated(itemInter, part);
|
Q_EMIT pluginUpdated(itemInter, part);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QuickSettingController::PluginAttribute QuickSettingController::getPluginClass(PluginsItemInterface * const itemInter) const
|
||||||
|
{
|
||||||
|
QPluginLoader *pluginLoader = ProxyPluginController::instance(PluginType::QuickPlugin)->pluginLoader(itemInter);
|
||||||
|
if (!pluginLoader)
|
||||||
|
return PluginAttribute::Quick;
|
||||||
|
|
||||||
|
if (pluginLoader->fileName().contains("/plugins/system-trays")) {
|
||||||
|
// 如果是从系统目录下加载的插件,则认为它是系统插件,此时需要放入到托盘中
|
||||||
|
return PluginAttribute::Tray;
|
||||||
|
}
|
||||||
|
|
||||||
|
QJsonObject meta = pluginLoader->metaData().value("MetaData").toObject();
|
||||||
|
if (meta.contains("tool") && meta.value("tool").toBool()) {
|
||||||
|
// 如果有tool标记,则认为它是工具插件,例如回收站和窗管提供的相关插件
|
||||||
|
return PluginAttribute::Tool;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (meta.contains("system") && meta.value("system").toBool()) {
|
||||||
|
// 如果有system标记,则认为它是右侧的关机按钮插件
|
||||||
|
return PluginAttribute::System;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (meta.contains("fixed") && meta.value("fixed").toBool()) {
|
||||||
|
// 如果有fixed标记,则认为它是固定区域的插件,例如显示桌面和多任务视图
|
||||||
|
return PluginAttribute::Fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 其他的都认为是快捷插件
|
||||||
|
return PluginAttribute::Quick;
|
||||||
|
}
|
||||||
|
|
||||||
QuickSettingController *QuickSettingController::instance()
|
QuickSettingController *QuickSettingController::instance()
|
||||||
{
|
{
|
||||||
static QuickSettingController instance;
|
static QuickSettingController instance;
|
||||||
@ -119,3 +137,20 @@ PluginsItem *QuickSettingController::pluginItemWidget(PluginsItemInterface *plug
|
|||||||
m_pluginItemWidgetMap[pluginItem] = widget;
|
m_pluginItemWidgetMap[pluginItem] = widget;
|
||||||
return widget;
|
return widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<PluginsItemInterface *> QuickSettingController::pluginInSettings()
|
||||||
|
{
|
||||||
|
QList<PluginsItemInterface *> settingPlugins;
|
||||||
|
// 用于在控制中心显示可改变位置的插件,这里只提供
|
||||||
|
QMap<PluginsItemInterface *, QMap<QString, QObject *>> &plugins = ProxyPluginController::instance(PluginType::QuickPlugin)->pluginsMap();
|
||||||
|
QList<PluginsItemInterface *> allPlugins = plugins.keys();
|
||||||
|
for (PluginsItemInterface *plugin : allPlugins) {
|
||||||
|
PluginAttribute pluginClass = getPluginClass(plugin);
|
||||||
|
if (pluginClass == QuickSettingController::PluginAttribute::Quick
|
||||||
|
|| pluginClass == QuickSettingController::PluginAttribute::System
|
||||||
|
|| pluginClass == QuickSettingController::PluginAttribute::Tool)
|
||||||
|
settingPlugins << plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
return settingPlugins;
|
||||||
|
}
|
||||||
|
@ -32,10 +32,11 @@ class QuickSettingController : public AbstractPluginsController
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
enum class PluginAttribute {
|
enum class PluginAttribute {
|
||||||
Quick = 0,
|
Quick = 0, // 快捷区域插件
|
||||||
Tool,
|
Tool, // 工具插件(回收站和窗管开发的另一套插件)
|
||||||
Fixed,
|
System, // 系统插件(关机插件)
|
||||||
System
|
Tray, // 托盘插件(U盘图标等)
|
||||||
|
Fixed // 固定区域插件(显示桌面和多任务视图)
|
||||||
};
|
};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -44,6 +45,7 @@ public:
|
|||||||
QString itemKey(PluginsItemInterface *pluginItem) const;
|
QString itemKey(PluginsItemInterface *pluginItem) const;
|
||||||
QJsonObject metaData(PluginsItemInterface *pluginItem) const;
|
QJsonObject metaData(PluginsItemInterface *pluginItem) const;
|
||||||
PluginsItem *pluginItemWidget(PluginsItemInterface *pluginItem);
|
PluginsItem *pluginItemWidget(PluginsItemInterface *pluginItem);
|
||||||
|
QList<PluginsItemInterface *> pluginInSettings();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void pluginInserted(PluginsItemInterface *itemInter, const PluginAttribute &);
|
void pluginInserted(PluginsItemInterface *itemInter, const PluginAttribute &);
|
||||||
@ -64,6 +66,9 @@ protected:
|
|||||||
|
|
||||||
void updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) override;
|
void updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
PluginAttribute getPluginClass(PluginsItemInterface * const itemInter) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QMap<PluginAttribute, QList<PluginsItemInterface *>> m_quickPlugins;
|
QMap<PluginAttribute, QList<PluginsItemInterface *>> m_quickPlugins;
|
||||||
QMap<PluginsItemInterface *, QString> m_quickPluginsMap;
|
QMap<PluginsItemInterface *, QString> m_quickPluginsMap;
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "dockitemmanager.h"
|
#include "dockitemmanager.h"
|
||||||
#include "windowmanager.h"
|
#include "windowmanager.h"
|
||||||
#include "proxyplugincontroller.h"
|
#include "proxyplugincontroller.h"
|
||||||
|
#include "quicksettingcontroller.h"
|
||||||
#include "pluginsitem.h"
|
#include "pluginsitem.h"
|
||||||
|
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
@ -47,12 +48,13 @@ DBusDockAdaptors::DBusDockAdaptors(WindowManager* parent)
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<PluginsItemInterface *> allPlugin = plugins();
|
||||||
connect(DockItemManager::instance(), &DockItemManager::itemInserted, this, [ = ] (const int index, DockItem *item) {
|
connect(DockItemManager::instance(), &DockItemManager::itemInserted, this, [ = ] (const int index, DockItem *item) {
|
||||||
Q_UNUSED(index);
|
Q_UNUSED(index);
|
||||||
if (item->itemType() == DockItem::Plugins
|
if (item->itemType() == DockItem::Plugins
|
||||||
|| item->itemType() == DockItem::FixedPlugin) {
|
|| item->itemType() == DockItem::FixedPlugin) {
|
||||||
PluginsItem *pluginItem = static_cast<PluginsItem *>(item);
|
PluginsItem *pluginItem = static_cast<PluginsItem *>(item);
|
||||||
for (auto *p : DockItemManager::instance()->pluginList()) {
|
for (auto *p : allPlugin) {
|
||||||
if (p->pluginName() == pluginItem->pluginName()) {
|
if (p->pluginName() == pluginItem->pluginName()) {
|
||||||
Q_EMIT pluginVisibleChanged(p->pluginDisplayName(), getPluginVisible(p->pluginDisplayName()));
|
Q_EMIT pluginVisibleChanged(p->pluginDisplayName(), getPluginVisible(p->pluginDisplayName()));
|
||||||
}
|
}
|
||||||
@ -64,7 +66,7 @@ DBusDockAdaptors::DBusDockAdaptors(WindowManager* parent)
|
|||||||
if (item->itemType() == DockItem::Plugins
|
if (item->itemType() == DockItem::Plugins
|
||||||
|| item->itemType() == DockItem::FixedPlugin) {
|
|| item->itemType() == DockItem::FixedPlugin) {
|
||||||
PluginsItem *pluginItem = static_cast<PluginsItem *>(item);
|
PluginsItem *pluginItem = static_cast<PluginsItem *>(item);
|
||||||
for (auto *p : DockItemManager::instance()->pluginList()) {
|
for (auto *p : allPlugin) {
|
||||||
if (p->pluginName() == pluginItem->pluginName()) {
|
if (p->pluginName() == pluginItem->pluginName()) {
|
||||||
Q_EMIT pluginVisibleChanged(p->pluginDisplayName(), getPluginVisible(p->pluginDisplayName()));
|
Q_EMIT pluginVisibleChanged(p->pluginDisplayName(), getPluginVisible(p->pluginDisplayName()));
|
||||||
}
|
}
|
||||||
@ -99,10 +101,10 @@ void DBusDockAdaptors::ReloadPlugins()
|
|||||||
|
|
||||||
QStringList DBusDockAdaptors::GetLoadedPlugins()
|
QStringList DBusDockAdaptors::GetLoadedPlugins()
|
||||||
{
|
{
|
||||||
auto pluginList = DockItemManager::instance()->pluginList();
|
QList<PluginsItemInterface *> allPlugin = plugins();
|
||||||
QStringList nameList;
|
QStringList nameList;
|
||||||
QMap<QString, QString> map;
|
QMap<QString, QString> map;
|
||||||
for (auto plugin : pluginList) {
|
for (auto plugin : allPlugin) {
|
||||||
// 托盘本身也是一个插件,这里去除掉这个特殊的插件,还有一些没有实际名字的插件
|
// 托盘本身也是一个插件,这里去除掉这个特殊的插件,还有一些没有实际名字的插件
|
||||||
if (plugin->pluginName() == "tray"
|
if (plugin->pluginName() == "tray"
|
||||||
|| plugin->pluginDisplayName().isEmpty()
|
|| plugin->pluginDisplayName().isEmpty()
|
||||||
@ -134,7 +136,8 @@ void DBusDockAdaptors::resizeDock(int offset, bool dragging)
|
|||||||
// 返回每个插件的识别Key(所以此值应始终不变),供个性化插件根据key去匹配每个插件对应的图标
|
// 返回每个插件的识别Key(所以此值应始终不变),供个性化插件根据key去匹配每个插件对应的图标
|
||||||
QString DBusDockAdaptors::getPluginKey(const QString &pluginName)
|
QString DBusDockAdaptors::getPluginKey(const QString &pluginName)
|
||||||
{
|
{
|
||||||
for (auto plugin : DockItemManager::instance()->pluginList()) {
|
QList<PluginsItemInterface *> allPlugin = plugins();
|
||||||
|
for (auto plugin : allPlugin) {
|
||||||
if (plugin->pluginDisplayName() == pluginName)
|
if (plugin->pluginDisplayName() == pluginName)
|
||||||
return plugin->pluginName();
|
return plugin->pluginName();
|
||||||
}
|
}
|
||||||
@ -144,7 +147,8 @@ QString DBusDockAdaptors::getPluginKey(const QString &pluginName)
|
|||||||
|
|
||||||
bool DBusDockAdaptors::getPluginVisible(const QString &pluginName)
|
bool DBusDockAdaptors::getPluginVisible(const QString &pluginName)
|
||||||
{
|
{
|
||||||
for (auto *p : DockItemManager::instance()->pluginList()) {
|
QList<PluginsItemInterface *> allPlugin = plugins();
|
||||||
|
for (auto *p : allPlugin) {
|
||||||
if (!p->pluginIsAllowDisable())
|
if (!p->pluginIsAllowDisable())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -165,7 +169,8 @@ bool DBusDockAdaptors::getPluginVisible(const QString &pluginName)
|
|||||||
|
|
||||||
void DBusDockAdaptors::setPluginVisible(const QString &pluginName, bool visible)
|
void DBusDockAdaptors::setPluginVisible(const QString &pluginName, bool visible)
|
||||||
{
|
{
|
||||||
for (auto *p : DockItemManager::instance()->pluginList()) {
|
QList<PluginsItemInterface *> allPlugin = plugins();
|
||||||
|
for (auto *p : allPlugin) {
|
||||||
if (!p->pluginIsAllowDisable())
|
if (!p->pluginIsAllowDisable())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -223,3 +228,8 @@ bool DBusDockAdaptors::isPluginValid(const QString &name)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<PluginsItemInterface *> DBusDockAdaptors::plugins() const
|
||||||
|
{
|
||||||
|
return QuickSettingController::instance()->pluginInSettings();
|
||||||
|
}
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
class QGSettings;
|
class QGSettings;
|
||||||
class WindowManager;
|
class WindowManager;
|
||||||
|
class PluginsItemInterface;
|
||||||
|
|
||||||
class DBusDockAdaptors: public QDBusAbstractAdaptor
|
class DBusDockAdaptors: public QDBusAbstractAdaptor
|
||||||
{
|
{
|
||||||
@ -100,6 +101,7 @@ signals:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
bool isPluginValid(const QString &name);
|
bool isPluginValid(const QString &name);
|
||||||
|
QList<PluginsItemInterface *> plugins() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QGSettings *m_gsettings;
|
QGSettings *m_gsettings;
|
||||||
|
@ -203,6 +203,8 @@ void QuickSettingContainer::onPluginRemove(PluginsItemInterface * itemInter)
|
|||||||
if (!quickItem)
|
if (!quickItem)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
m_pluginLayout->removeWidget(quickItem);
|
||||||
|
m_quickSettings.removeOne(quickItem);
|
||||||
disconnect(quickItem, &QuickSettingItem::detailClicked, this, &QuickSettingContainer::onItemDetailClick);
|
disconnect(quickItem, &QuickSettingItem::detailClicked, this, &QuickSettingContainer::onItemDetailClick);
|
||||||
quickItem->setParent(nullptr);
|
quickItem->setParent(nullptr);
|
||||||
quickItem->removeEventFilter(this);
|
quickItem->removeEventFilter(this);
|
||||||
|
@ -126,8 +126,8 @@ void SystemPluginWindow::initUi()
|
|||||||
void SystemPluginWindow::initConnection()
|
void SystemPluginWindow::initConnection()
|
||||||
{
|
{
|
||||||
QuickSettingController *quickController = QuickSettingController::instance();
|
QuickSettingController *quickController = QuickSettingController::instance();
|
||||||
connect(quickController, &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute &pluginClass) {
|
connect(quickController, &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute &pluginAttr) {
|
||||||
if (pluginClass != QuickSettingController::PluginAttribute::Fixed)
|
if (pluginAttr != QuickSettingController::PluginAttribute::System)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pluginAdded(itemInter);
|
pluginAdded(itemInter);
|
||||||
@ -136,7 +136,7 @@ void SystemPluginWindow::initConnection()
|
|||||||
connect(quickController, &QuickSettingController::pluginRemoved, this, &SystemPluginWindow::onPluginItemRemoved);
|
connect(quickController, &QuickSettingController::pluginRemoved, this, &SystemPluginWindow::onPluginItemRemoved);
|
||||||
connect(quickController, &QuickSettingController::pluginUpdated, this, &SystemPluginWindow::onPluginItemUpdated);
|
connect(quickController, &QuickSettingController::pluginUpdated, this, &SystemPluginWindow::onPluginItemUpdated);
|
||||||
|
|
||||||
QList<PluginsItemInterface *> plugins = quickController->pluginItems(QuickSettingController::PluginAttribute::Fixed);
|
QList<PluginsItemInterface *> plugins = quickController->pluginItems(QuickSettingController::PluginAttribute::System);
|
||||||
for (int i = 0; i < plugins.size(); i++)
|
for (int i = 0; i < plugins.size(); i++)
|
||||||
pluginAdded(plugins[i]);
|
pluginAdded(plugins[i]);
|
||||||
}
|
}
|
||||||
|
@ -48,17 +48,19 @@ TrayModel::TrayModel(QListView *view, bool isIconTray, bool hasInputMethod, QObj
|
|||||||
if (isIconTray) {
|
if (isIconTray) {
|
||||||
connect(m_monitor, &TrayMonitor::xEmbedTrayAdded, this, &TrayModel::onXEmbedTrayAdded);
|
connect(m_monitor, &TrayMonitor::xEmbedTrayAdded, this, &TrayModel::onXEmbedTrayAdded);
|
||||||
connect(m_monitor, &TrayMonitor::indicatorFounded, this, &TrayModel::onIndicatorFounded);
|
connect(m_monitor, &TrayMonitor::indicatorFounded, this, &TrayModel::onIndicatorFounded);
|
||||||
connect(QuickSettingController::instance(), &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute &pluginAttr) {
|
|
||||||
if (pluginAttr != QuickSettingController::PluginAttribute::System)
|
QuickSettingController *quickController = QuickSettingController::instance();
|
||||||
|
connect(quickController, &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute &pluginAttr) {
|
||||||
|
if (pluginAttr != QuickSettingController::PluginAttribute::Tray)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
systemItemAdded(itemInter);
|
systemItemAdded(itemInter);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(QuickSettingController::instance(), &QuickSettingController::pluginRemoved, this, &TrayModel::onSystemItemRemoved);
|
connect(quickController, &QuickSettingController::pluginRemoved, this, &TrayModel::onSystemItemRemoved);
|
||||||
QMetaObject::invokeMethod(this, [ = ] {
|
QMetaObject::invokeMethod(this, [ = ] {
|
||||||
QList<PluginsItemInterface *> systemPlugins = QuickSettingController::instance()->pluginItems(QuickSettingController::PluginAttribute::System);
|
QList<PluginsItemInterface *> trayPlugins = quickController->pluginItems(QuickSettingController::PluginAttribute::Tray);
|
||||||
for (PluginsItemInterface *plugin : systemPlugins)
|
for (PluginsItemInterface *plugin : trayPlugins)
|
||||||
systemItemAdded(plugin);
|
systemItemAdded(plugin);
|
||||||
}, Qt::QueuedConnection);
|
}, Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
@ -151,6 +151,23 @@ SNITrayItemWidget::SNITrayItemWidget(const QString &sniServicePath, QWidget *par
|
|||||||
connect(m_sniInter, &StatusNotifierItem::NewStatus, [ = ] {
|
connect(m_sniInter, &StatusNotifierItem::NewStatus, [ = ] {
|
||||||
onSNIStatusChanged(m_sniInter->status());
|
onSNIStatusChanged(m_sniInter->status());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QMetaObject::invokeMethod(this, [ this ] {
|
||||||
|
m_sniIconName = m_sniInter->iconName();
|
||||||
|
m_sniIconPixmap = m_sniInter->iconPixmap();
|
||||||
|
m_sniIconThemePath = m_sniInter->iconThemePath();
|
||||||
|
m_updateIconTimer->start();
|
||||||
|
|
||||||
|
m_sniOverlayIconName = m_sniInter->overlayIconName();
|
||||||
|
m_sniOverlayIconPixmap = m_sniInter->overlayIconPixmap();
|
||||||
|
m_sniIconThemePath = m_sniInter->iconThemePath();
|
||||||
|
m_updateOverlayIconTimer->start();
|
||||||
|
|
||||||
|
m_sniAttentionIconName = m_sniInter->attentionIconName();
|
||||||
|
m_sniAttentionIconPixmap = m_sniInter->attentionIconPixmap();
|
||||||
|
m_sniIconThemePath = m_sniInter->iconThemePath();
|
||||||
|
m_updateAttentionIconTimer->start();
|
||||||
|
}, Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString SNITrayItemWidget::itemKeyForConfig()
|
QString SNITrayItemWidget::itemKeyForConfig()
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"api": "2.0.0"
|
"api": "2.0.0",
|
||||||
|
"fixed": true
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
{
|
{
|
||||||
"api": "2.0.0"
|
"api": "2.0.0",
|
||||||
|
"fixed": true
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"api": "2.0.0",
|
"api": "2.0.0",
|
||||||
"fixed": true
|
"system": true
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user