diff --git a/iso/iso.cpp b/iso/iso.cpp --- a/iso/iso.cpp +++ b/iso/iso.cpp @@ -191,8 +191,8 @@ entry.UDS_ENTRY_INSERT(UDSEntry::UDS_ACCESS, isoEntry->permissions() & 07777); // keep permissions only if (isoEntry->isFile()) { - long long si = ((KIsoFile *)isoEntry)->realsize(); - if (!si) si = ((KIsoFile *)isoEntry)->size(); + long long si = (dynamic_cast(isoEntry))->realsize(); + if (!si) si = (dynamic_cast(isoEntry))->size(); entry.UDS_ENTRY_INSERT(UDSEntry::UDS_SIZE, si); } else { entry.UDS_ENTRY_INSERT(UDSEntry::UDS_SIZE, 0L); @@ -202,12 +202,12 @@ entry.UDS_ENTRY_INSERT(UDSEntry::UDS_GROUP, isoEntry->group()); entry.UDS_ENTRY_INSERT((uint)UDSEntry::UDS_MODIFICATION_TIME, isoEntry->date().toTime_t()); entry.UDS_ENTRY_INSERT(UDSEntry::UDS_ACCESS_TIME, - isoEntry->isFile() ? ((KIsoFile *)isoEntry)->adate() : - ((KIsoDirectory *)isoEntry)->adate()); + isoEntry->isFile() ? (dynamic_cast(isoEntry))->adate() : + (dynamic_cast(isoEntry))->adate()); entry.UDS_ENTRY_INSERT(UDSEntry::UDS_CREATION_TIME, - isoEntry->isFile() ? ((KIsoFile *)isoEntry)->cdate() : - ((KIsoDirectory *)isoEntry)->cdate()); + isoEntry->isFile() ? (dynamic_cast(isoEntry))->cdate() : + (dynamic_cast(isoEntry))->cdate()); entry.UDS_ENTRY_INSERT(UDSEntry::UDS_LINK_DEST, isoEntry->symLinkTarget()); } @@ -265,7 +265,7 @@ error(KIO::ERR_IS_FILE, path); return; } - dir = (KArchiveDirectory*)e; + dir = dynamic_cast(e); } else { dir = root; } diff --git a/krusader/Archive/abstractthreadedjob.cpp b/krusader/Archive/abstractthreadedjob.cpp --- a/krusader/Archive/abstractthreadedjob.cpp +++ b/krusader/Archive/abstractthreadedjob.cpp @@ -72,7 +72,7 @@ bool AbstractThreadedJob::event(QEvent *e) { if (e->type() == QEvent::User) { - auto *event = (UserEvent*) e; + auto *event = dynamic_cast( e); switch (event->command()) { case CMD_SUCCESS: { emitResult(); diff --git a/krusader/DiskUsage/diskusage.cpp b/krusader/DiskUsage/diskusage.cpp --- a/krusader/DiskUsage/diskusage.cpp +++ b/krusader/DiskUsage/diskusage.cpp @@ -605,7 +605,7 @@ deleteNr += del(*it, false, depth + 1); QString path; - for (const Directory *d = (Directory*)file; d != root && d && d->parent() != nullptr; d = d->parent()) { + for (const Directory *d = dynamic_cast(file); d != root && d && d->parent() != nullptr; d = d->parent()) { if (!path.isEmpty()) path = '/' + path; @@ -1097,7 +1097,7 @@ } if (e->type() == QEvent::ShortcutOverride) { - auto* ke = (QKeyEvent*) e; + auto* ke = dynamic_cast( e); if (ke->modifiers() == Qt::NoModifier || ke->modifiers() == Qt::KeypadModifier) { switch (ke->key()) { diff --git a/krusader/DiskUsage/dufilelight.cpp b/krusader/DiskUsage/dufilelight.cpp --- a/krusader/DiskUsage/dufilelight.cpp +++ b/krusader/DiskUsage/dufilelight.cpp @@ -124,6 +124,7 @@ diskUsage->dirUp(); return; } else if (focus && !focus->isFake() && focus->file()->isDir()) { + // NOTE: unsafe removable of constness here when casting diskUsage->changeDirectory((Directory *)focus->file()); return; } diff --git a/krusader/DiskUsage/dulines.cpp b/krusader/DiskUsage/dulines.cpp --- a/krusader/DiskUsage/dulines.cpp +++ b/krusader/DiskUsage/dulines.cpp @@ -245,7 +245,7 @@ int column = columnAt(pos.x()); if (item && column == 1) { - File *fileItem = ((DULinesItem *)item)->getFile(); + File *fileItem = (dynamic_cast(item))->getFile(); QToolTip::showText(he->globalPos(), diskUsage->getToolTip(fileItem), this); return true; } @@ -401,7 +401,7 @@ { if (item) { if (item->text(0) != "..") { - File *fileItem = ((DULinesItem *)item)->getFile(); + File *fileItem = (dynamic_cast(item))->getFile(); if (fileItem->isDir()) diskUsage->changeDirectory(dynamic_cast(fileItem)); return true; @@ -459,7 +459,7 @@ File * file = nullptr; if (item && item->text(0) != "..") - file = ((DULinesItem *)item)->getFile(); + file = (dynamic_cast(item))->getFile(); QMenu linesPopup; QAction *act = linesPopup.addAction(i18n("Show file sizes"), this, SLOT(slotShowFileSizes())); @@ -481,7 +481,7 @@ if (item == nullptr || item->text(0) == "..") return nullptr; - return ((DULinesItem *)item)->getFile(); + return (dynamic_cast(item))->getFile(); } void DULines::slotChanged(File * item) @@ -492,7 +492,7 @@ it++; if (lvitem->text(0) != "..") { - auto *duItem = (DULinesItem *)(lvitem); + auto *duItem = dynamic_cast(lvitem); if (duItem->getFile() == item) { setSortingEnabled(false); duItem->setHidden(item->isExcluded()); @@ -515,7 +515,7 @@ it++; if (lvitem->text(0) != "..") { - auto *duItem = (DULinesItem *)(lvitem); + auto *duItem = dynamic_cast(lvitem); if (duItem->getFile() == item) { delete duItem; break; diff --git a/krusader/DiskUsage/dulistview.cpp b/krusader/DiskUsage/dulistview.cpp --- a/krusader/DiskUsage/dulistview.cpp +++ b/krusader/DiskUsage/dulistview.cpp @@ -167,7 +167,7 @@ if (item == nullptr || item->text(0) == "..") return nullptr; - return ((DUListViewItem *)item)->getFile(); + return (dynamic_cast(item))->getFile(); } void DUListView::slotChanged(File * item) @@ -198,16 +198,16 @@ File * file = nullptr; if (item && item->text(0) != "..") - file = ((DUListViewItem *)item)->getFile(); + file = (dynamic_cast(item))->getFile(); diskUsage->rightClickMenu(pos, file); } bool DUListView::doubleClicked(QTreeWidgetItem * item) { if (item) { if (item->text(0) != "..") { - File *fileItem = ((DUListViewItem *)item)->getFile(); + File *fileItem = (dynamic_cast(item))->getFile(); if (fileItem->isDir()) diskUsage->changeDirectory(dynamic_cast(fileItem)); return true; @@ -265,7 +265,7 @@ return; if (item->childCount() == 0) { - File *fileItem = ((DUListViewItem *)item)->getFile(); + File *fileItem = (dynamic_cast(item))->getFile(); if (fileItem->isDir()) addDirectory(dynamic_cast(fileItem), item); } diff --git a/krusader/DiskUsage/radialMap/builder.cpp b/krusader/DiskUsage/radialMap/builder.cpp --- a/krusader/DiskUsage/radialMap/builder.cpp +++ b/krusader/DiskUsage/radialMap/builder.cpp @@ -78,7 +78,7 @@ for (ConstIterator it = dir->constIterator(); it != dir->end(); ++it) if ((*it)->isDir() && (*it)->size() > m_minSize) - findVisibleDepth((Directory *)*it, depth + 1); //if no files greater than min size the depth is still recorded + findVisibleDepth(dynamic_cast(*it), depth + 1); //if no files greater than min size the depth is still recorded } void @@ -117,7 +117,7 @@ if ((*it)->isDir()) { if (depth != *m_depth) { //recurse - s->m_hasHiddenChildren = build((Directory*) * it, depth + 1, a_start, a_start + a_len); + s->m_hasHiddenChildren = build(dynamic_cast(*it), depth + 1, a_start, a_start + a_len); } else s->m_hasHiddenChildren = true; } diff --git a/krusader/DiskUsage/radialMap/labels.cpp b/krusader/DiskUsage/radialMap/labels.cpp --- a/krusader/DiskUsage/radialMap/labels.cpp +++ b/krusader/DiskUsage/radialMap/labels.cpp @@ -111,7 +111,7 @@ if (m_focus->file() == nullptr || !m_focus->file()->isDir()) return; //find the range of levels we will be potentially drawing labels for - for (const auto *p = (const Directory *)m_focus->file(); + for (const auto *p = dynamic_cast(m_focus->file()); p != m_tree; ++startLevel) { //startLevel is the level above whatever m_focus is in p = p->parent(); diff --git a/krusader/DiskUsage/radialMap/widgetEvents.cpp b/krusader/DiskUsage/radialMap/widgetEvents.cpp --- a/krusader/DiskUsage/radialMap/widgetEvents.cpp +++ b/krusader/DiskUsage/radialMap/widgetEvents.cpp @@ -235,7 +235,7 @@ #endif emit activated(url); //activate first, this will cause UI to prepare itself if (m_focus) - createFromCache((Directory *)m_focus->file()); + createFromCache(dynamic_cast(m_focus->file())); } } } diff --git a/krusader/GUI/krhistorycombobox.cpp b/krusader/GUI/krhistorycombobox.cpp --- a/krusader/GUI/krhistorycombobox.cpp +++ b/krusader/GUI/krhistorycombobox.cpp @@ -48,7 +48,7 @@ bool KHBoxEventFilter::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::KeyPress) { - auto keyEvent = static_cast(event); + auto keyEvent = dynamic_cast(event); if (keyEvent->modifiers() == Qt::ShiftModifier && keyEvent->key() == Qt::Key::Key_Delete) { auto comboBox = dynamic_cast(obj); if (comboBox != nullptr) { @@ -83,7 +83,7 @@ bool KHBoxListEventFilter::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::KeyPress) { - auto keyEvent = static_cast(event); + auto keyEvent = dynamic_cast(event); if (keyEvent->modifiers() == Qt::ShiftModifier && keyEvent->key() == Qt::Key::Key_Delete) { auto itemView = dynamic_cast(obj); if (itemView->model() != nullptr) { diff --git a/krusader/GUI/krtreewidget.cpp b/krusader/GUI/krtreewidget.cpp --- a/krusader/GUI/krtreewidget.cpp +++ b/krusader/GUI/krtreewidget.cpp @@ -48,7 +48,7 @@ switch (event->type()) { // HACK: QT 4 Context menu key isn't handled properly case QEvent::ContextMenu: { - auto* ce = (QContextMenuEvent*) event; + auto* ce = dynamic_cast( event); if (ce->reason() == QContextMenuEvent::Mouse) { QPoint pos = viewport()->mapFromGlobal(ce->globalPos()); @@ -72,7 +72,7 @@ case QEvent::KeyPress: { // HACK: QT 4 Ctrl+A bug fix: Ctrl+A doesn't work if QTreeWidget contains parent / child items // Insert doesn't change the selections for multi selection modes - auto* ke = (QKeyEvent*) event; + auto* ke = dynamic_cast( event); switch (ke->key()) { case Qt::Key_Insert: { if (ke->modifiers() != 0) @@ -110,7 +110,7 @@ } break; case QEvent::Resize: { - auto * re = (QResizeEvent *)event; + auto * re = dynamic_cast(event); if (!_inResize && re->oldSize() != re->size()) { if (_stretchingColumn != -1 && columnCount()) { QList< int > columnsSizes; diff --git a/krusader/GUI/terminaldock.cpp b/krusader/GUI/terminaldock.cpp --- a/krusader/GUI/terminaldock.cpp +++ b/krusader/GUI/terminaldock.cpp @@ -228,7 +228,7 @@ switch (e->type()) { case QEvent::ShortcutOverride: { - auto *ke = (QKeyEvent *)e; + auto *ke = dynamic_cast(e); // If not present, some keys would be considered a shortcut, for example "a" if ((ke->key() == Qt::Key_Insert) && (ke->modifiers() == Qt::ShiftModifier)) { ke->accept(); @@ -242,7 +242,7 @@ break; } case QEvent::KeyPress: { - auto *ke = (QKeyEvent *)e; + auto *ke = dynamic_cast(e); if (applyShortcuts(ke)) { ke->accept(); return true; diff --git a/krusader/KViewer/krviewer.cpp b/krusader/KViewer/krviewer.cpp --- a/krusader/KViewer/krviewer.cpp +++ b/krusader/KViewer/krviewer.cpp @@ -242,7 +242,7 @@ // Should look into if there is any way to fix it. Currently if a KPart has same shortcut as KrViewer then // it causes a conflict, messagebox shown to user and no action triggered. if (e->type() == QEvent::ShortcutOverride) { - auto* ke = (QKeyEvent*) e; + auto* ke = dynamic_cast( e); if (reservedKeys.contains(ke->key())) { ke->accept(); @@ -259,7 +259,7 @@ return true; } } else if (e->type() == QEvent::KeyPress) { - auto* ke = (QKeyEvent*) e; + auto* ke = dynamic_cast( e); if (reservedKeys.contains(ke->key())) { ke->accept(); return true; diff --git a/krusader/KViewer/lister.cpp b/krusader/KViewer/lister.cpp --- a/krusader/KViewer/lister.cpp +++ b/krusader/KViewer/lister.cpp @@ -1360,7 +1360,7 @@ connect(downloadJob, &KIO::TransferJob::result, this, [=](KJob *job) { _tempFile->flush(); if (job->error()) { /* any error occurred? */ - auto *kioJob = (KIO::TransferJob *)job; + auto *kioJob = dynamic_cast(job); KMessageBox::error(_textArea, i18n("Error reading file %1.", kioJob->url().toDisplayString(QUrl::PreferLocalFile))); } _downloading = false; diff --git a/krusader/Konfigurator/kgdependencies.cpp b/krusader/Konfigurator/kgdependencies.cpp --- a/krusader/Konfigurator/kgdependencies.cpp +++ b/krusader/Konfigurator/kgdependencies.cpp @@ -145,7 +145,7 @@ void KgDependencies::slotApply(QObject *obj, const QString& configGroup, const QString& name) { - auto *urlRequester = (KonfiguratorURLRequester *) obj; + auto *urlRequester = dynamic_cast( obj); KConfigGroup group(krConfig, configGroup); group.writeEntry(name, urlRequester->url().toDisplayString(QUrl::PreferLocalFile)); diff --git a/krusader/Konfigurator/kggeneral.cpp b/krusader/Konfigurator/kggeneral.cpp --- a/krusader/Konfigurator/kggeneral.cpp +++ b/krusader/Konfigurator/kggeneral.cpp @@ -287,7 +287,7 @@ void KgGeneral::applyTempDir(QObject *obj, const QString& configGroup, const QString& name) { - auto *urlReq = (KonfiguratorURLRequester *)obj; + auto *urlReq = dynamic_cast(obj); QString value = urlReq->url().toDisplayString(QUrl::PreferLocalFile); KConfigGroup(krConfig, configGroup).writeEntry(name, value); diff --git a/krusader/Konfigurator/konfigurator.cpp b/krusader/Konfigurator/konfigurator.cpp --- a/krusader/Konfigurator/konfigurator.cpp +++ b/krusader/Konfigurator/konfigurator.cpp @@ -163,7 +163,7 @@ void Konfigurator::slotApplyEnable() { lastPage = currentPage(); - bool isChanged = ((KonfiguratorPage *)(lastPage->widget()))->isChanged(); + bool isChanged = (dynamic_cast(lastPage->widget()))->isChanged(); button(QDialogButtonBox::Apply)->setEnabled(isChanged); button(QDialogButtonBox::Reset)->setEnabled(isChanged); } @@ -173,7 +173,7 @@ if (before == nullptr) return true; - auto *currentPg = (KonfiguratorPage *)(before->widget()); + auto *currentPg = dynamic_cast(before->widget()); if (internalCall) { internalCall = false; @@ -221,17 +221,17 @@ void Konfigurator::slotApply() { - emit configChanged(((KonfiguratorPage*)(currentPage()->widget()))->apply()); + emit configChanged((dynamic_cast(currentPage()->widget()))->apply()); } void Konfigurator::slotReset() { - ((KonfiguratorPage *)(currentPage()->widget()))->loadInitialValues(); + (dynamic_cast(currentPage()->widget()))->loadInitialValues(); } void Konfigurator::slotRestoreDefaults() { - ((KonfiguratorPage *)(currentPage()->widget()))->setDefaults(); + (dynamic_cast(currentPage()->widget()))->setDefaults(); } void Konfigurator::slotShowHelp() diff --git a/krusader/Panel/PanelView/krinterbriefview.cpp b/krusader/Panel/PanelView/krinterbriefview.cpp --- a/krusader/Panel/PanelView/krinterbriefview.cpp +++ b/krusader/Panel/PanelView/krinterbriefview.cpp @@ -236,7 +236,7 @@ { if (object == _header) { if (event->type() == QEvent::ContextMenu) { - auto *me = (QContextMenuEvent *)event; + auto *me = dynamic_cast(event); showContextMenu(me->globalPos()); return true; } diff --git a/krusader/Panel/PanelView/krinterdetailedview.cpp b/krusader/Panel/PanelView/krinterdetailedview.cpp --- a/krusader/Panel/PanelView/krinterdetailedview.cpp +++ b/krusader/Panel/PanelView/krinterdetailedview.cpp @@ -271,7 +271,7 @@ { if (object == header()) { if (event->type() == QEvent::ContextMenu) { - auto *me = (QContextMenuEvent *)event; + auto *me = dynamic_cast(event); showContextMenu(me->globalPos()); return true; } else if (event->type() == QEvent::Resize) { diff --git a/krusader/Panel/krsearchbar.cpp b/krusader/Panel/krsearchbar.cpp --- a/krusader/Panel/krsearchbar.cpp +++ b/krusader/Panel/krsearchbar.cpp @@ -222,7 +222,7 @@ qDebug() << "key press event=" << event; - auto *ke = static_cast(event); + auto *ke = dynamic_cast(event); auto modifiers = ke->modifiers(); if (watched == _view->widget()) { diff --git a/krusader/Search/krsearchdialog.cpp b/krusader/Search/krsearchdialog.cpp --- a/krusader/Search/krsearchdialog.cpp +++ b/krusader/Search/krsearchdialog.cpp @@ -188,7 +188,7 @@ searcherTabs = new QTabWidget(this); filterTabs = FilterTabs::addTo(searcherTabs, FilterTabs::Default); - generalFilter = (GeneralFilter *)filterTabs->get("GeneralFilter"); + generalFilter = dynamic_cast(filterTabs->get("GeneralFilter")); // creating the result tab diff --git a/krusader/Synchronizer/feedtolistboxdialog.cpp b/krusader/Synchronizer/feedtolistboxdialog.cpp --- a/krusader/Synchronizer/feedtolistboxdialog.cpp +++ b/krusader/Synchronizer/feedtolistboxdialog.cpp @@ -63,7 +63,7 @@ QTreeWidgetItemIterator it(syncList); while (*it) { - auto *item = (SynchronizerGUI::SyncViewItem *) * it; + auto *item = dynamic_cast( * it); SynchronizerFileItem *syncItem = item->synchronizerItemRef(); if (syncItem && syncItem->isMarked()) { @@ -169,7 +169,7 @@ QTreeWidgetItemIterator it(syncList); for (;*it; it++) { - auto *item = (SynchronizerGUI::SyncViewItem *) * it; + auto *item = dynamic_cast( * it); SynchronizerFileItem *syncItem = item->synchronizerItemRef(); if (!syncItem || !syncItem->isMarked()) diff --git a/krusader/Synchronizer/synchronizer.cpp b/krusader/Synchronizer/synchronizer.cpp --- a/krusader/Synchronizer/synchronizer.cpp +++ b/krusader/Synchronizer/synchronizer.cpp @@ -179,7 +179,7 @@ if (entry->inherits("CompareTask")) { if (entry->state() == ST_STATE_READY) { - auto *ctentry = (CompareTask *) entry; + auto *ctentry = dynamic_cast( entry); if (ctentry->isDuplicate()) compareDirectory(ctentry->parent(), ctentry->leftDirList(), ctentry->rightDirList(), ctentry->leftDir(), ctentry->rightDir()); diff --git a/krusader/Synchronizer/synchronizergui.cpp b/krusader/Synchronizer/synchronizergui.cpp --- a/krusader/Synchronizer/synchronizergui.cpp +++ b/krusader/Synchronizer/synchronizergui.cpp @@ -386,7 +386,7 @@ synchGrid->addWidget(synchronizerTabs, 0, 0); filterTabs = FilterTabs::addTo(synchronizerTabs, FilterTabs::HasDontSearchIn); - generalFilter = (GeneralFilter *)filterTabs->get("GeneralFilter"); + generalFilter = dynamic_cast(filterTabs->get("GeneralFilter")); generalFilter->searchFor->setEditText(fileFilter->currentText()); generalFilter->searchForCase->setChecked(true); @@ -669,7 +669,7 @@ if (!itemIn) return; - auto *syncItem = (SyncViewItem *)itemIn; + auto *syncItem = dynamic_cast(itemIn); SynchronizerFileItem *item = syncItem->synchronizerItemRef(); if (item && item->existsInLeft() && item->existsInRight() && !item->isDir()) { QString leftDirName = item->leftDirectory().isEmpty() ? "" : item->leftDirectory() + '/'; @@ -705,7 +705,7 @@ if (!itemIn) return; - auto *syncItem = (SyncViewItem *)itemIn; + auto *syncItem = dynamic_cast(itemIn); if (syncItem == nullptr) return; @@ -1267,7 +1267,7 @@ bool isedit = e->key() == Qt::Key_F4; - SynchronizerFileItem *item = ((SyncViewItem *)listItem)->synchronizerItemRef(); + SynchronizerFileItem *item = (dynamic_cast(listItem))->synchronizerItemRef(); QString leftDirName = item->leftDirectory().isEmpty() ? "" : item->leftDirectory() + '/'; QString rightDirName = item->rightDirectory().isEmpty() ? "" : item->rightDirectory() + '/'; @@ -1321,7 +1321,7 @@ bool SynchronizerGUI::eventFilter(QObject * /* watched */, QEvent * e) { if (e->type() == QEvent::KeyPress) { - auto* ke = (QKeyEvent*) e; + auto* ke = dynamic_cast( e); switch (ke->key()) { case Qt::Key_Down: case Qt::Key_Left: @@ -1363,7 +1363,7 @@ if (listItem == nullptr) return true; - SynchronizerFileItem *item = ((SyncViewItem *)listItem)->synchronizerItemRef(); + SynchronizerFileItem *item = (dynamic_cast(listItem))->synchronizerItemRef(); bool hasSelected = false; QList selected = syncList->selectedItems(); diff --git a/krusader/Synchronizer/synchronizertask.cpp b/krusader/Synchronizer/synchronizertask.cpp --- a/krusader/Synchronizer/synchronizertask.cpp +++ b/krusader/Synchronizer/synchronizertask.cpp @@ -272,8 +272,8 @@ if (compareArray.size()) abortContentComparing(); } else { - if (!((KIO::TransferJob *)job)->isSuspended()) { - ((KIO::TransferJob *)job)->suspend(); + if (!(dynamic_cast(job))->isSuspended()) { + (dynamic_cast(job))->suspend(); otherJob->resume(); } } diff --git a/krusader/actionsbase.cpp b/krusader/actionsbase.cpp --- a/krusader/actionsbase.cpp +++ b/krusader/actionsbase.cpp @@ -98,13 +98,13 @@ KToggleAction *ActionsBase::toggleAction(QString text, QString icon, const QKeySequence& shortcut, QObject *recv, const char *slot, QString name) { - return (KToggleAction *)(action(std::move(text), std::move(icon), shortcut, recv, slot, std::move(name), true)); + return dynamic_cast(action(std::move(text), std::move(icon), shortcut, recv, slot, std::move(name), true)); } KToggleAction *ActionsBase::toggleAction(QString text, QString icon, const QKeySequence& shortcut, ActionGroup &group, const char *slot, QString name) { - return (KToggleAction *)(action(std::move(text), std::move(icon), shortcut, group, slot, std::move(name), true)); + return dynamic_cast(action(std::move(text), std::move(icon), shortcut, group, slot, std::move(name), true)); } QAction *ActionsBase::stdAction(KStandardAction::StandardAction id, QObject *recv, const char *slot) diff --git a/krusader/krusader.cpp b/krusader/krusader.cpp --- a/krusader/krusader.cpp +++ b/krusader/krusader.cpp @@ -540,7 +540,7 @@ } void Krusader::updateUserActions() { - auto *userActionMenu = (KActionMenu *) KrActions::actUserMenu; + auto *userActionMenu = dynamic_cast( KrActions::actUserMenu); if (userActionMenu) { userActionMenu->menu()->clear();