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: {
const event = root.currentRoom.findEvent(root.currentEventId);
RoomManager.viewEventMenu(event, root.currentRoom)
RoomManager.viewEventMenu(root.QQC2.Overlay.overlay, event, root.currentRoom)
}
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) {
(delegateContextMenu.createObject(root, {
function onShowDelegateMenu(parent: QtObject, eventId: string, author, messageComponentType, plainText: string, richText: string, mimeType: string, progressInfo, isThread: bool, selectedText: string, hoveredLink: string) {
(delegateContextMenu.createObject(parent, {
author: author,
eventId: eventId,
plainText: plainText,

View File

@@ -282,14 +282,15 @@ void RoomManager::viewEventSource(const QString &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) {
qWarning() << "Tried to open event menu with empty event";
return;
}
Q_EMIT showDelegateMenu(event->id(),
Q_EMIT showDelegateMenu(parent,
event->id(),
room->qmlSafeMember(event->senderId()),
MessageComponentType::typeForEvent(*event),
EventHandler::plainBody(room, event),

View File

@@ -233,7 +233,8 @@ public:
/**
* @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.
@@ -306,7 +307,8 @@ Q_SIGNALS:
/**
* @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,
MessageComponentType::Type messageComponentType,
const QString &plainText,

View File

@@ -132,7 +132,7 @@ QQC2.Control {
acceptedDevices: PointerDevice.TouchScreen
onLongPressed: {
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
onLongPressed: {
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;
}
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
onLongPressed: {
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 {
@@ -108,7 +108,7 @@ TextEdit {
gesturePolicy: TapHandler.WithinBounds
onTapped: {
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 {
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 {
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);
}
}
}