mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +00:00
fix: 修复移除插件后快捷面板显示异常的问题
1、在插件移除后,除了从面板上将该插件的Widget移除外,删除该插件创建出来的QWidget 2、在插件对应的QWidget尺寸发生变化后,重新设置面板尺寸 3、在释放任务栏图标后,恢复ToolTip的parent Log: 修复移除插件后快捷面板显示异常的问题 Influence: 不断插入或者移除蓝牙设备,观察快捷面板是否显示正常 Bug: https://pms.uniontech.com/bug-view-171579.html Change-Id: I8168b49ad9eb047155efbd609be65f3dd263b6bc
This commit is contained in:
parent
e6a73fe3c3
commit
16a8cf7d3e
@ -27,6 +27,7 @@ FullQuickItem::FullQuickItem(PluginsItemInterface *const pluginInter, QWidget *p
|
||||
, m_effectWidget(new DBlurEffectWidget(this))
|
||||
{
|
||||
initUi();
|
||||
QMetaObject::invokeMethod(this, &FullQuickItem::resizeSelf, Qt::QueuedConnection);
|
||||
}
|
||||
|
||||
FullQuickItem::~FullQuickItem()
|
||||
@ -42,10 +43,9 @@ QuickSettingItem::QuickSettingType FullQuickItem::type() const
|
||||
|
||||
bool FullQuickItem::eventFilter(QObject *obj, QEvent *event)
|
||||
{
|
||||
if (obj == m_centerWidget && event->type() == QEvent::Resize) {
|
||||
m_effectWidget->setFixedHeight(m_centerWidget->height());
|
||||
setFixedHeight(m_centerWidget->height());
|
||||
}
|
||||
if (obj == m_centerWidget && event->type() == QEvent::Resize)
|
||||
resizeSelf();
|
||||
|
||||
return QuickSettingItem::eventFilter(obj, event);
|
||||
}
|
||||
|
||||
@ -74,3 +74,9 @@ void FullQuickItem::initUi()
|
||||
|
||||
m_centerWidget->installEventFilter(this);
|
||||
}
|
||||
|
||||
void FullQuickItem::resizeSelf()
|
||||
{
|
||||
m_effectWidget->setFixedHeight(m_centerWidget->height());
|
||||
setFixedHeight(m_centerWidget->height());
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ protected:
|
||||
|
||||
private:
|
||||
void initUi();
|
||||
void resizeSelf();
|
||||
|
||||
private:
|
||||
QWidget *m_centerWidget;
|
||||
|
@ -512,6 +512,7 @@ QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, const QJsonObject
|
||||
, m_position(Dock::Position::Bottom)
|
||||
, m_popupWindow(new DockPopupWindow)
|
||||
, m_contextMenu(new QMenu(this))
|
||||
, m_tipParent(nullptr)
|
||||
{
|
||||
m_popupWindow->setShadowBlurRadius(20);
|
||||
m_popupWindow->setRadius(6);
|
||||
@ -531,6 +532,10 @@ QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, const QJsonObject
|
||||
|
||||
QuickDockItem::~QuickDockItem()
|
||||
{
|
||||
QWidget *tipWidget = m_pluginItem->itemTipsWidget(m_itemKey);
|
||||
if (tipWidget && tipWidget->parentWidget() == m_popupWindow)
|
||||
tipWidget->setParent(m_tipParent);
|
||||
|
||||
m_popupWindow->deleteLater();
|
||||
}
|
||||
|
||||
@ -604,6 +609,11 @@ void QuickDockItem::enterEvent(QEvent *event)
|
||||
if (!tipWidget)
|
||||
return;
|
||||
|
||||
// 记录下toolTip的parent,因为在调用DockPopupWindow的时候会将DockPopupWindow设置为toolTip的parent,
|
||||
// 在DockPopupWindow对象释放的时候, 会将toolTip也一起给释放
|
||||
if (tipWidget->parentWidget() != m_popupWindow)
|
||||
m_tipParent = tipWidget->parentWidget();
|
||||
|
||||
switch (m_position) {
|
||||
case Top:
|
||||
m_popupWindow->setArrowDirection(DockPopupWindow::ArrowTop);
|
||||
|
@ -122,6 +122,7 @@ private:
|
||||
Dock::Position m_position;
|
||||
DockPopupWindow *m_popupWindow;
|
||||
QMenu *m_contextMenu;
|
||||
QWidget *m_tipParent;
|
||||
};
|
||||
|
||||
#endif // QUICKPLUGINWINDOW_H
|
||||
|
@ -157,8 +157,7 @@ bool QuickSettingContainer::eventFilter(QObject *watched, QEvent *event)
|
||||
{
|
||||
switch (event->type()) {
|
||||
case QEvent::Resize: {
|
||||
if (watched == m_childPage)
|
||||
onResizeView();
|
||||
onResizeView();
|
||||
break;
|
||||
}
|
||||
case QEvent::MouseButtonPress: {
|
||||
@ -221,19 +220,23 @@ void QuickSettingContainer::appendPlugin(PluginsItemInterface *itemInter, bool n
|
||||
|
||||
void QuickSettingContainer::onPluginRemove(PluginsItemInterface *itemInter)
|
||||
{
|
||||
for (QuickSettingItem *item : m_quickSettings) {
|
||||
if (item->pluginItem() != itemInter)
|
||||
continue;
|
||||
QList<QuickSettingItem *>::Iterator removeItemIter = std::find_if(m_quickSettings.begin(), m_quickSettings.end(), [ = ](QuickSettingItem *item)->bool {
|
||||
return item->pluginItem() == itemInter;
|
||||
});
|
||||
|
||||
if (item->type() == QuickSettingItem::QuickSettingType::Full)
|
||||
m_componentWidget->layout()->removeWidget(item);
|
||||
else
|
||||
m_pluginLayout->removeWidget(item);
|
||||
QuickSettingItem *removeItem = *removeItemIter;
|
||||
if (!removeItem)
|
||||
return;
|
||||
|
||||
m_quickSettings.removeOne(item);
|
||||
break;
|
||||
}
|
||||
if (removeItem->type() == QuickSettingItem::QuickSettingType::Full)
|
||||
m_componentWidget->layout()->removeWidget(removeItem);
|
||||
else
|
||||
m_pluginLayout->removeWidget(removeItem);
|
||||
|
||||
m_quickSettings.removeOne(removeItem);
|
||||
removeItem->deleteLater();
|
||||
|
||||
updateItemLayout();
|
||||
onResizeView();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user