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

View File

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