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