Fix regressions from RoomPage refactoring

Fixes 581

BUG: 469427
BUG: 469425
This commit is contained in:
Tobias Fella
2023-05-07 09:36:11 +02:00
parent a12a44b722
commit bfdca9ca9e
5 changed files with 60 additions and 44 deletions

View File

@@ -460,7 +460,6 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const
const auto row = idx.row(); const auto row = idx.row();
if (!m_currentRoom || row < 0 || row >= int(m_currentRoom->pendingEvents().size()) + m_currentRoom->timelineSize()) { if (!m_currentRoom || row < 0 || row >= int(m_currentRoom->pendingEvents().size()) + m_currentRoom->timelineSize()) {
qCWarning(MessageEvent) << "Accessing index out of bounds";
return {}; return {};
}; };

View File

@@ -5,6 +5,7 @@
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15 as QQC2 import QtQuick.Controls 2.15 as QQC2
import QtQuick.Window 2.15
import org.kde.kirigami 2.18 as Kirigami import org.kde.kirigami 2.18 as Kirigami
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -483,4 +484,12 @@ QQC2.Control {
id: locationChooserComponent id: locationChooserComponent
LocationChooser {} LocationChooser {}
} }
Component {
id: openFileDialog
OpenFileDialog {
parentWindow: Window.window
}
}
} }

View File

@@ -348,4 +348,34 @@ ColumnLayout {
let yoff = Math.round(y - ListView.view.contentY); let yoff = Math.round(y - ListView.view.contentY);
return (yoff + height > 0 && yoff < ListView.view.height) return (yoff + height > 0 && yoff < ListView.view.height)
} }
/// Open message context dialog for file and videos
function openFileContext(event, file) {
const contextMenu = fileDelegateContextMenu.createObject(root, {
author: event.author,
message: event.plainText,
eventId: event.eventId,
source: event.source,
file: file,
mimeType: event.mimeType,
progressInfo: event.progressInfo,
plainMessage: event.plainText,
});
contextMenu.open();
}
/// Open context menu for normal message
function openMessageContext(event, selectedText, plainMessage) {
const contextMenu = messageDelegateContextMenu.createObject(root, {
selectedText: selectedText,
author: event.author,
message: event.plainText,
eventId: event.eventId,
formattedBody: event.formattedBody,
source: event.source,
eventType: event.eventType,
plainMessage: event.plainText,
});
contextMenu.open();
}
} }

View File

@@ -19,6 +19,8 @@ QQC2.ScrollView {
readonly property bool isLoaded: root.width * root.height > 10 readonly property bool isLoaded: root.width * root.height > 10
readonly property bool atYEnd: messageListView.atYEnd readonly property bool atYEnd: messageListView.atYEnd
signal focusChatBox()
ListView { ListView {
id: messageListView id: messageListView
readonly property int largestVisibleIndex: count > 0 ? indexAt(contentX + (width / 2), contentY + height - 1) : -1 readonly property int largestVisibleIndex: count > 0 ? indexAt(contentX + (width / 2), contentY + height - 1) : -1
@@ -33,6 +35,7 @@ QQC2.ScrollView {
verticalLayoutDirection: ListView.BottomToTop verticalLayoutDirection: ListView.BottomToTop
highlightMoveDuration: 500 highlightMoveDuration: 500
clip: true clip: true
bottomMargin: Kirigami.Units.largeSpacing
model: !isLoaded ? undefined : collapseStateProxyModel model: !isLoaded ? undefined : collapseStateProxyModel
@@ -186,7 +189,7 @@ QQC2.ScrollView {
action: Kirigami.Action { action: Kirigami.Action {
onTriggered: { onTriggered: {
if (!Kirigami.Settings.isMobile) { if (!Kirigami.Settings.isMobile) {
chatBox.chatBar.forceActiveFocus(); root.focusChatBox();
} }
messageListView.goToEvent(root.currentRoom.readMarkerEventId) messageListView.goToEvent(root.currentRoom.readMarkerEventId)
} }
@@ -298,7 +301,7 @@ QQC2.ScrollView {
id: hoverActions id: hoverActions
property var event: null property var event: null
property bool userMsg: event && event.author.id === Controller.activeConnection.localUserId property bool userMsg: event && event.author.id === Controller.activeConnection.localUserId
property bool showEdit: event && (userMsg && (event.eventType === MessageEventModel.Emote || event.eventType === MessageEventModel.Message)) property bool showEdit: event && userMsg && (event.delegateType === MessageEventModel.Emote || event.delegateType === MessageEventModel.Message)
property var delegate: null property var delegate: null
property var bubble: null property var bubble: null
property var hovered: bubble && bubble.hovered property var hovered: bubble && bubble.hovered
@@ -363,7 +366,7 @@ QQC2.ScrollView {
onChosen: { onChosen: {
root.currentRoom.toggleReaction(hoverActions.event.eventId, emoji); root.currentRoom.toggleReaction(hoverActions.event.eventId, emoji);
if (!Kirigami.Settings.isMobile) { if (!Kirigami.Settings.isMobile) {
chatBox.chatBar.forceActiveFocus(); root.focusChatBox();
} }
} }
} }
@@ -387,18 +390,14 @@ QQC2.ScrollView {
onClicked: { onClicked: {
root.currentRoom.chatBoxReplyId = hoverActions.event.eventId; root.currentRoom.chatBoxReplyId = hoverActions.event.eventId;
root.currentRoom.chatBoxEditId = ""; root.currentRoom.chatBoxEditId = "";
chatBox.chatBar.forceActiveFocus(); root.focusChatBox();
} }
} }
} }
} }
// hover actions on a delegate, activated in TimelineContainer.qml onContentYChanged: {
Connections { if (hoverActions.updateFunction) {
target: root.parent.flickable ?? null
enabled : hoverActions.visible
function onContentYChanged() {
hoverActions.updateFunction(); hoverActions.updateFunction();
} }
} }
@@ -478,7 +477,7 @@ QQC2.ScrollView {
} }
function eventToIndex(eventID) { function eventToIndex(eventID) {
const index = messageEventModel.eventIDToIndex(eventID) const index = messageEventModel.eventIdToRow(eventID)
if (index === -1) if (index === -1)
return -1 return -1
return sortedMessageEventModel.mapFromSource(messageEventModel.index(index, 0)).row return sortedMessageEventModel.mapFromSource(messageEventModel.index(index, 0)).row
@@ -513,36 +512,6 @@ QQC2.ScrollView {
root.currentRoom.markAllMessagesAsRead() root.currentRoom.markAllMessagesAsRead()
} }
} }
/// Open message context dialog for file and videos
function openFileContext(event, file) {
const contextMenu = fileDelegateContextMenu.createObject(root, {
author: event.author,
message: event.message,
eventId: event.eventId,
source: event.source,
file: file,
mimeType: event.mimeType,
progressInfo: event.progressInfo,
plainMessage: event.message,
});
contextMenu.open();
}
/// Open context menu for normal message
function openMessageContext(event, selectedText, plainMessage) {
const contextMenu = messageDelegateContextMenu.createObject(root, {
selectedText: selectedText,
author: event.author,
message: event.display,
eventId: event.eventId,
formattedBody: event.formattedBody,
source: event.source,
eventType: event.eventType,
plainMessage: plainMessage,
});
contextMenu.open();
}
} }
function goToLastMessage() { function goToLastMessage() {
@@ -562,4 +531,8 @@ QQC2.ScrollView {
messageListView.contentY = Math.min(newContentY, maxContentY); messageListView.contentY = Math.min(newContentY, maxContentY);
messageListView.returnToBounds(); messageListView.returnToBounds();
} }
function positionViewAtBeginning() {
messageListView.positionViewAtBeginning()
}
} }

View File

@@ -37,8 +37,8 @@ Kirigami.Page {
applicationWindow().hoverLinkIndicator.text = ""; applicationWindow().hoverLinkIndicator.text = "";
timelineViewLoader.item.positionViewAtBeginning(); timelineViewLoader.item.positionViewAtBeginning();
hasScrolledUpBefore = false; hasScrolledUpBefore = false;
if (!Kirigami.Settings.isMobile) { if (!Kirigami.Settings.isMobile && chatBoxLoader.item) {
chatBox.chatBar.forceActiveFocus(); chatBoxLoader.item.chatBar.forceActiveFocus();
} }
} }
@@ -59,6 +59,11 @@ Kirigami.Page {
sourceComponent: TimelineView { sourceComponent: TimelineView {
id: timelineView id: timelineView
currentRoom: root.currentRoom currentRoom: root.currentRoom
onFocusChatBox: {
if (chatBoxLoader.item) {
chatBoxLoader.item.chatBar.forceActiveFocus()
}
}
} }
} }