# # # patch "guitone/res/i18n/guitone_de.ts" # from [5f876044580631f168c398c8c89524e7d92b65cb] # to [f06d2b94b17d4a7b518fc590998bb67cdbd5ebbb] # # patch "guitone/src/main.cpp" # from [c88cada9094d4c992fc8a9cd1d45698731e521f5] # to [0f6e69c3dfae7b30cb4f44c64a4420f615302cec] # # patch "guitone/src/model/Ancestors.cpp" # from [4f7b6c236b77394636842ae8bf2c86b00b78fba4] # to [7bb4d2dd2b1b870f4a46558a62faa7b0ca97f5ca] # # patch "guitone/src/model/Attributes.cpp" # from [8f04bbd7d5a39b7ce58437e1cb83ebd194baac40] # to [fd72a7b08e414686b2e93de641bf5f94cff7b9f0] # # patch "guitone/src/model/Branches.cpp" # from [1f5feb6e9aa372f17613326cf1300152b95e2b5d] # to [16f9fb7f5dd3a7d16b51e039fe88dfdd90bb27c5] # # patch "guitone/src/model/Certs.cpp" # from [7872678efa938114c445716dc746a080fd869887] # to [b48de50077208de9b67ae3071c90aa65acc10344] # # patch "guitone/src/model/ChangesetModel.cpp" # from [4b7b0e4f84142c4183a96a7b784c6e0ebcf839e7] # to [5c5faf9dd2dc9fb9cb2812f4cdb651bc3d500d51] # # patch "guitone/src/model/ContentDiff.cpp" # from [6df42733cdb1a0565da7ef036ea1ad3d096befd3] # to [abd8b7157548d609ef4dbe8f631a611e0a8866b7] # # patch "guitone/src/model/GetBranchLog.cpp" # from [20aaa38f0accb2c4b6577ba2f4fb7b1465abb443] # to [baaa66595c53dc6919da61915dae320d2bc823db] # # patch "guitone/src/model/GetFile.cpp" # from [61381507195bc0a8a4c32208c62b3af5672fac7d] # to [446fe06a9e46bbe88051f9de2f27f4760de44fac] # # patch "guitone/src/model/Inventory.cpp" # from [0ceea0517362e7242bf89226bff3c992c2c23fe1] # to [a236e76431c59c823ded034a2ad83df9d361b447] # # patch "guitone/src/model/InventoryItem.cpp" # from [b76305f5557db8c5c251b2fdca465caf4cd43f72] # to [008cbeeba4c2faebafa58695dc92b7da0fc5b877] # # patch "guitone/src/model/Keys.cpp" # from [8ef6991ae0c6f9be50d8d4e4c22be80327736d04] # to [b7141af26db130e7cd30203b240816813d036f34] # # patch "guitone/src/model/Manifest.cpp" # from [ea7e6ec9d70abd5e1f79e3e6fee4b8988126382e] # to [8e2357ecb606665bb1cb63fa3fe7646f107d62e8] # # patch "guitone/src/model/Select.cpp" # from [2dd6445b5b3b664224c561e9c784f1e6c3abc70c] # to [ea8fcd3147113559a9b5682da76a01f2ff621daf] # # patch "guitone/src/model/Tags.cpp" # from [1518ed7a4d464a2745934d2d4fc192e486921757] # to [950aeece30661ab8279da1a03582fdc6dda58a43] # # patch "guitone/src/model/Toposort.cpp" # from [72735c539ab47f8a1ef1be5ff8739d32ac9b0578] # to [171876e4399f4a194f8d707ad17b63d500b59d47] # # patch "guitone/src/monotone/Monotone.cpp" # from [656b3d08e1e7201707a4060d44d0af3763d7796f] # to [b7588957c4e038fa0ae34b357cef8f3c20c14102] # # patch "guitone/src/util/DiffParser.cpp" # from [3e7fcc734bdabfbdb515d6807bb58ede155e704f] # to [8531a68eedd6b050f68e80451d97e1d7835d6c2c] # # patch "guitone/src/util/MemoryTrack.cpp" # from [8bb34b6931540fbb8f564957f63906f3c6ed1533] # to [22a57af4e475d6de130bae59084908472a8ebe06] # # patch "guitone/src/util/MemoryTrack.h" # from [56f358cb76682e1e668b4b33574f4577065a0259] # to [f4af04412de1fd7dbb2d9c7cbf42c24f0a2f3413] # # patch "guitone/src/view/MainWindow.cpp" # from [5e74f5b51c0d5ceee5eecd65171e699abb09f982] # to [15c65a123a0b4defd361cd8884c5eb85ecf95b3b] # # patch "guitone/src/view/dialogs/RevisionManifest.cpp" # from [f68113f5bc124de858b097d136e59c162f7d6485] # to [f9d9688442b1d7fec7971773ca0221bc5a728e27] # # patch "guitone/src/view/dialogs/SwitchWorkspaceRevision.cpp" # from [4ff7c85d7e1154607ce8ec0ba7ed263acc93158c] # to [1b4c8cbf0c5d6e0ed452ef8f73742efb9edf4200] # ============================================================ --- guitone/res/i18n/guitone_de.ts 5f876044580631f168c398c8c89524e7d92b65cb +++ guitone/res/i18n/guitone_de.ts f06d2b94b17d4a7b518fc590998bb67cdbd5ebbb @@ -75,7 +75,7 @@ Branches - + Branches Zweige @@ -326,57 +326,57 @@ InventoryItem - + File Datei - + Status Status - + Rename Source Quelle für Umbenennen - + Rename Target Ziel für Umbenennen - + Added hinzugefügt - + Dropped entfernt - + Missing fehlend - + Unchanged unverändert - + Unknown unbekannt - + Ignored ignoriert - + Modified Verändert ============================================================ --- guitone/src/main.cpp c88cada9094d4c992fc8a9cd1d45698731e521f5 +++ guitone/src/main.cpp 0f6e69c3dfae7b30cb4f44c64a4420f615302cec @@ -77,7 +77,7 @@ int main(int argc, char** argv) app.connect(&app, SIGNAL(lastWindowClosed()), mainWnd, SLOT(quit())); int ret = app.exec(); - writeUnfreed(); + mtWriteUnfreed(); return ret; } ============================================================ --- guitone/src/model/Ancestors.cpp 4f7b6c236b77394636842ae8bf2c86b00b78fba4 +++ guitone/src/model/Ancestors.cpp 7bb4d2dd2b1b870f4a46558a62faa7b0ca97f5ca @@ -36,10 +36,10 @@ Ancestors::~Ancestors() if (selRevisions) { selRevisions->clear(); - mtdelete(selRevisions); + delete selRevisions; } - mtdelete(mtnDelegate); + delete mtnDelegate; } bool Ancestors::readAncestors(const QStringList & parents) @@ -73,7 +73,7 @@ void Ancestors::parseOutput() if (selRevisions > 0) { selRevisions->clear(); - mtdelete(selRevisions); + delete selRevisions; selRevisions = new RevisionList( AutomateCommand::data.split('\n', QString::SkipEmptyParts) ); ============================================================ --- guitone/src/model/Attributes.cpp 8f04bbd7d5a39b7ce58437e1cb83ebd194baac40 +++ guitone/src/model/Attributes.cpp fd72a7b08e414686b2e93de641bf5f94cff7b9f0 @@ -35,8 +35,8 @@ Attributes::~Attributes() Attributes::~Attributes() { attributes->clear(); - mtdelete(attributes); - mtdelete(mtnDelegate); + delete attributes; + delete mtnDelegate; } bool Attributes::readAttributes(const QModelIndex & index) ============================================================ --- guitone/src/model/Branches.cpp 1f5feb6e9aa372f17613326cf1300152b95e2b5d +++ guitone/src/model/Branches.cpp 16f9fb7f5dd3a7d16b51e039fe88dfdd90bb27c5 @@ -31,8 +31,8 @@ Branches::~Branches() Branches::~Branches() { if(builder) - mtdelete(builder); - mtdelete(mtnDelegate); + delete builder; + delete mtnDelegate; } bool Branches::readBranches() ============================================================ --- guitone/src/model/Certs.cpp 7872678efa938114c445716dc746a080fd869887 +++ guitone/src/model/Certs.cpp b48de50077208de9b67ae3071c90aa65acc10344 @@ -31,8 +31,8 @@ Certs::~Certs() Certs::~Certs() { certs->clear(); - mtdelete(certs); - mtdelete(mtnDelegate); + delete certs; + delete mtnDelegate; } bool Certs::readCerts(const QString & rev) ============================================================ --- guitone/src/model/ChangesetModel.cpp 4b7b0e4f84142c4183a96a7b784c6e0ebcf839e7 +++ guitone/src/model/ChangesetModel.cpp 5c5faf9dd2dc9fb9cb2812f4cdb651bc3d500d51 @@ -30,7 +30,7 @@ ChangesetModel::~ChangesetModel() ChangesetModel::~ChangesetModel() { foreach(Changeset *it, changesetMap) - mtdelete(it); + delete it; } void ChangesetModel::receiveRevisions(bool all) @@ -73,7 +73,7 @@ void ChangesetModel::branchLogRead(GetBr { receiveRevisions(false); } - mtdelete(glog); + delete glog; } void ChangesetModel::changesetCertReady(ChangesetCerts *cert) @@ -110,7 +110,7 @@ void ChangesetModel::changesetCertReady( branchMap[currentBranch].certsRead = idx; beginInsertRows(QModelIndex(), idx, idx); endInsertRows(); - mtdelete(cert); + delete cert; } int ChangesetModel::columnCount(const QModelIndex &parent) const ============================================================ --- guitone/src/model/ContentDiff.cpp 6df42733cdb1a0565da7ef036ea1ad3d096befd3 +++ guitone/src/model/ContentDiff.cpp abd8b7157548d609ef4dbe8f631a611e0a8866b7 @@ -33,10 +33,10 @@ ContentDiff::~ContentDiff() ContentDiff::~ContentDiff() { - if (diffParser) mtdelete(diffParser); + if (diffParser) delete diffParser; foreach(ListLine *it, lines) - mtdelete(it); - mtdelete(mtnDelegate); + delete it; + delete mtnDelegate; } bool ContentDiff::readDiff(QString fileName) ============================================================ --- guitone/src/model/GetBranchLog.cpp 20aaa38f0accb2c4b6577ba2f4fb7b1465abb443 +++ guitone/src/model/GetBranchLog.cpp baaa66595c53dc6919da61915dae320d2bc823db @@ -38,9 +38,9 @@ GetBranchLog::~GetBranchLog() GetBranchLog::~GetBranchLog() { - mtdelete(selectModel); - mtdelete(revSortModel); - mtdelete(ancestorModel); + delete selectModel; + delete revSortModel; + delete ancestorModel; } QString GetBranchLog::getBranch() ============================================================ --- guitone/src/model/GetFile.cpp 61381507195bc0a8a4c32208c62b3af5672fac7d +++ guitone/src/model/GetFile.cpp 446fe06a9e46bbe88051f9de2f27f4760de44fac @@ -30,7 +30,7 @@ GetFile::~GetFile() GetFile::~GetFile() { - mtdelete(mtnDelegate); + delete mtnDelegate; } bool GetFile::readFileByName(QString fileName) ============================================================ --- guitone/src/model/Inventory.cpp 0ceea0517362e7242bf89226bff3c992c2c23fe1 +++ guitone/src/model/Inventory.cpp a236e76431c59c823ded034a2ad83df9d361b447 @@ -42,10 +42,10 @@ Inventory::~Inventory() Inventory::~Inventory() { - mtdelete(rootItem); - mtdelete(iconProvider); - mtdelete(regex); - mtdelete(mtnDelegate); + delete rootItem; + delete iconProvider; + delete regex; + delete mtnDelegate; } bool Inventory::readInventory() ============================================================ --- guitone/src/model/InventoryItem.cpp b76305f5557db8c5c251b2fdca465caf4cd43f72 +++ guitone/src/model/InventoryItem.cpp 008cbeeba4c2faebafa58695dc92b7da0fc5b877 @@ -56,7 +56,8 @@ InventoryItem::~InventoryItem() InventoryItem::~InventoryItem() { - qDeleteAll(children); + foreach(InventoryItem *it, children) + delete it; } @@ -84,7 +85,8 @@ void InventoryItem::deleteAllChildren(vo dirFlag = false; childDirFlag = false; rootFlag = false; - qDeleteAll(children); + foreach(InventoryItem *it, children) + delete it; children.clear(); } ============================================================ --- guitone/src/model/Keys.cpp 8ef6991ae0c6f9be50d8d4e4c22be80327736d04 +++ guitone/src/model/Keys.cpp b7141af26db130e7cd30203b240816813d036f34 @@ -32,7 +32,7 @@ Keys::~Keys() Keys::~Keys() { - mtdelete(mtnDelegate); + delete mtnDelegate; } bool Keys::readKeys() ============================================================ --- guitone/src/model/Manifest.cpp ea7e6ec9d70abd5e1f79e3e6fee4b8988126382e +++ guitone/src/model/Manifest.cpp 8e2357ecb606665bb1cb63fa3fe7646f107d62e8 @@ -29,8 +29,8 @@ Manifest::~Manifest() Manifest::~Manifest() { - mtdelete(root); - mtdelete(mtnDelegate); + delete root; + delete mtnDelegate; } bool Manifest::readManifest(const QString & rev) ============================================================ --- guitone/src/model/Select.cpp 2dd6445b5b3b664224c561e9c784f1e6c3abc70c +++ guitone/src/model/Select.cpp ea8fcd3147113559a9b5682da76a01f2ff621daf @@ -36,10 +36,10 @@ Select::~Select() if (selRevisions) { selRevisions->clear(); - mtdelete(selRevisions); + delete selRevisions; } - mtdelete(mtnDelegate); + delete mtnDelegate; } bool Select::readSelection(const QString & selector) @@ -73,7 +73,7 @@ void Select::parseOutput() if (selRevisions > 0) { selRevisions->clear(); - mtdelete(selRevisions); + delete selRevisions; selRevisions = new RevisionList( AutomateCommand::data.split('\n', QString::SkipEmptyParts) ); ============================================================ --- guitone/src/model/Tags.cpp 1518ed7a4d464a2745934d2d4fc192e486921757 +++ guitone/src/model/Tags.cpp 950aeece30661ab8279da1a03582fdc6dda58a43 @@ -31,8 +31,8 @@ Tags::~Tags() Tags::~Tags() { tags->clear(); - mtdelete(tags); - mtdelete(mtnDelegate); + delete tags; + delete mtnDelegate; } bool Tags::readTags(const QString & branch) ============================================================ --- guitone/src/model/Toposort.cpp 72735c539ab47f8a1ef1be5ff8739d32ac9b0578 +++ guitone/src/model/Toposort.cpp 171876e4399f4a194f8d707ad17b63d500b59d47 @@ -37,9 +37,9 @@ Toposort::~Toposort() if (ordRevisions) { ordRevisions->clear(); - mtdelete(ordRevisions); + delete ordRevisions; } - mtdelete(mtnDelegate); + delete mtnDelegate; } void Toposort::setSourceModel(QAbstractItemModel * source) ============================================================ --- guitone/src/monotone/Monotone.cpp 656b3d08e1e7201707a4060d44d0af3763d7796f +++ guitone/src/monotone/Monotone.cpp b7588957c4e038fa0ae34b357cef8f3c20c14102 @@ -201,7 +201,7 @@ void Monotone::shutdownCurrentProcess() this, SLOT(processFinished(int, QProcess::ExitStatus)) ); - mtdelete(process); + delete process; } } ============================================================ --- guitone/src/util/DiffParser.cpp 3e7fcc734bdabfbdb515d6807bb58ede155e704f +++ guitone/src/util/DiffParser.cpp 8531a68eedd6b050f68e80451d97e1d7835d6c2c @@ -31,7 +31,7 @@ DiffParser::~DiffParser() DiffParser::~DiffParser() { foreach(Diff *it, fileDiffs.values()) - mtdelete(it); + delete it; } void DiffParser::parse(const QString & input) ============================================================ --- guitone/src/util/MemoryTrack.cpp 8bb34b6931540fbb8f564957f63906f3c6ed1533 +++ guitone/src/util/MemoryTrack.cpp 22a57af4e475d6de130bae59084908472a8ebe06 @@ -18,12 +18,16 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#ifdef _DEBUG +#define MEMORYTRACK_CPP + #include +#include #include #include #include "MemoryTrack.h" -struct AllocInfo +struct MTAllocInfo { void *ptr; size_t size; @@ -31,35 +35,103 @@ struct AllocInfo QString file; }; -QMap trackMap; +typedef QMap MTTrackMap; +struct MTStackInfo +{ + inline MTStackInfo() + { + line = 0; + file = "root"; + } + MTTrackMap mtTrackMap; + int line; + QString file; +}; + +QStack mtTrackStack; +MTStackInfo mtCurrentStackInfo; +MTObjectDestroyNotify mtObjectDestroyNotify; +bool recursion = false; + +void mtPushStack(const char *file, int line) +{ + mtTrackStack.push(mtCurrentStackInfo); + MTStackInfo newStack; + newStack.file = file; + newStack.line = line; + mtCurrentStackInfo = newStack; +} + +bool mtPopStack() +{ + if(mtTrackStack.isEmpty()) + { + qCritical("Tried to pop emtry memory track stack!!"); + return false; + } + else + { + mtWriteUnfreedCurrent(); + mtCurrentStackInfo = mtTrackStack.pop(); + return true; + } +} + + +void *mtTrackNew(size_t size, QObject *ptr, const char *file, int line) +{ + if(!recursion) + { + recursion = true; + mtObjectDestroyNotify.connectDestroy(ptr); + recursion = false; + } + return mtTrackNew(size, (void*) ptr, file, line); +} + void *mtTrackNew(size_t size, void *ptr, const char *file, int line) { - AllocInfo info; + MTAllocInfo info; info.ptr = ptr; info.size = 0; info.size = size; info.file = QString(file); info.line = line; - trackMap[ptr] = info; + mtCurrentStackInfo.mtTrackMap[ptr] = info; return ptr; } void mtTrackDelete(void *ptr) { - trackMap.remove(ptr); + if(!recursion) + { + recursion = true; + mtCurrentStackInfo.mtTrackMap.remove(ptr); + recursion = false; + } } -void writeUnfreed() +void mtWriteUnfreed() { -#ifdef _DEBUG + mtWriteUnfreedCurrent(); + while (!mtTrackStack.isEmpty()) + { + mtCurrentStackInfo = mtTrackStack.pop(); + mtWriteUnfreedCurrent(); + } +} + +void mtWriteUnfreedCurrent() +{ quint32 totalSize = 0; - if(trackMap.count() != 0) + if(mtCurrentStackInfo.mtTrackMap.count() != 0) { qDebug() << "Unfreed memory report"; + qDebug() << "Started in" << mtCurrentStackInfo.file << "line" << mtCurrentStackInfo.line; qDebug() << "---------------------"; - foreach(AllocInfo info, trackMap) + foreach(MTAllocInfo info, mtCurrentStackInfo.mtTrackMap) { totalSize += info.size; qDebug() << info.size << "bytes in file" << info.file << "line" << info.line; @@ -67,5 +139,6 @@ void writeUnfreed() qDebug() << "Total size of unfreed memory: " << totalSize; qDebug() << "---------------------"; } -#endif } + +#endif ============================================================ --- guitone/src/util/MemoryTrack.h 56f358cb76682e1e668b4b33574f4577065a0259 +++ guitone/src/util/MemoryTrack.h f4af04412de1fd7dbb2d9c7cbf42c24f0a2f3413 @@ -18,33 +18,93 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +/* Memory Tracking for Qt + ---------------------- + FIXME: Make thread safe! + FIXME: Make array allocation possible! + + This is a memory tracking for Qt. It is reentrant but not thread safe yet! + You can call mtnew(T, ...) to get a new tracked object. Deletes are + tracked automatically by overloading operator delete. + + You can start a new memory context by "mtpush {". To leave the context + you call "} mtpop;". + + new QString("Hello") -> mtnew(QString, "Hello"); + + mtnew(): Create tracked object + mtpush {: Enter new memory context + } mtpop;: Leave memory context +*/ + +// Disable memory contexts here +// #define MT_NOCONTEXTS + #ifndef MEMORYTRACK_H #define MEMORYTRACK_H #ifdef _DEBUG #include - +#include void *mtTrackNew(size_t size, void *ptr, const char *file, int line); +void *mtTrackNew(size_t size, QObject *ptr, const char *file, int line); void mtTrackDelete(void *ptr); -void writeUnfreed(); +void mtWriteUnfreed(); +void mtWriteUnfreedCurrent(); +void mtPushStack(const char *file, int line); +bool mtPopStack(); +class MTObjectDestroyNotify : public QObject +{ + Q_OBJECT +public: + void connectDestroy(QObject* obj) + { + connect(obj, SIGNAL(destroyed(QObject*)), + this, SLOT(objectDestroyed(QObject*))); + } + +private slots: + void objectDestroyed(QObject* obj) + { + mtTrackDelete(obj); + } +}; + #ifdef _MSC_VER -#define _VAARGSHACK +#define _MT_VAARGSHACK #endif -#ifdef _VAARGSHACK +#ifndef MEMORYTRACK_CPP +#ifdef _MT_VAARGSHACK +#ifdef MT_NOCONTEXTS +#define mtpush void +#define mtpop void +#else +#define mtpush mtPushStack(__FILE__, __LINE__); +#define mtpop mtPopStack(); +#endif #define mtnew(type, ...) mtvaargshackfunc(type, new type(__VA_ARGS__)) -#define mtvaargshackfunc(type, thenew) (type*) mtTrackNew(sizeof(type), (void*) thenew, __FILE__, __LINE__) +#define mtvaargshackfunc(type, thenew) (type*) mtTrackNew(sizeof(type), thenew, __FILE__, __LINE__) #else -#define mtnew(type, ...) (type*) mtTrackNew(sizeof(type), (void*) new type(__VA_ARGS__), __FILE__, __LINE__) +#define mtnew(type, ...) (type*) mtTrackNew(sizeof(type), new type(__VA_ARGS__), __FILE__, __LINE__) #endif -#define mtdelete(ptr) { mtTrackDelete(ptr); delete ptr; } +#endif +inline void operator delete(void *ptr) +{ + free(ptr); + mtTrackDelete(ptr); +} + #else -#define writeUnfreed void +#ifndef MEMORYTRACK_CPP +#define mtWriteUnfreed void +#define mtPushStack void +#define mtPopStack void #define mtnew(type, ...) new type(__VA_ARGS__) -#define mtdelete(ptr) delete ptr +#endif #endif #endif ============================================================ --- guitone/src/view/MainWindow.cpp 5e74f5b51c0d5ceee5eecd65171e699abb09f982 +++ guitone/src/view/MainWindow.cpp 15c65a123a0b4defd361cd8884c5eb85ecf95b3b @@ -176,7 +176,7 @@ void MainWindow::quit() void MainWindow::quit() { - mtdelete(this); + delete this; Settings::sync(); } @@ -458,36 +458,46 @@ void MainWindow::on_actionSwitch_revisio // TODO: connect Inventory with the accept() signal here somehow // before this works, we obviously need a separate update command // wrapper which signals us that we can re-read the inventory... - SwitchWorkspaceRevision dialog(this); - dialog.execDocumentModal(); + mtpush { + SwitchWorkspaceRevision dialog(this); + dialog.execDocumentModal(); + } mtpop; } void MainWindow::on_actionPreferences_triggered() { - Preferences dialog(this); - dialog.exec(); + mtpush { + Preferences dialog(this); + dialog.exec(); + } mtpop; } void MainWindow::on_actionKey_management_triggered() { - KeyManagement dialog(this); - dialog.execDocumentModal(); + mtpush { + KeyManagement dialog(this); + dialog.execDocumentModal(); + } mtpop; } void MainWindow:: on_actionChangeset_browser_triggered() { - DatabaseView dialog(this); - dialog.execDocumentModal(); + mtpush { + DatabaseView dialog(this); + dialog.execDocumentModal(); + } mtpop; } void MainWindow::on_actionAbout_guitone_triggered() { - About dialog(this); - dialog.exec(); + mtpush { + About dialog(this); + dialog.exec(); + } mtpop; } void MainWindow::on_actionAbout_Qt_triggered() { - qApp->aboutQt(); + qApp->aboutQt(); } ============================================================ --- guitone/src/view/dialogs/RevisionManifest.cpp f68113f5bc124de858b097d136e59c162f7d6485 +++ guitone/src/view/dialogs/RevisionManifest.cpp f9d9688442b1d7fec7971773ca0221bc5a728e27 @@ -67,7 +67,7 @@ RevisionManifest::~RevisionManifest() RevisionManifest::~RevisionManifest() { - mtdelete(manifestModel); + delete manifestModel; } void RevisionManifest::saveAllFiles() ============================================================ --- guitone/src/view/dialogs/SwitchWorkspaceRevision.cpp 4ff7c85d7e1154607ce8ec0ba7ed263acc93158c +++ guitone/src/view/dialogs/SwitchWorkspaceRevision.cpp 1b4c8cbf0c5d6e0ed452ef8f73742efb9edf4200 @@ -137,12 +137,12 @@ SwitchWorkspaceRevision::~SwitchWorkspac SwitchWorkspaceRevision::~SwitchWorkspaceRevision() { - mtdelete(selectorModel); - mtdelete(sortModel); - mtdelete(certsModel); - mtdelete(branchesModel); - mtdelete(tagsModel); - mtdelete(keysModel); + delete selectorModel; + delete sortModel; + delete certsModel; + delete branchesModel; + delete tagsModel; + delete keysModel; } void SwitchWorkspaceRevision::triggerRevisionSearch()