diff --git a/src/timeline/EventDelegateChooser.cpp b/src/timeline/EventDelegateChooser.cpp
index 5e6ee37e..7fec38dd 100644
--- a/src/timeline/EventDelegateChooser.cpp
+++ b/src/timeline/EventDelegateChooser.cpp
@@ -84,7 +84,8 @@ void
EventDelegateChooser::componentComplete()
{
QQuickItem::componentComplete();
- // eventIncubator.reset(eventIndex);
+ eventIncubator.reset(eventId_);
+ replyIncubator.reset(replyId);
// eventIncubator.forceCompletion();
}
@@ -226,6 +227,9 @@ EventDelegateChooser::DelegateIncubator::reset(QString id)
for (const auto choice : qAsConst(chooser.choices_)) {
const auto &choiceValue = choice->roleValues();
if (choiceValue.contains(role) || choiceValue.empty()) {
+ nhlog::ui()->debug(
+ "Instantiating type: {}, c {}", (int)role, choiceValue.contains(role));
+
if (auto child = qobject_cast<QQuickItem *>(object())) {
child->setParentItem(nullptr);
}
diff --git a/src/timeline/EventDelegateChooser.h b/src/timeline/EventDelegateChooser.h
index b627b383..1cd2d65a 100644
--- a/src/timeline/EventDelegateChooser.h
+++ b/src/timeline/EventDelegateChooser.h
@@ -55,9 +55,9 @@ public:
Q_PROPERTY(QQmlListProperty<EventDelegateChoice> choices READ choices CONSTANT FINAL)
Q_PROPERTY(QQuickItem *main READ main NOTIFY mainChanged FINAL)
Q_PROPERTY(QQuickItem *reply READ reply NOTIFY replyChanged FINAL)
- Q_PROPERTY(TimelineModel *room READ room WRITE setRoom NOTIFY roomChanged REQUIRED FINAL)
Q_PROPERTY(QString eventId READ eventId WRITE setEventId NOTIFY eventIdChanged REQUIRED FINAL)
Q_PROPERTY(QString replyTo READ replyTo WRITE setReplyTo NOTIFY replyToChanged REQUIRED FINAL)
+ Q_PROPERTY(TimelineModel *room READ room WRITE setRoom NOTIFY roomChanged REQUIRED FINAL)
QQmlListProperty<EventDelegateChoice> choices();
@@ -74,9 +74,12 @@ public:
{
if (m != room_) {
room_ = m;
- eventIncubator.reset(eventId_);
- replyIncubator.reset(replyId);
emit roomChanged();
+
+ if (isComponentComplete()) {
+ eventIncubator.reset(eventId_);
+ replyIncubator.reset(replyId);
+ }
}
}
[[nodiscard]] TimelineModel *room() { return room_; }
@@ -85,12 +88,18 @@ public:
{
eventId_ = idx;
emit eventIdChanged();
+
+ if (isComponentComplete())
+ eventIncubator.reset(eventId_);
}
[[nodiscard]] QString eventId() const { return eventId_; }
void setReplyTo(QString id)
{
replyId = id;
emit replyToChanged();
+
+ if (isComponentComplete())
+ replyIncubator.reset(replyId);
}
[[nodiscard]] QString replyTo() const { return replyId; }
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 066d8b01..66f7d5b8 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -561,6 +561,7 @@ TimelineModel::roleNames() const
{ReplyTo, "replyTo"},
{ThreadId, "threadId"},
{Reactions, "reactions"},
+ {Room, "room"},
{RoomId, "roomId"},
{RoomName, "roomName"},
{RoomTopic, "roomTopic"},
@@ -899,6 +900,8 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r
auto id = relations(event).replaces().value_or(event_id(event));
return QVariant::fromValue(events.reactions(id));
}
+ case Room:
+ return QVariant::fromValue(this);
case RoomId:
return QVariant(room_id_);
case RoomName:
diff --git a/src/timeline/TimelineModel.h b/src/timeline/TimelineModel.h
index b81fc209..2b22ad61 100644
--- a/src/timeline/TimelineModel.h
+++ b/src/timeline/TimelineModel.h
@@ -267,6 +267,7 @@ public:
ReplyTo,
ThreadId,
Reactions,
+ Room,
RoomId,
RoomName,
RoomTopic,
|