fix: 适配v20插件在任务栏的显示

对于V20的插件,由于没有实现Icon接口,因此在任务栏显示的时候依然将原来的itemWidget返回的内容显示在任务栏上

Log:
Influence: 任务栏显示v20插件
Task: https://pms.uniontech.com/task-view-112073.html
Change-Id: Ic820ace51b018447942b7deb92c9ca567eba00e8
This commit is contained in:
donghualin 2022-11-23 13:39:16 +00:00
parent f14c19ba9e
commit 9033044f0a
4 changed files with 72 additions and 32 deletions

View File

@ -54,10 +54,6 @@ void SingleQuickItem::mouseReleaseEvent(QMouseEvent *event)
commandArgument.removeFirst();
QProcess::startDetached(command, commandArgument);
}
QWidget *itemWidget = pluginItem()->itemWidget(QUICK_ITEM_KEY);
if (itemWidget)
Q_EMIT requestShowChildWidget(itemWidget);
}
void SingleQuickItem::resizeEvent(QResizeEvent *event)

View File

@ -169,14 +169,14 @@ QIcon PluginAdapter::icon(const DockPart &dockPart)
return QIcon();
switch (dockPart) {
case DockPart::QuickPanel: {
// 如果图标为空就使用itemWidget的截图作为它的图标这种一般是适用于老版本插件或者没有实现v23接口的插件
itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT);
return itemWidget->grab();
}
case DockPart::QuickPanel:
case DockPart::SystemPanel: {
itemWidget->setFixedSize(16, 16);
return itemWidget->grab();
// 如果图标为空就使用itemWidget的截图作为它的图标这种一般是适用于老版本插件或者没有实现v23接口的插件
QSize oldSize = itemWidget->size();
itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT);
QPixmap pixmap = itemWidget->grab();
itemWidget->setFixedSize(oldSize);
return pixmap;
}
default: break;
}

View File

@ -83,7 +83,6 @@ typedef struct DragInfo{
if (!itemWidget)
return QPixmap();
itemWidget->setFixedSize(20, 20);
return itemWidget->grab();
}
} DragInfo;
@ -568,21 +567,11 @@ QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, const QJsonObject
, m_popupWindow(new DockPopupWindow)
, m_contextMenu(new QMenu(this))
, m_tipParent(nullptr)
, m_mainLayout(nullptr)
{
m_popupWindow->setShadowBlurRadius(20);
m_popupWindow->setRadius(6);
m_popupWindow->setShadowYOffset(2);
m_popupWindow->setShadowXOffset(0);
m_popupWindow->setArrowWidth(18);
m_popupWindow->setArrowHeight(10);
m_popupWindow->setObjectName("quickitempopup");
if (Utils::IS_WAYLAND_DISPLAY) {
Qt::WindowFlags flags = m_popupWindow->windowFlags() | Qt::FramelessWindowHint;
m_popupWindow->setWindowFlags(flags);
}
connect(m_contextMenu, &QMenu::triggered, this, &QuickDockItem::onMenuActionClicked);
connect(qApp, &QApplication::aboutToQuit, m_popupWindow, &DockPopupWindow::deleteLater);
initUi();
initConnection();
initAttribute();
}
QuickDockItem::~QuickDockItem()
@ -696,6 +685,28 @@ void QuickDockItem::leaveEvent(QEvent *event)
m_popupWindow->hide();
}
void QuickDockItem::showEvent(QShowEvent *event)
{
if (!m_mainLayout)
return QWidget::showEvent(event);
QWidget *itemWidget = m_pluginItem->itemWidget(m_itemKey);
if (itemWidget && m_mainLayout->indexOf(itemWidget) < 0) {
itemWidget->setFixedSize(ICONWIDTH - 2, ICONHEIGHT - 2);
m_mainLayout->addWidget(itemWidget);
}
}
void QuickDockItem::hideEvent(QHideEvent *event)
{
if (!m_mainLayout)
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));
}
QPixmap QuickDockItem::iconPixmap() const
{
int pixmapSize = static_cast<int>(ICONHEIGHT * qApp->devicePixelRatio());
@ -703,15 +714,41 @@ QPixmap QuickDockItem::iconPixmap() const
if (!icon.isNull())
return icon.pixmap(pixmapSize, pixmapSize);
QWidget *itemWidget = m_pluginItem->itemWidget(m_itemKey);
if (itemWidget) {
itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT);
return itemWidget->grab();
}
return QPixmap();
}
void QuickDockItem::initUi()
{
QPixmap pixmap = iconPixmap();
if (!pixmap.isNull())
return;
m_mainLayout = new QHBoxLayout(this);
m_mainLayout->setContentsMargins(0, 0, 0, 0);
m_pluginItem->itemWidget(m_itemKey)->installEventFilter(this);
}
void QuickDockItem::initAttribute()
{
m_popupWindow->setShadowBlurRadius(20);
m_popupWindow->setRadius(6);
m_popupWindow->setShadowYOffset(2);
m_popupWindow->setShadowXOffset(0);
m_popupWindow->setArrowWidth(18);
m_popupWindow->setArrowHeight(10);
m_popupWindow->setObjectName("quickitempopup");
if (Utils::IS_WAYLAND_DISPLAY) {
Qt::WindowFlags flags = m_popupWindow->windowFlags() | Qt::FramelessWindowHint;
m_popupWindow->setWindowFlags(flags);
}
}
void QuickDockItem::initConnection()
{
connect(m_contextMenu, &QMenu::triggered, this, &QuickDockItem::onMenuActionClicked);
connect(qApp, &QApplication::aboutToQuit, m_popupWindow, &DockPopupWindow::deleteLater);
}
QPoint QuickDockItem::topleftPoint() const
{
QPoint p = this->pos();

View File

@ -107,6 +107,8 @@ protected:
void mousePressEvent(QMouseEvent *event) override;
void enterEvent(QEvent *event) override;
void leaveEvent(QEvent *event) override;
void showEvent(QShowEvent *event) override;
void hideEvent(QHideEvent *event) override;
private:
QPoint topleftPoint() const;
@ -114,6 +116,10 @@ private:
QPixmap iconPixmap() const;
void initUi();
void initAttribute();
void initConnection();
private Q_SLOTS:
void onMenuActionClicked(QAction *action);
@ -125,6 +131,7 @@ private:
DockPopupWindow *m_popupWindow;
QMenu *m_contextMenu;
QWidget *m_tipParent;
QHBoxLayout *m_mainLayout;
};
#endif // QUICKPLUGINWINDOW_H