Moved DBIWorkMode to Core::Settings.

This commit is contained in:
23rd 2021-05-28 01:11:16 +03:00
parent da3e140069
commit 707b36dc12
16 changed files with 63 additions and 52 deletions

View File

@ -525,11 +525,11 @@ void Settings::addFromSerialized(const QByteArray &serialized) {
|| Ui::Integration::Instance().openglLastCheckFailed());
}
_groupCallNoiseSuppression = (groupCallNoiseSuppression == 1);
const auto uncheckedWorkMode = static_cast<DBIWorkMode>(workMode);
const auto uncheckedWorkMode = static_cast<WorkMode>(workMode);
switch (uncheckedWorkMode) {
case dbiwmWindowAndTray:
case dbiwmTrayOnly:
case dbiwmWindowOnly: _workMode = uncheckedWorkMode; break;
case WorkMode::WindowAndTray:
case WorkMode::TrayOnly:
case WorkMode::WindowOnly: _workMode = uncheckedWorkMode; break;
}
}
@ -791,7 +791,7 @@ void Settings::resetOnLastLogout() {
_recentEmoji.clear();
_emojiVariants.clear();
_workMode = dbiwmWindowAndTray;
_workMode = WorkMode::WindowAndTray;
}
bool Settings::ThirdColumnByDefault() {

View File

@ -53,6 +53,11 @@ public:
ShowName = 1,
ShowNothing = 2,
};
enum class WorkMode {
WindowAndTray = 0,
TrayOnly = 1,
WindowOnly = 2,
};
static constexpr auto kDefaultVolume = 0.9;
@ -526,16 +531,16 @@ public:
void setWindowPosition(const WindowPosition &position) {
_windowPosition = position;
}
void setWorkMode(DBIWorkMode value) {
void setWorkMode(WorkMode value) {
_workMode = value;
}
[[nodiscard]] DBIWorkMode workMode() const {
[[nodiscard]] WorkMode workMode() const {
return _workMode.current();
}
[[nodiscard]] rpl::producer<DBIWorkMode> workModeValue() const {
[[nodiscard]] rpl::producer<WorkMode> workModeValue() const {
return _workMode.value();
}
[[nodiscard]] rpl::producer<DBIWorkMode> workModeChanges() const {
[[nodiscard]] rpl::producer<WorkMode> workModeChanges() const {
return _workMode.changes();
}
@ -658,7 +663,7 @@ private:
rpl::variable<bool> _systemDarkModeEnabled = false;
WindowPosition _windowPosition; // per-window
bool _disableOpenGL = false;
rpl::variable<DBIWorkMode> _workMode = dbiwmWindowAndTray;
rpl::variable<WorkMode> _workMode = WorkMode::WindowAndTray;
bool _tabbedReplacedWithInfo = false; // per-window
rpl::event_stream<bool> _tabbedReplacedWithInfoValue; // per-window

View File

@ -121,12 +121,6 @@ void memset_rand(void *data, uint32 len);
QString translitRusEng(const QString &rus);
QString rusKeyboardLayoutSwitch(const QString &from);
enum DBIWorkMode {
dbiwmWindowAndTray = 0,
dbiwmTrayOnly = 1,
dbiwmWindowOnly = 2,
};
static const int MatrixRowShift = 40000;
inline int rowscount(int fullCount, int countPerRow) {

View File

@ -188,7 +188,8 @@ void MainWindow::applyInitialWorkMode() {
const auto minimizeAndHide = [=] {
DEBUG_LOG(("Window Pos: First show, setting minimized after."));
setWindowState(windowState() | Qt::WindowMinimized);
if (workMode == dbiwmTrayOnly || workMode == dbiwmWindowAndTray) {
if (workMode == Core::Settings::WorkMode::TrayOnly
|| workMode == Core::Settings::WorkMode::WindowAndTray) {
hide();
}
};

View File

@ -61,6 +61,7 @@ namespace Platform {
namespace {
using internal::WaylandIntegration;
using WorkMode = Core::Settings::WorkMode;
constexpr auto kPanelTrayIconName = "telegram-panel"_cs;
constexpr auto kMutePanelTrayIconName = "telegram-mute-panel"_cs;
@ -809,7 +810,7 @@ void MainWindow::handleSNIHostRegistered() {
_sniAvailable = true;
if (Core::App().settings().workMode() == dbiwmWindowOnly) {
if (Core::App().settings().workMode() == WorkMode::WindowOnly) {
return;
}
@ -825,7 +826,7 @@ void MainWindow::handleSNIHostRegistered() {
SkipTaskbar(
windowHandle(),
Core::App().settings().workMode() == dbiwmTrayOnly);
Core::App().settings().workMode() == WorkMode::TrayOnly);
}
void MainWindow::handleSNIOwnerChanged(
@ -834,7 +835,7 @@ void MainWindow::handleSNIOwnerChanged(
const QString &newOwner) {
_sniAvailable = IsSNIAvailable();
if (Core::App().settings().workMode() == dbiwmWindowOnly) {
if (Core::App().settings().workMode() == WorkMode::WindowOnly) {
return;
}
@ -860,7 +861,7 @@ void MainWindow::handleSNIOwnerChanged(
SkipTaskbar(
windowHandle(),
(Core::App().settings().workMode() == dbiwmTrayOnly)
(Core::App().settings().workMode() == WorkMode::TrayOnly)
&& trayAvailable());
}
@ -918,10 +919,10 @@ void MainWindow::psSetupTrayIcon() {
}
}
void MainWindow::workmodeUpdated(DBIWorkMode mode) {
void MainWindow::workmodeUpdated(Core::Settings::WorkMode mode) {
if (!trayAvailable()) {
return;
} else if (mode == dbiwmWindowOnly) {
} else if (mode == WorkMode::WindowOnly) {
#ifndef DESKTOP_APP_DISABLE_DBUS_INTEGRATION
if (_sniTrayIcon) {
_sniTrayIcon->setContextMenu(0);
@ -939,7 +940,7 @@ void MainWindow::workmodeUpdated(DBIWorkMode mode) {
psSetupTrayIcon();
}
SkipTaskbar(windowHandle(), mode == dbiwmTrayOnly);
SkipTaskbar(windowHandle(), mode == WorkMode::TrayOnly);
}
void MainWindow::unreadCounterChangedHook() {
@ -1331,7 +1332,7 @@ void MainWindow::handleNativeSurfaceChanged(bool exist) {
if (exist) {
SkipTaskbar(
windowHandle(),
(Core::App().settings().workMode() == dbiwmTrayOnly)
(Core::App().settings().workMode() == WorkMode::TrayOnly)
&& trayAvailable());
}

View File

@ -51,7 +51,7 @@ protected:
void initTrayMenuHook() override;
bool hasTrayIcon() const override;
void workmodeUpdated(DBIWorkMode mode) override;
void workmodeUpdated(Core::Settings::WorkMode mode) override;
void createGlobalMenu() override;
QSystemTrayIcon *trayIcon = nullptr;

View File

@ -71,7 +71,7 @@ protected:
void updateGlobalMenuHook() override;
void workmodeUpdated(DBIWorkMode mode) override;
void workmodeUpdated(Core::Settings::WorkMode mode) override;
QSystemTrayIcon *trayIcon = nullptr;
QMenu *trayIconMenu = nullptr;

View File

@ -541,9 +541,9 @@ void MainWindow::psSetupTrayIcon() {
trayIcon->show();
}
void MainWindow::workmodeUpdated(DBIWorkMode mode) {
void MainWindow::workmodeUpdated(Core::Settings::WorkMode mode) {
psSetupTrayIcon();
if (mode == dbiwmWindowOnly) {
if (mode == Core::Settings::WorkMode::WindowOnly) {
if (trayIcon) {
trayIcon->setContextMenu(0);
delete trayIcon;

View File

@ -234,7 +234,7 @@ Manager::Private::Private(Manager *manager)
, _managerIdString(QString::number(_managerId))
, _delegate([[NotificationDelegate alloc] initWithManager:manager managerId:_managerId]) {
Core::App().settings().workModeValue(
) | rpl::start_with_next([=](DBIWorkMode mode) {
) | rpl::start_with_next([=](Core::Settings::WorkMode mode) {
// We need to update the delegate _after_ the tray icon change was done in Qt.
// Because Qt resets the delegate.
crl::on_main(this, [=] {

View File

@ -268,9 +268,11 @@ void MainWindow::showTrayTooltip() {
}
}
void MainWindow::workmodeUpdated(DBIWorkMode mode) {
void MainWindow::workmodeUpdated(Core::Settings::WorkMode mode) {
using WorkMode = Core::Settings::WorkMode;
switch (mode) {
case dbiwmWindowAndTray: {
case WorkMode::WindowAndTray: {
psSetupTrayIcon();
HWND psOwner = (HWND)GetWindowLongPtr(ps_hWnd, GWLP_HWNDPARENT);
if (psOwner) {
@ -279,7 +281,7 @@ void MainWindow::workmodeUpdated(DBIWorkMode mode) {
}
} break;
case dbiwmTrayOnly: {
case WorkMode::TrayOnly: {
psSetupTrayIcon();
HWND psOwner = (HWND)GetWindowLongPtr(ps_hWnd, GWLP_HWNDPARENT);
if (!psOwner) {
@ -287,7 +289,7 @@ void MainWindow::workmodeUpdated(DBIWorkMode mode) {
}
} break;
case dbiwmWindowOnly: {
case WorkMode::WindowOnly: {
if (trayIcon) {
trayIcon->setContextMenu(0);
trayIcon->deleteLater();

View File

@ -85,7 +85,7 @@ protected:
void showTrayTooltip() override;
void workmodeUpdated(DBIWorkMode mode) override;
void workmodeUpdated(Core::Settings::WorkMode mode) override;
bool initSizeFromSystem() override;

View File

@ -318,6 +318,8 @@ void SetupSpellchecker(
void SetupSystemIntegrationContent(
Window::SessionController *controller,
not_null<Ui::VerticalLayout*> container) {
using WorkMode = Core::Settings::WorkMode;
const auto checkbox = [&](rpl::producer<QString> &&label, bool checked) {
return object_ptr<Ui::Checkbox>(
container,
@ -344,8 +346,8 @@ void SetupSystemIntegrationContent(
if (Platform::TrayIconSupported()) {
const auto trayEnabled = [] {
const auto workMode = Core::App().settings().workMode();
return (workMode == dbiwmTrayOnly)
|| (workMode == dbiwmWindowAndTray);
return (workMode == WorkMode::TrayOnly)
|| (workMode == WorkMode::WindowAndTray);
};
const auto tray = addCheckbox(
tr::lng_settings_workmode_tray(),
@ -353,8 +355,8 @@ void SetupSystemIntegrationContent(
const auto taskbarEnabled = [] {
const auto workMode = Core::App().settings().workMode();
return (workMode == dbiwmWindowOnly)
|| (workMode == dbiwmWindowAndTray);
return (workMode == WorkMode::WindowOnly)
|| (workMode == WorkMode::WindowAndTray);
};
const auto taskbar = Platform::SkipTaskbarSupported()
? addCheckbox(
@ -365,10 +367,11 @@ void SetupSystemIntegrationContent(
const auto updateWorkmode = [=] {
const auto newMode = tray->checked()
? ((!taskbar || taskbar->checked())
? dbiwmWindowAndTray
: dbiwmTrayOnly)
: dbiwmWindowOnly;
if ((newMode == dbiwmWindowAndTray || newMode == dbiwmTrayOnly)
? WorkMode::WindowAndTray
: WorkMode::TrayOnly)
: WorkMode::WindowOnly;
if ((newMode == WorkMode::WindowAndTray
|| newMode == WorkMode::TrayOnly)
&& Core::App().settings().workMode() != newMode) {
cSetSeenTrayTooltip(false);
}

View File

@ -428,11 +428,12 @@ bool ReadSetting(
if (!CheckStreamStatus(stream)) return false;
const auto newMode = [v] {
switch (v) {
case dbiwmTrayOnly: return dbiwmTrayOnly;
case dbiwmWindowOnly: return dbiwmWindowOnly;
using WorkMode = Core::Settings::WorkMode;
switch (static_cast<WorkMode>(v)) {
case WorkMode::TrayOnly: return WorkMode::TrayOnly;
case WorkMode::WindowOnly: return WorkMode::WindowOnly;
};
return dbiwmWindowAndTray;
return WorkMode::WindowAndTray;
}();
Core::App().settings().setWorkMode(newMode);

View File

@ -179,7 +179,7 @@ MainWindow::MainWindow(not_null<Controller*> controller)
}, lifetime());
Core::App().settings().workModeChanges(
) | rpl::start_with_next([=](DBIWorkMode mode) {
) | rpl::start_with_next([=](Core::Settings::WorkMode mode) {
workmodeUpdated(mode);
}, lifetime());
@ -211,7 +211,8 @@ bool MainWindow::hideNoQuit() {
return false;
}
const auto workMode = Core::App().settings().workMode();
if (workMode == dbiwmTrayOnly || workMode == dbiwmWindowAndTray) {
if (workMode == Core::Settings::WorkMode::TrayOnly
|| workMode == Core::Settings::WorkMode::WindowAndTray) {
if (minimizeToTray()) {
if (const auto controller = sessionController()) {
Ui::showChatsList(&controller->session());
@ -316,8 +317,9 @@ void MainWindow::handleStateChanged(Qt::WindowState state) {
controller().updateIsActiveFocus();
}
Core::App().updateNonIdle();
using WorkMode = Core::Settings::WorkMode;
if (state == Qt::WindowMinimized
&& (Core::App().settings().workMode() == dbiwmTrayOnly)) {
&& (Core::App().settings().workMode() == WorkMode::TrayOnly)) {
minimizeToTray();
}
savePosition(state);

View File

@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/rp_widget.h"
#include "base/timer.h"
#include "base/object_ptr.h"
#include "core/core_settings.h"
#include <QtWidgets/QSystemTrayIcon>
@ -174,7 +175,7 @@ protected:
virtual void showTrayTooltip() {
}
virtual void workmodeUpdated(DBIWorkMode mode) {
virtual void workmodeUpdated(Core::Settings::WorkMode mode) {
}
virtual void createGlobalMenu() {

View File

@ -316,7 +316,8 @@ void Controller::updateIsActive() {
}
void Controller::minimize() {
if (Core::App().settings().workMode() == dbiwmTrayOnly) {
if (Core::App().settings().workMode()
== Core::Settings::WorkMode::TrayOnly) {
_widget.minimizeToTray();
} else {
_widget.setWindowState(_widget.windowState() | Qt::WindowMinimized);