diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index d898d1e83..37b005223 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -912,13 +912,28 @@ void AppClass::checkLocalTime() { } void AppClass::onAppStateChanged(Qt::ApplicationState state) { + if (state == Qt::ApplicationActive) { + handleAppActivated(); + } else { + handleAppDeactivated(); + } +} + +void AppClass::handleAppActivated() { checkLocalTime(); if (_window) { - _window->updateIsActive((state == Qt::ApplicationActive) ? Global::OnlineFocusTimeout() : Global::OfflineBlurTimeout()); + if (_window->isHidden()) { + _window->showFromTray(); + } + _window->updateIsActive(Global::OnlineFocusTimeout()); } - if (state != Qt::ApplicationActive) { - Ui::Tooltip::Hide(); +} + +void AppClass::handleAppDeactivated() { + if (_window) { + _window->updateIsActive(Global::OfflineBlurTimeout()); } + Ui::Tooltip::Hide(); } void AppClass::call_handleHistoryUpdate() { diff --git a/Telegram/SourceFiles/application.h b/Telegram/SourceFiles/application.h index d728e68e3..4d73fe573 100644 --- a/Telegram/SourceFiles/application.h +++ b/Telegram/SourceFiles/application.h @@ -147,7 +147,6 @@ class AppClass : public QObject, public RPCSender { Q_OBJECT public: - AppClass(); ~AppClass(); @@ -176,6 +175,9 @@ public: void checkLocalTime(); void checkMapVersion(); + void handleAppActivated(); + void handleAppDeactivated(); + signals: void peerPhotoDone(PeerId peer); diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm index b591526c7..635825aaf 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm @@ -214,12 +214,13 @@ MainWindow::MainWindow() void MainWindow::closeWithoutDestroy() { NSWindow *nsWindow = [reinterpret_cast(winId()) window]; - bool isFullScreen = (([nsWindow styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask); + + auto isFullScreen = (([nsWindow styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask); if (isFullScreen) { _hideAfterFullScreenTimer.start(3000); [nsWindow toggleFullScreen:nsWindow]; } else { - hide(); + [[NSApplication sharedApplication] hide: nsWindow]; } } @@ -247,7 +248,8 @@ void MainWindow::titleVisibilityChangedHook() { } void MainWindow::onHideAfterFullScreen() { - hide(); + NSWindow *nsWindow = [reinterpret_cast(winId()) window]; + [[NSApplication sharedApplication] hide: nsWindow]; } QImage MainWindow::psTrayIcon(bool selected) const { diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index 44c55eb02..647e61160 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -121,11 +121,15 @@ ApplicationDelegate *_sharedDelegate = nil; } - (void)applicationDidBecomeActive:(NSNotification *)aNotification { - if (App::app()) App::app()->checkLocalTime(); + if (App::app()) { + App::app()->handleAppActivated(); + } } - (void)receiveWakeNote:(NSNotification*)aNotification { - if (App::app()) App::app()->checkLocalTime(); + if (App::app()) { + App::app()->checkLocalTime(); + } LOG(("Audio Info: -receiveWakeNote: received, scheduling detach from audio device")); Media::Player::DetachFromDeviceByTimer();