[network/ruqola] src/widgets/room: Prepare to use menu in direct channel info
Laurent Montel <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit e7cfef9bdd5c51046a20acc799b23098408af082 by Laurent Montel.
Committed on 19/07/2026 at 11:23.
Pushed by mlaurent into branch 'master'.
Prepare to use menu in direct channel info
M +48 -39 src/widgets/room/usersinroommenu.cpp
M +2 -0 src/widgets/room/usersinroommenu.h
https://invent.kde.org/network/ruqola/-/commit/e7cfef9bdd5c51046a20acc799b23098408af082
diff --git a/src/widgets/room/usersinroommenu.cpp b/src/widgets/room/usersinroommenu.cpp
index 2aca1ba435..7b5ad452bd 100644
--- a/src/widgets/room/usersinroommenu.cpp
+++ b/src/widgets/room/usersinroommenu.cpp
@@ -110,40 +110,36 @@ void UsersInRoomMenu::slotRemoveFromRoom()
Ruqola::self()->rocketChatAccount()->kickUser(mRoom->roomId(), mUserId, mRoom->channelType());
}
-void UsersInRoomMenu::slotCustomContextMenuRequested(const QPoint &pos)
+QMenu *UsersInRoomMenu::createMenu()
{
auto account = Ruqola::self()->rocketChatAccount();
- const bool offline = account->offlineMode();
- if (offline) {
- return;
- }
const bool canManageUsersInRoom = mRoom->canChangeRoles();
const bool isAdministrator = account->ownUser().isAdministrator();
const QByteArray ownUserId = account->userId();
const bool isAdirectChannel = mRoom->channelType() == Room::RoomType::Direct;
const bool isNotMe = mUserId != ownUserId;
- QMenu menu(mParentWidget);
+ QMenu *menu = new QMenu(mParentWidget);
if (account->hasPermission(u"create-d"_s)) {
if (isNotMe && !isAdirectChannel) {
- auto conversationAction = new QAction(i18nc("@action", "Start Conversation"), &menu);
+ auto conversationAction = new QAction(i18nc("@action", "Start Conversation"), menu);
connect(conversationAction, &QAction::triggered, this, &UsersInRoomMenu::slotOpenConversation);
- menu.addAction(conversationAction);
+ menu->addAction(conversationAction);
}
}
- if (!menu.isEmpty()) {
- menu.addSeparator();
+ if (!menu->isEmpty()) {
+ menu->addSeparator();
}
- auto userInfoAction = new QAction(QIcon::fromTheme(u"documentinfo"_s), i18nc("@action", "User Info"), &menu);
+ auto userInfoAction = new QAction(QIcon::fromTheme(u"documentinfo"_s), i18nc("@action", "User Info"), menu);
connect(userInfoAction, &QAction::triggered, this, &UsersInRoomMenu::slotUserInfo);
- menu.addAction(userInfoAction);
+ menu->addAction(userInfoAction);
if ((isAdministrator || canManageUsersInRoom) && !isAdirectChannel) {
- if (!menu.isEmpty()) {
- menu.addSeparator();
+ if (!menu->isEmpty()) {
+ menu->addSeparator();
}
if (isAdministrator || mRoom->hasPermission(u"set-owner"_s)) {
const bool hasOwnerRole = mRoom->userHasOwnerRole(mUserId);
- auto removeAsOwner = new QAction(hasOwnerRole ? i18nc("@action", "Remove as Owner") : i18nc("@action", "Add as Owner"), &menu);
+ auto removeAsOwner = new QAction(hasOwnerRole ? i18nc("@action", "Remove as Owner") : i18nc("@action", "Add as Owner"), menu);
connect(removeAsOwner, &QAction::triggered, this, [this, hasOwnerRole, account]() {
account->changeRoles(mRoom->roomId(),
QString::fromLatin1(mUserId),
@@ -151,76 +147,89 @@ void UsersInRoomMenu::slotCustomContextMenuRequested(const QPoint &pos)
hasOwnerRole ? RocketChatAccount::RoleType::RemoveOwner : RocketChatAccount::RoleType::AddOwner);
});
- menu.addAction(removeAsOwner);
+ menu->addAction(removeAsOwner);
}
if (isAdministrator || mRoom->hasPermission(u"set-leader"_s)) {
const bool hasLeaderRole = mRoom->userHasLeaderRole(mUserId);
- auto removeAsLeader = new QAction(hasLeaderRole ? i18nc("@action", "Remove as Leader") : i18nc("@action", "Add as Leader"), &menu);
+ auto removeAsLeader = new QAction(hasLeaderRole ? i18nc("@action", "Remove as Leader") : i18nc("@action", "Add as Leader"), menu);
connect(removeAsLeader, &QAction::triggered, this, [this, hasLeaderRole, account]() {
account->changeRoles(mRoom->roomId(),
QString::fromLatin1(mUserId),
mRoom->channelType(),
hasLeaderRole ? RocketChatAccount::RoleType::RemoveLeader : RocketChatAccount::RoleType::AddLeader);
});
- menu.addAction(removeAsLeader);
+ menu->addAction(removeAsLeader);
}
if (isAdministrator || mRoom->hasPermission(u"set-moderator"_s)) {
const bool hasModeratorRole = mRoom->userHasModeratorRole(mUserId);
- auto removeAsModerator = new QAction(hasModeratorRole ? i18nc("@action", "Remove as Moderator") : i18nc("@action", "Add as Moderator"), &menu);
+ auto removeAsModerator = new QAction(hasModeratorRole ? i18nc("@action", "Remove as Moderator") : i18nc("@action", "Add as Moderator"), menu);
connect(removeAsModerator, &QAction::triggered, this, [this, hasModeratorRole, account]() {
account->changeRoles(mRoom->roomId(),
QString::fromLatin1(mUserId),
mRoom->channelType(),
hasModeratorRole ? RocketChatAccount::RoleType::RemoveModerator : RocketChatAccount::RoleType::AddModerator);
});
- menu.addAction(removeAsModerator);
+ menu->addAction(removeAsModerator);
}
if (isAdministrator || mRoom->hasPermission(u"remove-user"_s)) {
- menu.addSeparator();
- auto removeFromRoom = new QAction(i18nc("@action", "Remove from Room"), &menu);
+ menu->addSeparator();
+ auto removeFromRoom = new QAction(i18nc("@action", "Remove from Room"), menu);
connect(removeFromRoom, &QAction::triggered, this, &UsersInRoomMenu::slotRemoveFromRoom);
- menu.addAction(removeFromRoom);
+ menu->addAction(removeFromRoom);
}
}
if (isNotMe) {
- if (!menu.isEmpty()) {
- menu.addSeparator();
+ if (!menu->isEmpty()) {
+ menu->addSeparator();
}
if (isAdirectChannel) {
const bool userIsBlocked = mRoom->blocker();
- auto blockAction = new QAction(userIsBlocked ? i18nc("@action", "Unblock User") : i18nc("@action", "Block User"), &menu);
+ auto blockAction = new QAction(userIsBlocked ? i18nc("@action", "Unblock User") : i18nc("@action", "Block User"), menu);
connect(blockAction, &QAction::triggered, this, &UsersInRoomMenu::slotBlockUser);
- menu.addAction(blockAction);
+ menu->addAction(blockAction);
} else {
const bool userIsIgnored = mRoom->userIsIgnored(mUserId);
- auto ignoreAction = new QAction(userIsIgnored ? i18nc("@action", "Unignore") : i18nc("@action", "Ignore"), &menu);
+ auto ignoreAction = new QAction(userIsIgnored ? i18nc("@action", "Unignore") : i18nc("@action", "Ignore"), menu);
connect(ignoreAction, &QAction::triggered, this, &UsersInRoomMenu::slotIgnoreUser);
- menu.addAction(ignoreAction);
- menu.addSeparator();
+ menu->addAction(ignoreAction);
+ menu->addSeparator();
if (mRoom->hasPermission(u"mute-user"_s)) {
const bool userIsMuted = mRoom->userIsMuted(mUserName);
- auto muteAction = new QAction(userIsMuted ? i18nc("@action", "Unmute User") : i18nc("@action", "Mute User"), &menu);
+ auto muteAction = new QAction(userIsMuted ? i18nc("@action", "Unmute User") : i18nc("@action", "Mute User"), menu);
muteAction->setIcon(userIsMuted ? QIcon::fromTheme("mic-on"_L1) : QIcon::fromTheme("mic-off"_L1));
connect(muteAction, &QAction::triggered, this, &UsersInRoomMenu::slotMuteUser);
- menu.addAction(muteAction);
+ menu->addAction(muteAction);
}
}
- menu.addSeparator();
- auto reportUserAction = new QAction(QIcon::fromTheme("emblem-warning"_L1), i18nc("@action", "Report User"), &menu);
+ menu->addSeparator();
+ auto reportUserAction = new QAction(QIcon::fromTheme("emblem-warning"_L1), i18nc("@action", "Report User"), menu);
connect(reportUserAction, &QAction::triggered, this, &UsersInRoomMenu::slotReportUser);
- menu.addAction(reportUserAction);
+ menu->addAction(reportUserAction);
if (mRoom->hasPermission(u"ban-user"_s)) {
- menu.addSeparator();
- auto banUserFromRoomAction = new QAction(QIcon::fromTheme("im-ban-user"_L1), i18nc("@action", "Ban User From Room"), &menu);
+ menu->addSeparator();
+ auto banUserFromRoomAction = new QAction(QIcon::fromTheme("im-ban-user"_L1), i18nc("@action", "Ban User From Room"), menu);
connect(banUserFromRoomAction, &QAction::triggered, this, &UsersInRoomMenu::slotBanUserFromRoomAction);
- menu.addAction(banUserFromRoomAction);
+ menu->addAction(banUserFromRoomAction);
}
}
- menu.exec(mParentWidget->mapToGlobal(pos));
+ return menu;
+}
+
+void UsersInRoomMenu::slotCustomContextMenuRequested(const QPoint &pos)
+{
+ auto account = Ruqola::self()->rocketChatAccount();
+ const bool offline = account->offlineMode();
+ if (offline) {
+ return;
+ }
+ auto menu = createMenu();
+
+ menu->exec(mParentWidget->mapToGlobal(pos));
+ delete menu;
}
void UsersInRoomMenu::slotBanUserFromRoomAction()
diff --git a/src/widgets/room/usersinroommenu.h b/src/widgets/room/usersinroommenu.h
index 5f24dd3704..303c08a18b 100644
--- a/src/widgets/room/usersinroommenu.h
+++ b/src/widgets/room/usersinroommenu.h
@@ -24,6 +24,8 @@ public:
void setUserId(const QByteArray &userId);
void setParentWidget(QWidget *parentWidget);
+ [[nodiscard]] QMenu *createMenu();
+
private:
LIBRUQOLAWIDGETS_NO_EXPORT void slotOpenConversation();
LIBRUQOLAWIDGETS_NO_EXPORT void slotBlockUser();