Fix opening message menus for popup windows

We were previously assuming that we always want to parent these menus to
RoomPage, but that only exists on the main window. If you tried to open
the menu for say - the search window - then it would confusingly still
open on the main menu.

Thankfully the way to fix this is simple, by passing a parent QtObject
around.
This commit is contained in:
Joshua Goins
2026-01-11 17:39:27 -05:00
parent 5b6e5a25e5
commit fea0cfbf4e
10 changed files with 17 additions and 14 deletions

View File

@@ -156,7 +156,7 @@ Components.AlbumMaximizeComponent {
onItemRightClicked: { onItemRightClicked: {
const event = root.currentRoom.findEvent(root.currentEventId); const event = root.currentRoom.findEvent(root.currentEventId);
RoomManager.viewEventMenu(event, root.currentRoom) RoomManager.viewEventMenu(root.QQC2.Overlay.overlay, event, root.currentRoom)
} }
onSaveItem: { onSaveItem: {

View File

@@ -349,8 +349,8 @@ Kirigami.Page {
}); });
} }
function onShowDelegateMenu(eventId: string, author, messageComponentType, plainText: string, richText: string, mimeType: string, progressInfo, isThread: bool, selectedText: string, hoveredLink: string) { function onShowDelegateMenu(parent: QtObject, eventId: string, author, messageComponentType, plainText: string, richText: string, mimeType: string, progressInfo, isThread: bool, selectedText: string, hoveredLink: string) {
(delegateContextMenu.createObject(root, { (delegateContextMenu.createObject(parent, {
author: author, author: author,
eventId: eventId, eventId: eventId,
plainText: plainText, plainText: plainText,

View File

@@ -282,14 +282,15 @@ void RoomManager::viewEventSource(const QString &eventId)
Q_EMIT showEventSource(eventId); Q_EMIT showEventSource(eventId);
} }
void RoomManager::viewEventMenu(const RoomEvent *event, NeoChatRoom *room, const QString &selectedText, const QString &hoveredLink) void RoomManager::viewEventMenu(QObject *parent, const RoomEvent *event, NeoChatRoom *room, const QString &selectedText, const QString &hoveredLink)
{ {
if (!event) { if (!event) {
qWarning() << "Tried to open event menu with empty event"; qWarning() << "Tried to open event menu with empty event";
return; return;
} }
Q_EMIT showDelegateMenu(event->id(), Q_EMIT showDelegateMenu(parent,
event->id(),
room->qmlSafeMember(event->senderId()), room->qmlSafeMember(event->senderId()),
MessageComponentType::typeForEvent(*event), MessageComponentType::typeForEvent(*event),
EventHandler::plainBody(room, event), EventHandler::plainBody(room, event),

View File

@@ -233,7 +233,8 @@ public:
/** /**
* @brief Show a context menu for the given event. * @brief Show a context menu for the given event.
*/ */
Q_INVOKABLE void viewEventMenu(const RoomEvent *event, NeoChatRoom *room, const QString &selectedText = {}, const QString &hoveredLink = {}); Q_INVOKABLE void
viewEventMenu(QObject *parent, const RoomEvent *event, NeoChatRoom *room, const QString &selectedText = {}, const QString &hoveredLink = {});
/** /**
* @brief Set a URL to be loaded as the initial room. * @brief Set a URL to be loaded as the initial room.
@@ -306,7 +307,8 @@ Q_SIGNALS:
/** /**
* @brief Request to show a menu for the given event. * @brief Request to show a menu for the given event.
*/ */
void showDelegateMenu(const QString &eventId, void showDelegateMenu(QObject *parent,
const QString &eventId,
const NeochatRoomMember *author, const NeochatRoomMember *author,
MessageComponentType::Type messageComponentType, MessageComponentType::Type messageComponentType,
const QString &plainText, const QString &plainText,

View File

@@ -132,7 +132,7 @@ QQC2.Control {
acceptedDevices: PointerDevice.TouchScreen acceptedDevices: PointerDevice.TouchScreen
onLongPressed: { onLongPressed: {
const event = root.Message.room.findEvent(root.eventId); const event = root.Message.room.findEvent(root.eventId);
RoomManager.viewEventMenu(event, root.Message.room, root.Message.selectedText, root.Message.hoveredLink); RoomManager.viewEventMenu(root.QQC2.Overlay.overlay, event, root.Message.room, root.Message.selectedText, root.Message.hoveredLink);
} }
} }

View File

@@ -68,7 +68,7 @@ QQC2.Control {
acceptedButtons: Qt.LeftButton acceptedButtons: Qt.LeftButton
onLongPressed: { onLongPressed: {
const event = root.Message.room.findEvent(root.eventId); const event = root.Message.room.findEvent(root.eventId);
RoomManager.viewEventMenu(event, root.Message.room, root.Message.selectedText, root.Message.hoveredLink); RoomManager.viewEventMenu(root.QQC2.Overlay.overlay, event, root.Message.room, root.Message.selectedText, root.Message.hoveredLink);
} }
} }
} }

View File

@@ -91,7 +91,7 @@ RowLayout {
return; return;
} }
const event = root.Message.room.findEvent(root.modelData.eventId); const event = root.Message.room.findEvent(root.modelData.eventId);
RoomManager.viewEventMenu(event, root.Message.room, root.author, "", ""); RoomManager.viewEventMenu(root.QQC2.Overlay.overlay, event, root.Message.room, root.author, "", "");
} }
} }
} }

View File

@@ -99,7 +99,7 @@ TextEdit {
acceptedDevices: PointerDevice.TouchScreen acceptedDevices: PointerDevice.TouchScreen
onLongPressed: { onLongPressed: {
const event = root.Message.room.findEvent(root.eventId); const event = root.Message.room.findEvent(root.eventId);
RoomManager.viewEventMenu(event, root.Message.room, root.Message.selectedText, root.Message.hoveredLink); RoomManager.viewEventMenu(root.QQC2.Overlay.overlay, event, root.Message.room, root.Message.selectedText, root.Message.hoveredLink);
} }
} }
TapHandler { TapHandler {
@@ -108,7 +108,7 @@ TextEdit {
gesturePolicy: TapHandler.WithinBounds gesturePolicy: TapHandler.WithinBounds
onTapped: { onTapped: {
const event = root.Message.room.findEvent(root.eventId); const event = root.Message.room.findEvent(root.eventId);
RoomManager.viewEventMenu(event, root.Message.room, root.Message.selectedText, root.Message.hoveredLink); RoomManager.viewEventMenu(root.QQC2.Overlay.overlay, event, root.Message.room, root.Message.selectedText, root.Message.hoveredLink);
} }
} }
} }

View File

@@ -95,7 +95,7 @@ TimelineDelegate {
function showMessageMenu(): void { function showMessageMenu(): void {
let event = root.Message.room.findEvent(root.eventId); let event = root.Message.room.findEvent(root.eventId);
RoomManager.viewEventMenu(event, root.room, ""); RoomManager.viewEventMenu(root.QQC2.Overlay.overlay, event, root.room, "");
} }
} }
} }

View File

@@ -234,7 +234,7 @@ MessageDelegateBase {
function showMessageMenu(): void { function showMessageMenu(): void {
let event = root.ListView.view.model.findEvent(root.eventId); let event = root.ListView.view.model.findEvent(root.eventId);
RoomManager.viewEventMenu(event, root.room, root.Message.selectedText, root.Message.hoveredLink); RoomManager.viewEventMenu(root.QQC2.Overlay.overlay, event, root.room, root.Message.selectedText, root.Message.hoveredLink);
} }
} }
} }