From cdaa3cfeed419f87038d8cb61a98f7b65ba0df80 Mon Sep 17 00:00:00 2001 From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com> Date: Mon, 7 Jun 2021 13:33:47 -0400 Subject: [PATCH] conversations: selection refinement for refuseInvitation and blockConversation 1. Decline invites now auto-select the next one and de-select the conversion when there are no more invites 2. Block conversations behaves the same as before Gitlab: #402 Change-Id: Ibd3385e40cb2329d58ea90aa3347dfa4b66a4496 --- src/conversationsadapter.cpp | 21 ++---------------- src/conversationsadapter.h | 2 -- src/mainview/MainView.qml | 4 ---- src/messagesadapter.cpp | 2 -- src/messagesadapter.h | 1 - src/selectablelistproxymodel.cpp | 37 +++++++++++++++++--------------- src/selectablelistproxymodel.h | 2 +- 7 files changed, 23 insertions(+), 46 deletions(-) diff --git a/src/conversationsadapter.cpp b/src/conversationsadapter.cpp index 81d1b6d6d..3ca1ace7c 100644 --- a/src/conversationsadapter.cpp +++ b/src/conversationsadapter.cpp @@ -56,6 +56,7 @@ ConversationsAdapter::ConversationsAdapter(SystemTray* systemTray, // deselected convModel_->deselect(); searchModel_->deselect(); + Q_EMIT navigateToWelcomePageRequested(); } else { // selected const auto& convInfo = lrcInstance_->getConversationFromConvUid(convId); @@ -97,6 +98,7 @@ ConversationsAdapter::ConversationsAdapter(SystemTray* systemTray, auto row = lrcInstance_->indexOf(convInfo.uid); const auto index = convSrcModel_->index(row, 0); Q_EMIT convSrcModel_->dataChanged(index, index); + lrcInstance_->set_selectedConvUid(); }); #ifdef Q_OS_LINUX @@ -174,13 +176,6 @@ ConversationsAdapter::safeInit() set_currentTypeFilter(lrcInstance_->getCurrentAccountInfo().profileInfo.type); } -void -ConversationsAdapter::backToWelcomePage() -{ - lrcInstance_->deselectConversation(); - Q_EMIT navigateToWelcomePageRequested(); -} - void ConversationsAdapter::onCurrentAccountIdChanged() { @@ -315,12 +310,6 @@ ConversationsAdapter::onNewConversation(const QString& convUid) updateConversationForNewContact(convUid); } -void -ConversationsAdapter::onConversationRemoved(const QString&) -{ - backToWelcomePage(); -} - void ConversationsAdapter::onConversationCleared(const QString& convUid) { @@ -467,12 +456,6 @@ ConversationsAdapter::connectConversationModel(bool updateFilter) &ConversationsAdapter::onNewConversation, Qt::UniqueConnection); - QObject::connect(currentConversationModel, - &lrc::api::ConversationModel::conversationRemoved, - this, - &ConversationsAdapter::onConversationRemoved, - Qt::UniqueConnection); - QObject::connect(currentConversationModel, &lrc::api::ConversationModel::conversationCleared, this, diff --git a/src/conversationsadapter.h b/src/conversationsadapter.h index a3ed887bb..1c3c2a6e1 100644 --- a/src/conversationsadapter.h +++ b/src/conversationsadapter.h @@ -80,7 +80,6 @@ private Q_SLOTS: void onConversationUpdated(const QString&); void onFilterChanged(); void onNewConversation(const QString&); - void onConversationRemoved(const QString&); void onConversationCleared(const QString&); void onSearchStatusChanged(const QString&); void onSearchResultUpdated(); @@ -88,7 +87,6 @@ private Q_SLOTS: void updateConversationFilterData(); private: - void backToWelcomePage(); void updateConversationForNewContact(const QString& convUid); SmartListModel* conversationSmartListModel_; diff --git a/src/mainview/MainView.qml b/src/mainview/MainView.qml index 263d41050..48c7e1147 100644 --- a/src/mainview/MainView.qml +++ b/src/mainview/MainView.qml @@ -419,10 +419,6 @@ Rectangle { Connections { target: MessagesAdapter - function onNavigateToWelcomePageRequested() { - backToMainView() - } - function onInvitationAccepted() { mainViewSidePanel.selectTab(SidePanelTabBar.Conversations) } diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp index 0adaff78d..58c4f8936 100644 --- a/src/messagesadapter.cpp +++ b/src/messagesadapter.cpp @@ -748,7 +748,6 @@ MessagesAdapter::refuseInvitation(const QString& convUid) setInvitation(false); if (convUid == currentConvUid_) currentConvUid_.clear(); - Q_EMIT navigateToWelcomePageRequested(); } void @@ -760,7 +759,6 @@ MessagesAdapter::blockConversation(const QString& convUid) if (convUid == currentConvUid_) currentConvUid_.clear(); Q_EMIT contactBanned(); - Q_EMIT navigateToWelcomePageRequested(); } void diff --git a/src/messagesadapter.h b/src/messagesadapter.h index 3860832d0..43d767657 100644 --- a/src/messagesadapter.h +++ b/src/messagesadapter.h @@ -101,7 +101,6 @@ protected: Q_SIGNALS: void contactBanned(); - void navigateToWelcomePageRequested(); void invitationAccepted(); void newInteraction(int type); diff --git a/src/selectablelistproxymodel.cpp b/src/selectablelistproxymodel.cpp index b0bfab1db..5c7f0199a 100644 --- a/src/selectablelistproxymodel.cpp +++ b/src/selectablelistproxymodel.cpp @@ -30,21 +30,24 @@ void SelectableListProxyModel::bindSourceModel(QAbstractListModel* model) { setSourceModel(model); - connect(sourceModel(), - &QAbstractListModel::dataChanged, - this, - &SelectableListProxyModel::updateSelection, - Qt::UniqueConnection); - connect(model, - &QAbstractListModel::rowsInserted, - this, - &SelectableListProxyModel::updateSelection, - Qt::UniqueConnection); - connect(model, - &QAbstractListModel::rowsRemoved, - this, - &SelectableListProxyModel::updateSelection, - Qt::UniqueConnection); + connect( + sourceModel(), + &QAbstractListModel::dataChanged, + this, + [this] { updateSelection(); }, + Qt::UniqueConnection); + connect( + model, + &QAbstractListModel::rowsInserted, + this, + [this] { updateSelection(); }, + Qt::UniqueConnection); + connect( + model, + &QAbstractListModel::rowsRemoved, + this, + [this] { updateSelection(true); }, + Qt::UniqueConnection); connect(sourceModel(), &QAbstractListModel::modelReset, this, @@ -106,7 +109,7 @@ SelectableListProxyModel::updateContactAvatarUid(const QString& contactUri) } void -SelectableListProxyModel::updateSelection() +SelectableListProxyModel::updateSelection(bool rowsRemoved) { // if there has been no valid selection made, there is // nothing to update @@ -117,7 +120,7 @@ SelectableListProxyModel::updateSelection() auto filteredIndex = mapFromSource(selectedSourceIndex_); // if the source model is empty, invalidate the selection - if (sourceModel()->rowCount() == 0) { + if (rowCount() == 0 && rowsRemoved) { set_currentFilteredRow(-1); Q_EMIT validSelectionChanged(); return; diff --git a/src/selectablelistproxymodel.h b/src/selectablelistproxymodel.h index af5b529fa..ae252bf11 100644 --- a/src/selectablelistproxymodel.h +++ b/src/selectablelistproxymodel.h @@ -47,7 +47,7 @@ public: Q_INVOKABLE void updateContactAvatarUid(const QString& contactUri); public Q_SLOTS: - void updateSelection(); + void updateSelection(bool rowsRemoved = false); Q_SIGNALS: void validSelectionChanged(); -- GitLab