From 65d81f96f354009b9c2d0443e9f7c93f1afec76d Mon Sep 17 00:00:00 2001
From: John Preston <johnprestonmail@gmail.com>
Date: Tue, 8 Aug 2017 11:56:10 +0200
Subject: [PATCH] Remove some App::wnd() occurences.

---
 Telegram/SourceFiles/facades.cpp            |  9 -----
 Telegram/SourceFiles/facades.h              |  2 -
 Telegram/SourceFiles/mainwindow.cpp         |  2 +-
 Telegram/SourceFiles/messenger.cpp          | 44 +++++++++++++++++----
 Telegram/SourceFiles/messenger.h            |  4 +-
 Telegram/SourceFiles/shortcuts.cpp          | 29 +++-----------
 Telegram/SourceFiles/window/main_window.cpp |  3 ++
 7 files changed, 49 insertions(+), 44 deletions(-)

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