From 3e84154462236bdd26493617b4818f0e46a1b75c Mon Sep 17 00:00:00 2001 From: donghualin Date: Fri, 4 Nov 2022 03:49:49 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=BF=AB=E6=8D=B7?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E5=BA=94=E7=94=A8=E6=89=93=E5=BC=80=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E9=A1=B5=E9=9D=A2=E4=BD=8D=E7=BD=AE=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 快捷面板点击到了非展开区域的情况下,直接打开快捷面板的弹出窗口,导致隐藏了快捷面板窗口 Log: 优化快捷面板交互问题 Influence: 从快捷面板展开蓝牙或者网络右侧的展开按钮,观察是否显示正常 Task: https://pms.uniontech.com/task-view-211641.html Change-Id: I52a3a74d035aed28465d82c5efb680f9ddb9ded8 --- frame/item/quicksettingitem.cpp | 4 +-- frame/window/quicksettingcontainer.cpp | 47 +++++++++++++++++++++----- frame/window/quicksettingcontainer.h | 2 ++ 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/frame/item/quicksettingitem.cpp b/frame/item/quicksettingitem.cpp index eb922f886..0f6959d0d 100644 --- a/frame/item/quicksettingitem.cpp +++ b/frame/item/quicksettingitem.cpp @@ -77,8 +77,8 @@ bool QuickSettingItem::eventFilter(QObject *obj, QEvent *event) if (!command.isEmpty()) QProcess::startDetached(command); - if (QWidget *w = m_pluginInter->itemPopupApplet(m_itemKey)) - showPopupApplet(w); + if (!isPrimary()) + Q_EMIT detailClicked(m_pluginInter); } } else if (event->type() == QEvent::Resize) { if (obj == m_nameLabel) { diff --git a/frame/window/quicksettingcontainer.cpp b/frame/window/quicksettingcontainer.cpp index 1b119415d..bb60baa9a 100644 --- a/frame/window/quicksettingcontainer.cpp +++ b/frame/window/quicksettingcontainer.cpp @@ -250,6 +250,39 @@ bool QuickSettingContainer::isApplet(PluginsItemInterface *itemInter) const return json.value("applet").toBool(); } +bool QuickSettingContainer::isQuickPlugin(PluginsItemInterface *itemInter) const +{ + // 先判断是否为快捷面板区域(类似声音、亮度,音乐等) + QWidget *itemWidget = itemInter->itemWidget(QUICK_ITEM_KEY); + if (itemWidget) { + for (int i = 0; i < m_componentWidget->layout()->count(); i++) { + QLayoutItem *layoutItem = m_componentWidget->layout()->itemAt(i); + if (!layoutItem) + continue; + + DBlurEffectWidget *effectWidget = qobject_cast(layoutItem->widget()); + if (!effectWidget || !effectWidget->layout()) + continue; + + for (int j = 0; j < effectWidget->layout()->count(); j++) { + QLayoutItem *layoutItem = effectWidget->layout()->itemAt(i); + if (!layoutItem || layoutItem->widget() != itemWidget) + continue; + + return true; + } + } + } else { + for (QuickSettingItem *settingItem : m_quickSettings) { + if (settingItem->pluginItem() != itemInter) + continue; + + return true; + } + } + return false; +} + void QuickSettingContainer::onPluginInsert(PluginsItemInterface * itemInter) { QWidget *itemWidget = itemInter->itemWidget(QUICK_ITEM_KEY); @@ -524,13 +557,11 @@ void QuickSettingContainer::onResizeView() void QuickSettingContainer::onRequestAppletShow(PluginsItemInterface *itemInter, const QString &itemKey) { - if (itemKey == QUICK_ITEM_KEY) { - // 显示弹出的内容 - QWidget *itemApplet = itemInter->itemPopupApplet(itemKey); - if (!itemApplet) - return; + // 显示弹出的内容 + QWidget *itemApplet = itemInter->itemPopupApplet(itemKey); + if (!itemApplet) + return; - showWidget(itemApplet, itemInter->pluginDisplayName()); - onResizeView(); - } + showWidget(itemApplet, itemInter->pluginDisplayName()); + onResizeView(); } diff --git a/frame/window/quicksettingcontainer.h b/frame/window/quicksettingcontainer.h index c56870fb0..6e0a548b1 100644 --- a/frame/window/quicksettingcontainer.h +++ b/frame/window/quicksettingcontainer.h @@ -85,6 +85,8 @@ private: QPoint hotSpot(const QPixmap &pixmap); // 判断是否支持显示在面板上 bool isApplet(PluginsItemInterface * itemInter) const; + // 判断插件是否在当前快捷面板上 + bool isQuickPlugin(PluginsItemInterface * itemInter) const; private: static DockPopupWindow *m_popWindow;