Add null guards in AppletHost and TaskWidget

AppletHost: setPreloadFullRepresentation(true) does not guarantee
fullRepresentationItem() is non-null on return — the applet loads
asynchronously. Wire a single-shot connection to
fullRepresentationItemChanged to emit appletReady() when the item
arrives.

TaskWidget: operationDescription() can return null for an unknown
operation name; bail out rather than dereferencing it.
This commit is contained in:
Marco Allegretti 2026-04-18 19:04:40 +02:00
parent 76e027f630
commit 2059f14faf
3 changed files with 18 additions and 1 deletions

View file

@ -91,7 +91,18 @@ QQuickItem *AppletHost::fullRepresentationFor(const QString &pluginId)
item->setPreloadFullRepresentation(true);
return item->fullRepresentationItem();
auto *fullRepItem = item->fullRepresentationItem();
if (!fullRepItem) {
connect(
item,
&PlasmaQuick::AppletQuickItem::fullRepresentationItemChanged,
this,
[this, pluginId]() {
Q_EMIT appletReady(pluginId);
},
static_cast<Qt::ConnectionType>(Qt::AutoConnection | Qt::SingleShotConnection));
}
return fullRepItem;
}
#include "applethost.moc"

View file

@ -32,6 +32,9 @@ public:
Q_INVOKABLE QQuickItem *fullRepresentationFor(const QString &pluginId);
Q_SIGNALS:
void appletReady(const QString &pluginId);
private:
void ensureCorona();

View file

@ -50,6 +50,9 @@ Item {
var operationName = mouse.button === Qt.RightButton ? "ContextMenu" : "Activate";
var operation = model.service.operationDescription(operationName);
if (!operation) {
return;
}
operation.x = taskIcon.mapToGlobal(0, 0).x;
operation.y = taskIcon.mapToGlobal(0, taskIcon.height).y;
model.service.startOperationCall(operation);