fix plugins item double free

Change-Id: I50362a13e197e9b9e40f8bd680a9e8ac47fd98a4
This commit is contained in:
石博文 2017-11-08 14:51:11 +08:00 committed by Deepin Code Review
parent 51ee4140bb
commit b1412526b3
Notes: Deepin Code Review 2017-11-08 18:24:45 +08:00
Verified+1: Anonymous Coward #1000004
Code-Review+2: 石博文 <sbw@sbw.so>
Submitted-by: 石博文 <sbw@sbw.so>
Submitted-at: Wed, 08 Nov 2017 18:24:44 +0800
Reviewed-on: https://cr.deepin.io/28113
Project: dde/dde-dock
Branch: refs/heads/master
8 changed files with 11 additions and 29 deletions

View File

@ -38,11 +38,6 @@ DockItemController *DockItemController::instance(QObject *parent)
return INSTANCE; return INSTANCE;
} }
DockItemController::~DockItemController()
{
qDeleteAll(m_itemList);
}
const QList<DockItem *> DockItemController::itemList() const const QList<DockItem *> DockItemController::itemList() const
{ {
return m_itemList; return m_itemList;
@ -274,8 +269,8 @@ void DockItemController::appItemRemoved(const QString &appId)
void DockItemController::appItemRemoved(AppItem *appItem) void DockItemController::appItemRemoved(AppItem *appItem)
{ {
emit itemRemoved(appItem); emit itemRemoved(appItem);
appItem->deleteLater();
m_itemList.removeOne(appItem); m_itemList.removeOne(appItem);
appItem->deleteLater();
} }
void DockItemController::pluginItemInserted(PluginsItem *item) void DockItemController::pluginItemInserted(PluginsItem *item)

View File

@ -39,7 +39,6 @@ class DockItemController : public QObject
public: public:
static DockItemController *instance(QObject *parent); static DockItemController *instance(QObject *parent);
~DockItemController();
const QList<DockItem *> itemList() const; const QList<DockItem *> itemList() const;
const QList<PluginsItemInterface *> pluginList() const; const QList<PluginsItemInterface *> pluginList() const;

View File

@ -38,10 +38,6 @@ DockPluginsController::DockPluginsController(DockItemController *itemControllerI
QTimer::singleShot(1, this, &DockPluginsController::startLoader); QTimer::singleShot(1, this, &DockPluginsController::startLoader);
} }
DockPluginsController::~DockPluginsController()
{
}
void DockPluginsController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) void DockPluginsController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey)
{ {
// check if same item added // check if same item added
@ -80,7 +76,7 @@ void DockPluginsController::itemRemoved(PluginsItemInterface * const itemInter,
emit pluginItemRemoved(item); emit pluginItemRemoved(item);
m_pluginList[itemInter].remove(itemKey); m_pluginList[itemInter].remove(itemKey);
QTimer::singleShot(1, item, &PluginsItem::deleteLater); item->deleteLater();
} }
//void DockPluginsController::requestRefershWindowVisible() //void DockPluginsController::requestRefershWindowVisible()
@ -138,7 +134,7 @@ void DockPluginsController::positionChanged()
void DockPluginsController::loadPlugin(const QString &pluginFile) void DockPluginsController::loadPlugin(const QString &pluginFile)
{ {
QPluginLoader *pluginLoader = new QPluginLoader(pluginFile, this); QPluginLoader *pluginLoader = new QPluginLoader(pluginFile);
const auto meta = pluginLoader->metaData().value("MetaData").toObject(); const auto meta = pluginLoader->metaData().value("MetaData").toObject();
if (!meta.contains("api") || meta["api"].toString() != API_VERSION) if (!meta.contains("api") || meta["api"].toString() != API_VERSION)
{ {

View File

@ -39,7 +39,6 @@ class DockPluginsController : public QObject, PluginProxyInterface
public: public:
explicit DockPluginsController(DockItemController *itemControllerInter = 0); explicit DockPluginsController(DockItemController *itemControllerInter = 0);
~DockPluginsController();
// implements PluginProxyInterface // implements PluginProxyInterface
void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey); void itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey);

View File

@ -28,7 +28,7 @@
Position DockItem::DockPosition = Position::Top; Position DockItem::DockPosition = Position::Top;
DisplayMode DockItem::DockDisplayMode = DisplayMode::Efficient; DisplayMode DockItem::DockDisplayMode = DisplayMode::Efficient;
std::unique_ptr<DockPopupWindow> DockItem::PopupWindow(nullptr); QPointer<DockPopupWindow> DockItem::PopupWindow(nullptr);
DockItem::DockItem(QWidget *parent) DockItem::DockItem(QWidget *parent)
: QWidget(parent), : QWidget(parent),
@ -40,7 +40,7 @@ DockItem::DockItem(QWidget *parent)
m_menuManagerInter(new DBusMenuManager(this)) m_menuManagerInter(new DBusMenuManager(this))
{ {
if (!PopupWindow.get()) if (PopupWindow.isNull())
{ {
DockPopupWindow *arrowRectangle = new DockPopupWindow(nullptr); DockPopupWindow *arrowRectangle = new DockPopupWindow(nullptr);
arrowRectangle->setShadowBlurRadius(20); arrowRectangle->setShadowBlurRadius(20);
@ -51,7 +51,7 @@ DockItem::DockItem(QWidget *parent)
arrowRectangle->setShadowXOffset(0); arrowRectangle->setShadowXOffset(0);
arrowRectangle->setArrowWidth(18); arrowRectangle->setArrowWidth(18);
arrowRectangle->setArrowHeight(10); arrowRectangle->setArrowHeight(10);
PopupWindow.reset(arrowRectangle); PopupWindow = arrowRectangle;
} }
m_popupTipsDelayTimer->setInterval(500); m_popupTipsDelayTimer->setInterval(500);
@ -215,7 +215,7 @@ void DockItem::showPopupWindow(QWidget * const content, const bool model)
if (model) if (model)
emit requestWindowAutoHide(false); emit requestWindowAutoHide(false);
DockPopupWindow *popup = PopupWindow.get(); DockPopupWindow *popup = PopupWindow.data();
QWidget *lastContent = popup->getContent(); QWidget *lastContent = popup->getContent();
if (lastContent) if (lastContent)
lastContent->setVisible(false); lastContent->setVisible(false);
@ -244,7 +244,7 @@ void DockItem::popupWindowAccept()
if (!PopupWindow->isVisible()) if (!PopupWindow->isVisible())
return; return;
disconnect(PopupWindow.get(), &DockPopupWindow::accept, this, &DockItem::popupWindowAccept); disconnect(PopupWindow.data(), &DockPopupWindow::accept, this, &DockItem::popupWindowAccept);
hidePopup(); hidePopup();

View File

@ -100,7 +100,7 @@ protected:
static Position DockPosition; static Position DockPosition;
static DisplayMode DockDisplayMode; static DisplayMode DockDisplayMode;
static std::unique_ptr<DockPopupWindow> PopupWindow; static QPointer<DockPopupWindow> PopupWindow;
}; };
#endif // DOCKITEM_H #endif // DOCKITEM_H

View File

@ -45,12 +45,6 @@ DatetimePlugin::DatetimePlugin(QObject *parent)
connect(m_refershTimer, &QTimer::timeout, this, &DatetimePlugin::updateCurrentTimeString); connect(m_refershTimer, &QTimer::timeout, this, &DatetimePlugin::updateCurrentTimeString);
} }
DatetimePlugin::~DatetimePlugin()
{
delete m_centralWidget;
delete m_dateTipsLabel;
}
const QString DatetimePlugin::pluginName() const const QString DatetimePlugin::pluginName() const
{ {
return "datetime"; return "datetime";

View File

@ -36,7 +36,6 @@ class DatetimePlugin : public QObject, PluginsItemInterface
public: public:
explicit DatetimePlugin(QObject *parent = 0); explicit DatetimePlugin(QObject *parent = 0);
~DatetimePlugin();
const QString pluginName() const override; const QString pluginName() const override;
const QString pluginDisplayName() const override; const QString pluginDisplayName() const override;
@ -60,8 +59,8 @@ private slots:
void updateCurrentTimeString(); void updateCurrentTimeString();
private: private:
DatetimeWidget *m_centralWidget; QPointer<DatetimeWidget> m_centralWidget;
QLabel *m_dateTipsLabel; QPointer<QLabel> m_dateTipsLabel;
QTimer *m_refershTimer; QTimer *m_refershTimer;