Better handle window hide / activate in macOS. #1278

When we hide window by 'x' title button or by cmd+w key we try to
deactivate the whole application (so some other app gets activated).

When we activate the application in any way we check if the main
window is hidden and if it is - we show it and activate it.
This commit is contained in:
John Preston 2017-02-18 16:32:38 +03:00
parent 6e1b6e6e53
commit 843089733b
4 changed files with 32 additions and 9 deletions

View File

@ -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() {

View File

@ -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);

View File

@ -214,12 +214,13 @@ MainWindow::MainWindow()
void MainWindow::closeWithoutDestroy() {
NSWindow *nsWindow = [reinterpret_cast<NSView*>(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<NSView*>(winId()) window];
[[NSApplication sharedApplication] hide: nsWindow];
}
QImage MainWindow::psTrayIcon(bool selected) const {

View File

@ -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();