Add archive settings to context menu.
This commit is contained in:
parent
ae26c781c1
commit
de4152496f
9 changed files with 199 additions and 53 deletions
|
@ -615,9 +615,15 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_settings_security" = "Security";
|
"lng_settings_security" = "Security";
|
||||||
"lng_settings_passcode_title" = "Local passcode";
|
"lng_settings_passcode_title" = "Local passcode";
|
||||||
"lng_settings_sessions_title" = "Active sessions";
|
"lng_settings_sessions_title" = "Active sessions";
|
||||||
|
"lng_settings_archive_title" = "Archive Settings";
|
||||||
"lng_settings_new_unknown" = "New chats from unknown users";
|
"lng_settings_new_unknown" = "New chats from unknown users";
|
||||||
"lng_settings_auto_archive" = "Archive and Mute";
|
"lng_settings_auto_archive" = "Archive and Mute";
|
||||||
"lng_settings_auto_archive_about" = "Automatically archive and mute new chats, groups and channels from non-contacts.";
|
"lng_settings_auto_archive_about" = "Automatically archive and mute new chats, groups and channels from non-contacts.";
|
||||||
|
"lng_settings_unmuted_chats" = "Unmuted chats";
|
||||||
|
"lng_settings_always_in_archive" = "Always keep archived";
|
||||||
|
"lng_settings_unmuted_chats_about" = "Keep archived chats in the Archive even if they are unmuted and get a new message.";
|
||||||
|
"lng_settings_chats_from_folders" = "Chats from folders";
|
||||||
|
"lng_settings_chats_from_folders_about" = "Keep archived chats from folders in the Archive even if they are unmuted and get a new message.";
|
||||||
"lng_settings_destroy_title" = "Delete my account";
|
"lng_settings_destroy_title" = "Delete my account";
|
||||||
"lng_settings_version_info" = "Version and updates";
|
"lng_settings_version_info" = "Version and updates";
|
||||||
"lng_settings_system_integration" = "System integration";
|
"lng_settings_system_integration" = "System integration";
|
||||||
|
@ -2278,6 +2284,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_context_archive_to_menu" = "Move to main menu";
|
"lng_context_archive_to_menu" = "Move to main menu";
|
||||||
"lng_context_archive_to_list" = "Move to chats list";
|
"lng_context_archive_to_list" = "Move to chats list";
|
||||||
"lng_context_archive_to_menu_info" = "Archive moved to the main menu!\nYou can return it from the context menu of the archive button.";
|
"lng_context_archive_to_menu_info" = "Archive moved to the main menu!\nYou can return it from the context menu of the archive button.";
|
||||||
|
"lng_context_archive_settings" = "Archive settings";
|
||||||
|
|
||||||
"lng_context_mute" = "Mute";
|
"lng_context_mute" = "Mute";
|
||||||
"lng_context_unmute" = "Unmute";
|
"lng_context_unmute" = "Unmute";
|
||||||
|
|
|
@ -84,19 +84,29 @@ void GlobalPrivacy::dismissArchiveAndMuteSuggestion() {
|
||||||
u"AUTOARCHIVE_POPULAR"_q);
|
u"AUTOARCHIVE_POPULAR"_q);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlobalPrivacy::update(bool archiveAndMute) {
|
void GlobalPrivacy::updateArchiveAndMute(bool value) {
|
||||||
|
update(value, unarchiveOnNewMessageCurrent());
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalPrivacy::updateUnarchiveOnNewMessage(
|
||||||
|
UnarchiveOnNewMessage value) {
|
||||||
|
update(archiveAndMuteCurrent(), value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GlobalPrivacy::update(
|
||||||
|
bool archiveAndMute,
|
||||||
|
UnarchiveOnNewMessage unarchiveOnNewMessage) {
|
||||||
using Flag = MTPDglobalPrivacySettings::Flag;
|
using Flag = MTPDglobalPrivacySettings::Flag;
|
||||||
|
|
||||||
const auto unarchive = unarchiveOnNewMessageCurrent();
|
|
||||||
_api.request(_requestId).cancel();
|
_api.request(_requestId).cancel();
|
||||||
const auto flags = Flag()
|
const auto flags = Flag()
|
||||||
| (archiveAndMute
|
| (archiveAndMute
|
||||||
? Flag::f_archive_and_mute_new_noncontact_peers
|
? Flag::f_archive_and_mute_new_noncontact_peers
|
||||||
: Flag())
|
: Flag())
|
||||||
| (unarchive == UnarchiveOnNewMessage::AnyUnmuted
|
| (unarchiveOnNewMessage == UnarchiveOnNewMessage::AnyUnmuted
|
||||||
? Flag::f_keep_archived_unmuted
|
? Flag::f_keep_archived_unmuted
|
||||||
: Flag())
|
: Flag())
|
||||||
| (unarchive != UnarchiveOnNewMessage::None
|
| (unarchiveOnNewMessage != UnarchiveOnNewMessage::None
|
||||||
? Flag::f_keep_archived_folders
|
? Flag::f_keep_archived_folders
|
||||||
: Flag());
|
: Flag());
|
||||||
_requestId = _api.request(MTPaccount_SetGlobalPrivacySettings(
|
_requestId = _api.request(MTPaccount_SetGlobalPrivacySettings(
|
||||||
|
@ -108,6 +118,7 @@ void GlobalPrivacy::update(bool archiveAndMute) {
|
||||||
_requestId = 0;
|
_requestId = 0;
|
||||||
}).send();
|
}).send();
|
||||||
_archiveAndMute = archiveAndMute;
|
_archiveAndMute = archiveAndMute;
|
||||||
|
_unarchiveOnNewMessage = unarchiveOnNewMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlobalPrivacy::apply(const MTPGlobalPrivacySettings &data) {
|
void GlobalPrivacy::apply(const MTPGlobalPrivacySettings &data) {
|
||||||
|
|
|
@ -28,7 +28,8 @@ public:
|
||||||
explicit GlobalPrivacy(not_null<ApiWrap*> api);
|
explicit GlobalPrivacy(not_null<ApiWrap*> api);
|
||||||
|
|
||||||
void reload(Fn<void()> callback = nullptr);
|
void reload(Fn<void()> callback = nullptr);
|
||||||
void update(bool archiveAndMute);
|
void updateArchiveAndMute(bool value);
|
||||||
|
void updateUnarchiveOnNewMessage(UnarchiveOnNewMessage value);
|
||||||
|
|
||||||
[[nodiscard]] bool archiveAndMuteCurrent() const;
|
[[nodiscard]] bool archiveAndMuteCurrent() const;
|
||||||
[[nodiscard]] rpl::producer<bool> archiveAndMute() const;
|
[[nodiscard]] rpl::producer<bool> archiveAndMute() const;
|
||||||
|
@ -43,6 +44,10 @@ public:
|
||||||
private:
|
private:
|
||||||
void apply(const MTPGlobalPrivacySettings &data);
|
void apply(const MTPGlobalPrivacySettings &data);
|
||||||
|
|
||||||
|
void update(
|
||||||
|
bool archiveAndMute,
|
||||||
|
UnarchiveOnNewMessage unarchiveOnNewMessage);
|
||||||
|
|
||||||
const not_null<Main::Session*> _session;
|
const not_null<Main::Session*> _session;
|
||||||
MTP::Sender _api;
|
MTP::Sender _api;
|
||||||
mtpRequestId _requestId = 0;
|
mtpRequestId _requestId = 0;
|
||||||
|
|
|
@ -7,16 +7,20 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
*/
|
*/
|
||||||
#include "settings/settings_advanced.h"
|
#include "settings/settings_advanced.h"
|
||||||
|
|
||||||
|
#include "api/api_global_privacy.h"
|
||||||
|
#include "apiwrap.h"
|
||||||
#include "settings/settings_common.h"
|
#include "settings/settings_common.h"
|
||||||
#include "settings/settings_chat.h"
|
#include "settings/settings_chat.h"
|
||||||
#include "settings/settings_experimental.h"
|
#include "settings/settings_experimental.h"
|
||||||
#include "settings/settings_power_saving.h"
|
#include "settings/settings_power_saving.h"
|
||||||
|
#include "settings/settings_privacy_security.h"
|
||||||
#include "ui/wrap/vertical_layout.h"
|
#include "ui/wrap/vertical_layout.h"
|
||||||
#include "ui/wrap/slide_wrap.h"
|
#include "ui/wrap/slide_wrap.h"
|
||||||
#include "ui/widgets/labels.h"
|
#include "ui/widgets/labels.h"
|
||||||
#include "ui/widgets/checkbox.h"
|
#include "ui/widgets/checkbox.h"
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
#include "ui/gl/gl_detection.h"
|
#include "ui/gl/gl_detection.h"
|
||||||
|
#include "ui/layers/generic_box.h"
|
||||||
#include "ui/text/text_utilities.h" // Ui::Text::ToUpper
|
#include "ui/text/text_utilities.h" // Ui::Text::ToUpper
|
||||||
#include "ui/text/format_values.h"
|
#include "ui/text/format_values.h"
|
||||||
#include "ui/boxes/single_choice_box.h"
|
#include "ui/boxes/single_choice_box.h"
|
||||||
|
@ -43,6 +47,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
#include "mtproto/facade.h"
|
#include "mtproto/facade.h"
|
||||||
#include "styles/style_settings.h"
|
#include "styles/style_settings.h"
|
||||||
|
#include "styles/style_layers.h"
|
||||||
|
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
#include "base/platform/mac/base_confirm_quit.h"
|
#include "base/platform/mac/base_confirm_quit.h"
|
||||||
|
@ -710,6 +715,94 @@ void SetupAnimations(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ArchiveSettingsBox(
|
||||||
|
not_null<Ui::GenericBox*> box,
|
||||||
|
not_null<Window::SessionController*> controller) {
|
||||||
|
box->setTitle(tr::lng_settings_archive_title());
|
||||||
|
box->setWidth(st::boxWideWidth);
|
||||||
|
|
||||||
|
box->addButton(tr::lng_about_done(), [=] { box->closeBox(); });
|
||||||
|
|
||||||
|
PreloadArchiveSettings(&controller->session());
|
||||||
|
|
||||||
|
struct State {
|
||||||
|
Ui::SlideWrap<Ui::VerticalLayout> *foldersWrap = nullptr;
|
||||||
|
Ui::SettingsButton *folders = nullptr;
|
||||||
|
};
|
||||||
|
const auto state = box->lifetime().make_state<State>();
|
||||||
|
const auto privacy = &controller->session().api().globalPrivacy();
|
||||||
|
|
||||||
|
const auto container = box->verticalLayout();
|
||||||
|
AddSkip(container);
|
||||||
|
AddSubsectionTitle(container, tr::lng_settings_unmuted_chats());
|
||||||
|
|
||||||
|
using Unarchive = Api::UnarchiveOnNewMessage;
|
||||||
|
AddButton(
|
||||||
|
container,
|
||||||
|
tr::lng_settings_always_in_archive(),
|
||||||
|
st::settingsButtonNoIcon
|
||||||
|
)->toggleOn(privacy->unarchiveOnNewMessage(
|
||||||
|
) | rpl::map(
|
||||||
|
rpl::mappers::_1 == Unarchive::None
|
||||||
|
))->toggledChanges(
|
||||||
|
) | rpl::filter([=](bool toggled) {
|
||||||
|
const auto current = privacy->unarchiveOnNewMessageCurrent();
|
||||||
|
return toggled != (current == Unarchive::None);
|
||||||
|
}) | rpl::start_with_next([=](bool toggled) {
|
||||||
|
privacy->updateUnarchiveOnNewMessage(toggled
|
||||||
|
? Unarchive::None
|
||||||
|
: state->folders->toggled()
|
||||||
|
? Unarchive::NotInFoldersUnmuted
|
||||||
|
: Unarchive::AnyUnmuted);
|
||||||
|
state->foldersWrap->toggle(!toggled, anim::type::normal);
|
||||||
|
}, container->lifetime());
|
||||||
|
|
||||||
|
AddSkip(container);
|
||||||
|
AddDividerText(container, tr::lng_settings_unmuted_chats_about());
|
||||||
|
|
||||||
|
state->foldersWrap = container->add(
|
||||||
|
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
|
||||||
|
container,
|
||||||
|
object_ptr<Ui::VerticalLayout>(container)));
|
||||||
|
const auto inner = state->foldersWrap->entity();
|
||||||
|
AddSkip(inner);
|
||||||
|
AddSubsectionTitle(inner, tr::lng_settings_chats_from_folders());
|
||||||
|
|
||||||
|
state->folders = AddButton(
|
||||||
|
inner,
|
||||||
|
tr::lng_settings_always_in_archive(),
|
||||||
|
st::settingsButtonNoIcon
|
||||||
|
)->toggleOn(privacy->unarchiveOnNewMessage(
|
||||||
|
) | rpl::map(
|
||||||
|
rpl::mappers::_1 != Unarchive::AnyUnmuted
|
||||||
|
));
|
||||||
|
state->folders->toggledChanges(
|
||||||
|
) | rpl::filter([=](bool toggled) {
|
||||||
|
const auto current = privacy->unarchiveOnNewMessageCurrent();
|
||||||
|
return toggled != (current != Unarchive::AnyUnmuted);
|
||||||
|
}) | rpl::start_with_next([=](bool toggled) {
|
||||||
|
const auto current = privacy->unarchiveOnNewMessageCurrent();
|
||||||
|
privacy->updateUnarchiveOnNewMessage(!toggled
|
||||||
|
? Unarchive::AnyUnmuted
|
||||||
|
: (current == Unarchive::AnyUnmuted)
|
||||||
|
? Unarchive::NotInFoldersUnmuted
|
||||||
|
: current);
|
||||||
|
}, inner->lifetime());
|
||||||
|
|
||||||
|
AddSkip(inner);
|
||||||
|
AddDividerText(inner, tr::lng_settings_chats_from_folders_about());
|
||||||
|
|
||||||
|
state->foldersWrap->toggle(
|
||||||
|
privacy->unarchiveOnNewMessageCurrent() != Unarchive::None,
|
||||||
|
anim::type::instant);
|
||||||
|
|
||||||
|
SetupArchiveAndMute(controller, box->verticalLayout());
|
||||||
|
}
|
||||||
|
|
||||||
|
void PreloadArchiveSettings(not_null<::Main::Session*> session) {
|
||||||
|
session->api().globalPrivacy().reload();
|
||||||
|
}
|
||||||
|
|
||||||
void SetupHardwareAcceleration(not_null<Ui::VerticalLayout*> container) {
|
void SetupHardwareAcceleration(not_null<Ui::VerticalLayout*> container) {
|
||||||
const auto settings = &Core::App().settings();
|
const auto settings = &Core::App().settings();
|
||||||
AddButton(
|
AddButton(
|
||||||
|
|
|
@ -11,10 +11,16 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
|
|
||||||
namespace Main {
|
namespace Main {
|
||||||
class Account;
|
class Account;
|
||||||
|
class Session;
|
||||||
} // namespace Main
|
} // namespace Main
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class GenericBox;
|
||||||
|
} // namespace Ui
|
||||||
|
|
||||||
namespace Window {
|
namespace Window {
|
||||||
class Controller;
|
class Controller;
|
||||||
|
class SessionController;
|
||||||
} // namespace Window
|
} // namespace Window
|
||||||
|
|
||||||
namespace Settings {
|
namespace Settings {
|
||||||
|
@ -37,6 +43,11 @@ void SetupAnimations(
|
||||||
not_null<Window::Controller*> window,
|
not_null<Window::Controller*> window,
|
||||||
not_null<Ui::VerticalLayout*> container);
|
not_null<Ui::VerticalLayout*> container);
|
||||||
|
|
||||||
|
void ArchiveSettingsBox(
|
||||||
|
not_null<Ui::GenericBox*> box,
|
||||||
|
not_null<Window::SessionController*> controller);
|
||||||
|
void PreloadArchiveSettings(not_null<::Main::Session*> session);
|
||||||
|
|
||||||
class Advanced : public Section<Advanced> {
|
class Advanced : public Section<Advanced> {
|
||||||
public:
|
public:
|
||||||
Advanced(
|
Advanced(
|
||||||
|
|
|
@ -311,53 +311,6 @@ void SetupPrivacy(
|
||||||
AddDivider(container);
|
AddDivider(container);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupArchiveAndMute(
|
|
||||||
not_null<Window::SessionController*> controller,
|
|
||||||
not_null<Ui::VerticalLayout*> container) {
|
|
||||||
using namespace rpl::mappers;
|
|
||||||
|
|
||||||
const auto wrap = container->add(
|
|
||||||
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
|
|
||||||
container,
|
|
||||||
object_ptr<Ui::VerticalLayout>(container)));
|
|
||||||
const auto inner = wrap->entity();
|
|
||||||
|
|
||||||
AddSkip(inner);
|
|
||||||
AddSubsectionTitle(inner, tr::lng_settings_new_unknown());
|
|
||||||
|
|
||||||
const auto session = &controller->session();
|
|
||||||
|
|
||||||
const auto privacy = &session->api().globalPrivacy();
|
|
||||||
privacy->reload();
|
|
||||||
AddButton(
|
|
||||||
inner,
|
|
||||||
tr::lng_settings_auto_archive(),
|
|
||||||
st::settingsButtonNoIcon
|
|
||||||
)->toggleOn(
|
|
||||||
privacy->archiveAndMute()
|
|
||||||
)->toggledChanges(
|
|
||||||
) | rpl::filter([=](bool toggled) {
|
|
||||||
return toggled != privacy->archiveAndMuteCurrent();
|
|
||||||
}) | rpl::start_with_next([=](bool toggled) {
|
|
||||||
privacy->update(toggled);
|
|
||||||
}, container->lifetime());
|
|
||||||
|
|
||||||
AddSkip(inner);
|
|
||||||
AddDividerText(inner, tr::lng_settings_auto_archive_about());
|
|
||||||
|
|
||||||
auto shown = rpl::single(
|
|
||||||
false
|
|
||||||
) | rpl::then(session->api().globalPrivacy().showArchiveAndMute(
|
|
||||||
) | rpl::filter(_1) | rpl::take(1));
|
|
||||||
auto premium = Data::AmPremiumValue(&controller->session());
|
|
||||||
|
|
||||||
using namespace rpl::mappers;
|
|
||||||
wrap->toggleOn(rpl::combine(
|
|
||||||
std::move(shown),
|
|
||||||
std::move(premium),
|
|
||||||
_1 || _2));
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetupLocalPasscode(
|
void SetupLocalPasscode(
|
||||||
not_null<Window::SessionController*> controller,
|
not_null<Window::SessionController*> controller,
|
||||||
not_null<Ui::VerticalLayout*> container,
|
not_null<Ui::VerticalLayout*> container,
|
||||||
|
@ -838,6 +791,53 @@ void AddPrivacyButton(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetupArchiveAndMute(
|
||||||
|
not_null<Window::SessionController*> controller,
|
||||||
|
not_null<Ui::VerticalLayout*> container) {
|
||||||
|
using namespace rpl::mappers;
|
||||||
|
|
||||||
|
const auto wrap = container->add(
|
||||||
|
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
|
||||||
|
container,
|
||||||
|
object_ptr<Ui::VerticalLayout>(container)));
|
||||||
|
const auto inner = wrap->entity();
|
||||||
|
|
||||||
|
AddSkip(inner);
|
||||||
|
AddSubsectionTitle(inner, tr::lng_settings_new_unknown());
|
||||||
|
|
||||||
|
const auto session = &controller->session();
|
||||||
|
|
||||||
|
const auto privacy = &session->api().globalPrivacy();
|
||||||
|
privacy->reload();
|
||||||
|
AddButton(
|
||||||
|
inner,
|
||||||
|
tr::lng_settings_auto_archive(),
|
||||||
|
st::settingsButtonNoIcon
|
||||||
|
)->toggleOn(
|
||||||
|
privacy->archiveAndMute()
|
||||||
|
)->toggledChanges(
|
||||||
|
) | rpl::filter([=](bool toggled) {
|
||||||
|
return toggled != privacy->archiveAndMuteCurrent();
|
||||||
|
}) | rpl::start_with_next([=](bool toggled) {
|
||||||
|
privacy->updateArchiveAndMute(toggled);
|
||||||
|
}, container->lifetime());
|
||||||
|
|
||||||
|
AddSkip(inner);
|
||||||
|
AddDividerText(inner, tr::lng_settings_auto_archive_about());
|
||||||
|
|
||||||
|
auto shown = rpl::single(
|
||||||
|
false
|
||||||
|
) | rpl::then(session->api().globalPrivacy().showArchiveAndMute(
|
||||||
|
) | rpl::filter(_1) | rpl::take(1));
|
||||||
|
auto premium = Data::AmPremiumValue(&controller->session());
|
||||||
|
|
||||||
|
using namespace rpl::mappers;
|
||||||
|
wrap->toggleOn(rpl::combine(
|
||||||
|
std::move(shown),
|
||||||
|
std::move(premium),
|
||||||
|
_1 || _2));
|
||||||
|
}
|
||||||
|
|
||||||
PrivacySecurity::PrivacySecurity(
|
PrivacySecurity::PrivacySecurity(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
not_null<Window::SessionController*> controller)
|
not_null<Window::SessionController*> controller)
|
||||||
|
|
|
@ -35,6 +35,10 @@ void AddPrivacyButton(
|
||||||
Fn<std::unique_ptr<EditPrivacyController>()> controllerFactory,
|
Fn<std::unique_ptr<EditPrivacyController>()> controllerFactory,
|
||||||
const style::SettingsButton *stOverride = nullptr);
|
const style::SettingsButton *stOverride = nullptr);
|
||||||
|
|
||||||
|
void SetupArchiveAndMute(
|
||||||
|
not_null<Window::SessionController*> controller,
|
||||||
|
not_null<Ui::VerticalLayout*> container);
|
||||||
|
|
||||||
class PrivacySecurity : public Section<PrivacySecurity> {
|
class PrivacySecurity : public Section<PrivacySecurity> {
|
||||||
public:
|
public:
|
||||||
PrivacySecurity(
|
PrivacySecurity(
|
||||||
|
|
|
@ -34,6 +34,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "storage/localstorage.h"
|
#include "storage/localstorage.h"
|
||||||
#include "storage/storage_account.h"
|
#include "storage/storage_account.h"
|
||||||
#include "support/support_templates.h"
|
#include "support/support_templates.h"
|
||||||
|
#include "settings/settings_advanced.h"
|
||||||
#include "settings/settings_common.h"
|
#include "settings/settings_common.h"
|
||||||
#include "settings/settings_calls.h"
|
#include "settings/settings_calls.h"
|
||||||
#include "settings/settings_information.h"
|
#include "settings/settings_information.h"
|
||||||
|
@ -63,6 +64,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "data/data_changes.h"
|
#include "data/data_changes.h"
|
||||||
#include "data/data_stories.h"
|
#include "data/data_stories.h"
|
||||||
#include "mainwidget.h"
|
#include "mainwidget.h"
|
||||||
|
#include "styles/style_chat.h" // popupMenuExpandedSeparator
|
||||||
#include "styles/style_window.h"
|
#include "styles/style_window.h"
|
||||||
#include "styles/style_widgets.h"
|
#include "styles/style_widgets.h"
|
||||||
#include "styles/style_dialogs.h"
|
#include "styles/style_dialogs.h"
|
||||||
|
@ -602,7 +604,7 @@ void MainMenu::setupArchive() {
|
||||||
}
|
}
|
||||||
_contextMenu = base::make_unique_q<Ui::PopupMenu>(
|
_contextMenu = base::make_unique_q<Ui::PopupMenu>(
|
||||||
this,
|
this,
|
||||||
st::popupMenuWithIcons);
|
st::popupMenuExpandedSeparator);
|
||||||
const auto addAction = PeerMenuCallback([&](
|
const auto addAction = PeerMenuCallback([&](
|
||||||
PeerMenuCallback::Args a) {
|
PeerMenuCallback::Args a) {
|
||||||
return _contextMenu->addAction(
|
return _contextMenu->addAction(
|
||||||
|
@ -626,6 +628,12 @@ void MainMenu::setupArchive() {
|
||||||
[f = folder()] { return f->chatsList(); },
|
[f = folder()] { return f->chatsList(); },
|
||||||
addAction);
|
addAction);
|
||||||
|
|
||||||
|
_contextMenu->addSeparator();
|
||||||
|
Settings::PreloadArchiveSettings(&controller->session());
|
||||||
|
addAction(tr::lng_context_archive_settings(tr::now), [=] {
|
||||||
|
controller->show(Box(Settings::ArchiveSettingsBox, controller));
|
||||||
|
}, &st::menuIconManage);
|
||||||
|
|
||||||
_contextMenu->popup(QCursor::pos());
|
_contextMenu->popup(QCursor::pos());
|
||||||
}, button->lifetime());
|
}, button->lifetime());
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "window/window_adaptive.h" // Adaptive::isThreeColumn
|
#include "window/window_adaptive.h" // Adaptive::isThreeColumn
|
||||||
#include "window/window_session_controller.h"
|
#include "window/window_session_controller.h"
|
||||||
#include "window/window_controller.h"
|
#include "window/window_controller.h"
|
||||||
|
#include "settings/settings_advanced.h"
|
||||||
#include "support/support_helper.h"
|
#include "support/support_helper.h"
|
||||||
#include "info/info_memento.h"
|
#include "info/info_memento.h"
|
||||||
#include "info/info_controller.h"
|
#include "info/info_controller.h"
|
||||||
|
@ -1276,6 +1277,12 @@ void Filler::fillArchiveActions() {
|
||||||
controller,
|
controller,
|
||||||
[folder = _folder] { return folder->chatsList(); },
|
[folder = _folder] { return folder->chatsList(); },
|
||||||
_addAction);
|
_addAction);
|
||||||
|
|
||||||
|
_addAction({ .isSeparator = true });
|
||||||
|
Settings::PreloadArchiveSettings(&controller->session());
|
||||||
|
_addAction(tr::lng_context_archive_settings(tr::now), [=] {
|
||||||
|
controller->show(Box(Settings::ArchiveSettingsBox, controller));
|
||||||
|
}, &st::menuIconManage);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
Loading…
Reference in a new issue