mirror of
https://github.com/vale981/tdesktop
synced 2025-03-05 09:41:41 -05:00
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:
parent
6e1b6e6e53
commit
843089733b
4 changed files with 32 additions and 9 deletions
|
@ -912,13 +912,28 @@ void AppClass::checkLocalTime() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppClass::onAppStateChanged(Qt::ApplicationState state) {
|
void AppClass::onAppStateChanged(Qt::ApplicationState state) {
|
||||||
|
if (state == Qt::ApplicationActive) {
|
||||||
|
handleAppActivated();
|
||||||
|
} else {
|
||||||
|
handleAppDeactivated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppClass::handleAppActivated() {
|
||||||
checkLocalTime();
|
checkLocalTime();
|
||||||
if (_window) {
|
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() {
|
void AppClass::call_handleHistoryUpdate() {
|
||||||
|
|
|
@ -147,7 +147,6 @@ class AppClass : public QObject, public RPCSender {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
AppClass();
|
AppClass();
|
||||||
~AppClass();
|
~AppClass();
|
||||||
|
|
||||||
|
@ -176,6 +175,9 @@ public:
|
||||||
void checkLocalTime();
|
void checkLocalTime();
|
||||||
void checkMapVersion();
|
void checkMapVersion();
|
||||||
|
|
||||||
|
void handleAppActivated();
|
||||||
|
void handleAppDeactivated();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
void peerPhotoDone(PeerId peer);
|
void peerPhotoDone(PeerId peer);
|
||||||
|
|
|
@ -214,12 +214,13 @@ MainWindow::MainWindow()
|
||||||
|
|
||||||
void MainWindow::closeWithoutDestroy() {
|
void MainWindow::closeWithoutDestroy() {
|
||||||
NSWindow *nsWindow = [reinterpret_cast<NSView*>(winId()) window];
|
NSWindow *nsWindow = [reinterpret_cast<NSView*>(winId()) window];
|
||||||
bool isFullScreen = (([nsWindow styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask);
|
|
||||||
|
auto isFullScreen = (([nsWindow styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask);
|
||||||
if (isFullScreen) {
|
if (isFullScreen) {
|
||||||
_hideAfterFullScreenTimer.start(3000);
|
_hideAfterFullScreenTimer.start(3000);
|
||||||
[nsWindow toggleFullScreen:nsWindow];
|
[nsWindow toggleFullScreen:nsWindow];
|
||||||
} else {
|
} else {
|
||||||
hide();
|
[[NSApplication sharedApplication] hide: nsWindow];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,7 +248,8 @@ void MainWindow::titleVisibilityChangedHook() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::onHideAfterFullScreen() {
|
void MainWindow::onHideAfterFullScreen() {
|
||||||
hide();
|
NSWindow *nsWindow = [reinterpret_cast<NSView*>(winId()) window];
|
||||||
|
[[NSApplication sharedApplication] hide: nsWindow];
|
||||||
}
|
}
|
||||||
|
|
||||||
QImage MainWindow::psTrayIcon(bool selected) const {
|
QImage MainWindow::psTrayIcon(bool selected) const {
|
||||||
|
|
|
@ -121,11 +121,15 @@ ApplicationDelegate *_sharedDelegate = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)applicationDidBecomeActive:(NSNotification *)aNotification {
|
- (void)applicationDidBecomeActive:(NSNotification *)aNotification {
|
||||||
if (App::app()) App::app()->checkLocalTime();
|
if (App::app()) {
|
||||||
|
App::app()->handleAppActivated();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)receiveWakeNote:(NSNotification*)aNotification {
|
- (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"));
|
LOG(("Audio Info: -receiveWakeNote: received, scheduling detach from audio device"));
|
||||||
Media::Player::DetachFromDeviceByTimer();
|
Media::Player::DetachFromDeviceByTimer();
|
||||||
|
|
Loading…
Add table
Reference in a new issue