diff --git a/Telegram/SourceFiles/facades.cpp b/Telegram/SourceFiles/facades.cpp index 4b42c1907..ae66c1806 100644 --- a/Telegram/SourceFiles/facades.cpp +++ b/Telegram/SourceFiles/facades.cpp @@ -280,15 +280,6 @@ PeerData *getPeerForMouseAction() { return Messenger::Instance().ui_getPeerForMouseAction(); } -bool hideWindowNoQuit() { - if (!App::quitting()) { - if (auto w = App::wnd()) { - return w->hideNoQuit(); - } - } - return false; -} - bool skipPaintEvent(QWidget *widget, QPaintEvent *event) { if (auto w = App::wnd()) { if (w->contentOverlapped(widget, event)) { diff --git a/Telegram/SourceFiles/facades.h b/Telegram/SourceFiles/facades.h index ecc0175cd..6959df99f 100644 --- a/Telegram/SourceFiles/facades.h +++ b/Telegram/SourceFiles/facades.h @@ -147,8 +147,6 @@ inline void showChatsListAsync() { } PeerData *getPeerForMouseAction(); -bool hideWindowNoQuit(); - bool skipPaintEvent(QWidget *widget, QPaintEvent *event); } // namespace Ui diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index 3ea87a1b2..3ca6eaae8 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -776,7 +776,7 @@ void MainWindow::closeEvent(QCloseEvent *e) { App::quit(); } else { e->ignore(); - if (!AuthSession::Exists() || !Ui::hideWindowNoQuit()) { + if (!AuthSession::Exists() || !hideNoQuit()) { App::quit(); } } diff --git a/Telegram/SourceFiles/messenger.cpp b/Telegram/SourceFiles/messenger.cpp index f7d807718..f17652650 100644 --- a/Telegram/SourceFiles/messenger.cpp +++ b/Telegram/SourceFiles/messenger.cpp @@ -187,7 +187,9 @@ Messenger::Messenger() : QObject() bool Messenger::hideMediaView() { if (_mediaView && !_mediaView->isHidden()) { _mediaView->hide(); - _window->reActivateWindow(); + if (auto activeWindow = getActiveWindow()) { + activeWindow->reActivateWindow(); + } return true; } return false; @@ -930,10 +932,36 @@ Messenger::~Messenger() { SingleInstance = nullptr; } -MainWindow *Messenger::getActiveWindow() { +MainWindow *Messenger::getActiveWindow() const { return _window.get(); } +bool Messenger::closeActiveWindow() { + if (hideMediaView()) { + return true; + } + if (auto activeWindow = getActiveWindow()) { + if (!activeWindow->hideNoQuit()) { + activeWindow->close(); + } + return true; + } + return false; +} + +bool Messenger::minimizeActiveWindow() { + hideMediaView(); + if (auto activeWindow = getActiveWindow()) { + if (Global::WorkMode().value() == dbiwmTrayOnly) { + activeWindow->minimizeToTray(); + } else { + activeWindow->setWindowState(Qt::WindowMinimized); + } + return true; + } + return false; +} + QWidget *Messenger::getFileDialogParent() { return (_mediaView && _mediaView->isVisible()) ? (QWidget*)_mediaView.get() : (QWidget*)getActiveWindow(); } @@ -955,12 +983,14 @@ void Messenger::loggedOut() { } QPoint Messenger::getPointForCallPanelCenter() const { - Expects(_window != nullptr); - Expects(_window->windowHandle() != nullptr); - if (_window->isActive()) { - return _window->geometry().center(); + if (auto activeWindow = getActiveWindow()) { + t_assert(activeWindow->windowHandle() != nullptr); + if (activeWindow->isActive()) { + return activeWindow->geometry().center(); + } + return activeWindow->windowHandle()->screen()->geometry().center(); } - return _window->windowHandle()->screen()->geometry().center(); + return QApplication::desktop()->screenGeometry().center(); } void Messenger::QuitAttempt() { diff --git a/Telegram/SourceFiles/messenger.h b/Telegram/SourceFiles/messenger.h index b61555b6d..779bc85e2 100644 --- a/Telegram/SourceFiles/messenger.h +++ b/Telegram/SourceFiles/messenger.h @@ -71,7 +71,9 @@ public: ~Messenger(); // Windows interface. - MainWindow *getActiveWindow(); + MainWindow *getActiveWindow() const; + bool closeActiveWindow(); + bool minimizeActiveWindow(); QWidget *getFileDialogParent(); QWidget *getGlobalShortcutParent() { return &_globalShortcutParent; diff --git a/Telegram/SourceFiles/shortcuts.cpp b/Telegram/SourceFiles/shortcuts.cpp index 186646a48..c5eec18ee 100644 --- a/Telegram/SourceFiles/shortcuts.cpp +++ b/Telegram/SourceFiles/shortcuts.cpp @@ -33,38 +33,19 @@ namespace ShortcutCommands { using Handler = bool(*)(); bool lock_telegram() { - if (auto w = App::wnd()) { - if (App::passcoded()) { - w->passcodeWidget()->onSubmit(); - return true; - } else if (Global::LocalPasscode()) { - Messenger::Instance().setupPasscode(); - return true; - } + if (!App::passcoded() && Global::LocalPasscode()) { + Messenger::Instance().setupPasscode(); + return true; } return false; } bool minimize_telegram() { - if (auto w = App::wnd()) { - if (Global::WorkMode().value() == dbiwmTrayOnly) { - w->minimizeToTray(); - } else { - w->setWindowState(Qt::WindowMinimized); - } - } - return true; + return Messenger::Instance().minimizeActiveWindow(); } bool close_telegram() { - if (!Messenger::Instance().hideMediaView()) { - if (!Ui::hideWindowNoQuit()) { - if (auto w = App::wnd()) { - w->close(); - } - } - } - return true; + return Messenger::Instance().closeActiveWindow(); } bool quit_telegram() { diff --git a/Telegram/SourceFiles/window/main_window.cpp b/Telegram/SourceFiles/window/main_window.cpp index d926e73fb..aadf950d4 100644 --- a/Telegram/SourceFiles/window/main_window.cpp +++ b/Telegram/SourceFiles/window/main_window.cpp @@ -80,6 +80,9 @@ MainWindow::MainWindow() : QWidget() } bool MainWindow::hideNoQuit() { + if (App::quitting()) { + return false; + } if (Global::WorkMode().value() == dbiwmTrayOnly || Global::WorkMode().value() == dbiwmWindowAndTray) { if (minimizeToTray()) { Ui::showChatsList();