[education/rkward] rkward: More cppcheck warnings

Thomas Friedrichsmeier null at kde.org
Sat Jan 31 08:17:04 GMT 2026


Git commit 1c4271e023378636ce562d8b27a06d386ae8e457 by Thomas Friedrichsmeier.
Committed on 31/01/2026 at 08:16.
Pushed by tfry into branch 'master'.

More cppcheck warnings

M  +4    -4    rkward/core/robject.cpp
M  +2    -2    rkward/core/robject.h
M  +1    -1    rkward/dataeditor/rkeditor.cpp
M  +1    -3    rkward/dataeditor/rkeditor.h
M  +3    -3    rkward/dataeditor/rkvareditmodel.cpp
M  +15   -16   rkward/dialogs/rkloadlibsdialog.cpp
M  +4    -4    rkward/dialogs/rksavemodifieddialog.cpp
M  +2    -2    rkward/dialogs/rksavemodifieddialog.h
M  +4    -5    rkward/dialogs/rksetupwizard.cpp
M  +1    -1    rkward/dialogs/rksetupwizard.h
M  +1    -1    rkward/misc/rkaccordiontable.cpp
M  +3    -3    rkward/misc/rkobjectlistview.cpp
M  +3    -5    rkward/misc/rkprogresscontrol.cpp
M  +1    -1    rkward/misc/rkspecialactions.cpp
M  +2    -2    rkward/misc/rktableview.cpp
M  +6    -6    rkward/misc/rkxmlguipreviewarea.cpp
M  +2    -2    rkward/misc/rkxmlguipreviewarea.h
M  +7    -11   rkward/misc/xmlhelper.cpp
M  +1    -1    rkward/plugin/rkabstractoptionselector.cpp
M  +5    -5    rkward/plugin/rkformula.cpp
M  +2    -2    rkward/plugin/rkformula.h
M  +5    -6    rkward/plugin/rkoptionset.cpp
M  +1    -1    rkward/plugin/rkstandardcomponentgui.h
M  +2    -2    rkward/rbackend/rcommand.h
M  +1    -1    rkward/rbackend/rkfrontendtransmitter.h
M  +4    -4    rkward/rbackend/rkrinterface.cpp
M  +2    -2    rkward/rbackend/rkrinterface.h
M  +2    -0    rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
M  +4    -6    rkward/rkward.cpp
M  +1    -1    rkward/robjectviewer.cpp
M  +5    -5    rkward/scriptbackends/rkcomponentscripting.cpp
M  +1    -2    rkward/scriptbackends/scriptbackend.cpp
M  +2    -2    rkward/settings/rksettings.h
M  +1    -1    rkward/settings/rksettingsmoduler.cpp
M  +2    -2    rkward/windows/katepluginintegration.cpp
M  +1    -1    rkward/windows/rkcodecompletion.cpp
M  +2    -2    rkward/windows/rkhelpsearchwindow.cpp
M  +2    -2    rkward/windows/rktoolwindowlist.cpp
M  +2    -2    rkward/windows/rktoolwindowlist.h
M  +8    -8    rkward/windows/rkwindowcatcher.cpp
M  +0    -1    rkward/windows/rkworkplaceview.cpp
M  +2    -2    rkward/windows/robjectbrowser.cpp

https://invent.kde.org/education/rkward/-/commit/1c4271e023378636ce562d8b27a06d386ae8e457

diff --git a/rkward/core/robject.cpp b/rkward/core/robject.cpp
index 7c2b100ed..94df209d6 100644
--- a/rkward/core/robject.cpp
+++ b/rkward/core/robject.cpp
@@ -40,9 +40,9 @@ class RObjectLifeTimeGuard {
 			object->guard = nullptr;
 		}
 	}
-	void addCommandFinishedCallback(RCommand *command, std::function<void(RCommand *)> callback) {
+	void addCommandFinishedCallback(RCommand *command, std::function<void(const RCommand *)> callback) {
 		++command_count;
-		QObject::connect(command->notifier(), &RCommandNotifier::commandFinished, [this, callback](RCommand *command) { // clazy:exclude=connect-3arg-lambda
+		QObject::connect(command->notifier(), &RCommandNotifier::commandFinished, [this, callback](const RCommand *command) { // clazy:exclude=connect-3arg-lambda
 			if (object) {
 				callback(command);
 			}
@@ -56,7 +56,7 @@ class RObjectLifeTimeGuard {
 	RObject *object;
 };
 
-void RObject::whenCommandFinished(RCommand *command, std::function<void(RCommand *)> callback) {
+void RObject::whenCommandFinished(RCommand *command, std::function<void(const RCommand *)> callback) {
 	if (!guard) {
 		guard = new RObjectLifeTimeGuard(this);
 	}
@@ -291,7 +291,7 @@ void RObject::updateFromR(RCommandChain *chain) {
 		commandstring = u".rk.get.structure ("_s + getFullName() + u", "_s + rQuote(getShortName()) + u')';
 	}
 	RCommand *command = new RCommand(commandstring, RCommand::App | RCommand::Sync | RCommand::GetStructuredData);
-	whenCommandFinished(command, [this](RCommand *command) {
+	whenCommandFinished(command, [this](const RCommand *command) {
 		if (command->failed()) {
 			RK_DEBUG(OBJECTS, DL_INFO, "command failed while trying to update object '%s'. No longer present?", getShortName().toLatin1().data());
 			// this may happen, if the object has been removed in the workspace in between
diff --git a/rkward/core/robject.h b/rkward/core/robject.h
index f31950c28..1f6c4c54c 100644
--- a/rkward/core/robject.h
+++ b/rkward/core/robject.h
@@ -299,8 +299,8 @@ class RObject {
 	/** Notify the object that a model no longer needs its data. If there have been as many endEdit() as beginEdit() calls, the object should discard its data storage. The default implementation does nothing (raises an assert). */
 	virtual void endEdit();
 
-	/** wrapper around RCommand::whenFinishe(), needed because RObject is not a Qbject subclass */
-	void whenCommandFinished(RCommand *command, std::function<void(RCommand *)> callback);
+	/** wrapper around RCommand::whenFinished(), needed because RObject is not a Qbject subclass */
+	void whenCommandFinished(RCommand *command, std::function<void(const RCommand *)> callback);
 
 	/* Storage hashes for special objects which are held by some but not all objects, and thus should not have a pointer
 	 * in the class declaration. Some apply only to specific RObject types, but moving storage to the relevant classes, would make it more
diff --git a/rkward/dataeditor/rkeditor.cpp b/rkward/dataeditor/rkeditor.cpp
index 55a42a0ff..b76ac89fe 100644
--- a/rkward/dataeditor/rkeditor.cpp
+++ b/rkward/dataeditor/rkeditor.cpp
@@ -8,7 +8,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
 
 #include "../debug.h"
 
-RKEditor::RKEditor(QWidget *parent) : RKMDIWindow(parent, RKMDIWindow::DataEditorWindow) {
+RKEditor::RKEditor(QWidget *parent) : RKMDIWindow(parent, RKMDIWindow::DataEditorWindow), object(nullptr) {
 	RK_TRACE(EDITOR);
 }
 
diff --git a/rkward/dataeditor/rkeditor.h b/rkward/dataeditor/rkeditor.h
index 67daf3de7..0dd95e971 100644
--- a/rkward/dataeditor/rkeditor.h
+++ b/rkward/dataeditor/rkeditor.h
@@ -35,7 +35,7 @@ class RKEditor : public RKMDIWindow {
 	/// flushes all pending edit operations and syncs the data to R. Implement in the child classes
 	virtual void flushChanges() = 0;
 	/// returns the object that is being edited in this editor
-	RObject *getObject() { return object; };
+	RObject *getObject() const { return object; };
 
 	enum PasteMode { PasteEverywhere,
 		             PasteToTable,
@@ -44,8 +44,6 @@ class RKEditor : public RKMDIWindow {
 	/** Tells the editor to restore the given object in the R-workspace from its copy of the data */
 	virtual void restoreObject(RObject *object) = 0;
 
-	bool isModified() const override { return false; };
-
   protected:
 	RObject *object;
 };
diff --git a/rkward/dataeditor/rkvareditmodel.cpp b/rkward/dataeditor/rkvareditmodel.cpp
index dbf564c5b..9374d3815 100644
--- a/rkward/dataeditor/rkvareditmodel.cpp
+++ b/rkward/dataeditor/rkvareditmodel.cpp
@@ -66,8 +66,8 @@ void RKVarEditModel::addObject(int index, RKVariable *object) {
 	if (meta_model) meta_model->endAddDataObject();
 	endInsertColumns();
 
-	auto name = object->getShortName();
 	if (index >= var_col_offset) {
+		const auto name = object->getShortName();
 		for (int i = var_col_offset; i < objects.size(); ++i) {
 			if (i == index) continue;
 			if (objects[i]->getShortName() == name) {
@@ -841,7 +841,7 @@ bool RKVarEditDataFrameModel::insertColumns(int column, int count, const QModelI
 	if (column > trueCols()) column = trueCols();
 	if (column < var_col_offset) column = var_col_offset;
 	for (int col = column; col < (column + count); ++col) {
-		RObject *obj = dataframe->createPendingChild(dataframe->validizeName(QString()), col - var_col_offset);
+		const RObject *obj = dataframe->createPendingChild(dataframe->validizeName(QString()), col - var_col_offset);
 		RK_ASSERT(obj->isVariable());
 		//		addObject (col, obj);	// the object will be added via RKModificationTracker::addObject -> this::childAdded. That will also take care of calling
 		// beginInsertColumns()/endInsertColumns()
@@ -962,7 +962,7 @@ void RKVarEditDataFrameModel::pushTable(RCommandChain *sync_chain) {
 	command.append(u" <- data.frame ("_s);
 
 	RK_ASSERT(objects.size());
-	RKVariable *child = objects[0];
+	const RKVariable *child = objects[0];
 	QString na_vector = u"=as.numeric (rep (NA, "_s + QString::number(child->getLength()) + u"))"_s;
 	for (int col = var_col_offset; col < objects.size(); ++col) {
 		if (col > var_col_offset) command.append(u", "_s);
diff --git a/rkward/dialogs/rkloadlibsdialog.cpp b/rkward/dialogs/rkloadlibsdialog.cpp
index 7e0bdb43e..47d02afef 100644
--- a/rkward/dialogs/rkloadlibsdialog.cpp
+++ b/rkward/dialogs/rkloadlibsdialog.cpp
@@ -67,7 +67,7 @@ RKLoadLibsDialog::RKLoadLibsDialog(QWidget *parent, RCommandChain *chain, bool m
 	QTimer::singleShot(0, this, [this]() { slotPageChanged(); });
 
 	RCommand *command = new RCommand(QStringLiteral(".libPaths()"), RCommand::App | RCommand::GetStringVector);
-	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](RCommand *command) {
+	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](const RCommand *command) {
 		RK_ASSERT(command->getDataType() == RData::StringVector);
 		RK_ASSERT(command->getDataLength() > 0);
 		// NOTE: The problem is that e.g. R_LIBS_USER is not in .libPaths() if it does not exist, yet. But it should be available as an option, of course
@@ -403,7 +403,7 @@ void LoadUnloadWidget::updateInstalledPackages() {
 	loaded_view->clear();
 
 	auto command = new RCommand(QStringLiteral(".rk.get.installed.packages()"), RCommand::App | RCommand::Sync | RCommand::GetStructuredData);
-	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](RCommand *command) {
+	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](const RCommand *command) {
 		if (command->failed()) return;
 		RK_ASSERT(command->getDataLength() == 5);
 
@@ -431,7 +431,7 @@ void LoadUnloadWidget::updateInstalledPackages() {
 	RInterface::issueCommand(command, parent->chain);
 
 	command = new RCommand(QStringLiteral(".packages()"), RCommand::App | RCommand::Sync | RCommand::GetStringVector);
-	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](RCommand *command) {
+	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](const RCommand *command) {
 		if (command->failed()) return;
 		RK_ASSERT(command->getDataType() == RData::StringVector);
 		QStringList data = command->stringVector();
@@ -536,7 +536,7 @@ void LoadUnloadWidget::doLoadUnload() {
 
 	// find out, when we're done
 	RCommand *command = new RCommand(QString(), RCommand::EmptyCommand);
-	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](RCommand *) { clearChanged(); });
+	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](const RCommand *) { clearChanged(); });
 	control->addRCommand(command); // this is actually important, in case no commands had been generated, above
 	RInterface::issueCommand(command, parent->chain);
 	control->setAutoCloseWhenCommandsDone(true);
@@ -560,11 +560,11 @@ void LoadUnloadWidget::apply() {
 class InstallPackagesDelegate : public QStyledItemDelegate {
 	Q_OBJECT
   public:
-	explicit InstallPackagesDelegate(QTreeView *parent) : QStyledItemDelegate(parent) {
-		table = parent;
-		expanded = RKStandardIcons::getIcon(RKStandardIcons::ActionCollapseUp);
-		collapsed = RKStandardIcons::getIcon(RKStandardIcons::ActionExpandDown);
-	}
+	explicit InstallPackagesDelegate(QTreeView *parent) : QStyledItemDelegate(parent),
+	                                                      table(parent),
+	                                                      expanded(RKStandardIcons::getIcon(RKStandardIcons::ActionCollapseUp)),
+	                                                      collapsed(RKStandardIcons::getIcon(RKStandardIcons::ActionExpandDown)) {};
+
 	void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override {
 		QStyledItemDelegate::initStyleOption(option, index);
 		if (!index.parent().isValid()) {
@@ -867,27 +867,26 @@ QModelIndex RKRPackageInstallationStatus::markPackageForInstallation(const QStri
 	RK_TRACE(DIALOGS);
 
 	// is the package available at all?
-	QModelIndex pindex;
 	int row = available_packages.indexOf(package_name);
-	if (row < 0) return pindex;
+	if (row < 0) return QModelIndex();
 
 	// find out, whether it is a new or and updateable package
-	QModelIndex parent;
+	QModelIndex catindex;
 	int urow = updateable_packages_in_available.indexOf(row);
 	if (urow >= 0) {
-		parent = index(UpdateablePackages, 0);
+		catindex = index(UpdateablePackages, 0);
 		row = urow;
 	} else {
 		row = new_packages_in_available.indexOf(row);
-		parent = index(NewPackages, 0);
+		catindex = index(NewPackages, 0);
 	}
 	if (row < 0) {
 		RK_ASSERT(false);
-		return pindex;
+		return QModelIndex();
 	}
 
 	// mark for installation
-	pindex = index(row, InstallationStatus, parent);
+	auto pindex = index(row, InstallationStatus, catindex);
 	setData(pindex, QVariant(Qt::Checked), Qt::CheckStateRole);
 	return pindex;
 }
diff --git a/rkward/dialogs/rksavemodifieddialog.cpp b/rkward/dialogs/rksavemodifieddialog.cpp
index 6a5f6eba3..6c03f7a0b 100644
--- a/rkward/dialogs/rksavemodifieddialog.cpp
+++ b/rkward/dialogs/rksavemodifieddialog.cpp
@@ -24,7 +24,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
 
 #include "../debug.h"
 
-bool RKSaveModifiedDialog::askSaveModified(QWidget *parent, QList<RKMDIWindow *> windows, bool project) {
+bool RKSaveModifiedDialog::askSaveModified(QWidget *parent, const QList<RKMDIWindow *> &windows, bool project) {
 	RK_TRACE(APP);
 
 	QList<RKMDIWindow *> modified_wins;
@@ -58,7 +58,7 @@ QTreeWidgetItem *makeHeaderItem(const QString &label, QTreeWidget *tree) {
 	return header;
 }
 
-RKSaveModifiedDialog::RKSaveModifiedDialog(QWidget *parent, QList<RKMDIWindow *> modified_wins, bool project) : QDialog(parent) {
+RKSaveModifiedDialog::RKSaveModifiedDialog(QWidget *parent, const QList<RKMDIWindow *> modified_wins, bool project) : QDialog(parent) {
 	RK_TRACE(APP);
 
 	setWindowTitle(i18n("Save modified"));
@@ -85,12 +85,12 @@ RKSaveModifiedDialog::RKSaveModifiedDialog(QWidget *parent, QList<RKMDIWindow *>
 
 		auto modified_outputs = RKOutputDirectory::modifiedOutputDirectories();
 		if (!modified_outputs.isEmpty()) {
-			QTreeWidgetItem *header = makeHeaderItem(i18n("Output files"), tree);
+			QTreeWidgetItem *hitem = makeHeaderItem(i18n("Output files"), tree);
 			for (int i = 0; i < modified_outputs.size(); ++i) {
 				QTreeWidgetItem *item = new QTreeWidgetItem();
 				item->setText(0, modified_outputs[i]->caption());
 				item->setFirstColumnSpanned(true);
-				header->addChild(item);
+				hitem->addChild(item);
 				item->setCheckState(0, Qt::Checked);
 				outputdir_checklist.insert(item, modified_outputs[i]->getId());
 			}
diff --git a/rkward/dialogs/rksavemodifieddialog.h b/rkward/dialogs/rksavemodifieddialog.h
index 4cd99b755..bad722b79 100644
--- a/rkward/dialogs/rksavemodifieddialog.h
+++ b/rkward/dialogs/rksavemodifieddialog.h
@@ -24,10 +24,10 @@ class RKSaveModifiedDialog : public QDialog {
 	 *  @param windows List of windows to ask about
 	 *  @param project Whether to also ask about saving project related resources: Outputs, Workplace, Workspace.
 	 *  @returns true, if the user chose to proceed (with or without saving modications), _and_ saving was successful; false, if the user cancelled the operation, or some saves failed. */
-	static bool askSaveModified(QWidget *parent, QList<RKMDIWindow *> windows, bool project);
+	static bool askSaveModified(QWidget *parent, const QList<RKMDIWindow *> &windows, bool project);
 
   private:
-	RKSaveModifiedDialog(QWidget *parent, QList<RKMDIWindow *> modified_windows, bool project);
+	RKSaveModifiedDialog(QWidget *parent, const QList<RKMDIWindow *> modified_windows, bool project);
 	virtual ~RKSaveModifiedDialog();
 	QMap<QTreeWidgetItem *, QPointer<RKMDIWindow>> window_checklist;
 	QTreeWidgetItem *save_project_check;
diff --git a/rkward/dialogs/rksetupwizard.cpp b/rkward/dialogs/rksetupwizard.cpp
index 2f92449c5..72ef813a6 100644
--- a/rkward/dialogs/rksetupwizard.cpp
+++ b/rkward/dialogs/rksetupwizard.cpp
@@ -48,7 +48,7 @@ class RKSetupWizardPage : public QWidget {
 
 	void lazyInitOnce(std::function<void(RKSetupWizardPage *)> initfun) {
 		auto refcopy = ref;
-		QObject::connect(wizard, &KPageDialog::currentPageChanged, this, [this, refcopy, initfun](KPageWidgetItem *current, KPageWidgetItem *) mutable {
+		QObject::connect(wizard, &KPageDialog::currentPageChanged, this, [this, refcopy, initfun](const KPageWidgetItem *current, KPageWidgetItem *) mutable {
 			if (current && current == refcopy) {
 				initfun(this);
 				refcopy = nullptr;
@@ -56,7 +56,7 @@ class RKSetupWizardPage : public QWidget {
 		});
 	}
 	void lazyInitRepeated(std::function<void(RKSetupWizardPage *)> initfun) {
-		QObject::connect(wizard, &KPageDialog::currentPageChanged, this, [this, initfun](KPageWidgetItem *current, KPageWidgetItem *) {
+		QObject::connect(wizard, &KPageDialog::currentPageChanged, this, [this, initfun](const KPageWidgetItem *current, KPageWidgetItem *) {
 			if (current && current == ref) {
 				initfun(this);
 			}
@@ -99,7 +99,7 @@ static auto iconForStatus(RKSetupWizardItem::Status status) {
 
 class RBackendStatusWidget : public QWidget {
   public:
-	RBackendStatusWidget(QWidget *parent) : QWidget(parent), anim(nullptr) {
+	explicit RBackendStatusWidget(QWidget *parent) : QWidget(parent), anim(nullptr) {
 		auto l = new QVBoxLayout(this);
 		rinst_label = new QLabel();
 		l->addWidget(rinst_label);
@@ -176,7 +176,7 @@ class RBackendStatusWidget : public QWidget {
 
 class RBackendSelectionWidget : public RKRadioGroup {
   public:
-	RBackendSelectionWidget(QWidget *parent) : RKRadioGroup(parent) {
+	explicit RBackendSelectionWidget(QWidget *parent) : RKRadioGroup(parent) {
 		req = new KUrlRequester();
 		req->setPlaceholderText(i18n("Select another R executable"));
 		req->setWindowTitle(i18n("Select R executable"));
@@ -443,7 +443,6 @@ RKSetupWizard::RKSetupWizard(QWidget *parent, InvokationReason reason, const QLi
 		software_to_install.clear();
 		packages_to_install.clear();
 		r_commands_to_run.clear();
-		;
 
 		// NOTE: This is not quite clean: Some settings get applied before clicking finish, this way.
 		//       However, I don't really want to pop up a separate dialog for a summary page, either.
diff --git a/rkward/dialogs/rksetupwizard.h b/rkward/dialogs/rksetupwizard.h
index c0a8a5156..4c393c2dc 100644
--- a/rkward/dialogs/rksetupwizard.h
+++ b/rkward/dialogs/rksetupwizard.h
@@ -89,7 +89,7 @@ class RKSetupWizardItem {
 	QString shortlabel;
 	QString longlabel;
 	QString shortstatuslabel;
-	QComboBox *box;
+	QComboBox *box; // cppcheck-suppress unsafeClassCanLeak ; always added to layout, deleted by Qt
 };
 
 #endif
diff --git a/rkward/misc/rkaccordiontable.cpp b/rkward/misc/rkaccordiontable.cpp
index 7b868ca1e..974199d6a 100644
--- a/rkward/misc/rkaccordiontable.cpp
+++ b/rkward/misc/rkaccordiontable.cpp
@@ -461,7 +461,7 @@ int RKAccordionTable::rowOfButton(QObject *button) const {
 	if (!button) return -1;
 
 	// we rely on the fact that the buttons in use, here, are encapsulaped in a parent widget, which is set as indexWidget()
-	QObject *button_parent = button->parent();
+	const QObject *button_parent = button->parent();
 	for (int i = model()->rowCount() - 1; i >= 0; --i) {
 		QModelIndex row = model()->index(i, model()->columnCount() - 1);
 		if (button_parent == indexWidget(row)) {
diff --git a/rkward/misc/rkobjectlistview.cpp b/rkward/misc/rkobjectlistview.cpp
index f54c381cb..2dfa56969 100644
--- a/rkward/misc/rkobjectlistview.cpp
+++ b/rkward/misc/rkobjectlistview.cpp
@@ -44,7 +44,7 @@ class RKObjectListViewRootDelegate : public QStyledItemDelegate {
 			// v4->decorationPosition = QStyleOptionViewItemV4::Right;  // easily gets out of the picture, thus using left-align
 			option->features |= QStyleOptionViewItem::HasDecoration;
 
-			RObject *object = static_cast<RObject *>(tree->settings->mapToSource(index).internalPointer());
+			const RObject *object = static_cast<RObject *>(tree->settings->mapToSource(index).internalPointer());
 			option->font.setBold(true);
 			option->backgroundBrush = tree->palette().mid();
 			if (object == RObjectList::getObjectList()) {
@@ -456,8 +456,8 @@ bool RKObjectListViewSettings::lessThan(const QModelIndex &left, const QModelInd
 
 	// for top-level environments, always use the search order
 	if (left_object->isType(RObject::ToplevelEnv) && right_object->isType(RObject::ToplevelEnv)) {
-		RObject *left_parent = left_object->parentObject();
-		RObject *right_parent = right_object->parentObject();
+		const RObject *left_parent = left_object->parentObject();
+		const RObject *right_parent = right_object->parentObject();
 		if (!(left_parent && right_parent)) return false;
 
 		return (left_parent->getObjectModelIndexOf(left_object) < right_parent->getObjectModelIndexOf(right_object));
diff --git a/rkward/misc/rkprogresscontrol.cpp b/rkward/misc/rkprogresscontrol.cpp
index 5a4cb44ee..b90639c42 100644
--- a/rkward/misc/rkprogresscontrol.cpp
+++ b/rkward/misc/rkprogresscontrol.cpp
@@ -53,8 +53,6 @@ class RKProgressControlDialog : public QDialog {
 	QLabel *error_indicator;
 	QDialogButtonBox *buttons;
 
-	QString output_button_text;
-
 	ROutput::ROutputType last_output_type;
 	bool prevent_close;
 	bool is_done;
@@ -118,7 +116,7 @@ void RKProgressControl::addRCommand(RCommand *command, bool done_when_finished)
 
 	outstanding_commands.append(command);
 	connect(command->notifier(), &RCommandNotifier::commandOutput, this, &RKProgressControl::newOutput);
-	command->whenFinished(this, [this, done_when_finished](RCommand *command) {
+	command->whenFinished(this, [this, done_when_finished](const RCommand *command) {
 		qDebug("finished");
 		if (command->failed()) {
 			qDebug("failed");
@@ -430,7 +428,7 @@ void RKInlineProgressControl::cancelAndClose() {
 void RKInlineProgressControl::addRCommand(RCommand *command) {
 	RK_TRACE(MISC);
 	unfinished_commands.append(command);
-	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](RCommand *c) {
+	connect(command->notifier(), &RCommandNotifier::commandFinished, this, [this](const RCommand *c) {
 		unfinished_commands.removeAll(c);
 		if (c->failed()) {
 			any_failed = true;
@@ -439,7 +437,7 @@ void RKInlineProgressControl::addRCommand(RCommand *command) {
 			done();
 		}
 	});
-	connect(command->notifier(), &RCommandNotifier::commandOutput, this, [this](RCommand *, const ROutput &o) {
+	connect(command->notifier(), &RCommandNotifier::commandOutput, this, [this](const RCommand *, const ROutput &o) {
 		addOutput(output_display, o);
 	});
 }
diff --git a/rkward/misc/rkspecialactions.cpp b/rkward/misc/rkspecialactions.cpp
index 16c314a28..5b9ecb090 100644
--- a/rkward/misc/rkspecialactions.cpp
+++ b/rkward/misc/rkspecialactions.cpp
@@ -266,7 +266,7 @@ void RKPasteSpecialDialog::accept() {
 	RK_TRACE(MISC);
 	if (objectname) {
 		RCommand *command = new RCommand(objectname->currentFullName() + u" <- "_s + resultingText(), RCommand::App | RCommand::ObjectListUpdate);
-		connect(command->notifier(), &RCommandNotifier::commandFinished, [](RCommand *c) {
+		connect(command->notifier(), &RCommandNotifier::commandFinished, [](const RCommand *c) {
 			if (c->failed()) {
 				QString msg = c->fullOutput();
 				if (msg.isEmpty()) msg = i18n("Command failed to parse. Try using <i>Edit->Paste special...</i> in the R Console window for better diagnostics.");
diff --git a/rkward/misc/rktableview.cpp b/rkward/misc/rktableview.cpp
index af88e4470..b562543d5 100644
--- a/rkward/misc/rktableview.cpp
+++ b/rkward/misc/rktableview.cpp
@@ -215,11 +215,11 @@ void RKItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, co
 
 		int row = index.row();
 		if (row == RKVarEditMetaModel::FormatRow) {
-			EditFormatDialogProxy *fed = static_cast<EditFormatDialogProxy *>(editor);
+			const EditFormatDialogProxy *fed = static_cast<EditFormatDialogProxy *>(editor);
 			model->setData(index, RKVariable::formattingOptionsToString(fed->getOptions()), Qt::EditRole);
 			return;
 		} else if (row == RKVarEditMetaModel::LevelsRow) {
-			EditLabelsDialogProxy *led = static_cast<EditLabelsDialogProxy *>(editor);
+			const EditLabelsDialogProxy *led = static_cast<EditLabelsDialogProxy *>(editor);
 			metamodel->setValueLabels(index.column(), led->getLabels());
 			return;
 		} // else all others use the regular CellEditor
diff --git a/rkward/misc/rkxmlguipreviewarea.cpp b/rkward/misc/rkxmlguipreviewarea.cpp
index c497f67c5..904b0dfd8 100644
--- a/rkward/misc/rkxmlguipreviewarea.cpp
+++ b/rkward/misc/rkxmlguipreviewarea.cpp
@@ -186,12 +186,12 @@ void RKXMLGUIPreviewArea::prepareMenu() {
 /** Similar to KMessageWidget, but much smaller margins / spacings */
 class RKPreviewStatusNote : public QFrame {
 	friend class RKPreviewManager;
-	RKPreviewStatusNote(RKPreviewManager *manager) : QFrame(),
-	                                                 updating(i18nc("very short: Preview is updating", "updating")),
-	                                                 error(i18nc("very short: Error while generating preview", "error")),
-	                                                 ready(i18nc("very short: Preview is up to date", "ready")),
-	                                                 unavailable(i18nc("very short: Preview is not(yet) possible", "n/a")),
-	                                                 off(i18nc("very short: Preview is turned off", "off")) {
+	explicit RKPreviewStatusNote(RKPreviewManager *manager) : QFrame(),
+	                                                          updating(i18nc("very short: Preview is updating", "updating")),
+	                                                          error(i18nc("very short: Error while generating preview", "error")),
+	                                                          ready(i18nc("very short: Preview is up to date", "ready")),
+	                                                          unavailable(i18nc("very short: Preview is not(yet) possible", "n/a")),
+	                                                          off(i18nc("very short: Preview is turned off", "off")) {
 		QFontMetrics fm(font());
 		em = fm.horizontalAdvance(u'w');
 		auto l = new QVBoxLayout(this);
diff --git a/rkward/misc/rkxmlguipreviewarea.h b/rkward/misc/rkxmlguipreviewarea.h
index 1fffeb747..22ccac0bf 100644
--- a/rkward/misc/rkxmlguipreviewarea.h
+++ b/rkward/misc/rkxmlguipreviewarea.h
@@ -27,8 +27,8 @@ class RKPreviewManager;
 class RKXMLGUIPreviewArea : public QWidget {
 	Q_OBJECT
   public:
-	RKXMLGUIPreviewArea(const QString &label, QWidget *parent, RKPreviewManager *manager);
-	~RKXMLGUIPreviewArea();
+	explicit RKXMLGUIPreviewArea(const QString &label, QWidget *parent, RKPreviewManager *manager);
+	~RKXMLGUIPreviewArea() override;
 	QString label() const;
 	void setLabel(const QString &label);
 	void setWindow(RKMDIWindow *window);
diff --git a/rkward/misc/xmlhelper.cpp b/rkward/misc/xmlhelper.cpp
index 87e8659a6..6f44569dd 100644
--- a/rkward/misc/xmlhelper.cpp
+++ b/rkward/misc/xmlhelper.cpp
@@ -142,15 +142,14 @@ QDomElement XMLHelper::resolveSnippets(QDomElement &from_doc) {
 		displayError(&ref, u"resolving snippet '"_s + id + u'\'', DL_DEBUG, DL_DEBUG);
 
 		// resolve the reference
+		const auto found = std::find_if(snippets.cbegin(), snippets.cend(), [this, id](const auto &sel) {
+			return (getStringAttribute(sel, QStringLiteral("id"), QString(), DL_ERROR) == id);
+		});
 		QDomElement snippet;
-		for (XMLChildList::const_iterator it = snippets.constBegin(); it != snippets.constEnd(); ++it) {
-			if (getStringAttribute(*it, QStringLiteral("id"), QString(), DL_ERROR) == id) {
-				snippet = *it;
-				break;
-			}
-		}
-		if (snippet.isNull()) {
+		if (found == snippets.cend()) {
 			displayError(&ref, u"no such snippet '"_s + id + u'\'', DL_ERROR, DL_ERROR);
+		} else {
+			snippet = *found;
 		}
 
 		// now insert it.
@@ -228,10 +227,7 @@ XMLChildList XMLHelper::findElementsWithAttribute(const QDomElement &parent, con
 			}
 		}
 		if (recursive) {
-			XMLChildList subret = findElementsWithAttribute(*it, attribute_name, attribute_value, true, debug_level);
-			for (XMLChildList::const_iterator it = subret.constBegin(); it != subret.constEnd(); ++it) {
-				ret.append(*it);
-			}
+			ret += findElementsWithAttribute(*it, attribute_name, attribute_value, true, debug_level);
 		}
 	}
 
diff --git a/rkward/plugin/rkabstractoptionselector.cpp b/rkward/plugin/rkabstractoptionselector.cpp
index b54f6b94f..66a3be940 100644
--- a/rkward/plugin/rkabstractoptionselector.cpp
+++ b/rkward/plugin/rkabstractoptionselector.cpp
@@ -133,7 +133,7 @@ void RKAbstractOptionSelector::propertyChanged(RKComponentPropertyBase *property
 void RKAbstractOptionSelector::ItemPropertyChanged(RKComponentPropertyBase *property) {
 	RK_TRACE(PLUGIN);
 
-	Option *opt = nullptr;
+	const Option *opt = nullptr;
 	int id = -1;
 	for (OptionsMap::const_iterator it = options.cbegin(); it != options.cend(); ++it) {
 		RK_ASSERT(it.value());
diff --git a/rkward/plugin/rkformula.cpp b/rkward/plugin/rkformula.cpp
index 1ce59d189..fc22d2ae3 100644
--- a/rkward/plugin/rkformula.cpp
+++ b/rkward/plugin/rkformula.cpp
@@ -148,8 +148,8 @@ void RKFormula::makeModelString() {
 	model_ok = false;
 	QString table_string, model_string, labels_string;
 	mangled_names.clear();
-	RObject *dep_var = dependent->objectValue();
-	RObject *container = nullptr;
+	const RObject *dep_var = dependent->objectValue();
+	const RObject *container = nullptr;
 	if (dep_var) {
 		model_ok = true;
 	}
@@ -223,16 +223,16 @@ void RKFormula::makeModelString() {
 	changed();
 }
 
-QString RKFormula::mangleName(RObject *var) {
+QString RKFormula::mangleName(const RObject *var) {
 	RK_TRACE(PLUGIN);
 	if (!var) return QString();
 
 	QString dummy = var->getShortName();
-	QString dummy2 = dummy;
+	const QString dummy2 = dummy;
 	MangledNames::iterator it;
 	int i = -1;
 	while (((it = mangled_names.find(dummy)) != mangled_names.end()) && (it.value() != var)) {
-		dummy = dummy2.append(QString().setNum(++i));
+		dummy = dummy + QString::number(++i);
 	}
 	mangled_names.insert(dummy, var);
 	return dummy;
diff --git a/rkward/plugin/rkformula.h b/rkward/plugin/rkformula.h
index 67980ea8c..51d211699 100644
--- a/rkward/plugin/rkformula.h
+++ b/rkward/plugin/rkformula.h
@@ -51,7 +51,7 @@ class RKFormula : public RKComponent {
 
 	bool multitable;
 	bool model_ok;
-	typedef QMap<QString, RObject *> MangledNames;
+	typedef QMap<QString, const RObject *> MangledNames;
 	MangledNames mangled_names;
 
 	enum ModelType { FullModel = 0,
@@ -70,7 +70,7 @@ class RKFormula : public RKComponent {
 
 	void checkCustomModel();
 	void makeModelString();
-	QString mangleName(RObject *var);
+	QString mangleName(const RObject *var);
 
 	typedef QHash<QTreeWidgetItem *, RObject *> ItemMap;
 	ItemMap predictors_map;
diff --git a/rkward/plugin/rkoptionset.cpp b/rkward/plugin/rkoptionset.cpp
index 0dc54f44c..97945bc81 100644
--- a/rkward/plugin/rkoptionset.cpp
+++ b/rkward/plugin/rkoptionset.cpp
@@ -210,9 +210,8 @@ QString serializeMap(const RKComponent::PropertyValueMap &map) {
 
 RKComponent::PropertyValueMap unserializeMap(const QString &serial) {
 	RKComponent::PropertyValueMap ret;
-	QStringList l = serial.split(u'\t', Qt::KeepEmptyParts);
-	for (int i = 0; i < l.size(); ++i) {
-		QString &line = l[i];
+	const QStringList l = serial.split(u'\t', Qt::KeepEmptyParts);
+	for (const auto &line : l) {
 		int sep = line.indexOf(u'=');
 		ret.insert(RKCommonFunctions::unescape(line.left(sep)), RKCommonFunctions::unescape(line.mid(sep + 1)));
 	}
@@ -380,7 +379,7 @@ void RKOptionSet::addRow(int row) {
 	QMap<RKComponentPropertyStringList *, ColumnInfo>::iterator it = column_map.begin();
 	for (; it != column_map.end(); ++it) {
 		RKComponentPropertyStringList *col = it.key();
-		ColumnInfo &column = it.value();
+		const ColumnInfo &column = it.value();
 		QStringList values = col->values();
 		values.insert(row, getDefaultValue(column, row));
 		col->setValueList(values);
@@ -591,7 +590,7 @@ void RKOptionSet::handleKeycolumnUpdate() {
 	QMap<RKComponentPropertyStringList *, ColumnInfo>::iterator it = column_map.begin();
 	for (; it != column_map.end(); ++it) {
 		RKComponentPropertyStringList *col = it.key();
-		ColumnInfo &column = it.value();
+		const ColumnInfo &column = it.value();
 		if (column.external) continue;
 
 		// Ok, we'll have to adjust this column. We start by copying the old values, and padding to the
@@ -793,7 +792,7 @@ QVariant RKOptionSetDisplayModel::data(const QModelIndex &index, int role) const
 	int column = index.column();
 
 	if (role == Qt::DisplayRole) {
-		RKComponentPropertyStringList *p = set->visible_columns.value(column);
+		const RKComponentPropertyStringList *p = set->visible_columns.value(column);
 		if (p) {
 			return QVariant(p->valueAt(row));
 		} else {
diff --git a/rkward/plugin/rkstandardcomponentgui.h b/rkward/plugin/rkstandardcomponentgui.h
index ca61f2c17..c6e2492d5 100644
--- a/rkward/plugin/rkstandardcomponentgui.h
+++ b/rkward/plugin/rkstandardcomponentgui.h
@@ -137,7 +137,7 @@ class RKStandardComponentWizard : public RKStandardComponentGUI {
 	Q_OBJECT
   public:
 	RKStandardComponentWizard(RKStandardComponent *component, RKComponentPropertyCode *code_property, bool enslaved);
-	~RKStandardComponentWizard();
+	~RKStandardComponentWizard() override;
 
 	void enableSubmit(bool enable) override;
 	void updateCode() override;
diff --git a/rkward/rbackend/rcommand.h b/rkward/rbackend/rcommand.h
index a38804576..10cd6e5d3 100644
--- a/rkward/rbackend/rcommand.h
+++ b/rkward/rbackend/rcommand.h
@@ -37,7 +37,7 @@ class RCommandChain {
   protected:
 	friend class RCommandStack;
 	friend class RCommandStackModel;
-	RCommandChain(bool is_chain = true) : closed(!is_chain), is_command(!is_chain) {};
+	explicit RCommandChain(bool is_chain = true) : closed(!is_chain), is_command(!is_chain) {};
 	QList<RCommandChain *> sub_commands;
 	bool closed;
 	bool is_command;
@@ -235,7 +235,7 @@ class RCommand : public RData, public RCommandChain {
  *  - If @param warning is non-null, the message will be shown (as a warning), but no error will be raised.
  *  - Unless an error was thrown, @param ret will be returned as a basic data type (possibly NULL). */
 struct GenericRRequestResult {
-	GenericRRequestResult(const QVariant &ret = QVariant(), const QString &warning = QString(), const QString &error = QString()) : error(error), warning(warning), ret(ret) {};
+	explicit GenericRRequestResult(const QVariant &ret = QVariant(), const QString &warning = QString(), const QString &error = QString()) : error(error), warning(warning), ret(ret) {};
 	static GenericRRequestResult makeError(const QString &error) {
 		return GenericRRequestResult(QVariant(), QString(), error);
 	}
diff --git a/rkward/rbackend/rkfrontendtransmitter.h b/rkward/rbackend/rkfrontendtransmitter.h
index 9edd2ccf0..b8540e39c 100644
--- a/rkward/rbackend/rkfrontendtransmitter.h
+++ b/rkward/rbackend/rkfrontendtransmitter.h
@@ -19,7 +19,7 @@ class RKRBackendProtocolFrontend;
 class RKFrontendTransmitter : public RKAbstractTransmitter, public RKROutputBuffer {
 	Q_OBJECT
   public:
-	RKFrontendTransmitter(RKRBackendProtocolFrontend *frontend);
+	explicit RKFrontendTransmitter(RKRBackendProtocolFrontend *frontend);
 	~RKFrontendTransmitter() override;
 
 	void run() override;
diff --git a/rkward/rbackend/rkrinterface.cpp b/rkward/rbackend/rkrinterface.cpp
index 0bae9f0d9..9b0112123 100644
--- a/rkward/rbackend/rkrinterface.cpp
+++ b/rkward/rbackend/rkrinterface.cpp
@@ -89,7 +89,7 @@ RInterface::RInterface() {
 	// The backend will fetch this command, then send a BackendRequest::Started event. In response to this, we will send further
 	// (sub)-commands to set everything up (see there).
 	auto fake_c = new RCommand(i18n("R Startup"), RCommand::App | RCommand::Sync | RCommand::ObjectListUpdate, i18n("R Startup"));
-	fake_c->whenFinished(this, [this](RCommand *command) {
+	fake_c->whenFinished(this, [this](const RCommand *command) {
 		if (startup_phase2_error || command->failed()) backend_error.message.append(i18n("<p>\t-An unspecified error occurred that is not yet handled by RKWard. Likely RKWard will not function properly. Please check your setup.</p>\n"));
 		if (!backend_error.message.isEmpty()) {
 			backend_error.message.prepend(i18n("<p>There was a problem starting the R backend. The following error(s) occurred:</p>\n"));
@@ -751,7 +751,7 @@ GenericRRequestResult RInterface::processRCallRequest(const QString &call, const
 		backend_error.message.append(args.toString());
 
 		runStartupCommand(new RCommand(QStringLiteral("paste (R.version[c (\"major\", \"minor\")], collapse=\".\")\n"), RCommand::GetStringVector | RCommand::App | RCommand::Sync), in_chain,
-		                  [](RCommand *command) {
+		                  [](const RCommand *command) {
 			                  RK_ASSERT(command->getDataType() == RData::StringVector);
 			                  RK_ASSERT(command->getDataLength() == 1);
 			                  RKSessionVars::setRVersion(command->stringVector().value(0));
@@ -778,7 +778,7 @@ GenericRRequestResult RInterface::processRCallRequest(const QString &call, const
 
 		// find out about standard library locations
 		runStartupCommand(new RCommand(QStringLiteral("c(path.expand(Sys.getenv(\"R_LIBS_USER\")), .libPaths())\n"), RCommand::GetStringVector | RCommand::App | RCommand::Sync), in_chain,
-		                  [this](RCommand *command) {
+		                  [this](const RCommand *command) {
 			                  RK_ASSERT(command->getDataType() == RData::StringVector);
 			                  RKSettingsModuleRPackages::r_libs_user = command->stringVector().value(0);
 			                  RKSettingsModuleRPackages::defaultliblocs = command->stringVector().mid(1);
@@ -805,7 +805,7 @@ GenericRRequestResult RInterface::processRCallRequest(const QString &call, const
 
 		// start help server / determined help base url
 		runStartupCommand(new RCommand(QStringLiteral(".rk.getHelpBaseUrl ()\n"), RCommand::GetStringVector | RCommand::App | RCommand::Sync), in_chain,
-		                  [](RCommand *command) {
+		                  [](const RCommand *command) {
 			                  RK_ASSERT(command->getDataType() == RData::StringVector);
 			                  RK_ASSERT(command->getDataLength() == 1);
 			                  RKSettingsModuleR::help_base_url = command->stringVector().value(0);
diff --git a/rkward/rbackend/rkrinterface.h b/rkward/rbackend/rkrinterface.h
index 21b97fe28..d3fa0543d 100644
--- a/rkward/rbackend/rkrinterface.h
+++ b/rkward/rbackend/rkrinterface.h
@@ -219,7 +219,7 @@ private:
 
 void MyReceiver::someFunction () {
     RCommand *c = new RCommand("print (1+1)", RCommand::App);
-    c->whenFinished(this, [this](RCommand *command) {
+    c->whenFinished(this, [this](const RCommand *command) {
         if (command->successful ()) {
             qDebug ("Result was %s", command->output ()->utf8 ());
         }
@@ -359,7 +359,7 @@ These are special modifiers helpful when transferring data from R to RKWard (use
 
 \code
 auto command = new RCommand("myobject", RCommand::Sync | RCommand::GetIntVector);
-command->whenFinished(this, [this](RCommand *command) { this->syncDataFromR(command->getIntVector(); });
+command->whenFinished(this, [this](const RCommand *command) { this->syncDataFromR(command->getIntVector(); });
 RInterface::issueCommand(command);
 \endcode
 
diff --git a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
index 48eb77073..57df30f34 100644
--- a/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
+++ b/rkward/rbackend/rkwarddevice/rkgraphicsdevice_stubs.cpp
@@ -9,6 +9,8 @@ SPDX-License-Identifier: GPL-2.0-or-later
  * not a compilation unit of its own.
  * It is meant to be included, there. */
 
+// cppcheck-suppress-file [constParameterPointer, constParameterCallback] ; function signatures as specified by R
+
 #define RKD_BACKEND_CODE
 #include "../../debug.h"
 #include "../rkrbackend.h"
diff --git a/rkward/rkward.cpp b/rkward/rkward.cpp
index a4042a248..9b64264cf 100644
--- a/rkward/rkward.cpp
+++ b/rkward/rkward.cpp
@@ -758,12 +758,10 @@ void RKWardMainWindow::partChanged(KParts::Part *part) {
 	}
 	plugged_save_actions.clear();
 
-	if (w) {
-		QAction *a = w->fileSaveAction();
-		if (a) plugged_save_actions.append(a);
-		a = w->fileSaveAsAction();
-		if (a) plugged_save_actions.append(a);
-	}
+	QAction *a = w->fileSaveAction();
+	if (a) plugged_save_actions.append(a);
+	a = w->fileSaveAsAction();
+	if (a) plugged_save_actions.append(a);
 	for (int i = 0; i < plugged_save_actions.size(); ++i) {
 		save_any_action->insertAction(save_actions_plug_point, plugged_save_actions[i]);
 	}
diff --git a/rkward/robjectviewer.cpp b/rkward/robjectviewer.cpp
index a462a351d..3590c7e1a 100644
--- a/rkward/robjectviewer.cpp
+++ b/rkward/robjectviewer.cpp
@@ -211,7 +211,7 @@ void RObjectViewerWidget::update() {
 	control->setAutoCloseWhenCommandsDone(true);
 	control->setText(i18n("Fetching information"));
 	control->show(100);
-	command->whenFinished(this, [this](RCommand *command) {
+	command->whenFinished(this, [this](const RCommand *command) {
 		setText(command->fullOutput());
 		update_button->setEnabled(_object != nullptr);
 	});
diff --git a/rkward/scriptbackends/rkcomponentscripting.cpp b/rkward/scriptbackends/rkcomponentscripting.cpp
index 90916f931..0e93ba578 100644
--- a/rkward/scriptbackends/rkcomponentscripting.cpp
+++ b/rkward/scriptbackends/rkcomponentscripting.cpp
@@ -176,7 +176,7 @@ void RKComponentScriptingProxy::doRCommand2(const QString &command, const QStrin
 		if (old_c) RInterface::instance()->softCancelCommand(old_c);
 		latest_commands.insert(id, c);
 	}
-	c->whenFinished(this, [this, resolve, reject, id](RCommand *command) {
+	c->whenFinished(this, [this, resolve, reject, id](const RCommand *command) {
 		QJSValue res;
 		auto latest_c = id.isNull() ? nullptr : latest_commands.value(id);
 		if (latest_c && (latest_c != command)) {
@@ -269,7 +269,7 @@ void RKComponentScriptingProxy::setListValue(const QStringList &value, const QSt
 QVariantList RKComponentScriptingProxy::getObjectInfo(const QString &name) {
 	RK_TRACE(PHP);
 
-	RObject *object = RObjectList::getObjectList()->findObject(name);
+	const RObject *object = RObjectList::getObjectList()->findObject(name);
 	if (object) {
 		QVariantList ret;
 
@@ -302,7 +302,7 @@ QVariantList RKComponentScriptingProxy::getObjectInfo(const QString &name) {
 QString RKComponentScriptingProxy::getObjectParent(const QString &name) {
 	RK_TRACE(PHP);
 
-	RObject *object = RObjectList::getObjectList()->findObject(name);
+	const RObject *object = RObjectList::getObjectList()->findObject(name);
 	if (object) {
 		if (object->parentObject()) return (object->parentObject()->getFullName());
 	}
@@ -311,11 +311,11 @@ QString RKComponentScriptingProxy::getObjectParent(const QString &name) {
 
 QString RKComponentScriptingProxy::getObjectChild(const QString &name) {
 	RK_TRACE(PHP);
-	RObject *object = RObjectList::getObjectList()->findObject(name);
+	const RObject *object = RObjectList::getObjectList()->findObject(name);
 
 	if (object) {
 		if (object->isContainer()) {
-			RObject *child = static_cast<RContainerObject *>(object)->findChildByName(name);
+			const RObject *child = static_cast<const RContainerObject *>(object)->findChildByName(name);
 			if (child) return (child->getFullName());
 		}
 	}
diff --git a/rkward/scriptbackends/scriptbackend.cpp b/rkward/scriptbackends/scriptbackend.cpp
index c4cdf6229..992ec3c88 100644
--- a/rkward/scriptbackends/scriptbackend.cpp
+++ b/rkward/scriptbackends/scriptbackend.cpp
@@ -73,10 +73,9 @@ void ScriptBackend::invalidateCalls(int type) {
 void ScriptBackend::commandFinished(const QString &output) {
 	RK_TRACE(PHP);
 
-	QString _output = output;
-
 	if (current_type != Ignore) {
 		if (code_property) {
+			QString _output = output;
 			if (_output.isNull()) _output = QLatin1String(""); // must not be null for the code property!
 			bool add_header = add_headings && (!_output.isEmpty());
 			if (current_type == Preprocess) {
diff --git a/rkward/settings/rksettings.h b/rkward/settings/rksettings.h
index a77e8623e..f95f096b8 100644
--- a/rkward/settings/rksettings.h
+++ b/rkward/settings/rksettings.h
@@ -40,8 +40,8 @@ class RKSettings : public KPageDialog {
 	void pageChange(KPageWidgetItem *current, KPageWidgetItem *before);
 
   protected:
-	RKSettings(QWidget *parent = nullptr);
-	~RKSettings();
+	explicit RKSettings(QWidget *parent = nullptr);
+	~RKSettings() override;
 
 	void done(int result) override;
   private Q_SLOTS:
diff --git a/rkward/settings/rksettingsmoduler.cpp b/rkward/settings/rksettingsmoduler.cpp
index 0180c4d27..a075e56f9 100644
--- a/rkward/settings/rksettingsmoduler.cpp
+++ b/rkward/settings/rksettingsmoduler.cpp
@@ -334,7 +334,7 @@ class RKSettingsPageRPackages : public RKSettingsModuleWidget {
 		connect(cran_mirror_button, &QPushButton::clicked, this, [this, cran_mirror_input]() {
 			QString title = i18n("Select CRAN mirror");
 			RCommand *command = new RCommand(QStringLiteral("rk.select.CRAN.mirror()\n"), RCommand::App | RCommand::GetStringVector, title);
-			connect(command->notifier(), &RCommandNotifier::commandFinished, cran_mirror_input, [cran_mirror_input](RCommand *command) {
+			connect(command->notifier(), &RCommandNotifier::commandFinished, cran_mirror_input, [cran_mirror_input](const RCommand *command) {
 				if (command->succeeded()) {
 					RK_ASSERT(command->getDataLength() >= 1);
 					cran_mirror_input->setText(command->stringVector().value(0));
diff --git a/rkward/windows/katepluginintegration.cpp b/rkward/windows/katepluginintegration.cpp
index 838d08399..49483c153 100644
--- a/rkward/windows/katepluginintegration.cpp
+++ b/rkward/windows/katepluginintegration.cpp
@@ -277,7 +277,7 @@ KTextEditor::MainWindow *KatePluginIntegrationApp::activeMainWindow() {
 	return window->main;
 }
 
-RKCommandEditorWindow *findWindowForView(KTextEditor::View *view) {
+RKCommandEditorWindow *findWindowForView(const KTextEditor::View *view) {
 	RK_TRACE(APP);
 
 	QList<RKMDIWindow *> w = RKWorkplace::mainWorkplace()->getObjectList(RKMDIWindow::CommandEditorWindow);
@@ -290,7 +290,7 @@ RKCommandEditorWindow *findWindowForView(KTextEditor::View *view) {
 	return nullptr;
 }
 
-RKCommandEditorWindow *findWindowForDocument(KTextEditor::Document *document) {
+RKCommandEditorWindow *findWindowForDocument(const KTextEditor::Document *document) {
 	RK_TRACE(APP);
 
 	QList<RKMDIWindow *> w = RKWorkplace::mainWorkplace()->getObjectList(RKMDIWindow::CommandEditorWindow);
diff --git a/rkward/windows/rkcodecompletion.cpp b/rkward/windows/rkcodecompletion.cpp
index 422f4da9e..60236b04c 100644
--- a/rkward/windows/rkcodecompletion.cpp
+++ b/rkward/windows/rkcodecompletion.cpp
@@ -1042,7 +1042,7 @@ void RKDynamicCompletionsAddition::doUpdateFromR() {
 
 	status = Updating;
 	RCommand *command = new RCommand(QStringLiteral("rkward:::.rk.completions(%1, \"%2\")").arg(RObject::rQuote(current_fragment), current_mode), RCommand::Sync | RCommand::PriorityCommand | RCommand::GetStringVector);
-	command->whenFinished(this, [this](RCommand *command) {
+	command->whenFinished(this, [this](const RCommand *command) {
 		if (status == PendingUpdate) {
 			QTimer::singleShot(0, this, &RKDynamicCompletionsAddition::doUpdateFromR);
 			return;
diff --git a/rkward/windows/rkhelpsearchwindow.cpp b/rkward/windows/rkhelpsearchwindow.cpp
index d0c2b16f3..59f932a9d 100644
--- a/rkward/windows/rkhelpsearchwindow.cpp
+++ b/rkward/windows/rkhelpsearchwindow.cpp
@@ -152,7 +152,7 @@ void RKHelpSearchWindow::getFunctionHelp(const QString &function_name, const QSt
 	else command = u".rk.getHelp("_s + command + u')'; // we use .rk.getHelp() instead of plain help() to receive an error, if no help could be found
 
 	auto c = new RCommand(command, RCommand::App | RCommand::GetStringVector, i18n("Find HTML help for %1", function_name));
-	c->whenFinished(this, [this, function_name](RCommand *command) {
+	c->whenFinished(this, [this, function_name](const RCommand *command) {
 		if (command->failed()) {
 			KMessageBox::error(this,
 			                   i18n("No help found on '%1'. Maybe the corresponding package is not installed/loaded, or maybe you mistyped the command. Try "
@@ -196,7 +196,7 @@ void RKHelpSearchWindow::slotFindButtonClicked() {
 	            u", fields="_s + fields + u')';
 
 	auto c = new RCommand(s, RCommand::App | RCommand::Sync | RCommand::GetStringVector);
-	c->whenFinished(this, [this](RCommand *command) {
+	c->whenFinished(this, [this](const RCommand *command) {
 		QStringList res;
 		if (command->failed()) {
 			RK_ASSERT(false);
diff --git a/rkward/windows/rktoolwindowlist.cpp b/rkward/windows/rktoolwindowlist.cpp
index da513f5e0..e63b86193 100644
--- a/rkward/windows/rktoolwindowlist.cpp
+++ b/rkward/windows/rktoolwindowlist.cpp
@@ -44,7 +44,7 @@ RKMDIWindow *RKToolWindowList::findToolWindowById(const QString &id) {
 	return nullptr;
 }
 
-void RKToolWindowList::unregisterToolWindow(RKMDIWindow *window) {
+void RKToolWindowList::unregisterToolWindow(const RKMDIWindow *window) {
 	RK_TRACE(APP);
 
 	for (int i = 0; i < RKToolWindowListPrivate::registered_tool_windows.size(); ++i) {
@@ -57,7 +57,7 @@ void RKToolWindowList::unregisterToolWindow(RKMDIWindow *window) {
 	RK_ASSERT(false);
 }
 
-QString RKToolWindowList::idOfWindow(RKMDIWindow *window) {
+QString RKToolWindowList::idOfWindow(const RKMDIWindow *window) {
 	RK_TRACE(APP);
 
 	for (int i = 0; i < RKToolWindowListPrivate::registered_tool_windows.size(); ++i) {
diff --git a/rkward/windows/rktoolwindowlist.h b/rkward/windows/rktoolwindowlist.h
index 0a2db4645..96002eeef 100644
--- a/rkward/windows/rktoolwindowlist.h
+++ b/rkward/windows/rktoolwindowlist.h
@@ -32,9 +32,9 @@ struct ToolWindowRepresentation {
 };
 
 void registerToolWindow(RKMDIWindow *window, const QString &id, Placement default_placement, const QKeyCombination &default_shortcut);
-void unregisterToolWindow(RKMDIWindow *window);
+void unregisterToolWindow(const RKMDIWindow *window);
 RKMDIWindow *findToolWindowById(const QString &id);
-QString idOfWindow(RKMDIWindow *window);
+QString idOfWindow(const RKMDIWindow *window);
 QList<ToolWindowRepresentation> &registeredToolWindows();
 }; // namespace RKToolWindowList
 
diff --git a/rkward/windows/rkwindowcatcher.cpp b/rkward/windows/rkwindowcatcher.cpp
index 77870e786..be79a3ccd 100644
--- a/rkward/windows/rkwindowcatcher.cpp
+++ b/rkward/windows/rkwindowcatcher.cpp
@@ -781,22 +781,22 @@ RKCaughtX11WindowPart::RKCaughtX11WindowPart(RKCaughtX11Window *window) : KParts
 	window->actions_not_for_preview.append(action);
 	action->setText(i18n("Previous plot"));
 	action->setIcon(RKStandardIcons::getIcon(RKStandardIcons::ActionMoveLeft));
-	window->plot_prev_action = (QAction *)action;
+	window->plot_prev_action = action;
 	action = actionCollection()->addAction(QStringLiteral("plot_first"), window, &RKCaughtX11Window::firstPlot);
 	window->actions_not_for_preview.append(action);
 	action->setText(i18n("First plot"));
 	action->setIcon(RKStandardIcons::getIcon(RKStandardIcons::ActionMoveFirst));
-	window->plot_first_action = (QAction *)action;
+	window->plot_first_action = action;
 	action = actionCollection()->addAction(QStringLiteral("plot_next"), window, &RKCaughtX11Window::nextPlot);
 	window->actions_not_for_preview.append(action);
 	action->setText(i18n("Next plot"));
 	action->setIcon(RKStandardIcons::getIcon(RKStandardIcons::ActionMoveRight));
-	window->plot_next_action = (QAction *)action;
+	window->plot_next_action = action;
 	action = actionCollection()->addAction(QStringLiteral("plot_last"), window, &RKCaughtX11Window::lastPlot);
 	window->actions_not_for_preview.append(action);
 	action->setText(i18n("Last plot"));
 	action->setIcon(RKStandardIcons::getIcon(RKStandardIcons::ActionMoveLast));
-	window->plot_last_action = (QAction *)action;
+	window->plot_last_action = action;
 	action = window->plot_list_action = new KSelectAction(i18n("Go to plot"), window);
 	window->actions_not_for_preview.append(action);
 	window->plot_list_action->setToolBarMode(KSelectAction::MenuMode);
@@ -808,21 +808,21 @@ RKCaughtX11WindowPart::RKCaughtX11WindowPart(RKCaughtX11Window *window) : KParts
 	window->actions_not_for_preview.append(action);
 	action->setText(i18n("Append this plot"));
 	action->setIcon(RKStandardIcons::getIcon(RKStandardIcons::ActionSnapshot));
-	window->plot_force_append_action = (QAction *)action;
+	window->plot_force_append_action = action;
 	action = actionCollection()->addAction(QStringLiteral("plot_remove"), window, &RKCaughtX11Window::removeCurrentPlot);
 	window->actions_not_for_preview.append(action);
 	action->setText(i18n("Remove this plot"));
 	action->setIcon(RKStandardIcons::getIcon(RKStandardIcons::ActionRemovePlot));
-	window->plot_remove_action = (QAction *)action;
+	window->plot_remove_action = action;
 
 	action = actionCollection()->addAction(QStringLiteral("plot_clear_history"), window, &RKCaughtX11Window::clearHistory);
-	window->plot_clear_history_action = (QAction *)action;
+	window->plot_clear_history_action = action;
 	action->setText(i18n("Clear history"));
 	action->setIcon(RKStandardIcons::getIcon(RKStandardIcons::ActionClear));
 	window->actions_not_for_preview.append(action);
 
 	action = actionCollection()->addAction(QStringLiteral("plot_properties"), window, &RKCaughtX11Window::showPlotInfo);
-	window->plot_properties_action = (QAction *)action;
+	window->plot_properties_action = action;
 	action->setText(i18n("Plot properties"));
 	action->setIcon(RKStandardIcons::getIcon(RKStandardIcons::ActionDocumentInfo));
 	window->actions_not_for_preview.append(action);
diff --git a/rkward/windows/rkworkplaceview.cpp b/rkward/windows/rkworkplaceview.cpp
index 315db08a3..12ec3b247 100644
--- a/rkward/windows/rkworkplaceview.cpp
+++ b/rkward/windows/rkworkplaceview.cpp
@@ -531,7 +531,6 @@ void RKWorkplaceView::restoreLayout(const QString &desc) {
 		}
 		if (dl[i] == QStringLiteral("p")) {
 			RKWorkplaceViewPane *pane = createPane();
-			pane = createPane();
 			panes.append(pane);
 			parents.last()->addWidget(pane);
 		} else if (dl[i] == QStringLiteral("row")) {
diff --git a/rkward/windows/robjectbrowser.cpp b/rkward/windows/robjectbrowser.cpp
index bd503e580..6b6dbb33f 100644
--- a/rkward/windows/robjectbrowser.cpp
+++ b/rkward/windows/robjectbrowser.cpp
@@ -165,7 +165,7 @@ void RObjectBrowserInternal::updateButtonClicked() {
 void RObjectBrowserInternal::currentHelpContext(QString *symbol, QString *package) {
 	RK_TRACE(APP);
 
-	RObject *object = list_view->menuObject();
+	const RObject *object = list_view->menuObject();
 	if (!object) return;
 	*symbol = object->getShortName();
 	*package = object->isInGlobalEnv() ? QString() : object->toplevelEnvironment()->packageName();
@@ -180,7 +180,7 @@ void RObjectBrowserInternal::popupCopy() {
 	RK_TRACE(APP);
 
 	bool ok;
-	RObject *object = list_view->menuObject();
+	const RObject *object = list_view->menuObject();
 	QString suggested_name = RObjectList::getGlobalEnv()->validizeName(object->getShortName());
 	QString name = QInputDialog::getText(this, i18n("Copy object"), i18n("Enter the name to copy to"), QLineEdit::Normal, suggested_name, &ok);
 



More information about the rkward-tracker mailing list