mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +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 "quicksettingitem.h"
|
||||
#include "pluginsiteminterface.h"
|
||||
#include "proxyplugincontroller.h"
|
||||
#include "pluginsitem.h"
|
||||
|
||||
@ -88,33 +87,33 @@ void QuickSettingController::updateDockInfo(PluginsItemInterface * const itemInt
|
||||
|
||||
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;
|
||||
|
||||
if (pluginLoader->fileName().contains(TRAY_PATH)) {
|
||||
// 如果是从系统目录下加载的插件,则认为它是系统插件,此时需要放入到托盘中
|
||||
return PluginAttribute::Tray;
|
||||
}
|
||||
// 基本插件,不在任务栏上显示的插件
|
||||
return PluginAttribute::None;
|
||||
}
|
||||
|
||||
const 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;
|
||||
bool QuickSettingController::hasFlag(PluginsItemInterface *itemInter, PluginFlag flag) const
|
||||
{
|
||||
return itemInter->flags() & flag;
|
||||
}
|
||||
|
||||
QuickSettingController *QuickSettingController::instance()
|
||||
@ -161,10 +160,7 @@ QList<PluginsItemInterface *> QuickSettingController::pluginInSettings()
|
||||
if (plugin->pluginDisplayName().isEmpty())
|
||||
continue;
|
||||
|
||||
PluginAttribute pluginAttr = pluginAttribute(plugin);
|
||||
if (pluginAttr == QuickSettingController::PluginAttribute::Quick
|
||||
|| pluginAttr == QuickSettingController::PluginAttribute::System
|
||||
|| pluginAttr == QuickSettingController::PluginAttribute::Tool)
|
||||
if (hasFlag(plugin, PluginFlag::Attribute_CanSetting))
|
||||
settingPlugins << plugin;
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#define QUICKSETTINGCONTROLLER_H
|
||||
|
||||
#include "abstractpluginscontroller.h"
|
||||
#include "pluginsiteminterface.h"
|
||||
|
||||
class QuickSettingItem;
|
||||
class PluginsItem;
|
||||
@ -32,7 +33,8 @@ class QuickSettingController : public AbstractPluginsController
|
||||
|
||||
public:
|
||||
enum class PluginAttribute {
|
||||
Quick = 0, // 快捷区域插件
|
||||
None = 0, // 不在任何区域显示的插件
|
||||
Quick, // 快捷区域插件
|
||||
Tool, // 工具插件(回收站和窗管开发的另一套插件)
|
||||
System, // 系统插件(关机插件)
|
||||
Tray, // 托盘插件(U盘图标等)
|
||||
@ -47,6 +49,7 @@ public:
|
||||
PluginsItem *pluginItemWidget(PluginsItemInterface *pluginItem);
|
||||
QList<PluginsItemInterface *> pluginInSettings();
|
||||
PluginAttribute pluginAttribute(PluginsItemInterface * const itemInter) const;
|
||||
bool hasFlag(PluginsItemInterface *itemInter, PluginFlag flag) const;
|
||||
|
||||
Q_SIGNALS:
|
||||
void pluginInserted(PluginsItemInterface *itemInter, const PluginAttribute);
|
||||
|
@ -136,11 +136,7 @@ bool ToolAppHelper::pluginInTool(DockItem *dockItem) const
|
||||
if (!pluginItem)
|
||||
return false;
|
||||
|
||||
QJsonObject metaData = pluginItem->metaData();
|
||||
if (metaData.contains("tool"))
|
||||
return metaData.value("tool").toBool();
|
||||
|
||||
return false;
|
||||
return (QuickSettingController::instance()->pluginAttribute(pluginItem->pluginItem()) == QuickSettingController::PluginAttribute::Tool);
|
||||
}
|
||||
|
||||
void ToolAppHelper::pluginItemAdded(PluginsItemInterface *itemInter)
|
||||
|
@ -330,8 +330,3 @@ PluginsItemInterface *PluginsItem::pluginItem() const
|
||||
{
|
||||
return m_pluginInter;
|
||||
}
|
||||
|
||||
QJsonObject PluginsItem::metaData() const
|
||||
{
|
||||
return m_jsonData;
|
||||
}
|
||||
|
@ -55,8 +55,6 @@ public:
|
||||
|
||||
PluginsItemInterface *pluginItem() const;
|
||||
|
||||
QJsonObject metaData() const;
|
||||
|
||||
public slots:
|
||||
void refreshIcon() override;
|
||||
|
||||
|
@ -51,7 +51,6 @@ QuickSettingItem::QuickSettingItem(PluginsItemInterface *const pluginInter, QWid
|
||||
: DockItem(parent)
|
||||
, m_pluginInter(pluginInter)
|
||||
, m_itemKey(QuickSettingController::instance()->itemKey(pluginInter))
|
||||
, m_metaData(QuickSettingController::instance()->metaData(pluginInter))
|
||||
{
|
||||
setAcceptDrops(true);
|
||||
this->installEventFilter(this);
|
||||
@ -130,16 +129,19 @@ QColor QuickSettingItem::foregroundColor() const
|
||||
|
||||
QuickSettingItem *QuickSettingFactory::createQuickWidget(PluginsItemInterface * const pluginInter)
|
||||
{
|
||||
QuickSettingController *quickController = QuickSettingController::instance();
|
||||
// 如果显示在面板的图标或者Widget为空,则不让显示(例如电池插件)
|
||||
if (pluginInter->icon(DockPart::QuickPanel).isNull() && !pluginInter->itemWidget(QUICK_ITEM_KEY))
|
||||
if (!quickController->hasFlag(pluginInter, PluginFlag::Type_Common))
|
||||
return nullptr;
|
||||
|
||||
const QJsonObject metaData = QuickSettingController::instance()->metaData(pluginInter);
|
||||
if (metaData.contains("primary") && metaData.value("primary").toBool())
|
||||
if (quickController->hasFlag(pluginInter, PluginFlag::Quick_Multi))
|
||||
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 SingleQuickItem(pluginInter);
|
||||
if (quickController->hasFlag(pluginInter, PluginFlag::Quick_Single))
|
||||
return new SingleQuickItem(pluginInter);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -57,7 +57,6 @@ protected:
|
||||
private:
|
||||
PluginsItemInterface *m_pluginInter;
|
||||
QString m_itemKey;
|
||||
QJsonObject m_metaData;
|
||||
};
|
||||
|
||||
class QuickSettingFactory
|
||||
|
@ -290,7 +290,7 @@ void QuickPluginWindow::onRequestUpdate()
|
||||
if (pluginLoader)
|
||||
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->installEventFilter(this);
|
||||
itemWidget->setMouseTracking(true);
|
||||
@ -471,7 +471,7 @@ int QuickPluginWindow::getDropIndex(QPoint point)
|
||||
|
||||
QuickDockItem *dockBeforeItem = qobject_cast<QuickDockItem *>(layoutBefore->widget());
|
||||
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
||||
if (dockItem->isPrimary())
|
||||
if (dockItem->canInsert())
|
||||
continue;
|
||||
|
||||
if (dockBeforeItem->geometry().x() > point.x() && dockItem->geometry().right() < point.x())
|
||||
@ -485,7 +485,7 @@ int QuickPluginWindow::getDropIndex(QPoint point)
|
||||
continue;
|
||||
|
||||
QuickDockItem *dockBeforeItem = qobject_cast<QuickDockItem *>(layoutBefore->widget());
|
||||
if (dockBeforeItem->isPrimary())
|
||||
if (dockBeforeItem->canInsert())
|
||||
break;
|
||||
|
||||
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
||||
@ -558,16 +558,17 @@ void QuickPluginWindow::initConnection()
|
||||
* @param pluginItem
|
||||
* @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)
|
||||
, m_pluginItem(pluginItem)
|
||||
, m_metaData(metaData)
|
||||
, m_itemKey(itemKey)
|
||||
, m_position(Dock::Position::Bottom)
|
||||
, m_popupWindow(new DockPopupWindow)
|
||||
, m_contextMenu(new QMenu(this))
|
||||
, m_tipParent(nullptr)
|
||||
, m_mainLayout(nullptr)
|
||||
, m_canInsert(QuickSettingController::instance()->hasFlag(pluginItem, PluginFlag::Attribute_CanInsert))
|
||||
, m_dockItemParent(nullptr)
|
||||
{
|
||||
initUi();
|
||||
initConnection();
|
||||
@ -588,12 +589,9 @@ PluginsItemInterface *QuickDockItem::pluginItem()
|
||||
return m_pluginItem;
|
||||
}
|
||||
|
||||
bool QuickDockItem::isPrimary() const
|
||||
bool QuickDockItem::canInsert() const
|
||||
{
|
||||
if (m_metaData.contains("primary"))
|
||||
return m_metaData.value("primary").toBool();
|
||||
|
||||
return false;
|
||||
return m_canInsert;
|
||||
}
|
||||
|
||||
void QuickDockItem::hideToolTip()
|
||||
@ -703,8 +701,10 @@ void QuickDockItem::hideEvent(QHideEvent *event)
|
||||
return QWidget::hideEvent(event);
|
||||
|
||||
QWidget *itemWidget = m_pluginItem->itemWidget(m_itemKey);
|
||||
if (itemWidget && m_mainLayout->indexOf(itemWidget) >= 0)
|
||||
m_mainLayout->removeWidget(m_pluginItem->itemWidget(m_itemKey));
|
||||
if (itemWidget && m_mainLayout->indexOf(itemWidget) >= 0) {
|
||||
itemWidget->setParent(m_dockItemParent);
|
||||
m_mainLayout->removeWidget(itemWidget);
|
||||
}
|
||||
}
|
||||
|
||||
QPixmap QuickDockItem::iconPixmap() const
|
||||
@ -725,7 +725,11 @@ void QuickDockItem::initUi()
|
||||
|
||||
m_mainLayout = new QHBoxLayout(this);
|
||||
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()
|
||||
|
@ -94,12 +94,12 @@ class QuickDockItem : public QWidget
|
||||
Q_OBJECT
|
||||
|
||||
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();
|
||||
|
||||
void setPositon(Dock::Position position);
|
||||
PluginsItemInterface *pluginItem();
|
||||
bool isPrimary() const;
|
||||
bool canInsert() const;
|
||||
void hideToolTip();
|
||||
|
||||
protected:
|
||||
@ -125,13 +125,14 @@ private Q_SLOTS:
|
||||
|
||||
private:
|
||||
PluginsItemInterface *m_pluginItem;
|
||||
QJsonObject m_metaData;
|
||||
QString m_itemKey;
|
||||
Dock::Position m_position;
|
||||
DockPopupWindow *m_popupWindow;
|
||||
QMenu *m_contextMenu;
|
||||
QWidget *m_tipParent;
|
||||
QHBoxLayout *m_mainLayout;
|
||||
bool m_canInsert;
|
||||
QWidget *m_dockItemParent;
|
||||
};
|
||||
|
||||
#endif // QUICKPLUGINWINDOW_H
|
||||
|
@ -1,5 +1,4 @@
|
||||
{
|
||||
"api": "2.0.0",
|
||||
"primary" : true,
|
||||
"depends-daemon-dbus-service": "org.deepin.daemon.Bluetooth1"
|
||||
}
|
||||
|
@ -1,4 +1,3 @@
|
||||
{
|
||||
"api": "2.0.0",
|
||||
"fixed": true
|
||||
"api": "2.0.0"
|
||||
}
|
||||
|
@ -1,4 +1,3 @@
|
||||
{
|
||||
"api": "2.0.0",
|
||||
"fixed": true
|
||||
"api": "2.0.0"
|
||||
}
|
||||
|
@ -1,4 +1,3 @@
|
||||
{
|
||||
"api": "2.0.0",
|
||||
"system": true
|
||||
"api": "2.0.0"
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
{
|
||||
"api": "2.0.0",
|
||||
"depends-daemon-dbus-service": "org.deepin.daemon.Audio1",
|
||||
"applet": true
|
||||
"depends-daemon-dbus-service": "org.deepin.daemon.Audio1"
|
||||
}
|
||||
|
@ -1,4 +1,3 @@
|
||||
{
|
||||
"api": "2.0.0",
|
||||
"tool": true
|
||||
"api": "2.0.0"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user