Add option to use old tray icon.

New monochrome icon is default for the new installations.

Fixes #26983, fixes #26988, fixes #26989, fixes #26991, fixes #27005.
This commit is contained in:
John Preston 2023-10-30 11:16:17 +04:00
parent f306b11676
commit a57eecd420
9 changed files with 83 additions and 19 deletions

View File

@ -546,6 +546,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_settings_workmode_tray" = "Show tray icon"; "lng_settings_workmode_tray" = "Show tray icon";
"lng_settings_workmode_window" = "Show taskbar icon"; "lng_settings_workmode_window" = "Show taskbar icon";
"lng_settings_close_to_taskbar" = "Close to taskbar"; "lng_settings_close_to_taskbar" = "Close to taskbar";
"lng_settings_monochrome_icon" = "Use monochrome icon";
"lng_settings_window_system" = "Window title"; "lng_settings_window_system" = "Window title";
"lng_settings_title_chat_name" = "Show chat name"; "lng_settings_title_chat_name" = "Show chat name";
"lng_settings_title_account_name" = "Show active account"; "lng_settings_title_account_name" = "Show active account";

View File

@ -344,6 +344,8 @@ QByteArray Settings::serialize() const {
for (const auto &id : _recentEmojiSkip) { for (const auto &id : _recentEmojiSkip) {
stream << id; stream << id;
} }
stream
<< qint32(_trayIconMonochrome.current() ? 1 : 0);
} }
return result; return result;
} }
@ -451,6 +453,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) {
quint64 macRoundIconDigest = _macRoundIconDigest.value_or(0); quint64 macRoundIconDigest = _macRoundIconDigest.value_or(0);
qint32 storiesClickTooltipHidden = _storiesClickTooltipHidden.current() ? 1 : 0; qint32 storiesClickTooltipHidden = _storiesClickTooltipHidden.current() ? 1 : 0;
base::flat_set<QString> recentEmojiSkip; base::flat_set<QString> recentEmojiSkip;
qint32 trayIconMonochrome = (_trayIconMonochrome.current() ? 1 : 0);
stream >> themesAccentColors; stream >> themesAccentColors;
if (!stream.atEnd()) { if (!stream.atEnd()) {
@ -701,6 +704,12 @@ void Settings::addFromSerialized(const QByteArray &serialized) {
} }
} }
} }
if (!stream.atEnd()) {
stream >> trayIconMonochrome;
} else {
// Let existing clients use the old value.
trayIconMonochrome = 0;
}
if (stream.status() != QDataStream::Ok) { if (stream.status() != QDataStream::Ok) {
LOG(("App Error: " LOG(("App Error: "
"Bad data for Core::Settings::constructFromSerialized()")); "Bad data for Core::Settings::constructFromSerialized()"));
@ -894,6 +903,7 @@ void Settings::addFromSerialized(const QByteArray &serialized) {
_macRoundIconDigest = macRoundIconDigest ? macRoundIconDigest : std::optional<uint64>(); _macRoundIconDigest = macRoundIconDigest ? macRoundIconDigest : std::optional<uint64>();
_storiesClickTooltipHidden = (storiesClickTooltipHidden == 1); _storiesClickTooltipHidden = (storiesClickTooltipHidden == 1);
_recentEmojiSkip = std::move(recentEmojiSkip); _recentEmojiSkip = std::move(recentEmojiSkip);
_trayIconMonochrome = (trayIconMonochrome == 1);
} }
QString Settings::getSoundPath(const QString &key) const { QString Settings::getSoundPath(const QString &key) const {

View File

@ -702,6 +702,15 @@ public:
[[nodiscard]] rpl::producer<bool> closeToTaskbarChanges() const { [[nodiscard]] rpl::producer<bool> closeToTaskbarChanges() const {
return _closeToTaskbar.changes(); return _closeToTaskbar.changes();
} }
void setTrayIconMonochrome(bool value) {
_trayIconMonochrome = value;
}
[[nodiscard]] bool trayIconMonochrome() const {
return _trayIconMonochrome.current();
}
[[nodiscard]] rpl::producer<bool> trayIconMonochromeChanges() const {
return _trayIconMonochrome.changes();
}
void setCustomDeviceModel(const QString &model) { void setCustomDeviceModel(const QString &model) {
_customDeviceModel = model; _customDeviceModel = model;
@ -918,6 +927,7 @@ private:
rpl::variable<WorkMode> _workMode = WorkMode::WindowAndTray; rpl::variable<WorkMode> _workMode = WorkMode::WindowAndTray;
base::flags<Calls::Group::StickedTooltip> _hiddenGroupCallTooltips; base::flags<Calls::Group::StickedTooltip> _hiddenGroupCallTooltips;
rpl::variable<bool> _closeToTaskbar = false; rpl::variable<bool> _closeToTaskbar = false;
rpl::variable<bool> _trayIconMonochrome = true;
rpl::variable<QString> _customDeviceModel; rpl::variable<QString> _customDeviceModel;
rpl::variable<Media::RepeatMode> _playerRepeatMode; rpl::variable<Media::RepeatMode> _playerRepeatMode;
rpl::variable<Media::OrderMode> _playerOrderMode; rpl::variable<Media::OrderMode> _playerOrderMode;

View File

@ -67,4 +67,8 @@ private:
}; };
inline bool HasMonochromeSetting() {
return false;
}
} // namespace Platform } // namespace Platform

View File

@ -55,4 +55,8 @@ private:
}; };
inline bool HasMonochromeSetting() {
return false;
}
} // namespace Platform } // namespace Platform

View File

@ -11,6 +11,8 @@ namespace Platform {
class Tray; class Tray;
[[nodiscard]] bool HasMonochromeSetting();
} // namespace Platform } // namespace Platform
// Platform dependent implementations. // Platform dependent implementations.

View File

@ -221,18 +221,19 @@ void Tray::updateIcon() {
: !controller->sessionController() : !controller->sessionController()
? nullptr ? nullptr
: &controller->sessionController()->session(); : &controller->sessionController()->session();
const auto monochrome = Core::App().settings().trayIconMonochrome();
const auto supportMode = session && session->supportMode(); const auto supportMode = session && session->supportMode();
const auto iconSizeWidth = GetSystemMetrics(SM_CXSMICON); const auto iconSizeWidth = GetSystemMetrics(SM_CXSMICON);
auto iconSmallPixmap16 = Tray::IconWithCounter( auto iconSmallPixmap16 = Tray::IconWithCounter(
CounterLayerArgs(16, counter, muted), CounterLayerArgs(16, counter, muted),
true, true,
true, monochrome,
supportMode); supportMode);
auto iconSmallPixmap32 = Tray::IconWithCounter( auto iconSmallPixmap32 = Tray::IconWithCounter(
CounterLayerArgs(32, counter, muted), CounterLayerArgs(32, counter, muted),
true, true,
true, monochrome,
supportMode); supportMode);
auto iconSmall = QIcon(); auto iconSmall = QIcon();
iconSmall.addPixmap(iconSmallPixmap16); iconSmall.addPixmap(iconSmallPixmap16);
@ -339,8 +340,15 @@ QPixmap Tray::IconWithCounter(
bool smallIcon, bool smallIcon,
bool monochrome, bool monochrome,
bool supportMode) { bool supportMode) {
return Ui::PixmapFromImage( return Ui::PixmapFromImage(ImageIconWithCounter(
ImageIconWithCounter(std::move(args), supportMode, smallIcon, monochrome)); std::move(args),
supportMode,
smallIcon,
monochrome));
}
bool HasMonochromeSetting() {
return IsDarkTaskbar().has_value();
} }
} // namespace Platform } // namespace Platform

View File

@ -453,18 +453,35 @@ void SetupSystemIntegrationContent(
st::settingsCheckboxPadding)); st::settingsCheckboxPadding));
}; };
const auto settings = &Core::App().settings();
if (Platform::TrayIconSupported()) { if (Platform::TrayIconSupported()) {
const auto trayEnabled = [] { const auto trayEnabled = [=] {
const auto workMode = Core::App().settings().workMode(); const auto workMode = settings->workMode();
return (workMode == WorkMode::TrayOnly) return (workMode == WorkMode::TrayOnly)
|| (workMode == WorkMode::WindowAndTray); || (workMode == WorkMode::WindowAndTray);
}; };
const auto tray = addCheckbox( const auto tray = addCheckbox(
tr::lng_settings_workmode_tray(), tr::lng_settings_workmode_tray(),
trayEnabled()); trayEnabled());
const auto monochrome = Platform::HasMonochromeSetting()
? addSlidingCheckbox(
tr::lng_settings_monochrome_icon(),
settings->trayIconMonochrome())
: nullptr;
if (monochrome) {
monochrome->toggle(tray->checked(), anim::type::instant);
const auto taskbarEnabled = [] { monochrome->entity()->checkedChanges(
const auto workMode = Core::App().settings().workMode(); ) | rpl::filter([=](bool value) {
return (value != settings->trayIconMonochrome());
}) | rpl::start_with_next([=](bool value) {
settings->setTrayIconMonochrome(value);
Core::App().saveSettingsDelayed();
}, monochrome->lifetime());
}
const auto taskbarEnabled = [=] {
const auto workMode = settings->workMode();
return (workMode == WorkMode::WindowOnly) return (workMode == WorkMode::WindowOnly)
|| (workMode == WorkMode::WindowAndTray); || (workMode == WorkMode::WindowAndTray);
}; };
@ -482,10 +499,10 @@ void SetupSystemIntegrationContent(
: WorkMode::WindowOnly; : WorkMode::WindowOnly;
if ((newMode == WorkMode::WindowAndTray if ((newMode == WorkMode::WindowAndTray
|| newMode == WorkMode::TrayOnly) || newMode == WorkMode::TrayOnly)
&& Core::App().settings().workMode() != newMode) { && settings->workMode() != newMode) {
cSetSeenTrayTooltip(false); cSetSeenTrayTooltip(false);
} }
Core::App().settings().setWorkMode(newMode); settings->setWorkMode(newMode);
Core::App().saveSettingsDelayed(); Core::App().saveSettingsDelayed();
}; };
@ -498,6 +515,9 @@ void SetupSystemIntegrationContent(
} else { } else {
updateWorkmode(); updateWorkmode();
} }
if (monochrome) {
monochrome->toggle(checked, anim::type::normal);
}
}, tray->lifetime()); }, tray->lifetime());
if (taskbar) { if (taskbar) {
@ -519,19 +539,19 @@ void SetupSystemIntegrationContent(
tr::lng_settings_mac_warn_before_quit( tr::lng_settings_mac_warn_before_quit(
lt_text, lt_text,
rpl::single(Platform::ConfirmQuit::QuitKeysString())), rpl::single(Platform::ConfirmQuit::QuitKeysString())),
Core::App().settings().macWarnBeforeQuit()); settings->macWarnBeforeQuit());
warnBeforeQuit->checkedChanges( warnBeforeQuit->checkedChanges(
) | rpl::filter([=](bool checked) { ) | rpl::filter([=](bool checked) {
return (checked != Core::App().settings().macWarnBeforeQuit()); return (checked != settings->macWarnBeforeQuit());
}) | rpl::start_with_next([=](bool checked) { }) | rpl::start_with_next([=](bool checked) {
Core::App().settings().setMacWarnBeforeQuit(checked); settings->setMacWarnBeforeQuit(checked);
Core::App().saveSettingsDelayed(); Core::App().saveSettingsDelayed();
}, warnBeforeQuit->lifetime()); }, warnBeforeQuit->lifetime());
#ifndef OS_MAC_STORE #ifndef OS_MAC_STORE
const auto enabled = [] { const auto enabled = [] {
const auto digest = base::Platform::CurrentCustomAppIconDigest(); const auto digest = base::Platform::CurrentCustomAppIconDigest();
return digest && (Core::App().settings().macRoundIconDigest() == digest); return digest && (settings->macRoundIconDigest() == digest);
}; };
const auto roundIcon = addCheckbox( const auto roundIcon = addCheckbox(
tr::lng_settings_mac_round_icon(), tr::lng_settings_mac_round_icon(),
@ -548,7 +568,7 @@ void SetupSystemIntegrationContent(
} }
Window::OverrideApplicationIcon(checked ? IconMacRound() : QImage()); Window::OverrideApplicationIcon(checked ? IconMacRound() : QImage());
Core::App().refreshApplicationIcon(); Core::App().refreshApplicationIcon();
Core::App().settings().setMacRoundIconDigest(digest); settings->setMacRoundIconDigest(digest);
Core::App().saveSettings(); Core::App().saveSettings();
}, roundIcon->lifetime()); }, roundIcon->lifetime());
#endif // OS_MAC_STORE #endif // OS_MAC_STORE
@ -557,10 +577,10 @@ void SetupSystemIntegrationContent(
if (!Platform::RunInBackground()) { if (!Platform::RunInBackground()) {
const auto closeToTaskbar = addSlidingCheckbox( const auto closeToTaskbar = addSlidingCheckbox(
tr::lng_settings_close_to_taskbar(), tr::lng_settings_close_to_taskbar(),
Core::App().settings().closeToTaskbar()); settings->closeToTaskbar());
const auto closeToTaskbarShown = std::make_shared<rpl::variable<bool>>(false); const auto closeToTaskbarShown = std::make_shared<rpl::variable<bool>>(false);
Core::App().settings().workModeValue( settings->workModeValue(
) | rpl::start_with_next([=](WorkMode workMode) { ) | rpl::start_with_next([=](WorkMode workMode) {
*closeToTaskbarShown = !Core::App().tray().has(); *closeToTaskbarShown = !Core::App().tray().has();
}, closeToTaskbar->lifetime()); }, closeToTaskbar->lifetime());
@ -568,9 +588,9 @@ void SetupSystemIntegrationContent(
closeToTaskbar->toggleOn(closeToTaskbarShown->value()); closeToTaskbar->toggleOn(closeToTaskbarShown->value());
closeToTaskbar->entity()->checkedChanges( closeToTaskbar->entity()->checkedChanges(
) | rpl::filter([=](bool checked) { ) | rpl::filter([=](bool checked) {
return (checked != Core::App().settings().closeToTaskbar()); return (checked != settings->closeToTaskbar());
}) | rpl::start_with_next([=](bool checked) { }) | rpl::start_with_next([=](bool checked) {
Core::App().settings().setCloseToTaskbar(checked); settings->setCloseToTaskbar(checked);
Local::writeSettings(); Local::writeSettings();
}, closeToTaskbar->lifetime()); }, closeToTaskbar->lifetime());
} }

View File

@ -39,6 +39,11 @@ void Tray::create() {
} }
}, _tray.lifetime()); }, _tray.lifetime());
Core::App().settings().trayIconMonochromeChanges(
) | rpl::start_with_next([=] {
updateIconCounters();
}, _tray.lifetime());
Core::App().passcodeLockChanges( Core::App().passcodeLockChanges(
) | rpl::start_with_next([=] { ) | rpl::start_with_next([=] {
rebuildMenu(); rebuildMenu();