Prevent memory leak in StackSupport
This commit is contained in:
parent
2421cc70a8
commit
2496c495c7
|
@ -5,6 +5,8 @@
|
|||
|
||||
#include <QUndoStack>
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace QtGui {
|
||||
|
||||
class StackAbsorper;
|
||||
|
@ -17,7 +19,7 @@ public:
|
|||
|
||||
protected:
|
||||
QUndoStack *undoStack();
|
||||
bool push(CustomUndoCommand *command);
|
||||
bool push(std::unique_ptr<CustomUndoCommand> command);
|
||||
void clearUndoStack();
|
||||
|
||||
private:
|
||||
|
@ -35,7 +37,7 @@ inline QUndoStack *StackSupport::undoStack()
|
|||
/*!
|
||||
* \brief Pushes the specified custom undo \a command to the undo stack and returns whether the redo action was successful.
|
||||
*/
|
||||
inline bool StackSupport::push(CustomUndoCommand *command)
|
||||
inline bool StackSupport::push(std::unique_ptr<CustomUndoCommand> command)
|
||||
{
|
||||
if (!m_undoStack) {
|
||||
return false;
|
||||
|
@ -43,7 +45,7 @@ inline bool StackSupport::push(CustomUndoCommand *command)
|
|||
if (command->isNoop()) {
|
||||
return true; // doing nothing can never fail
|
||||
}
|
||||
m_undoStack->push(command);
|
||||
m_undoStack->push(command.release());
|
||||
return command->redoResult();
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <QIcon>
|
||||
#include <QMimeData>
|
||||
|
||||
#include <memory>
|
||||
#include <sstream>
|
||||
|
||||
using namespace std;
|
||||
|
@ -266,7 +267,7 @@ bool EntryModel::setData(const QModelIndex &index, const QVariant &value, int ro
|
|||
{
|
||||
#ifdef PASSWORD_MANAGER_GUI_QTWIDGETS
|
||||
if (undoStack()) {
|
||||
return push(new EntryModelSetValueCommand(this, index, value, role));
|
||||
return push(make_unique<EntryModelSetValueCommand>(this, index, value, role));
|
||||
}
|
||||
#endif
|
||||
if (!index.isValid()) {
|
||||
|
@ -388,7 +389,7 @@ bool EntryModel::insertRows(int row, int count, const QModelIndex &parent)
|
|||
{
|
||||
#ifdef PASSWORD_MANAGER_GUI_QTWIDGETS
|
||||
if (undoStack()) {
|
||||
return push(new EntryModelInsertRowsCommand(this, row, count, parent));
|
||||
return push(make_unique<EntryModelInsertRowsCommand>(this, row, count, parent));
|
||||
}
|
||||
#endif
|
||||
if (!parent.isValid()) {
|
||||
|
@ -421,7 +422,7 @@ bool EntryModel::removeRows(int row, int count, const QModelIndex &parent)
|
|||
{
|
||||
#ifdef PASSWORD_MANAGER_GUI_QTWIDGETS
|
||||
if (undoStack()) {
|
||||
return push(new EntryModelRemoveRowsCommand(this, row, count, parent));
|
||||
return push(make_unique<EntryModelRemoveRowsCommand>(this, row, count, parent));
|
||||
}
|
||||
#endif
|
||||
if (!parent.isValid() || count <= 0) {
|
||||
|
@ -441,7 +442,7 @@ bool EntryModel::moveRows(const QModelIndex &sourceParent, int sourceRow, int co
|
|||
{
|
||||
#ifdef PASSWORD_MANAGER_GUI_QTWIDGETS
|
||||
if (undoStack()) {
|
||||
return push(new EntryModelMoveRowsCommand(this, sourceParent, sourceRow, count, destinationParent, destinationChild));
|
||||
return push(make_unique<EntryModelMoveRowsCommand>(this, sourceParent, sourceRow, count, destinationParent, destinationChild));
|
||||
}
|
||||
#endif
|
||||
// check validation of specified arguments
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
#include <QMimeData>
|
||||
#include <QStringList>
|
||||
|
||||
#include <memory>
|
||||
|
||||
using namespace std;
|
||||
using namespace Io;
|
||||
|
||||
|
@ -153,7 +155,7 @@ bool FieldModel::setData(const QModelIndex &index, const QVariant &value, int ro
|
|||
{
|
||||
#if PASSWORD_MANAGER_GUI_QTWIDGETS
|
||||
if (undoStack()) {
|
||||
return push(new FieldModelSetValueCommand(this, index, value, role));
|
||||
return push(make_unique<FieldModelSetValueCommand>(this, index, value, role));
|
||||
}
|
||||
#endif
|
||||
if (!index.isValid() || !m_fields || index.row() < 0) {
|
||||
|
@ -294,7 +296,7 @@ bool FieldModel::insertRows(int row, int count, const QModelIndex &parent)
|
|||
{
|
||||
#ifdef PASSWORD_MANAGER_GUI_QTWIDGETS
|
||||
if (undoStack()) {
|
||||
return push(new FieldModelInsertRowsCommand(this, row, count));
|
||||
return push(make_unique<FieldModelInsertRowsCommand>(this, row, count));
|
||||
}
|
||||
#endif
|
||||
if (parent.isValid() || row < 0 || count <= 0 || static_cast<size_t>(row) > m_fields->size()) {
|
||||
|
@ -310,7 +312,7 @@ bool FieldModel::removeRows(int row, int count, const QModelIndex &parent)
|
|||
{
|
||||
#ifdef PASSWORD_MANAGER_GUI_QTWIDGETS
|
||||
if (undoStack()) {
|
||||
return push(new FieldModelRemoveRowsCommand(this, row, count));
|
||||
return push(make_unique<FieldModelRemoveRowsCommand>(this, row, count));
|
||||
}
|
||||
#endif
|
||||
if (parent.isValid() || row < 0 || count <= 0 || static_cast<size_t>(row + count) > m_fields->size()) {
|
||||
|
|
Loading…
Reference in New Issue