Fix closing PiP that was opened without media viewer.

Fixes #16193.
This commit is contained in:
John Preston 2021-04-27 13:06:31 +04:00
parent 819ce06dfb
commit e9196bbbb5
2 changed files with 46 additions and 30 deletions

View File

@ -2999,10 +2999,15 @@ void OverlayWidget::switchToPip() {
_streamed->instance.shared(), _streamed->instance.shared(),
closeAndContinue, closeAndContinue,
[=] { _pip = nullptr; }); [=] { _pip = nullptr; });
if (isHidden()) {
clearBeforeHide();
clearAfterHide();
} else {
close(); close();
if (const auto window = Core::App().activeWindow()) { if (const auto window = Core::App().activeWindow()) {
window->activate(); window->activate();
} }
}
} }
void OverlayWidget::playbackToggleFullScreen() { void OverlayWidget::playbackToggleFullScreen() {
@ -4365,9 +4370,8 @@ void OverlayWidget::applyHideWindowWorkaround() {
#endif // USE_OPENGL_OVERLAY_WIDGET #endif // USE_OPENGL_OVERLAY_WIDGET
} }
void OverlayWidget::setVisibleHook(bool visible) { // #TODO unite and check
if (!visible) { void OverlayWidget::clearBeforeHide() {
applyHideWindowWorkaround();
_sharedMedia = nullptr; _sharedMedia = nullptr;
_sharedMediaData = std::nullopt; _sharedMediaData = std::nullopt;
_sharedMediaDataKey = std::nullopt; _sharedMediaDataKey = std::nullopt;
@ -4386,13 +4390,9 @@ void OverlayWidget::setVisibleHook(bool visible) {
_controlsOpacity = anim::value(1, 1); _controlsOpacity = anim::value(1, 1);
_groupThumbs = nullptr; _groupThumbs = nullptr;
_groupThumbsRect = QRect(); _groupThumbsRect = QRect();
} }
OverlayParent::setVisibleHook(visible);
if (visible) {
QCoreApplication::instance()->installEventFilter(this);
} else {
QCoreApplication::instance()->removeEventFilter(this);
void OverlayWidget::clearAfterHide() {
clearStreaming(); clearStreaming();
destroyThemePreview(); destroyThemePreview();
_radial.stop(); _radial.stop();
@ -4401,6 +4401,19 @@ void OverlayWidget::setVisibleHook(bool visible) {
_themeApply.destroyDelayed(); _themeApply.destroyDelayed();
_themeCancel.destroyDelayed(); _themeCancel.destroyDelayed();
_themeShare.destroyDelayed(); _themeShare.destroyDelayed();
}
void OverlayWidget::setVisibleHook(bool visible) {
if (!visible) {
applyHideWindowWorkaround();
clearBeforeHide();
}
OverlayParent::setVisibleHook(visible);
if (visible) {
QCoreApplication::instance()->installEventFilter(this);
} else {
QCoreApplication::instance()->removeEventFilter(this);
clearAfterHide();
} }
} }

View File

@ -210,6 +210,9 @@ private:
void playbackPauseMusic(); void playbackPauseMusic();
void switchToPip(); void switchToPip();
void clearBeforeHide();
void clearAfterHide();
void assignMediaPointer(DocumentData *document); void assignMediaPointer(DocumentData *document);
void assignMediaPointer(not_null<PhotoData*> photo); void assignMediaPointer(not_null<PhotoData*> photo);