[Option][GUI] Disable notifications from top bar

This commit is contained in:
Eric Kotato 2022-09-09 20:07:36 +03:00 committed by Eric Kotato
parent 5a2ae50903
commit b784101d1d
10 changed files with 71 additions and 3 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -84,6 +84,7 @@
"ktg_settings_filters_only_unmuted_counter": "Do not count muted chats",
"ktg_settings_filters_hide_edit": "Hide Edit button",
"ktg_settings_filters_hide_folder_names": "Compact folders",
"ktg_settings_top_bar_mute": "Mute in profile top bar",
"ktg_settings_messages": "Messages",
"ktg_settings_filters_hide_all": "Hide \"All chats\" folder",
"ktg_settings_tray_icon": "Tray icon",

View file

@ -138,8 +138,19 @@ infoTopBarMenu: IconButton(infoTopBarBack) {
iconPosition: point(18px, -1px);
rippleAreaPosition: point(1px, 6px);
}
infoTopBarCall: IconButton(infoTopBarMenu) {
infoTopBarNotifications: IconButton(infoTopBarMenu) {
width: 42px;
icon: icon {{ "info/info_notifications", boxTitleCloseFg }};
iconOver: icon {{ "info/info_notifications", boxTitleCloseFgOver }};
iconPosition: point(5px, -1px);
rippleAreaPosition: point(0px, 6px);
}
infoNotificationsActive: icon {{
"info/info_notifications_active",
windowBgActive
}};
infoTopBarCall: IconButton(infoTopBarNotifications) {
icon: icon {{ "top_bar_call", boxTitleCloseFg }};
iconOver: icon {{ "top_bar_call", boxTitleCloseFgOver }};
iconPosition: point(5px, -1px);
@ -205,6 +216,12 @@ infoLayerTopBarMenu: IconButton(infoLayerTopBarClose) {
iconOver: icon {{ "title_menu_dots", boxTitleCloseFgOver }};
iconPosition: point(16px, -1px);
}
infoLayerTopBarNotifications: IconButton(infoLayerTopBarMenu) {
icon: icon {{ "info/info_notifications", boxTitleCloseFg }};
iconOver: icon {{ "info/info_notifications", boxTitleCloseFgOver }};
iconPosition: point(4px, -1px);
rippleAreaPosition: point(0px, 9px);
}
infoLayerTopBarCall: IconButton(infoLayerTopBarMenu) {
icon: icon {{ "top_bar_call", boxTitleCloseFg }};
iconOver: icon {{ "top_bar_call", boxTitleCloseFgOver }};

View file

@ -38,6 +38,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "boxes/peer_list_box.h"
#include "ui/boxes/confirm_box.h"
#include "main/main_session.h"
#include "menu/menu_mute.h"
#include "mtproto/mtproto_config.h"
#include "data/data_download_manager.h"
#include "data/data_session.h"
@ -356,6 +357,11 @@ void WrapWidget::createTopBar() {
}, _topBar->lifetime());
}
if (section.type() == Section::Type::Profile
&& ::Kotato::JsonSettings::GetBool("profile_top_mute")) {
addProfileNotificationsButton();
}
_topBar->lower();
_topBar->resizeToWidth(width());
_topBar->finishAnimating();
@ -437,6 +443,45 @@ void WrapWidget::addProfileCallsButton() {
}
}
void WrapWidget::addProfileNotificationsButton() {
Expects(_topBar != nullptr);
const auto peer = key().peer();
if (!peer || peer->isSelf()) {
return;
}
const auto topic = key().topic();
const auto topicRootId = topic ? topic->rootId() : MsgId();
const auto makeThread = [=] {
return topicRootId
? static_cast<Data::Thread*>(peer->forumTopicFor(topicRootId))
: reinterpret_cast<Data::Thread*>(peer->owner().history(peer).get());
};
auto notifications = _topBar->addButton(
base::make_unique_q<Ui::IconButton>(
_topBar,
(wrap() == Wrap::Layer
? st::infoLayerTopBarNotifications
: st::infoTopBarNotifications)));
MuteMenu::SetupMuteMenu(
notifications,
notifications->clicks() | rpl::to_empty,
makeThread,
_controller->uiShow());
Profile::NotificationsEnabledValue(
peer
) | rpl::start_with_next([notifications](bool enabled) {
const auto iconOverride = enabled
? &st::infoNotificationsActive
: nullptr;
const auto rippleOverride = enabled
? &st::lightButtonBgOver
: nullptr;
notifications->setIconOverride(iconOverride, iconOverride);
notifications->setRippleColorOverride(rippleOverride);
}, notifications->lifetime());
}
void WrapWidget::showTopBarMenu(bool check) {
if (_topBarMenu) {
_topBarMenu->hideMenu(true);

View file

@ -197,6 +197,7 @@ private:
void addTopBarMenuButton();
void addProfileCallsButton();
void addProfileNotificationsButton();
void showTopBarMenu(bool check);
void deleteAllDownloads();

View file

@ -604,7 +604,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
addTranslateToMenu(about.text, AboutValue(_peer));
}
}
if (!_peer->isSelf()) {
if (!_peer->isSelf() && !::Kotato::JsonSettings::GetBool("profile_top_mute")) {
// No notifications toggle for Self => no separator.
result->add(object_ptr<Ui::SlideWrap<>>(
result,
@ -802,7 +802,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::fill() {
add(object_ptr<Ui::BoxContentDivider>(_wrap));
add(CreateSkipWidget(_wrap));
add(setupInfo());
if (!_peer->isSelf()) {
if (!_peer->isSelf() && !::Kotato::JsonSettings::GetBool("profile_top_mute")) {
add(setupMuteToggle());
}
setupMainButtons();

View file

@ -370,6 +370,9 @@ const std::map<QString, Definition, std::greater<QString>> DefinitionMap {
{ "folders/hide_all_chats", {
.type = SettingType::BoolSetting,
.defaultValue = false, }},
{ "profile_top_mute", {
.type = SettingType::BoolSetting,
.defaultValue = false, }},
{ "folders/local", {
.scope = SettingScope::Account,
.type = SettingType::QJsonArraySetting, }},

View file

@ -180,6 +180,7 @@ void SetupKotatoChats(
updateRecentStickersLimitHeight);
updateRecentStickersLimitLabel(::Kotato::JsonSettings::GetInt("recent_stickers_limit"));
SettingsMenuJsonSwitch(ktg_settings_top_bar_mute, profile_top_mute);
SettingsMenuJsonSwitch(ktg_settings_disable_up_edit, disable_up_edit);
SettingsMenuJsonSwitch(ktg_settings_always_show_scheduled, always_show_scheduled);