mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
fix: 插件根据标记来决定插件的类型
在决定插件的位置的时候,根据插件的返回的标记来决定当前插件是属于固定插件、快捷插件、托盘插件、系统插件还是工具插件 Log: Influence: 任务栏插件类型 Task: https://pms.uniontech.com/task-view-220099.html Change-Id: I5dedc16fd7ccaac9d54dccf657e1a938bf3f2160
This commit is contained in:
parent
c7df15ce0e
commit
4f3f7a0aed
@ -20,7 +20,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "quicksettingcontroller.h"
|
#include "quicksettingcontroller.h"
|
||||||
#include "quicksettingitem.h"
|
#include "quicksettingitem.h"
|
||||||
#include "pluginsiteminterface.h"
|
|
||||||
#include "proxyplugincontroller.h"
|
#include "proxyplugincontroller.h"
|
||||||
#include "pluginsitem.h"
|
#include "pluginsitem.h"
|
||||||
|
|
||||||
@ -88,33 +87,33 @@ void QuickSettingController::updateDockInfo(PluginsItemInterface * const itemInt
|
|||||||
|
|
||||||
QuickSettingController::PluginAttribute QuickSettingController::pluginAttribute(PluginsItemInterface * const itemInter) const
|
QuickSettingController::PluginAttribute QuickSettingController::pluginAttribute(PluginsItemInterface * const itemInter) const
|
||||||
{
|
{
|
||||||
QPluginLoader *pluginLoader = ProxyPluginController::instance(PluginType::QuickPlugin)->pluginLoader(itemInter);
|
// 工具插件,例如回收站
|
||||||
if (!pluginLoader)
|
if (hasFlag(itemInter, PluginFlag::Type_Tool))
|
||||||
|
return PluginAttribute::Tool;
|
||||||
|
|
||||||
|
// 系统插件,例如关机按钮
|
||||||
|
if (hasFlag(itemInter, PluginFlag::Type_System))
|
||||||
|
return PluginAttribute::System;
|
||||||
|
|
||||||
|
// 托盘插件,例如磁盘图标
|
||||||
|
if (hasFlag(itemInter, PluginFlag::Type_Tray))
|
||||||
|
return PluginAttribute::Tray;
|
||||||
|
|
||||||
|
// 固定插件,例如显示桌面和多任务试图
|
||||||
|
if (hasFlag(itemInter, PluginFlag::Type_Fixed))
|
||||||
|
return PluginAttribute::Fixed;
|
||||||
|
|
||||||
|
// 通用插件,一般的插件都是通用插件,就是放在快捷插件区域的那些插件
|
||||||
|
if (hasFlag(itemInter, PluginFlag::Type_Common))
|
||||||
return PluginAttribute::Quick;
|
return PluginAttribute::Quick;
|
||||||
|
|
||||||
if (pluginLoader->fileName().contains(TRAY_PATH)) {
|
// 基本插件,不在任务栏上显示的插件
|
||||||
// 如果是从系统目录下加载的插件,则认为它是系统插件,此时需要放入到托盘中
|
return PluginAttribute::None;
|
||||||
return PluginAttribute::Tray;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const QJsonObject &meta = pluginLoader->metaData().value("MetaData").toObject();
|
bool QuickSettingController::hasFlag(PluginsItemInterface *itemInter, PluginFlag flag) const
|
||||||
if (meta.contains("tool") && meta.value("tool").toBool()) {
|
{
|
||||||
// 如果有tool标记,则认为它是工具插件,例如回收站和窗管提供的相关插件
|
return itemInter->flags() & flag;
|
||||||
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()
|
||||||
@ -161,10 +160,7 @@ QList<PluginsItemInterface *> QuickSettingController::pluginInSettings()
|
|||||||
if (plugin->pluginDisplayName().isEmpty())
|
if (plugin->pluginDisplayName().isEmpty())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
PluginAttribute pluginAttr = pluginAttribute(plugin);
|
if (hasFlag(plugin, PluginFlag::Attribute_CanSetting))
|
||||||
if (pluginAttr == QuickSettingController::PluginAttribute::Quick
|
|
||||||
|| pluginAttr == QuickSettingController::PluginAttribute::System
|
|
||||||
|| pluginAttr == QuickSettingController::PluginAttribute::Tool)
|
|
||||||
settingPlugins << plugin;
|
settingPlugins << plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#define QUICKSETTINGCONTROLLER_H
|
#define QUICKSETTINGCONTROLLER_H
|
||||||
|
|
||||||
#include "abstractpluginscontroller.h"
|
#include "abstractpluginscontroller.h"
|
||||||
|
#include "pluginsiteminterface.h"
|
||||||
|
|
||||||
class QuickSettingItem;
|
class QuickSettingItem;
|
||||||
class PluginsItem;
|
class PluginsItem;
|
||||||
@ -32,7 +33,8 @@ class QuickSettingController : public AbstractPluginsController
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
enum class PluginAttribute {
|
enum class PluginAttribute {
|
||||||
Quick = 0, // 快捷区域插件
|
None = 0, // 不在任何区域显示的插件
|
||||||
|
Quick, // 快捷区域插件
|
||||||
Tool, // 工具插件(回收站和窗管开发的另一套插件)
|
Tool, // 工具插件(回收站和窗管开发的另一套插件)
|
||||||
System, // 系统插件(关机插件)
|
System, // 系统插件(关机插件)
|
||||||
Tray, // 托盘插件(U盘图标等)
|
Tray, // 托盘插件(U盘图标等)
|
||||||
@ -47,6 +49,7 @@ public:
|
|||||||
PluginsItem *pluginItemWidget(PluginsItemInterface *pluginItem);
|
PluginsItem *pluginItemWidget(PluginsItemInterface *pluginItem);
|
||||||
QList<PluginsItemInterface *> pluginInSettings();
|
QList<PluginsItemInterface *> pluginInSettings();
|
||||||
PluginAttribute pluginAttribute(PluginsItemInterface * const itemInter) const;
|
PluginAttribute pluginAttribute(PluginsItemInterface * const itemInter) const;
|
||||||
|
bool hasFlag(PluginsItemInterface *itemInter, PluginFlag flag) const;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void pluginInserted(PluginsItemInterface *itemInter, const PluginAttribute);
|
void pluginInserted(PluginsItemInterface *itemInter, const PluginAttribute);
|
||||||
|
@ -136,11 +136,7 @@ bool ToolAppHelper::pluginInTool(DockItem *dockItem) const
|
|||||||
if (!pluginItem)
|
if (!pluginItem)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
QJsonObject metaData = pluginItem->metaData();
|
return (QuickSettingController::instance()->pluginAttribute(pluginItem->pluginItem()) == QuickSettingController::PluginAttribute::Tool);
|
||||||
if (metaData.contains("tool"))
|
|
||||||
return metaData.value("tool").toBool();
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolAppHelper::pluginItemAdded(PluginsItemInterface *itemInter)
|
void ToolAppHelper::pluginItemAdded(PluginsItemInterface *itemInter)
|
||||||
|
@ -330,8 +330,3 @@ PluginsItemInterface *PluginsItem::pluginItem() const
|
|||||||
{
|
{
|
||||||
return m_pluginInter;
|
return m_pluginInter;
|
||||||
}
|
}
|
||||||
|
|
||||||
QJsonObject PluginsItem::metaData() const
|
|
||||||
{
|
|
||||||
return m_jsonData;
|
|
||||||
}
|
|
||||||
|
@ -55,8 +55,6 @@ public:
|
|||||||
|
|
||||||
PluginsItemInterface *pluginItem() const;
|
PluginsItemInterface *pluginItem() const;
|
||||||
|
|
||||||
QJsonObject metaData() const;
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void refreshIcon() override;
|
void refreshIcon() override;
|
||||||
|
|
||||||
|
@ -51,7 +51,6 @@ QuickSettingItem::QuickSettingItem(PluginsItemInterface *const pluginInter, QWid
|
|||||||
: DockItem(parent)
|
: DockItem(parent)
|
||||||
, m_pluginInter(pluginInter)
|
, m_pluginInter(pluginInter)
|
||||||
, m_itemKey(QuickSettingController::instance()->itemKey(pluginInter))
|
, m_itemKey(QuickSettingController::instance()->itemKey(pluginInter))
|
||||||
, m_metaData(QuickSettingController::instance()->metaData(pluginInter))
|
|
||||||
{
|
{
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
this->installEventFilter(this);
|
this->installEventFilter(this);
|
||||||
@ -130,16 +129,19 @@ QColor QuickSettingItem::foregroundColor() const
|
|||||||
|
|
||||||
QuickSettingItem *QuickSettingFactory::createQuickWidget(PluginsItemInterface * const pluginInter)
|
QuickSettingItem *QuickSettingFactory::createQuickWidget(PluginsItemInterface * const pluginInter)
|
||||||
{
|
{
|
||||||
|
QuickSettingController *quickController = QuickSettingController::instance();
|
||||||
// 如果显示在面板的图标或者Widget为空,则不让显示(例如电池插件)
|
// 如果显示在面板的图标或者Widget为空,则不让显示(例如电池插件)
|
||||||
if (pluginInter->icon(DockPart::QuickPanel).isNull() && !pluginInter->itemWidget(QUICK_ITEM_KEY))
|
if (!quickController->hasFlag(pluginInter, PluginFlag::Type_Common))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
const QJsonObject metaData = QuickSettingController::instance()->metaData(pluginInter);
|
if (quickController->hasFlag(pluginInter, PluginFlag::Quick_Multi))
|
||||||
if (metaData.contains("primary") && metaData.value("primary").toBool())
|
|
||||||
return new MultiQuickItem(pluginInter);
|
return new MultiQuickItem(pluginInter);
|
||||||
|
|
||||||
if (pluginInter->itemWidget(QUICK_ITEM_KEY) && metaData.contains("applet") && metaData.value("applet").toBool())
|
if (quickController->hasFlag(pluginInter, PluginFlag::Quick_Full))
|
||||||
return new FullQuickItem(pluginInter);
|
return new FullQuickItem(pluginInter);
|
||||||
|
|
||||||
return new SingleQuickItem(pluginInter);
|
if (quickController->hasFlag(pluginInter, PluginFlag::Quick_Single))
|
||||||
|
return new SingleQuickItem(pluginInter);
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,6 @@ protected:
|
|||||||
private:
|
private:
|
||||||
PluginsItemInterface *m_pluginInter;
|
PluginsItemInterface *m_pluginInter;
|
||||||
QString m_itemKey;
|
QString m_itemKey;
|
||||||
QJsonObject m_metaData;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class QuickSettingFactory
|
class QuickSettingFactory
|
||||||
|
@ -290,7 +290,7 @@ void QuickPluginWindow::onRequestUpdate()
|
|||||||
if (pluginLoader)
|
if (pluginLoader)
|
||||||
metaData = pluginLoader->metaData().value("MetaData").toObject();
|
metaData = pluginLoader->metaData().value("MetaData").toObject();
|
||||||
|
|
||||||
itemWidget = new QuickDockItem(item, metaData, quickController->itemKey(item), this);
|
itemWidget = new QuickDockItem(item, quickController->itemKey(item), this);
|
||||||
itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT);
|
itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT);
|
||||||
itemWidget->installEventFilter(this);
|
itemWidget->installEventFilter(this);
|
||||||
itemWidget->setMouseTracking(true);
|
itemWidget->setMouseTracking(true);
|
||||||
@ -471,7 +471,7 @@ int QuickPluginWindow::getDropIndex(QPoint point)
|
|||||||
|
|
||||||
QuickDockItem *dockBeforeItem = qobject_cast<QuickDockItem *>(layoutBefore->widget());
|
QuickDockItem *dockBeforeItem = qobject_cast<QuickDockItem *>(layoutBefore->widget());
|
||||||
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
||||||
if (dockItem->isPrimary())
|
if (dockItem->canInsert())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (dockBeforeItem->geometry().x() > point.x() && dockItem->geometry().right() < point.x())
|
if (dockBeforeItem->geometry().x() > point.x() && dockItem->geometry().right() < point.x())
|
||||||
@ -485,7 +485,7 @@ int QuickPluginWindow::getDropIndex(QPoint point)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
QuickDockItem *dockBeforeItem = qobject_cast<QuickDockItem *>(layoutBefore->widget());
|
QuickDockItem *dockBeforeItem = qobject_cast<QuickDockItem *>(layoutBefore->widget());
|
||||||
if (dockBeforeItem->isPrimary())
|
if (dockBeforeItem->canInsert())
|
||||||
break;
|
break;
|
||||||
|
|
||||||
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
||||||
@ -558,16 +558,17 @@ void QuickPluginWindow::initConnection()
|
|||||||
* @param pluginItem
|
* @param pluginItem
|
||||||
* @param parent
|
* @param parent
|
||||||
*/
|
*/
|
||||||
QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, const QJsonObject &metaData, const QString itemKey, QWidget *parent)
|
QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, const QString &itemKey, QWidget *parent)
|
||||||
: QWidget(parent)
|
: QWidget(parent)
|
||||||
, m_pluginItem(pluginItem)
|
, m_pluginItem(pluginItem)
|
||||||
, m_metaData(metaData)
|
|
||||||
, m_itemKey(itemKey)
|
, m_itemKey(itemKey)
|
||||||
, m_position(Dock::Position::Bottom)
|
, m_position(Dock::Position::Bottom)
|
||||||
, m_popupWindow(new DockPopupWindow)
|
, m_popupWindow(new DockPopupWindow)
|
||||||
, m_contextMenu(new QMenu(this))
|
, m_contextMenu(new QMenu(this))
|
||||||
, m_tipParent(nullptr)
|
, m_tipParent(nullptr)
|
||||||
, m_mainLayout(nullptr)
|
, m_mainLayout(nullptr)
|
||||||
|
, m_canInsert(QuickSettingController::instance()->hasFlag(pluginItem, PluginFlag::Attribute_CanInsert))
|
||||||
|
, m_dockItemParent(nullptr)
|
||||||
{
|
{
|
||||||
initUi();
|
initUi();
|
||||||
initConnection();
|
initConnection();
|
||||||
@ -588,12 +589,9 @@ PluginsItemInterface *QuickDockItem::pluginItem()
|
|||||||
return m_pluginItem;
|
return m_pluginItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QuickDockItem::isPrimary() const
|
bool QuickDockItem::canInsert() const
|
||||||
{
|
{
|
||||||
if (m_metaData.contains("primary"))
|
return m_canInsert;
|
||||||
return m_metaData.value("primary").toBool();
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickDockItem::hideToolTip()
|
void QuickDockItem::hideToolTip()
|
||||||
@ -703,8 +701,10 @@ void QuickDockItem::hideEvent(QHideEvent *event)
|
|||||||
return QWidget::hideEvent(event);
|
return QWidget::hideEvent(event);
|
||||||
|
|
||||||
QWidget *itemWidget = m_pluginItem->itemWidget(m_itemKey);
|
QWidget *itemWidget = m_pluginItem->itemWidget(m_itemKey);
|
||||||
if (itemWidget && m_mainLayout->indexOf(itemWidget) >= 0)
|
if (itemWidget && m_mainLayout->indexOf(itemWidget) >= 0) {
|
||||||
m_mainLayout->removeWidget(m_pluginItem->itemWidget(m_itemKey));
|
itemWidget->setParent(m_dockItemParent);
|
||||||
|
m_mainLayout->removeWidget(itemWidget);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QPixmap QuickDockItem::iconPixmap() const
|
QPixmap QuickDockItem::iconPixmap() const
|
||||||
@ -725,7 +725,11 @@ void QuickDockItem::initUi()
|
|||||||
|
|
||||||
m_mainLayout = new QHBoxLayout(this);
|
m_mainLayout = new QHBoxLayout(this);
|
||||||
m_mainLayout->setContentsMargins(0, 0, 0, 0);
|
m_mainLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
m_pluginItem->itemWidget(m_itemKey)->installEventFilter(this);
|
QWidget *itemWidget = m_pluginItem->itemWidget(m_itemKey);
|
||||||
|
if (itemWidget) {
|
||||||
|
m_dockItemParent = itemWidget->parentWidget();
|
||||||
|
itemWidget->installEventFilter(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickDockItem::initAttribute()
|
void QuickDockItem::initAttribute()
|
||||||
|
@ -94,12 +94,12 @@ class QuickDockItem : public QWidget
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit QuickDockItem(PluginsItemInterface *pluginItem, const QJsonObject &metaData, const QString itemKey, QWidget *parent = nullptr);
|
explicit QuickDockItem(PluginsItemInterface *pluginItem, const QString &itemKey, QWidget *parent = nullptr);
|
||||||
~QuickDockItem();
|
~QuickDockItem();
|
||||||
|
|
||||||
void setPositon(Dock::Position position);
|
void setPositon(Dock::Position position);
|
||||||
PluginsItemInterface *pluginItem();
|
PluginsItemInterface *pluginItem();
|
||||||
bool isPrimary() const;
|
bool canInsert() const;
|
||||||
void hideToolTip();
|
void hideToolTip();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -125,13 +125,14 @@ private Q_SLOTS:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
PluginsItemInterface *m_pluginItem;
|
PluginsItemInterface *m_pluginItem;
|
||||||
QJsonObject m_metaData;
|
|
||||||
QString m_itemKey;
|
QString m_itemKey;
|
||||||
Dock::Position m_position;
|
Dock::Position m_position;
|
||||||
DockPopupWindow *m_popupWindow;
|
DockPopupWindow *m_popupWindow;
|
||||||
QMenu *m_contextMenu;
|
QMenu *m_contextMenu;
|
||||||
QWidget *m_tipParent;
|
QWidget *m_tipParent;
|
||||||
QHBoxLayout *m_mainLayout;
|
QHBoxLayout *m_mainLayout;
|
||||||
|
bool m_canInsert;
|
||||||
|
QWidget *m_dockItemParent;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QUICKPLUGINWINDOW_H
|
#endif // QUICKPLUGINWINDOW_H
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"api": "2.0.0",
|
"api": "2.0.0",
|
||||||
"primary" : true,
|
|
||||||
"depends-daemon-dbus-service": "org.deepin.daemon.Bluetooth1"
|
"depends-daemon-dbus-service": "org.deepin.daemon.Bluetooth1"
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
{
|
{
|
||||||
"api": "2.0.0",
|
"api": "2.0.0"
|
||||||
"fixed": true
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
{
|
{
|
||||||
"api": "2.0.0",
|
"api": "2.0.0"
|
||||||
"fixed": true
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
{
|
{
|
||||||
"api": "2.0.0",
|
"api": "2.0.0"
|
||||||
"system": true
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
{
|
{
|
||||||
"api": "2.0.0",
|
"api": "2.0.0",
|
||||||
"depends-daemon-dbus-service": "org.deepin.daemon.Audio1",
|
"depends-daemon-dbus-service": "org.deepin.daemon.Audio1"
|
||||||
"applet": true
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
{
|
{
|
||||||
"api": "2.0.0",
|
"api": "2.0.0"
|
||||||
"tool": true
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user