fix: 解决"Remove"提示残留在桌面上的问题

问题的原因是因为在拖拽Widget中使用了一个静态的提示”移除“对象,这个可能在一定条件下
出现没有消失的情况。因此将此弹出提示的Widget改成拖拽对象的成员变量,这样当拖拽对象
销毁时,弹出提示对象也会一并给清除,从而解决”移除“提示不消失的问题

Log: 拖动任务栏上的图标移动后,"Remove"提示仍残留在桌面上
Task: https://pms.uniontech.com/zentao/bug-view-40987.html
Change-Id: I42d28c97e80b1cc1522d5a984d11a1a7a4f8eeef
Reviewed-on: http://gerrit.uniontech.com/c/dde-dock/+/1065
Reviewed-by: fanpengcheng <fanpengcheng@uniontech.com>
Reviewed-by: <mailman@uniontech.com>
Reviewed-by: niecheng <niecheng@uniontech.com>
Tested-by: <mailman@uniontech.com>
This commit is contained in:
wangnengdeng 2020-08-04 09:38:32 +08:00
parent a68b828c7e
commit 6e104465eb
2 changed files with 12 additions and 8 deletions

View File

@ -23,7 +23,6 @@
#include "appdragwidget.h"
#include <QGSettings>
QPointer<DockPopupWindow> AppDragWidget::PopupWindow(nullptr);
class AppGraphicsObject : public QGraphicsObject
{
public:
@ -70,7 +69,8 @@ AppDragWidget::AppDragWidget(QWidget *parent) :
m_animOpacity(new QPropertyAnimation(m_object, "opacity", this)),
m_animGroup(new QParallelAnimationGroup(this)),
m_goBackAnim(new QPropertyAnimation(this, "pos", this)),
m_removeTips(new TipsWidget(this))
m_removeTips(new TipsWidget(this)),
m_popupWindow(nullptr)
{
m_removeTips->setText(tr("Remove"));
m_removeTips->setObjectName("AppRemoveTips");
@ -84,8 +84,8 @@ AppDragWidget::AppDragWidget(QWidget *parent) :
arrowRectangle->setShadowXOffset(0);
arrowRectangle->setArrowWidth(18);
arrowRectangle->setArrowHeight(10);
PopupWindow = arrowRectangle;
PopupWindow->setRadius(18);
m_popupWindow = arrowRectangle;
m_popupWindow->setRadius(18);
m_scene->addItem(m_object);
setScene(m_scene);
@ -114,6 +114,10 @@ AppDragWidget::AppDragWidget(QWidget *parent) :
AppDragWidget::~AppDragWidget()
{
if (m_popupWindow != nullptr) {
delete m_popupWindow;
m_popupWindow=nullptr;
}
}
void AppDragWidget::mouseMoveEvent(QMouseEvent *event)
@ -136,7 +140,7 @@ void AppDragWidget::dragMoveEvent(QDragMoveEvent *event)
bool model = true;
Dock::Position pos = Dock::Position::Bottom;
DockPopupWindow *popup = PopupWindow.data();
DockPopupWindow *popup = m_popupWindow;
if (isRemoveAble()) {
QWidget *lastContent = popup->getContent();
if (lastContent)
@ -209,7 +213,7 @@ void AppDragWidget::dropEvent(QDropEvent *event)
showRemoveAnimation();
AppItem *appItem = static_cast<AppItem *>(event->source());
appItem->undock();
PopupWindow->setVisible(false);
m_popupWindow->setVisible(false);
} else {
showGoBackAnimation();
}

View File

@ -78,8 +78,8 @@ private:
Dock::Position m_dockPosition;
QRect m_dockGeometry;
QPoint m_originPoint;
Dock::TipsWidget * m_removeTips;
static QPointer<DockPopupWindow> PopupWindow;
Dock::TipsWidget *m_removeTips;
DockPopupWindow *m_popupWindow;
/**
* @brief m_distanceMultiple:
* dock栏上应用区驻留应用被拖拽远离dock的距离除以dock的宽或者高