From 9033044f0affdc478f94b457d430b618ec6705da Mon Sep 17 00:00:00 2001 From: donghualin Date: Wed, 23 Nov 2022 13:39:16 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=80=82=E9=85=8Dv20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=9C=A8=E4=BB=BB=E5=8A=A1=E6=A0=8F=E7=9A=84=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对于V20的插件,由于没有实现Icon接口,因此在任务栏显示的时候依然将原来的itemWidget返回的内容显示在任务栏上 Log: Influence: 任务栏显示v20插件 Task: https://pms.uniontech.com/task-view-112073.html Change-Id: Ic820ace51b018447942b7deb92c9ca567eba00e8 --- frame/item/components/singlequickitem.cpp | 4 -- frame/pluginadapter/pluginadapter.cpp | 14 ++-- frame/window/quickpluginwindow.cpp | 79 +++++++++++++++++------ frame/window/quickpluginwindow.h | 7 ++ 4 files changed, 72 insertions(+), 32 deletions(-) diff --git a/frame/item/components/singlequickitem.cpp b/frame/item/components/singlequickitem.cpp index 83c8a4b82..61b796bb4 100644 --- a/frame/item/components/singlequickitem.cpp +++ b/frame/item/components/singlequickitem.cpp @@ -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) diff --git a/frame/pluginadapter/pluginadapter.cpp b/frame/pluginadapter/pluginadapter.cpp index dc2b72375..0e0443a07 100644 --- a/frame/pluginadapter/pluginadapter.cpp +++ b/frame/pluginadapter/pluginadapter.cpp @@ -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; } diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index f96db2ba8..50eb4286c 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -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(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(); diff --git a/frame/window/quickpluginwindow.h b/frame/window/quickpluginwindow.h index 8e43c17c2..16f3dc24f 100644 --- a/frame/window/quickpluginwindow.h +++ b/frame/window/quickpluginwindow.h @@ -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