From 47f9978c462d3fa90734b6e0e8339490b438fc77 Mon Sep 17 00:00:00 2001
From: John Preston <johnprestonmail@gmail.com>
Date: Mon, 3 Feb 2020 13:50:26 +0400
Subject: [PATCH] Double click on PiP to switch back to fullscreen.

---
 .../SourceFiles/media/view/media_view_pip.cpp     | 15 +++++++++++++++
 Telegram/SourceFiles/media/view/media_view_pip.h  |  2 ++
 2 files changed, 17 insertions(+)

diff --git a/Telegram/SourceFiles/media/view/media_view_pip.cpp b/Telegram/SourceFiles/media/view/media_view_pip.cpp
index 8d59f2b82..bde3895bb 100644
--- a/Telegram/SourceFiles/media/view/media_view_pip.cpp
+++ b/Telegram/SourceFiles/media/view/media_view_pip.cpp
@@ -734,6 +734,9 @@ void Pip::setupPanel() {
 		case QEvent::MouseButtonRelease:
 			handleMouseRelease(static_cast<QMouseEvent*>(e.get())->button());
 			break;
+		case QEvent::MouseButtonDblClick:
+			handleDoubleClick(static_cast<QMouseEvent*>(e.get())->button());
+			break;
 		}
 	}, _panel.lifetime());
 }
@@ -797,9 +800,11 @@ void Pip::handleMouseRelease(Qt::MouseButton button) {
 		|| _panel.dragging()
 		|| !pressed
 		|| *pressed != _over) {
+		_lastHandledPress = std::nullopt;
 		return;
 	}
 
+	_lastHandledPress = _over;
 	switch (_over) {
 	case OverState::Close: _panel.close(); break;
 	case OverState::Enlarge: _closeAndContinue(); break;
@@ -807,6 +812,16 @@ void Pip::handleMouseRelease(Qt::MouseButton button) {
 	}
 }
 
+void Pip::handleDoubleClick(Qt::MouseButton button) {
+	if (_over != OverState::Other
+		|| !_lastHandledPress
+		|| *_lastHandledPress != _over) {
+		return;
+	}
+	playbackPauseResume(); // Un-click the first click.
+	_closeAndContinue();
+}
+
 void Pip::setupButtons() {
 	_close.state = OverState::Close;
 	_enlarge.state = OverState::Enlarge;
diff --git a/Telegram/SourceFiles/media/view/media_view_pip.h b/Telegram/SourceFiles/media/view/media_view_pip.h
index 7ad917029..d59294f11 100644
--- a/Telegram/SourceFiles/media/view/media_view_pip.h
+++ b/Telegram/SourceFiles/media/view/media_view_pip.h
@@ -153,6 +153,7 @@ private:
 	void handleMouseMove(QPoint position);
 	void handleMousePress(Qt::MouseButton button);
 	void handleMouseRelease(Qt::MouseButton button);
+	void handleDoubleClick(Qt::MouseButton button);
 	void handleLeave();
 	void handleClose();
 
@@ -166,6 +167,7 @@ private:
 	bool _showPause = false;
 	OverState _over = OverState::None;
 	std::optional<OverState> _pressed;
+	std::optional<OverState> _lastHandledPress;
 	Button _close;
 	Button _enlarge;
 	Button _playback;