Compare commits
1 Commits
v25.12.0
...
work/tobia
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43e5adee7e |
@@ -14,6 +14,7 @@ Dependencies:
|
||||
'frameworks/kquickcharts': '@latest-kf6'
|
||||
'frameworks/knotifications': '@latest-kf6'
|
||||
'frameworks/kcolorscheme': '@latest-kf6'
|
||||
'frameworks/kiconthemes': '@latest-kf6'
|
||||
'libraries/kquickimageeditor': '@latest-kf6'
|
||||
'frameworks/sonnet': '@latest-kf6'
|
||||
'frameworks/prison': '@latest-kf6'
|
||||
@@ -28,6 +29,7 @@ Dependencies:
|
||||
'frameworks/kio': '@latest-kf6'
|
||||
'frameworks/kwindowsystem': '@latest-kf6'
|
||||
'frameworks/kstatusnotifieritem': '@latest-kf6'
|
||||
'frameworks/kcrash': '@latest-kf6'
|
||||
- 'on': ['Linux', 'FreeBSD']
|
||||
'require':
|
||||
'frameworks/kdbusaddons': '@latest-kf6'
|
||||
|
||||
@@ -8,8 +8,8 @@ cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
# KDE Applications version, managed by release script.
|
||||
set(RELEASE_SERVICE_VERSION_MAJOR "25")
|
||||
set(RELEASE_SERVICE_VERSION_MINOR "12")
|
||||
set(RELEASE_SERVICE_VERSION_MICRO "0")
|
||||
set(RELEASE_SERVICE_VERSION_MINOR "11")
|
||||
set(RELEASE_SERVICE_VERSION_MICRO "70")
|
||||
set(RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
|
||||
|
||||
project(NeoChat VERSION ${RELEASE_SERVICE_VERSION})
|
||||
@@ -69,7 +69,7 @@ if (QT_KNOWN_POLICY_QTP0004)
|
||||
qt_policy(SET QTP0004 NEW)
|
||||
endif ()
|
||||
|
||||
find_package(KF6 ${KF_MIN_VERSION} COMPONENTS Kirigami I18n Notifications Config CoreAddons Sonnet ItemModels ColorScheme)
|
||||
find_package(KF6 ${KF_MIN_VERSION} COMPONENTS Kirigami I18n Notifications Config CoreAddons Sonnet ItemModels IconThemes ColorScheme)
|
||||
set_package_properties(KF6 PROPERTIES
|
||||
TYPE REQUIRED
|
||||
PURPOSE "Basic application components"
|
||||
@@ -92,7 +92,7 @@ if(ANDROID)
|
||||
)
|
||||
else()
|
||||
find_package(Qt6 ${QT_MIN_VERSION} COMPONENTS Widgets)
|
||||
find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS QQC2DesktopStyle KIO WindowSystem StatusNotifierItem)
|
||||
find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS QQC2DesktopStyle KIO WindowSystem StatusNotifierItem Crash)
|
||||
find_package(KF6SyntaxHighlighting ${KF_MIN_VERSION} REQUIRED)
|
||||
set_package_properties(KF6QQC2DesktopStyle PROPERTIES
|
||||
TYPE RUNTIME
|
||||
|
||||
@@ -320,7 +320,7 @@
|
||||
<value key="KDE::windows_store::StoreLogoSquare">https://invent.kde.org/network/neochat/-/raw/master/icons/windows/storelogo-1080x1080.png</value>
|
||||
<value key="KDE::windows_store::Icon">https://invent.kde.org/network/neochat/-/raw/master/icons/300-apps-neochat.png</value>
|
||||
<value key="KDE::windows_store::PromotionalArt16x9">https://invent.kde.org/network/neochat/-/raw/master/icons/windows/promoimage-1920x1080.png</value>
|
||||
<value key="KDE::supporters">Anonymous donor, Akseli</value>
|
||||
<value key="KDE::supporters">.</value>
|
||||
</custom>
|
||||
<launchable type="desktop-id">org.kde.neochat.desktop</launchable>
|
||||
<screenshots>
|
||||
@@ -488,8 +488,6 @@
|
||||
<content_attribute id="social-chat">intense</content_attribute>
|
||||
</content_rating>
|
||||
<releases>
|
||||
<release version="25.12.0" date="2025-12-11"/>
|
||||
<release version="25.08.3" date="2025-11-06"/>
|
||||
<release version="25.08.2" date="2025-10-09"/>
|
||||
<release version="25.08.1" date="2025-09-11"/>
|
||||
<release version="25.08.0" date="2025-08-14"/>
|
||||
|
||||
588
po/ar/neochat.po
588
po/ar/neochat.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
612
po/az/neochat.po
612
po/az/neochat.po
File diff suppressed because it is too large
Load Diff
621
po/ca/neochat.po
621
po/ca/neochat.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
639
po/cs/neochat.po
639
po/cs/neochat.po
File diff suppressed because it is too large
Load Diff
566
po/da/neochat.po
566
po/da/neochat.po
File diff suppressed because it is too large
Load Diff
662
po/de/neochat.po
662
po/de/neochat.po
File diff suppressed because it is too large
Load Diff
632
po/el/neochat.po
632
po/el/neochat.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
642
po/eo/neochat.po
642
po/eo/neochat.po
File diff suppressed because it is too large
Load Diff
522
po/es/neochat.po
522
po/es/neochat.po
File diff suppressed because it is too large
Load Diff
661
po/eu/neochat.po
661
po/eu/neochat.po
File diff suppressed because it is too large
Load Diff
663
po/fi/neochat.po
663
po/fi/neochat.po
File diff suppressed because it is too large
Load Diff
698
po/fr/neochat.po
698
po/fr/neochat.po
File diff suppressed because it is too large
Load Diff
647
po/gl/neochat.po
647
po/gl/neochat.po
File diff suppressed because it is too large
Load Diff
573
po/he/neochat.po
573
po/he/neochat.po
File diff suppressed because it is too large
Load Diff
637
po/hi/neochat.po
637
po/hi/neochat.po
File diff suppressed because it is too large
Load Diff
969
po/hu/neochat.po
969
po/hu/neochat.po
File diff suppressed because it is too large
Load Diff
672
po/ia/neochat.po
672
po/ia/neochat.po
File diff suppressed because it is too large
Load Diff
646
po/id/neochat.po
646
po/id/neochat.po
File diff suppressed because it is too large
Load Diff
596
po/ie/neochat.po
596
po/ie/neochat.po
File diff suppressed because it is too large
Load Diff
642
po/it/neochat.po
642
po/it/neochat.po
File diff suppressed because it is too large
Load Diff
480
po/ja/neochat.po
480
po/ja/neochat.po
File diff suppressed because it is too large
Load Diff
580
po/ka/neochat.po
580
po/ka/neochat.po
File diff suppressed because it is too large
Load Diff
662
po/ko/neochat.po
662
po/ko/neochat.po
File diff suppressed because it is too large
Load Diff
548
po/lt/neochat.po
548
po/lt/neochat.po
File diff suppressed because it is too large
Load Diff
657
po/lv/neochat.po
657
po/lv/neochat.po
File diff suppressed because it is too large
Load Diff
591
po/nl/neochat.po
591
po/nl/neochat.po
File diff suppressed because it is too large
Load Diff
550
po/nn/neochat.po
550
po/nn/neochat.po
File diff suppressed because it is too large
Load Diff
612
po/pa/neochat.po
612
po/pa/neochat.po
File diff suppressed because it is too large
Load Diff
709
po/pl/neochat.po
709
po/pl/neochat.po
File diff suppressed because it is too large
Load Diff
637
po/pt/neochat.po
637
po/pt/neochat.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
566
po/ro/neochat.po
566
po/ro/neochat.po
File diff suppressed because it is too large
Load Diff
657
po/ru/neochat.po
657
po/ru/neochat.po
File diff suppressed because it is too large
Load Diff
637
po/sa/neochat.po
637
po/sa/neochat.po
File diff suppressed because it is too large
Load Diff
617
po/sk/neochat.po
617
po/sk/neochat.po
File diff suppressed because it is too large
Load Diff
577
po/sl/neochat.po
577
po/sl/neochat.po
File diff suppressed because it is too large
Load Diff
588
po/sv/neochat.po
588
po/sv/neochat.po
File diff suppressed because it is too large
Load Diff
668
po/ta/neochat.po
668
po/ta/neochat.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
605
po/tr/neochat.po
605
po/tr/neochat.po
File diff suppressed because it is too large
Load Diff
589
po/uk/neochat.po
589
po/uk/neochat.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -103,7 +103,6 @@ ecm_add_qml_module(neochat URI org.kde.neochat GENERATE_PLUGIN_SOURCE
|
||||
qml/ReasonDialog.qml
|
||||
qml/NewPollDialog.qml
|
||||
qml/UserMenu.qml
|
||||
qml/MeetingDialog.qml
|
||||
DEPENDENCIES
|
||||
QtCore
|
||||
QtQuick
|
||||
@@ -203,6 +202,7 @@ target_link_libraries(neochat PUBLIC
|
||||
KF6::ConfigGui
|
||||
KF6::CoreAddons
|
||||
KF6::SonnetCore
|
||||
KF6::IconThemes
|
||||
KF6::ItemModels
|
||||
KF6::I18nQml
|
||||
KirigamiApp
|
||||
@@ -213,6 +213,10 @@ target_link_libraries(neochat PUBLIC
|
||||
Spaces
|
||||
)
|
||||
|
||||
if (TARGET KF6::Crash)
|
||||
target_link_libraries(neochat PUBLIC KF6::Crash)
|
||||
endif()
|
||||
|
||||
kconfig_target_kcfg_file(neochat FILE neochatconfig.kcfg CLASS_NAME NeoChatConfig MUTATORS GENERATE_PROPERTIES DEFAULT_VALUE_GETTERS PARENT_IN_CONSTRUCTOR SINGLETON GENERATE_MOC QML_REGISTRATION)
|
||||
|
||||
if(NEOCHAT_FLATPAK)
|
||||
@@ -352,8 +356,7 @@ endif()
|
||||
install(TARGETS neochat-app ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
|
||||
|
||||
if (NOT ANDROID AND NOT WIN32 AND NOT APPLE)
|
||||
# krunner plugin must be the same as the app id for flatpak to export it
|
||||
install(FILES plasma-runner-neochat.desktop DESTINATION ${KDE_INSTALL_DATAROOTDIR}/krunner/dbusplugins RENAME org.kde.neochat.desktop)
|
||||
install(FILES plasma-runner-neochat.desktop DESTINATION ${KDE_INSTALL_DATAROOTDIR}/krunner/dbusplugins)
|
||||
endif()
|
||||
|
||||
if (APPLE)
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#include <KWindowSystem>
|
||||
#endif
|
||||
|
||||
#include <KIconTheme>
|
||||
#include <KLocalizedQmlContext>
|
||||
#include <KLocalizedString>
|
||||
#include <KirigamiApp>
|
||||
|
||||
@@ -259,7 +259,7 @@ Comment[sa]=कक्षस्य नूतनं निमन्त्रणम
|
||||
Comment[sl]=Tam je novo povabilo v sobo
|
||||
Comment[sv]=Det finns en ny inbjudan till ett rum
|
||||
Comment[ta]=ஓர் அரங்கிற்கான புதிய அழைப்பிதழ் உள்ளது
|
||||
Comment[tr]=Bir odaya yeni bir davet var
|
||||
Comment[tr]=Bir odaya yeni bir davetiye var
|
||||
Comment[uk]=У кімнаті нове запрошення
|
||||
Comment[zh_CN]=有新的聊天室邀请
|
||||
Comment[zh_TW]=有新的加入聊天室邀請
|
||||
|
||||
@@ -66,10 +66,6 @@
|
||||
</entry>
|
||||
</group>
|
||||
<group name="Timeline">
|
||||
<entry name="FontScale" type="double">
|
||||
<label>Scaling factor for font sizes</label>
|
||||
<default>1.0</default>
|
||||
</entry>
|
||||
<entry name="ShowAvatarInTimeline" type="bool">
|
||||
<label>Show avatar in the timeline</label>
|
||||
<default>true</default>
|
||||
|
||||
@@ -91,7 +91,6 @@ Components.AbstractMaximizeComponent {
|
||||
color: Kirigami.Theme.textColor
|
||||
|
||||
font.family: "monospace"
|
||||
font.pointSize: Kirigami.Theme.defaultFont.pointSize * NeoChatConfig.fontScale
|
||||
|
||||
Kirigami.SpellCheck.enabled: false
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2025 Joshua Goins <josh@redstrate.com>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
Kirigami.PromptDialog {
|
||||
id: root
|
||||
|
||||
required property bool hasExistingMeeting
|
||||
|
||||
title: hasExistingMeeting ? i18nc("@title", "Join Meeting") : i18nc("@title", "Start Meeting")
|
||||
subtitle: hasExistingMeeting ? i18nc("@info:label", "You are about to join a Jitsi meeting in your web browser.") : i18nc("@info:label", "You are about to start a new Jitsi meeting in your web browser.")
|
||||
standardButtons: Kirigami.Dialog.Cancel
|
||||
|
||||
customFooterActions: Kirigami.Action {
|
||||
icon.name: "camera-video-symbolic"
|
||||
text: hasExistingMeeting ? i18nc("@action:button Join the Jitsi meeting", "Join") : i18nc("@action:button Start a new Jitsi meeting", "Start")
|
||||
onTriggered: root.accept()
|
||||
}
|
||||
}
|
||||
@@ -77,33 +77,11 @@ Kirigami.Page {
|
||||
|
||||
actions: [
|
||||
Kirigami.Action {
|
||||
id: jitsiMeetingAction
|
||||
|
||||
readonly property bool hasExistingMeeting: root.widgetModel.jitsiIndex >= 0
|
||||
readonly property bool canStartNewMeeting: root.currentRoom.canSendState("im.vector.modular.widgets")
|
||||
|
||||
tooltip: {
|
||||
if (hasExistingMeeting) {
|
||||
return i18nc("@action:button", "Join Jitsi meeting…");
|
||||
}
|
||||
|
||||
return canStartNewMeeting ? i18nc("@action:button", "Start Jitsi meeting…") : i18nc("@action:button", "You do not have permissions to start Jitsi meetings")
|
||||
}
|
||||
icon {
|
||||
name: "camera-video-symbolic"
|
||||
color: hasExistingMeeting ? Kirigami.Theme.highlightColor : "transparent"
|
||||
}
|
||||
enabled: hasExistingMeeting || canStartNewMeeting
|
||||
visible: root.currentRoom && !root.currentRoom.isSpace
|
||||
tooltip: i18nc("@action:button", "Open Jitsi Meet in browser")
|
||||
icon.name: "camera-video-symbolic"
|
||||
onTriggered: {
|
||||
const dialog = Qt.createComponent("org.kde.neochat", "MeetingDialog").createObject(QQC2.Overlay.overlay, { hasExistingMeeting });
|
||||
dialog.onAccepted.connect(doAction);
|
||||
dialog.open();
|
||||
}
|
||||
|
||||
function doAction(): void {
|
||||
let url;
|
||||
if (!hasExistingMeeting) {
|
||||
let url
|
||||
if (root.widgetModel.jitsiIndex < 0) {
|
||||
url = root.widgetModel.addJitsiConference();
|
||||
} else {
|
||||
let idx = root.widgetModel.index(root.widgetModel.jitsiIndex, 0);
|
||||
@@ -119,18 +97,6 @@ Kirigami.Page {
|
||||
}
|
||||
]
|
||||
|
||||
Kirigami.Action {
|
||||
enabled: root.currentRoom && !root.currentRoom.isSpace
|
||||
shortcut: "Ctrl+F"
|
||||
onTriggered: {
|
||||
((root.QQC2.ApplicationWindow.window as Kirigami.ApplicationWindow).pageStack as Kirigami.PageRow).pushDialogLayer(Qt.createComponent('org.kde.neochat', 'RoomSearchPage'), {
|
||||
room: root.currentRoom
|
||||
}, {
|
||||
title: i18nc("@action:title", "Search")
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
KeyNavigation.left: (root.Kirigami.PageStack.pageStack as Kirigami.PageRow).get(0)
|
||||
|
||||
onCurrentRoomChanged: {
|
||||
|
||||
@@ -11,19 +11,7 @@ VerificationMessage {
|
||||
|
||||
required property int reason
|
||||
|
||||
icon: {
|
||||
switch (root.reason) {
|
||||
case KeyVerificationSession.TIMEOUT:
|
||||
case KeyVerificationSession.REMOTE_TIMEOUT:
|
||||
case KeyVerificationSession.USER:
|
||||
case KeyVerificationSession.REMOTE_USER:
|
||||
case KeyVerificationSession.SESSION_ACCEPTED:
|
||||
case KeyVerificationSession.REMOTE_SESSION_ACCEPTED:
|
||||
return "dialog-information";
|
||||
default:
|
||||
return "security-low";
|
||||
}
|
||||
}
|
||||
icon: "security-low"
|
||||
text: {
|
||||
switch (root.reason) {
|
||||
case KeyVerificationSession.NONE:
|
||||
|
||||
@@ -263,7 +263,6 @@ QQC2.Control {
|
||||
wrapMode: TextEdit.Wrap
|
||||
// This has to stay PlainText or else formatting starts breaking in strange ways
|
||||
textFormat: TextEdit.PlainText
|
||||
font.pointSize: Kirigami.Theme.defaultFont.pointSize * NeoChatConfig.fontScale
|
||||
|
||||
Accessible.description: placeholderText
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls as QQC2
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.neochat
|
||||
|
||||
QQC2.ItemDelegate {
|
||||
id: root
|
||||
@@ -30,7 +29,6 @@ QQC2.ItemDelegate {
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
font.family: "emoji"
|
||||
font.pointSize: Kirigami.Theme.defaultFont.pointSize * NeoChatConfig.fontScale
|
||||
|
||||
Kirigami.Icon {
|
||||
width: Kirigami.Units.gridUnit * 0.5
|
||||
|
||||
@@ -17,7 +17,6 @@ Kirigami.ScrollablePage {
|
||||
|
||||
property NeoChatRoom room
|
||||
required property NeoChatConnection connection
|
||||
property alias currentTabIndex: tabBar.currentIndex
|
||||
|
||||
title: i18nc("@title", "Developer Tools")
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "general_logging.h"
|
||||
|
||||
using namespace Qt::StringLiterals;
|
||||
using namespace Quotient;
|
||||
|
||||
AccountManager::AccountManager(bool testMode, QObject *parent)
|
||||
: QObject(parent)
|
||||
@@ -39,7 +40,7 @@ Quotient::AccountRegistry *AccountManager::accounts()
|
||||
|
||||
void AccountManager::loadAccountsFromCache()
|
||||
{
|
||||
for (const auto &accountId : Quotient::SettingsGroup("Accounts"_L1).childGroups()) {
|
||||
for (const auto &accountId : AccountSettingsGroup().childGroups()) {
|
||||
Quotient::AccountSettings account{accountId};
|
||||
m_accountsLoading += accountId;
|
||||
Q_EMIT accountsLoadingChanged();
|
||||
|
||||
@@ -89,7 +89,7 @@ public:
|
||||
case Parameter::MostHighlights:
|
||||
return i18nc("@info", "Rooms with the most highlighted messages are higher");
|
||||
case Parameter::LastActive:
|
||||
return i18nc("@info", "Rooms with newer events are higher");
|
||||
return i18nc("@info", "Rooms with the newer messages are higher");
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -95,7 +95,6 @@ void NeoChatConnection::connectSignals()
|
||||
Q_EMIT directChatsHaveHighlightNotificationsChanged();
|
||||
});
|
||||
}
|
||||
Q_EMIT roomInvitesChanged();
|
||||
connect(room, &Room::unreadStatsChanged, this, [this]() {
|
||||
refreshBadgeNotificationCount();
|
||||
Q_EMIT homeNotificationsChanged();
|
||||
@@ -191,7 +190,7 @@ void NeoChatConnection::setKeywordPushRuleDefault(PushRuleAction::Action default
|
||||
|
||||
void NeoChatConnection::logout(bool serverSideLogout)
|
||||
{
|
||||
SettingsGroup(u"Accounts"_s).remove(userId());
|
||||
AccountSettingsGroup().remove(userId());
|
||||
|
||||
QKeychain::DeletePasswordJob job(qAppName());
|
||||
job.setAutoDelete(true);
|
||||
@@ -453,20 +452,15 @@ bool NeoChatConnection::homeHaveHighlightNotifications() const
|
||||
return false;
|
||||
}
|
||||
|
||||
qsizetype NeoChatConnection::directChatInvites() const
|
||||
bool NeoChatConnection::directChatInvites() const
|
||||
{
|
||||
const auto inviteRooms = rooms(JoinState::Invite);
|
||||
return std::ranges::count_if(inviteRooms, [](const auto room) {
|
||||
return room->isDirectChat();
|
||||
});
|
||||
}
|
||||
|
||||
qsizetype NeoChatConnection::roomInvites() const
|
||||
{
|
||||
const auto inviteRooms = rooms(JoinState::Invite);
|
||||
return std::ranges::count_if(inviteRooms, [](const auto room) {
|
||||
return !room->isDirectChat();
|
||||
});
|
||||
auto inviteRooms = rooms(JoinState::Invite);
|
||||
for (const auto inviteRoom : inviteRooms) {
|
||||
if (inviteRoom->isDirectChat()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
QCoro::Task<void> NeoChatConnection::setupPushNotifications(QString endpoint)
|
||||
|
||||
@@ -66,14 +66,9 @@ class NeoChatConnection : public Quotient::Connection
|
||||
Q_PROPERTY(bool homeHaveHighlightNotifications READ homeHaveHighlightNotifications NOTIFY homeHaveHighlightNotificationsChanged)
|
||||
|
||||
/**
|
||||
* @brief The number of invites to 1-on-1 direct chats.
|
||||
* @brief Whether there is at least one invite to a direct chat.
|
||||
*/
|
||||
Q_PROPERTY(qsizetype directChatInvites READ directChatInvites NOTIFY directChatInvitesChanged)
|
||||
|
||||
/**
|
||||
* @brief The number of pending, normal room invites.
|
||||
*/
|
||||
Q_PROPERTY(qsizetype roomInvites READ roomInvites NOTIFY roomInvitesChanged)
|
||||
Q_PROPERTY(bool directChatInvites READ directChatInvites NOTIFY directChatInvitesChanged)
|
||||
|
||||
/**
|
||||
* @brief Whether the server supports querying a user's mutual rooms.
|
||||
@@ -205,8 +200,7 @@ public:
|
||||
*/
|
||||
static void setKeywordPushRuleDefault(PushRuleAction::Action defaultAction);
|
||||
|
||||
qsizetype directChatInvites() const;
|
||||
qsizetype roomInvites() const;
|
||||
bool directChatInvites() const;
|
||||
|
||||
// note: this is intentionally a copied QString because
|
||||
// the reference could be destroyed before the task is finished
|
||||
@@ -231,7 +225,6 @@ Q_SIGNALS:
|
||||
void homeNotificationsChanged();
|
||||
void homeHaveHighlightNotificationsChanged();
|
||||
void directChatInvitesChanged();
|
||||
void roomInvitesChanged();
|
||||
void passwordStatus(NeoChatConnection::PasswordStatus status);
|
||||
void userConsentRequired(QUrl url);
|
||||
void badgeNotificationCountChanged(int count);
|
||||
|
||||
@@ -77,7 +77,6 @@ QQC2.Control {
|
||||
color: Kirigami.Theme.textColor
|
||||
|
||||
font.family: "monospace"
|
||||
font.pointSize: Kirigami.Theme.defaultFont.pointSize * NeoChatConfig.fontScale
|
||||
|
||||
Kirigami.SpellCheck.enabled: false
|
||||
|
||||
|
||||
@@ -41,12 +41,7 @@ QQC2.Control {
|
||||
*/
|
||||
property var defaultHeight: Kirigami.Units.gridUnit * 3 + Kirigami.Units.largeSpacing * 2
|
||||
|
||||
/**
|
||||
* @brief Whether the link preview description is truncated.
|
||||
*
|
||||
* This is only applicable if there *is* a text description, and is never true for images.
|
||||
*/
|
||||
property bool truncated: linkPreviewDescription.truncated && linkPreviewDescription.visible
|
||||
property bool truncated: linkPreviewDescription.truncated || !linkPreviewDescription.visible
|
||||
|
||||
/**
|
||||
* @brief Request for this delegate to be removed.
|
||||
@@ -77,7 +72,7 @@ QQC2.Control {
|
||||
id: previewImage
|
||||
Layout.preferredWidth: root.defaultHeight
|
||||
Layout.preferredHeight: root.defaultHeight
|
||||
Layout.maximumWidth: root.defaultHeight
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
visible: root.linkPreviewer.imageSource.toString().length > 0
|
||||
source: root.linkPreviewer.imageSource
|
||||
@@ -87,9 +82,9 @@ QQC2.Control {
|
||||
}
|
||||
ColumnLayout {
|
||||
id: column
|
||||
Layout.preferredWidth: Math.max(linkPreviewTitle.implicitWidth, linkPreviewDescription.implicitWidth)
|
||||
Layout.fillWidth: true
|
||||
implicitWidth: Math.max(linkPreviewTitle.implicitWidth, linkPreviewDescription.implicitWidth)
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
visible: root.linkPreviewer.title.length > 0 || root.linkPreviewer.description.length > 0
|
||||
Kirigami.Heading {
|
||||
id: linkPreviewTitle
|
||||
Layout.fillWidth: true
|
||||
@@ -126,11 +121,10 @@ QQC2.Control {
|
||||
acceptedButtons: Qt.LeftButton
|
||||
onTapped: RoomManager.resolveResource(root.linkPreviewer.url, "join")
|
||||
}
|
||||
}
|
||||
|
||||
HoverHandler {
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
onHoveredChanged: (root.QQC2.ApplicationWindow.window as Main).hoverLinkIndicator.text = hovered ? root.linkPreviewer.url : ""
|
||||
}
|
||||
HoverHandler {
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
}
|
||||
|
||||
QQC2.Button {
|
||||
|
||||
@@ -58,7 +58,6 @@ QQC2.Control {
|
||||
selectionColor: Kirigami.Theme.highlightColor
|
||||
|
||||
font.italic: true
|
||||
font.pointSize: Kirigami.Theme.defaultFont.pointSize * NeoChatConfig.fontScale
|
||||
|
||||
onSelectedTextChanged: root.selectedTextChanged(selectedText)
|
||||
|
||||
|
||||
@@ -51,7 +51,6 @@ Flow {
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
text: reactionDelegate.textContent
|
||||
font.pointSize: Kirigami.Theme.defaultFont.pointSize * NeoChatConfig.fontScale
|
||||
background: null
|
||||
wrapMode: TextEdit.NoWrap
|
||||
textFormat: Text.RichText
|
||||
|
||||
@@ -67,9 +67,7 @@ TextEdit {
|
||||
selectedTextColor: Kirigami.Theme.highlightedTextColor
|
||||
selectionColor: Kirigami.Theme.highlightColor
|
||||
font {
|
||||
pointSize: !root.isReply && QmlUtils.isEmoji(display)
|
||||
? Kirigami.Theme.defaultFont.pointSize * 4 * NeoChatConfig.fontScale
|
||||
: Kirigami.Theme.defaultFont.pointSize * NeoChatConfig.fontScale
|
||||
pointSize: !root.isReply && QmlUtils.isEmoji(display) ? Kirigami.Theme.defaultFont.pointSize * 4 : Kirigami.Theme.defaultFont.pointSize
|
||||
family: QmlUtils.isEmoji(display) ? 'emoji' : Kirigami.Theme.defaultFont.family
|
||||
}
|
||||
selectByMouse: !Kirigami.Settings.isMobile
|
||||
|
||||
@@ -7,7 +7,7 @@ import QtPositioning
|
||||
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
import org.kde.neochat
|
||||
import org.kde.neochat.libneochat
|
||||
|
||||
Kirigami.Page {
|
||||
id: root
|
||||
|
||||
@@ -79,7 +79,7 @@ QQC2.ScrollView {
|
||||
id: searchButton
|
||||
visible: !root.room.isSpace
|
||||
icon.name: "search"
|
||||
text: i18nc("@action:button", "Search Messages")
|
||||
text: i18n("Search in this room")
|
||||
activeFocusOnTab: true
|
||||
|
||||
Layout.fillWidth: true
|
||||
@@ -107,7 +107,7 @@ QQC2.ScrollView {
|
||||
id: favouriteButton
|
||||
visible: !root.room.isSpace
|
||||
icon.name: root.room && root.room.isFavourite ? "rating" : "rating-unrated"
|
||||
text: root.room && root.room.isFavourite ? i18nc("@action:button", "Remove from Favorites") : i18nc("@action:button", "Add to Favorites")
|
||||
text: root.room && root.room.isFavourite ? i18n("Remove room from favorites") : i18n("Favorite this room")
|
||||
|
||||
onClicked: root.room.isFavourite ? root.room.removeTag("m.favourite") : root.room.addTag("m.favourite", 1.0)
|
||||
|
||||
@@ -120,7 +120,7 @@ QQC2.ScrollView {
|
||||
id: widgetsButton
|
||||
visible: !root.room.isSpace
|
||||
icon.name: "extension-symbolic"
|
||||
text: i18nc("@action:button", "Extensions")
|
||||
text: i18nc("@action:button", "Extensions for this room")
|
||||
activeFocusOnTab: true
|
||||
|
||||
onClicked: ((QQC2.ApplicationWindow.window as Kirigami.ApplicationWindow).pageStack as Kirigami.PageRow).pushDialogLayer(Qt.createComponent('org.kde.neochat', 'WidgetsPage'), {
|
||||
@@ -136,7 +136,7 @@ QQC2.ScrollView {
|
||||
id: locationsButton
|
||||
visible: !root.room.isSpace
|
||||
icon.name: "map-flat"
|
||||
text: i18nc("@action:button", "Shared Locations")
|
||||
text: i18n("Show locations for this room")
|
||||
activeFocusOnTab: true
|
||||
|
||||
onClicked: ((QQC2.ApplicationWindow.window as Kirigami.ApplicationWindow).pageStack as Kirigami.PageRow).pushDialogLayer(Qt.createComponent('org.kde.neochat', 'LocationsPage'), {
|
||||
@@ -152,7 +152,7 @@ QQC2.ScrollView {
|
||||
id: pinnedMessagesButton
|
||||
visible: !root.room.isSpace
|
||||
icon.name: "pin-symbolic"
|
||||
text: i18nc("@action:button", "Pinned Messages")
|
||||
text: i18nc("@action:button", "Pinned messages")
|
||||
activeFocusOnTab: true
|
||||
|
||||
Layout.fillWidth: true
|
||||
@@ -166,29 +166,10 @@ QQC2.ScrollView {
|
||||
}
|
||||
}
|
||||
|
||||
Delegates.RoundedItemDelegate {
|
||||
text: i18nc("@action:inmenu", "Inspect Room Data")
|
||||
icon.name: "tools"
|
||||
visible: NeoChatConfig.developerTools
|
||||
activeFocusOnTab: true
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
onClicked: ((QQC2.ApplicationWindow.window as Kirigami.ApplicationWindow).pageStack as Kirigami.PageRow).pushDialogLayer(Qt.createComponent('org.kde.neochat.devtools', 'DevtoolsPage'), {
|
||||
connection: root.room.connection,
|
||||
currentTabIndex: 1, // Room data tab
|
||||
room: root.room
|
||||
}, {
|
||||
title: i18nc("@title:window", "Developer Tools"),
|
||||
width: Kirigami.Units.gridUnit * 50,
|
||||
height: Kirigami.Units.gridUnit * 42
|
||||
})
|
||||
}
|
||||
|
||||
Delegates.RoundedItemDelegate {
|
||||
id: leaveButton
|
||||
icon.name: "arrow-left-symbolic"
|
||||
text: root.room.isSpace ? i18nc("@action:button", "Leave Space…") : i18nc("@action:button", "Leave Room…")
|
||||
text: root.room.isSpace ? i18nc("@action:button", "Leave this space…") : i18nc("@action:button", "Leave this room…")
|
||||
activeFocusOnTab: true
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
@@ -46,6 +46,10 @@ RowLayout {
|
||||
onClicked: root.search();
|
||||
icon.name: "search"
|
||||
text: i18nc("@action", "Search Rooms")
|
||||
Shortcut {
|
||||
sequence: "Ctrl+F"
|
||||
onActivated: searchButton.clicked()
|
||||
}
|
||||
|
||||
QQC2.ToolTip.visible: hovered
|
||||
QQC2.ToolTip.text: text
|
||||
|
||||
@@ -71,7 +71,7 @@ KirigamiComponents.ConvergentContextMenu {
|
||||
}
|
||||
|
||||
Kirigami.Action {
|
||||
text: i18nc("As in 'notify for all messages'", "All Messages")
|
||||
text: i18nc("As in 'notify for all messages'", "All")
|
||||
icon.name: "notifications"
|
||||
checkable: true
|
||||
autoExclusive: true
|
||||
@@ -95,7 +95,7 @@ KirigamiComponents.ConvergentContextMenu {
|
||||
}
|
||||
|
||||
Kirigami.Action {
|
||||
text: i18nc("As in 'do not notify for any messages'", "None")
|
||||
text: i18nc("As in 'do not notify for any messages'", "Off")
|
||||
icon.name: "notifications-disabled"
|
||||
checkable: true
|
||||
autoExclusive: true
|
||||
|
||||
@@ -78,11 +78,11 @@ Kirigami.Page {
|
||||
}
|
||||
|
||||
function goToNextUnreadRoom() {
|
||||
goToNextRoomFiltered(item => (item && item instanceof RoomDelegate && item.hasUnreadMessages));
|
||||
goToNextRoomFiltered(item => (item && item instanceof RoomDelegate && item.hasUnread));
|
||||
}
|
||||
|
||||
function goToPreviousUnreadRoom() {
|
||||
goToPreviousRoomFiltered(item => (item && item instanceof RoomDelegate && item.hasUnreadMessages));
|
||||
goToPreviousRoomFiltered(item => (item && item instanceof RoomDelegate && item.hasUnread));
|
||||
}
|
||||
|
||||
titleDelegate: Loader {
|
||||
|
||||
@@ -81,15 +81,12 @@ QQC2.Control {
|
||||
AvatarTabButton {
|
||||
id: allRoomButton
|
||||
|
||||
readonly property int countedNotifications: root.connection.homeNotifications + root.connection.roomInvites
|
||||
readonly property bool hasCountableNotifications: countedNotifications > 0
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: width - Kirigami.Units.smallSpacing
|
||||
Layout.maximumHeight: width - Kirigami.Units.smallSpacing
|
||||
Layout.topMargin: Kirigami.Units.smallSpacing / 2
|
||||
|
||||
text: hasCountableNotifications ? i18ncp("Home space for the uncategorized rooms", "Home (%1 notification)", "Home (%1 notifications)", countedNotifications) : i18nc("Home space for the uncategorized rooms", "Home")
|
||||
text: i18n("Home")
|
||||
contentItem: Kirigami.Icon {
|
||||
source: "user-home-symbolic"
|
||||
|
||||
@@ -103,15 +100,15 @@ QQC2.Control {
|
||||
width: Math.max(homeNotificationCountTextMetrics.advanceWidth + Kirigami.Units.smallSpacing * 2, height)
|
||||
height: Kirigami.Units.iconSizes.smallMedium
|
||||
|
||||
text: allRoomButton.countedNotifications
|
||||
visible: allRoomButton.hasCountableNotifications && (RoomManager.currentSpace.length > 0 || RoomManager.currentSpace !== "DM")
|
||||
text: root.connection.homeNotifications > 0 ? root.connection.homeNotifications : ""
|
||||
visible: root.connection.homeNotifications > 0 && (RoomManager.currentSpace.length > 0 || RoomManager.currentSpace !== "DM")
|
||||
color: Kirigami.Theme.textColor
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
background: Rectangle {
|
||||
visible: true
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Button
|
||||
Kirigami.Theme.inherit: false
|
||||
color: root.connection.homeHaveHighlightNotifications || root.connection.roomInvites > 0 ? Kirigami.Theme.positiveTextColor : Kirigami.Theme.backgroundColor
|
||||
color: root.connection.homeHaveHighlightNotifications ? Kirigami.Theme.positiveTextColor : Kirigami.Theme.backgroundColor
|
||||
radius: height / 2
|
||||
}
|
||||
|
||||
@@ -130,8 +127,7 @@ QQC2.Control {
|
||||
AvatarTabButton {
|
||||
id: directChatButton
|
||||
|
||||
readonly property int countedNotifications: root.connection.directChatNotifications + root.connection.directChatInvites
|
||||
readonly property bool hasCountableNotifications: countedNotifications > 0
|
||||
readonly property bool hasCountableNotifications: root.connection.directChatNotifications > 0 || root.connection.directChatInvites > 0
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: width - Kirigami.Units.smallSpacing
|
||||
@@ -140,7 +136,7 @@ QQC2.Control {
|
||||
|
||||
text: {
|
||||
if (directChatButton.hasCountableNotifications) {
|
||||
return i18ncp("@button View all one-on-one chats.", "Direct Messages (%1 notification)", "Direct Messages (%1 notifications)", directChatButton.countedNotifications);
|
||||
return i18ncp("@button View all one-on-one chats.", "Direct Messages (%1 notification)", "Direct Messages (%1 notifications)", root.connection.directChatNotifications + root.connection.directChatInvites);
|
||||
}
|
||||
|
||||
return i18nc("@button View all one-on-one chats.", "Direct Messages");
|
||||
@@ -166,7 +162,7 @@ QQC2.Control {
|
||||
visible: true
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Button
|
||||
Kirigami.Theme.inherit: false
|
||||
color: root.connection.directChatsHaveHighlightNotifications || root.connection.directChatInvites > 0 ? Kirigami.Theme.positiveTextColor : Kirigami.Theme.backgroundColor
|
||||
color: root.connection.directChatsHaveHighlightNotifications || root.connection.directChatInvites ? Kirigami.Theme.positiveTextColor : Kirigami.Theme.backgroundColor
|
||||
radius: height / 2
|
||||
}
|
||||
|
||||
|
||||
@@ -43,40 +43,6 @@ FormCard.FormCardPage {
|
||||
NeoChatConfig.save();
|
||||
}
|
||||
}
|
||||
|
||||
FormCard.FormDelegateSeparator {
|
||||
above: fontScaleSliderDelegate
|
||||
below: compactRoomListDelegate
|
||||
}
|
||||
|
||||
/*!
|
||||
Font scale setting allows user to adjust the font size used in the app.
|
||||
*/
|
||||
FormCard.AbstractFormDelegate {
|
||||
id: fontScaleSliderDelegate
|
||||
background: Item {}
|
||||
contentItem: ColumnLayout {
|
||||
QQC2.Label {
|
||||
text: i18nc("@label Font size for text in the chat pane", "Chat font scaling")
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
QQC2.Label {
|
||||
text: i18nc("@label:slider Current font scale percentage. %1 is the numeric percentage value, the second % is the symbol e.g. 120%", "%1%", Math.round(NeoChatConfig.fontScale * 100))
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
QQC2.Slider {
|
||||
from: 0.5
|
||||
to: 3.0
|
||||
stepSize: 0.1
|
||||
value: NeoChatConfig.fontScale
|
||||
onMoved: {
|
||||
NeoChatConfig.fontScale = value;
|
||||
NeoChatConfig.save();
|
||||
}
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FormCard.FormHeader {
|
||||
|
||||
@@ -50,7 +50,6 @@ ecm_add_qml_module(Settings GENERATE_PLUGIN_SOURCE
|
||||
RoomSortParameterDialog.qml
|
||||
RoomProfile.qml
|
||||
RoomAdvancedPage.qml
|
||||
KeyboardShortcutsPage.qml
|
||||
SOURCES
|
||||
colorschemer.cpp
|
||||
threepidaddhelper.cpp
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2025 Joshua Goins <josh@redstrate.com>
|
||||
// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls as QQC2
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.kirigamiaddons.formcard as FormCard
|
||||
|
||||
FormCard.FormCardPage {
|
||||
title: i18nc("@title:window", "Keyboard Shortcuts")
|
||||
|
||||
FormCard.FormCard {
|
||||
Layout.topMargin: Kirigami.Units.largeSpacing * 4
|
||||
|
||||
FormCard.FormTextDelegate {
|
||||
text: i18nc("@info:label", "Open Quick Switcher")
|
||||
description: "Ctrl+K"
|
||||
}
|
||||
|
||||
FormCard.FormTextDelegate {
|
||||
text: i18nc("@info:label", "Open Account Switcher")
|
||||
description: "Ctrl+U"
|
||||
}
|
||||
|
||||
FormCard.FormTextDelegate {
|
||||
text: i18nc("@info:label", "Search Messages in Current Room")
|
||||
description: "Ctrl+F"
|
||||
}
|
||||
|
||||
FormCard.FormTextDelegate {
|
||||
text: i18nc("@info:label", "Go to Previous Room")
|
||||
description: "Ctrl+PgUp, Ctrl+Backtab, Alt+Up"
|
||||
}
|
||||
|
||||
FormCard.FormTextDelegate {
|
||||
text: i18nc("@info:label", "Go to Next Room")
|
||||
description: "Ctrl+PgDown, Ctrl+Tab, Alt+Down"
|
||||
}
|
||||
|
||||
FormCard.FormTextDelegate {
|
||||
text: i18nc("@info:label", "Go to Previous Unread Room")
|
||||
description: "Alt+Shift+Up"
|
||||
}
|
||||
|
||||
FormCard.FormTextDelegate {
|
||||
text: i18nc("@info:label", "Go to Next Unread Room")
|
||||
description: "Alt+Shift+Down"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -91,15 +91,9 @@ FormCard.FormCardPage {
|
||||
title: i18nc("@title:group", "Room List Sort Order")
|
||||
}
|
||||
FormCard.FormCard {
|
||||
FormCard.FormTextDelegate {
|
||||
text: i18nc("@info:label", "Hidden events are not considered as recent activity when sorting rooms.")
|
||||
}
|
||||
|
||||
FormCard.FormDelegateSeparator {}
|
||||
|
||||
FormCard.FormRadioDelegate {
|
||||
text: i18nc("As in 'sort something based on last activity'", "Importance")
|
||||
description: i18nc("@info", "Rooms with unread notifications will be shown first.")
|
||||
text: i18nc("As in 'sort something based on last activity'", "Activity")
|
||||
description: i18nc("@info", "Rooms with unread notifications will be shown first")
|
||||
checked: NeoChatConfig.sortOrder === 1
|
||||
enabled: !NeoChatConfig.isSortOrderImmutable
|
||||
onToggled: {
|
||||
@@ -119,8 +113,8 @@ FormCard.FormCardPage {
|
||||
}
|
||||
}
|
||||
FormCard.FormRadioDelegate {
|
||||
text: i18nc("As in 'sort something based on the last event'", "Newest Events")
|
||||
description: i18nc("@info", "Rooms with the newest events will be shown first.")
|
||||
text: i18nc("As in 'sort something based on the last message'", "Last Message Activity")
|
||||
description: i18nc("@info", "Rooms with the newest activity will be shown first")
|
||||
checked: NeoChatConfig.sortOrder === 2
|
||||
enabled: !NeoChatConfig.isSortOrderImmutable
|
||||
onToggled: {
|
||||
|
||||
@@ -97,12 +97,6 @@ KirigamiSettings.ConfigurationView {
|
||||
}
|
||||
visible: root.connection !== null
|
||||
},
|
||||
KirigamiSettings.ConfigurationModule {
|
||||
moduleId: "keyboardShortcuts"
|
||||
text: i18n("Keyboard Shortcuts")
|
||||
icon.name: "input-keyboard-symbolic"
|
||||
page: () => Qt.createComponent("org.kde.neochat.settings", "KeyboardShortcutsPage")
|
||||
},
|
||||
KirigamiSettings.ConfigurationModule {
|
||||
moduleId: "aboutNeochat"
|
||||
text: i18n("About NeoChat")
|
||||
|
||||
@@ -23,12 +23,11 @@ FormCard.FormCardPage {
|
||||
title: i18nc('@title:window', 'Notifications')
|
||||
|
||||
FormCard.FormHeader {
|
||||
title: i18nc("@title:group", "Send Notifications For")
|
||||
title: i18nc("@title:group", "Room notifications setting")
|
||||
}
|
||||
|
||||
FormCard.FormCard {
|
||||
FormCard.FormRadioDelegate {
|
||||
icon.name: "globe"
|
||||
text: i18nc("As in the default notification setting", "Default Settings")
|
||||
checked: room.pushNotificationState === PushNotificationState.Default
|
||||
enabled: room.pushNotificationState !== PushNotificationState.Unknown
|
||||
@@ -37,8 +36,7 @@ FormCard.FormCardPage {
|
||||
}
|
||||
}
|
||||
FormCard.FormRadioDelegate {
|
||||
icon.name: "notifications"
|
||||
text: i18nc("As in 'notify for all messages'", "All Messages")
|
||||
text: i18nc("As in 'notify for all messages'", "All")
|
||||
checked: room.pushNotificationState === PushNotificationState.All
|
||||
enabled: room.pushNotificationState !== PushNotificationState.Unknown
|
||||
onToggled: {
|
||||
@@ -46,7 +44,6 @@ FormCard.FormCardPage {
|
||||
}
|
||||
}
|
||||
FormCard.FormRadioDelegate {
|
||||
icon.name: "im-user"
|
||||
text: i18nc("As in 'notify when the user is mentioned or the message contains a set keyword'", "@Mentions and Keywords")
|
||||
checked: room.pushNotificationState === PushNotificationState.MentionKeyword
|
||||
enabled: room.pushNotificationState !== PushNotificationState.Unknown
|
||||
@@ -55,8 +52,7 @@ FormCard.FormCardPage {
|
||||
}
|
||||
}
|
||||
FormCard.FormRadioDelegate {
|
||||
icon.name: "notifications-disabled"
|
||||
text: i18nc("As in 'do not notify for any messages'", "None")
|
||||
text: i18nc("As in 'do not notify for any messages'", "Off")
|
||||
checked: room.pushNotificationState === PushNotificationState.Mute
|
||||
enabled: room.pushNotificationState !== PushNotificationState.Unknown
|
||||
onToggled: {
|
||||
|
||||
Reference in New Issue
Block a user