mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-15 21:57:10 +02:00
Allow float video player across accounts.
This commit is contained in:
parent
8171ed6c12
commit
bf7aae5fc6
38 changed files with 257 additions and 176 deletions
|
@ -61,12 +61,12 @@ bool TabbedSection::showInternal(
|
|||
return false;
|
||||
}
|
||||
|
||||
bool TabbedSection::wheelEventFromFloatPlayer(QEvent *e) {
|
||||
return _selector->wheelEventFromFloatPlayer(e);
|
||||
bool TabbedSection::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return _selector->floatPlayerHandleWheelEvent(e);
|
||||
}
|
||||
|
||||
QRect TabbedSection::rectForFloatPlayer() const {
|
||||
return _selector->rectForFloatPlayer();
|
||||
QRect TabbedSection::floatPlayerAvailableRect() {
|
||||
return _selector->floatPlayerAvailableRect();
|
||||
}
|
||||
|
||||
TabbedSection::~TabbedSection() {
|
||||
|
|
|
@ -44,8 +44,8 @@ public:
|
|||
return true;
|
||||
}
|
||||
// Float player interface.
|
||||
bool wheelEventFromFloatPlayer(QEvent *e) override;
|
||||
QRect rectForFloatPlayer() const override;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e) override;
|
||||
QRect floatPlayerAvailableRect() override;
|
||||
|
||||
~TabbedSection();
|
||||
|
||||
|
|
|
@ -608,11 +608,11 @@ QImage TabbedSelector::grabForAnimation() {
|
|||
return result;
|
||||
}
|
||||
|
||||
bool TabbedSelector::wheelEventFromFloatPlayer(QEvent *e) {
|
||||
bool TabbedSelector::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return _scroll->viewportEvent(e);
|
||||
}
|
||||
|
||||
QRect TabbedSelector::rectForFloatPlayer() const {
|
||||
QRect TabbedSelector::floatPlayerAvailableRect() const {
|
||||
return mapToGlobal(_scroll->geometry());
|
||||
}
|
||||
|
||||
|
|
|
@ -98,8 +98,8 @@ public:
|
|||
}
|
||||
|
||||
// Float player interface.
|
||||
bool wheelEventFromFloatPlayer(QEvent *e);
|
||||
QRect rectForFloatPlayer() const;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e);
|
||||
QRect floatPlayerAvailableRect() const;
|
||||
|
||||
auto showRequests() const {
|
||||
return _showRequests.events();
|
||||
|
|
|
@ -46,6 +46,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "media/audio/media_audio.h"
|
||||
#include "media/audio/media_audio_track.h"
|
||||
#include "media/player/media_player_instance.h"
|
||||
#include "media/player/media_player_float.h"
|
||||
#include "media/clip/media_clip_reader.h" // For Media::Clip::Finish().
|
||||
#include "window/notifications_manager.h"
|
||||
#include "window/themes/window_theme.h"
|
||||
|
@ -512,6 +513,44 @@ void Application::startEmojiImageLoader() {
|
|||
}, _lifetime);
|
||||
}
|
||||
|
||||
void Application::setDefaultFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> delegate) {
|
||||
Expects(!_defaultFloatPlayerDelegate == !_floatPlayers);
|
||||
|
||||
_defaultFloatPlayerDelegate = delegate;
|
||||
_replacementFloatPlayerDelegate = nullptr;
|
||||
if (_floatPlayers) {
|
||||
_floatPlayers->replaceDelegate(delegate);
|
||||
} else {
|
||||
_floatPlayers = std::make_unique<Media::Player::FloatController>(
|
||||
delegate);
|
||||
}
|
||||
}
|
||||
|
||||
void Application::replaceFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> replacement) {
|
||||
Expects(_floatPlayers != nullptr);
|
||||
|
||||
_replacementFloatPlayerDelegate = replacement;
|
||||
_floatPlayers->replaceDelegate(replacement);
|
||||
}
|
||||
|
||||
void Application::restoreFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> replacement) {
|
||||
Expects(_floatPlayers != nullptr);
|
||||
|
||||
if (_replacementFloatPlayerDelegate == replacement) {
|
||||
_replacementFloatPlayerDelegate = nullptr;
|
||||
_floatPlayers->replaceDelegate(_defaultFloatPlayerDelegate);
|
||||
}
|
||||
}
|
||||
|
||||
rpl::producer<FullMsgId> Application::floatPlayerClosed() const {
|
||||
Expects(_floatPlayers != nullptr);
|
||||
|
||||
return _floatPlayers->closeEvents();
|
||||
}
|
||||
|
||||
void Application::logout(Main::Account *account) {
|
||||
if (account) {
|
||||
account->logOut();
|
||||
|
|
|
@ -71,6 +71,10 @@ class Instance;
|
|||
namespace View {
|
||||
class OverlayWidget;
|
||||
} // namespace View
|
||||
namespace Player {
|
||||
class FloatController;
|
||||
class FloatDelegate;
|
||||
} // namespace Player
|
||||
} // namespace Media
|
||||
|
||||
namespace Lang {
|
||||
|
@ -218,6 +222,15 @@ public:
|
|||
bool openLocalUrl(const QString &url, QVariant context);
|
||||
bool openInternalUrl(const QString &url, QVariant context);
|
||||
|
||||
// Float player.
|
||||
void setDefaultFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> delegate);
|
||||
void replaceFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> replacement);
|
||||
void restoreFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> replacement);
|
||||
[[nodiscard]] rpl::producer<FullMsgId> floatPlayerClosed() const;
|
||||
|
||||
void logout(Main::Account *account = nullptr);
|
||||
void forceLogOut(
|
||||
not_null<Main::Account*> account,
|
||||
|
@ -320,6 +333,10 @@ private:
|
|||
|
||||
const std::unique_ptr<Media::Audio::Instance> _audio;
|
||||
|
||||
std::unique_ptr<Media::Player::FloatController> _floatPlayers;
|
||||
Media::Player::FloatDelegate *_defaultFloatPlayerDelegate = nullptr;
|
||||
Media::Player::FloatDelegate *_replacementFloatPlayerDelegate = nullptr;
|
||||
|
||||
// Notifications should be destroyed before _audio.
|
||||
// Mutable because is created in run() after OpenSSL is inited.
|
||||
std::unique_ptr<Window::Notifications::System> _notifications;
|
||||
|
|
|
@ -671,11 +671,11 @@ void Widget::startSlideAnimation() {
|
|||
_a_show.start([=] { animationCallback(); }, 0., 1., st::slideDuration, Window::SlideAnimation::transition());
|
||||
}
|
||||
|
||||
bool Widget::wheelEventFromFloatPlayer(QEvent *e) {
|
||||
bool Widget::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return _scroll->viewportEvent(e);
|
||||
}
|
||||
|
||||
QRect Widget::rectForFloatPlayer() const {
|
||||
QRect Widget::floatPlayerAvailableRect() {
|
||||
return mapToGlobal(_scroll->geometry());
|
||||
}
|
||||
|
||||
|
@ -1596,7 +1596,7 @@ void Widget::updateControlsGeometry() {
|
|||
_scroll->setGeometry(0, scrollTop, width(), scrollHeight);
|
||||
_inner->resize(width(), _inner->height());
|
||||
if (scrollHeight != wasScrollHeight) {
|
||||
controller()->floatPlayerAreaUpdated().notify(true);
|
||||
controller()->floatPlayerAreaUpdated();
|
||||
}
|
||||
if (_topDelta) {
|
||||
_scroll->scrollToY(newScrollTop);
|
||||
|
|
|
@ -83,8 +83,8 @@ public:
|
|||
void onSearchMore();
|
||||
|
||||
// Float player interface.
|
||||
bool wheelEventFromFloatPlayer(QEvent *e) override;
|
||||
QRect rectForFloatPlayer() const override;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e) override;
|
||||
QRect floatPlayerAvailableRect() override;
|
||||
|
||||
~Widget();
|
||||
|
||||
|
|
|
@ -52,10 +52,11 @@ void SuggestBox::prepare() {
|
|||
setTitle(tr::lng_export_suggest_title());
|
||||
|
||||
addButton(tr::lng_box_ok(), [=] {
|
||||
const auto session = _session;
|
||||
closeBox();
|
||||
Core::App().exportManager().start(
|
||||
_session,
|
||||
_session->local().readExportSettings().singlePeer);
|
||||
session,
|
||||
session->local().readExportSettings().singlePeer);
|
||||
});
|
||||
addButton(tr::lng_export_suggest_cancel(), [=] { closeBox(); });
|
||||
setCloseByOutsideClick(false);
|
||||
|
|
|
@ -326,7 +326,7 @@ void InnerWidget::visibleTopBottomUpdated(
|
|||
} else {
|
||||
scrollDateHideByTimer();
|
||||
}
|
||||
_controller->floatPlayerAreaUpdated().notify(true);
|
||||
_controller->floatPlayerAreaUpdated();
|
||||
}
|
||||
|
||||
void InnerWidget::updateVisibleTopItem() {
|
||||
|
|
|
@ -453,11 +453,11 @@ void Widget::showFinishedHook() {
|
|||
_fixedBar->setAnimatingMode(false);
|
||||
}
|
||||
|
||||
bool Widget::wheelEventFromFloatPlayer(QEvent *e) {
|
||||
bool Widget::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return _scroll->viewportEvent(e);
|
||||
}
|
||||
|
||||
QRect Widget::rectForFloatPlayer() const {
|
||||
QRect Widget::floatPlayerAvailableRect() {
|
||||
return mapToGlobal(_scroll->geometry());
|
||||
}
|
||||
|
||||
|
|
|
@ -64,8 +64,8 @@ public:
|
|||
void setInternalState(const QRect &geometry, not_null<SectionMemento*> memento);
|
||||
|
||||
// Float player interface.
|
||||
bool wheelEventFromFloatPlayer(QEvent *e) override;
|
||||
QRect rectForFloatPlayer() const override;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e) override;
|
||||
QRect floatPlayerAvailableRect() override;
|
||||
|
||||
void applyFilter(FilterValue &&value);
|
||||
|
||||
|
|
|
@ -2011,6 +2011,7 @@ void HistoryWidget::showHistory(
|
|||
FullMsgId(_history->channelId(), _showAtMsgId) });
|
||||
}
|
||||
update();
|
||||
controller()->floatPlayerAreaUpdated();
|
||||
|
||||
crl::on_main(App::wnd(), [] { App::wnd()->setInnerFocus(); });
|
||||
}
|
||||
|
@ -2889,7 +2890,7 @@ void HistoryWidget::visibleAreaUpdated() {
|
|||
const auto scrollTop = _scroll->scrollTop();
|
||||
const auto scrollBottom = scrollTop + _scroll->height();
|
||||
_list->visibleAreaUpdated(scrollTop, scrollBottom);
|
||||
controller()->floatPlayerAreaUpdated().notify(true);
|
||||
controller()->floatPlayerAreaUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3846,12 +3847,12 @@ bool HistoryWidget::eventFilter(QObject *obj, QEvent *e) {
|
|||
return TWidget::eventFilter(obj, e);
|
||||
}
|
||||
|
||||
bool HistoryWidget::wheelEventFromFloatPlayer(QEvent *e) {
|
||||
return _scroll->viewportEvent(e);
|
||||
bool HistoryWidget::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return _peer ? _scroll->viewportEvent(e) : false;
|
||||
}
|
||||
|
||||
QRect HistoryWidget::rectForFloatPlayer() const {
|
||||
return mapToGlobal(_scroll->geometry());
|
||||
QRect HistoryWidget::floatPlayerAvailableRect() {
|
||||
return _peer ? mapToGlobal(_scroll->geometry()) : mapToGlobal(rect());
|
||||
}
|
||||
|
||||
void HistoryWidget::updateDragAreas() {
|
||||
|
@ -5116,7 +5117,7 @@ void HistoryWidget::updateHistoryGeometry(
|
|||
}
|
||||
}
|
||||
|
||||
controller()->floatPlayerAreaUpdated().notify(true);
|
||||
controller()->floatPlayerAreaUpdated();
|
||||
}
|
||||
|
||||
updateListSize();
|
||||
|
|
|
@ -264,8 +264,8 @@ public:
|
|||
bool returnTabbedSelector() override;
|
||||
|
||||
// Float player interface.
|
||||
bool wheelEventFromFloatPlayer(QEvent *e) override;
|
||||
QRect rectForFloatPlayer() const override;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e) override;
|
||||
QRect floatPlayerAvailableRect() override;
|
||||
|
||||
void app_sendBotCallback(
|
||||
not_null<const HistoryMessageMarkupButton*> button,
|
||||
|
|
|
@ -602,7 +602,7 @@ void ListWidget::visibleTopBottomUpdated(
|
|||
} else {
|
||||
scrollDateHideByTimer();
|
||||
}
|
||||
_controller->floatPlayerAreaUpdated().notify(true);
|
||||
_controller->floatPlayerAreaUpdated();
|
||||
_applyUpdatedScrollState.call();
|
||||
}
|
||||
|
||||
|
|
|
@ -882,11 +882,11 @@ void ScheduledWidget::showFinishedHook() {
|
|||
_composeControls->showFinished();
|
||||
}
|
||||
|
||||
bool ScheduledWidget::wheelEventFromFloatPlayer(QEvent *e) {
|
||||
bool ScheduledWidget::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return _scroll->viewportEvent(e);
|
||||
}
|
||||
|
||||
QRect ScheduledWidget::rectForFloatPlayer() const {
|
||||
QRect ScheduledWidget::floatPlayerAvailableRect() {
|
||||
return mapToGlobal(_scroll->geometry());
|
||||
}
|
||||
|
||||
|
|
|
@ -84,8 +84,8 @@ public:
|
|||
bool returnTabbedSelector() override;
|
||||
|
||||
// Float player interface.
|
||||
bool wheelEventFromFloatPlayer(QEvent *e) override;
|
||||
QRect rectForFloatPlayer() const override;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e) override;
|
||||
QRect floatPlayerAvailableRect() override;
|
||||
|
||||
// ListDelegate interface.
|
||||
Context listContext() override;
|
||||
|
|
|
@ -214,11 +214,11 @@ void ContentWidget::scrollTo(const Ui::ScrollToRequest &request) {
|
|||
_scroll->scrollTo(request);
|
||||
}
|
||||
|
||||
bool ContentWidget::wheelEventFromFloatPlayer(QEvent *e) {
|
||||
bool ContentWidget::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return _scroll->viewportEvent(e);
|
||||
}
|
||||
|
||||
QRect ContentWidget::rectForFloatPlayer() const {
|
||||
QRect ContentWidget::floatPlayerAvailableRect() const {
|
||||
return mapToGlobal(_scroll->geometry());
|
||||
}
|
||||
|
||||
|
|
|
@ -62,8 +62,8 @@ public:
|
|||
rpl::producer<int> scrollTillBottomChanges() const;
|
||||
|
||||
// Float player interface.
|
||||
bool wheelEventFromFloatPlayer(QEvent *e);
|
||||
QRect rectForFloatPlayer() const;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e);
|
||||
QRect floatPlayerAvailableRect() const;
|
||||
|
||||
virtual rpl::producer<SelectedItems> selectedListValue() const;
|
||||
virtual void cancelSelection() {
|
||||
|
|
|
@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "window/main_window.h"
|
||||
#include "main/main_session.h"
|
||||
#include "boxes/abstract_box.h"
|
||||
#include "core/application.h"
|
||||
#include "app.h"
|
||||
#include "styles/style_info.h"
|
||||
#include "styles/style_window.h"
|
||||
|
@ -31,7 +32,7 @@ LayerWidget::LayerWidget(
|
|||
: _controller(controller)
|
||||
, _content(this, controller, Wrap::Layer, memento) {
|
||||
setupHeightConsumers();
|
||||
_controller->replaceFloatPlayerDelegate(floatPlayerDelegate());
|
||||
Core::App().replaceFloatPlayerDelegate(floatPlayerDelegate());
|
||||
}
|
||||
|
||||
LayerWidget::LayerWidget(
|
||||
|
@ -40,7 +41,7 @@ LayerWidget::LayerWidget(
|
|||
: _controller(controller)
|
||||
, _content(memento->takeContent(this, Wrap::Layer)) {
|
||||
setupHeightConsumers();
|
||||
_controller->replaceFloatPlayerDelegate(floatPlayerDelegate());
|
||||
Core::App().replaceFloatPlayerDelegate(floatPlayerDelegate());
|
||||
}
|
||||
|
||||
auto LayerWidget::floatPlayerDelegate()
|
||||
|
@ -52,19 +53,15 @@ not_null<Ui::RpWidget*> LayerWidget::floatPlayerWidget() {
|
|||
return this;
|
||||
}
|
||||
|
||||
not_null<Window::SessionController*> LayerWidget::floatPlayerController() {
|
||||
return _controller;
|
||||
}
|
||||
|
||||
not_null<Window::AbstractSectionWidget*> LayerWidget::floatPlayerGetSection(
|
||||
Window::Column column) {
|
||||
auto LayerWidget::floatPlayerGetSection(Window::Column column)
|
||||
-> not_null<::Media::Player::FloatSectionDelegate*> {
|
||||
Expects(_content != nullptr);
|
||||
|
||||
return _content;
|
||||
}
|
||||
|
||||
void LayerWidget::floatPlayerEnumerateSections(Fn<void(
|
||||
not_null<Window::AbstractSectionWidget*> widget,
|
||||
not_null<::Media::Player::FloatSectionDelegate*> widget,
|
||||
Window::Column widgetColumn)> callback) {
|
||||
Expects(_content != nullptr);
|
||||
|
||||
|
@ -285,7 +282,7 @@ void LayerWidget::paintEvent(QPaintEvent *e) {
|
|||
void LayerWidget::restoreFloatPlayerDelegate() {
|
||||
if (!_floatPlayerDelegateRestored) {
|
||||
_floatPlayerDelegateRestored = true;
|
||||
_controller->restoreFloatPlayerDelegate(floatPlayerDelegate());
|
||||
Core::App().restoreFloatPlayerDelegate(floatPlayerDelegate());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -58,11 +58,10 @@ private:
|
|||
void restoreFloatPlayerDelegate();
|
||||
not_null<::Media::Player::FloatDelegate*> floatPlayerDelegate();
|
||||
not_null<Ui::RpWidget*> floatPlayerWidget() override;
|
||||
not_null<Window::SessionController*> floatPlayerController() override;
|
||||
not_null<Window::AbstractSectionWidget*> floatPlayerGetSection(
|
||||
not_null<::Media::Player::FloatSectionDelegate*> floatPlayerGetSection(
|
||||
Window::Column column) override;
|
||||
void floatPlayerEnumerateSections(Fn<void(
|
||||
not_null<Window::AbstractSectionWidget*> widget,
|
||||
not_null<::Media::Player::FloatSectionDelegate*> widget,
|
||||
Window::Column widgetColumn)> callback) override;
|
||||
bool floatPlayerIsVisible(not_null<HistoryItem*> item) override;
|
||||
|
||||
|
|
|
@ -108,12 +108,12 @@ object_ptr<Ui::LayerWidget> SectionWidget::moveContentToLayer(
|
|||
bodyGeometry);
|
||||
}
|
||||
|
||||
bool SectionWidget::wheelEventFromFloatPlayer(QEvent *e) {
|
||||
return _content->wheelEventFromFloatPlayer(e);
|
||||
bool SectionWidget::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return _content->floatPlayerHandleWheelEvent(e);
|
||||
}
|
||||
|
||||
QRect SectionWidget::rectForFloatPlayer() const {
|
||||
return _content->rectForFloatPlayer();
|
||||
QRect SectionWidget::floatPlayerAvailableRect() {
|
||||
return _content->floatPlayerAvailableRect();
|
||||
}
|
||||
|
||||
} // namespace Info
|
||||
|
|
|
@ -54,8 +54,8 @@ public:
|
|||
QRect bodyGeometry) override;
|
||||
|
||||
// Float player interface.
|
||||
bool wheelEventFromFloatPlayer(QEvent *e) override;
|
||||
QRect rectForFloatPlayer() const override;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e) override;
|
||||
QRect floatPlayerAvailableRect() override;
|
||||
|
||||
protected:
|
||||
void doSetInnerFocus() override;
|
||||
|
|
|
@ -1026,12 +1026,12 @@ void WrapWidget::updateContentGeometry() {
|
|||
}
|
||||
}
|
||||
|
||||
bool WrapWidget::wheelEventFromFloatPlayer(QEvent *e) {
|
||||
return _content->wheelEventFromFloatPlayer(e);
|
||||
bool WrapWidget::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return _content->floatPlayerHandleWheelEvent(e);
|
||||
}
|
||||
|
||||
QRect WrapWidget::rectForFloatPlayer() const {
|
||||
return _content->rectForFloatPlayer();
|
||||
QRect WrapWidget::floatPlayerAvailableRect() {
|
||||
return _content->floatPlayerAvailableRect();
|
||||
}
|
||||
|
||||
object_ptr<Ui::RpWidget> WrapWidget::createTopBarSurrogate(
|
||||
|
|
|
@ -108,8 +108,8 @@ public:
|
|||
void updateInternalState(not_null<Memento*> memento);
|
||||
|
||||
// Float player interface.
|
||||
bool wheelEventFromFloatPlayer(QEvent *e) override;
|
||||
QRect rectForFloatPlayer() const override;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e) override;
|
||||
QRect floatPlayerAvailableRect() override;
|
||||
|
||||
object_ptr<Ui::RpWidget> createTopBarSurrogate(QWidget *parent);
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "mtproto/mtproto_dc_options.h"
|
||||
#include "window/window_slide_animation.h"
|
||||
#include "window/window_connecting_widget.h"
|
||||
#include "window/section_widget.h"
|
||||
#include "base/platform/base_platform_info.h"
|
||||
#include "api/api_text_entities.h"
|
||||
#include "app.h"
|
||||
|
@ -62,6 +63,8 @@ Widget::Widget(
|
|||
this,
|
||||
account,
|
||||
rpl::single(true))) {
|
||||
Core::App().setDefaultFloatPlayerDelegate(floatPlayerDelegate());
|
||||
|
||||
switch (point) {
|
||||
case EnterPoint::Start:
|
||||
appendStep(new StartWidget(this, _account, getData()));
|
||||
|
@ -130,6 +133,42 @@ Widget::Widget(
|
|||
}
|
||||
}
|
||||
|
||||
not_null<Media::Player::FloatDelegate*> Widget::floatPlayerDelegate() {
|
||||
return static_cast<Media::Player::FloatDelegate*>(this);
|
||||
}
|
||||
|
||||
auto Widget::floatPlayerSectionDelegate()
|
||||
-> not_null<Media::Player::FloatSectionDelegate*> {
|
||||
return static_cast<Media::Player::FloatSectionDelegate*>(this);
|
||||
}
|
||||
|
||||
not_null<Ui::RpWidget*> Widget::floatPlayerWidget() {
|
||||
return this;
|
||||
}
|
||||
|
||||
auto Widget::floatPlayerGetSection(Window::Column column)
|
||||
-> not_null<Media::Player::FloatSectionDelegate*> {
|
||||
return this;
|
||||
}
|
||||
|
||||
void Widget::floatPlayerEnumerateSections(Fn<void(
|
||||
not_null<Media::Player::FloatSectionDelegate*> widget,
|
||||
Window::Column widgetColumn)> callback) {
|
||||
callback(this, Window::Column::Second);
|
||||
}
|
||||
|
||||
bool Widget::floatPlayerIsVisible(not_null<HistoryItem*> item) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QRect Widget::floatPlayerAvailableRect() {
|
||||
return mapToGlobal(rect());
|
||||
}
|
||||
|
||||
bool Widget::floatPlayerHandleWheelEvent(QEvent *e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void Widget::refreshLang() {
|
||||
_changeLanguage.destroy();
|
||||
createLanguageLink();
|
||||
|
@ -310,6 +349,7 @@ void Widget::fixOrder() {
|
|||
if (_changeLanguage) _changeLanguage->raise();
|
||||
_settings->raise();
|
||||
_back->raise();
|
||||
floatPlayerRaiseAll();
|
||||
_connecting->raise();
|
||||
}
|
||||
|
||||
|
@ -610,8 +650,10 @@ void Widget::showAnimated(const QPixmap &bgAnimCache, bool back) {
|
|||
|
||||
_a_show.stop();
|
||||
showControls();
|
||||
floatPlayerHideAll();
|
||||
(_showBack ? _cacheUnder : _cacheOver) = Ui::GrabWidget(this);
|
||||
hideControls();
|
||||
floatPlayerShowVisible();
|
||||
|
||||
_a_show.start(
|
||||
[=] { animationCallback(); },
|
||||
|
@ -665,6 +707,7 @@ void Widget::resizeEvent(QResizeEvent *e) {
|
|||
}
|
||||
|
||||
updateControlsGeometry();
|
||||
floatPlayerAreaUpdated();
|
||||
}
|
||||
|
||||
void Widget::updateControlsGeometry() {
|
||||
|
@ -732,7 +775,6 @@ Widget::~Widget() {
|
|||
for (auto step : base::take(_stepHistory)) {
|
||||
delete step;
|
||||
}
|
||||
if (App::wnd()) App::wnd()->noIntro(this);
|
||||
}
|
||||
|
||||
} // namespace Intro
|
||||
|
|
|
@ -12,6 +12,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "ui/effects/animations.h"
|
||||
#include "window/window_lock_widgets.h"
|
||||
#include "core/core_cloud_password.h"
|
||||
#include "media/player/media_player_float.h"
|
||||
|
||||
namespace Main {
|
||||
class Account;
|
||||
|
@ -83,7 +84,11 @@ enum class EnterPoint : uchar {
|
|||
Qr,
|
||||
};
|
||||
|
||||
class Widget : public Ui::RpWidget, private base::Subscriber {
|
||||
class Widget
|
||||
: public Ui::RpWidget
|
||||
, private Media::Player::FloatDelegate
|
||||
, private Media::Player::FloatSectionDelegate
|
||||
, private base::Subscriber {
|
||||
public:
|
||||
Widget(
|
||||
QWidget *parent,
|
||||
|
@ -143,6 +148,23 @@ private:
|
|||
void getNearestDC();
|
||||
void showTerms(Fn<void()> callback);
|
||||
|
||||
// FloatDelegate
|
||||
[[nodiscard]] auto floatPlayerDelegate()
|
||||
-> not_null<Media::Player::FloatDelegate*>;
|
||||
[[nodiscard]] auto floatPlayerSectionDelegate()
|
||||
-> not_null<Media::Player::FloatSectionDelegate*>;
|
||||
not_null<Ui::RpWidget*> floatPlayerWidget() override;
|
||||
not_null<Media::Player::FloatSectionDelegate*> floatPlayerGetSection(
|
||||
Window::Column column) override;
|
||||
void floatPlayerEnumerateSections(Fn<void(
|
||||
not_null<Media::Player::FloatSectionDelegate*> widget,
|
||||
Window::Column widgetColumn)> callback) override;
|
||||
bool floatPlayerIsVisible(not_null<HistoryItem*> item) override;
|
||||
|
||||
// FloatSectionDelegate
|
||||
QRect floatPlayerAvailableRect() override;
|
||||
bool floatPlayerHandleWheelEvent(QEvent *e) override;
|
||||
|
||||
const not_null<Main::Account*> _account;
|
||||
std::optional<MTP::Sender> _api;
|
||||
|
||||
|
|
|
@ -239,12 +239,6 @@ MainWidget::MainWidget(
|
|||
, _cacheBackgroundTimer([=] { cacheBackground(); })
|
||||
, _viewsIncrementTimer([=] { viewsIncrement(); })
|
||||
, _changelogs(Core::Changelogs::Create(&controller->session())) {
|
||||
_controller->setDefaultFloatPlayerDelegate(floatPlayerDelegate());
|
||||
_controller->floatPlayerClosed(
|
||||
) | rpl::start_with_next([=](FullMsgId itemId) {
|
||||
floatPlayerClosed(itemId);
|
||||
}, lifetime());
|
||||
|
||||
updateScrollColors();
|
||||
setupConnectingWidget();
|
||||
|
||||
|
@ -255,6 +249,12 @@ MainWidget::MainWidget(
|
|||
setCurrentCall(call);
|
||||
});
|
||||
|
||||
Core::App().setDefaultFloatPlayerDelegate(floatPlayerDelegate());
|
||||
Core::App().floatPlayerClosed(
|
||||
) | rpl::start_with_next([=](FullMsgId itemId) {
|
||||
floatPlayerClosed(itemId);
|
||||
}, lifetime());
|
||||
|
||||
Core::App().exportManager().currentView(
|
||||
) | rpl::start_with_next([=](Export::View::PanelController *view) {
|
||||
setCurrentExportView(view);
|
||||
|
@ -396,12 +396,8 @@ not_null<Ui::RpWidget*> MainWidget::floatPlayerWidget() {
|
|||
return this;
|
||||
}
|
||||
|
||||
not_null<Window::SessionController*> MainWidget::floatPlayerController() {
|
||||
return _controller;
|
||||
}
|
||||
|
||||
not_null<Window::AbstractSectionWidget*> MainWidget::floatPlayerGetSection(
|
||||
Window::Column column) {
|
||||
auto MainWidget::floatPlayerGetSection(Window::Column column)
|
||||
-> not_null<Media::Player::FloatSectionDelegate*> {
|
||||
if (Adaptive::ThreeColumn()) {
|
||||
if (column == Window::Column::First) {
|
||||
return _dialogs;
|
||||
|
@ -432,7 +428,7 @@ not_null<Window::AbstractSectionWidget*> MainWidget::floatPlayerGetSection(
|
|||
}
|
||||
|
||||
void MainWidget::floatPlayerEnumerateSections(Fn<void(
|
||||
not_null<Window::AbstractSectionWidget*> widget,
|
||||
not_null<Media::Player::FloatSectionDelegate*> widget,
|
||||
Window::Column widgetColumn)> callback) {
|
||||
if (Adaptive::ThreeColumn()) {
|
||||
callback(_dialogs, Window::Column::First);
|
||||
|
@ -1967,8 +1963,10 @@ void MainWidget::showAnimated(const QPixmap &bgAnimCache, bool back) {
|
|||
_a_show.stop();
|
||||
|
||||
showAll();
|
||||
floatPlayerHideAll();
|
||||
(_showBack ? _cacheUnder : _cacheOver) = Ui::GrabWidget(this);
|
||||
hideAll();
|
||||
floatPlayerShowVisible();
|
||||
|
||||
_a_show.start(
|
||||
[this] { animationCallback(); },
|
||||
|
@ -2038,7 +2036,6 @@ void MainWidget::hideAll() {
|
|||
_player->setVisible(false);
|
||||
_playerHeight = 0;
|
||||
}
|
||||
floatPlayerHideAll();
|
||||
}
|
||||
|
||||
void MainWidget::showAll() {
|
||||
|
@ -2096,7 +2093,6 @@ void MainWidget::showAll() {
|
|||
}
|
||||
updateControlsGeometry();
|
||||
floatPlayerCheckVisibility();
|
||||
floatPlayerShowVisible();
|
||||
|
||||
App::wnd()->checkHistoryActivation();
|
||||
}
|
||||
|
|
|
@ -99,8 +99,8 @@ class ItemBase;
|
|||
|
||||
class MainWidget
|
||||
: public Ui::RpWidget
|
||||
, private base::Subscriber
|
||||
, private Media::Player::FloatDelegate {
|
||||
, private Media::Player::FloatDelegate
|
||||
, private base::Subscriber {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
@ -234,6 +234,8 @@ public:
|
|||
void notify_inlineKeyboardMoved(not_null<const HistoryItem*> item, int oldKeyboardTop, int newKeyboardTop);
|
||||
bool notify_switchInlineBotButtonReceived(const QString &query, UserData *samePeerBot, MsgId samePeerReplyTo);
|
||||
|
||||
using FloatDelegate::floatPlayerAreaUpdated;
|
||||
|
||||
void closeBothPlayers();
|
||||
|
||||
public slots:
|
||||
|
@ -314,13 +316,13 @@ private:
|
|||
void cacheBackground();
|
||||
void clearCachedBackground();
|
||||
|
||||
not_null<Media::Player::FloatDelegate*> floatPlayerDelegate();
|
||||
[[nodiscard]] auto floatPlayerDelegate()
|
||||
-> not_null<Media::Player::FloatDelegate*>;
|
||||
not_null<Ui::RpWidget*> floatPlayerWidget() override;
|
||||
not_null<Window::SessionController*> floatPlayerController() override;
|
||||
not_null<Window::AbstractSectionWidget*> floatPlayerGetSection(
|
||||
not_null<Media::Player::FloatSectionDelegate*> floatPlayerGetSection(
|
||||
Window::Column column) override;
|
||||
void floatPlayerEnumerateSections(Fn<void(
|
||||
not_null<Window::AbstractSectionWidget*> widget,
|
||||
not_null<Media::Player::FloatSectionDelegate*> widget,
|
||||
Window::Column widgetColumn)> callback) override;
|
||||
bool floatPlayerIsVisible(not_null<HistoryItem*> item) override;
|
||||
void floatPlayerClosed(FullMsgId itemId);
|
||||
|
|
|
@ -262,8 +262,10 @@ void MainWindow::setupIntro(Intro::EnterPoint point) {
|
|||
auto animated = (_main || _passcodeLock);
|
||||
auto bg = animated ? grabInner() : QPixmap();
|
||||
|
||||
destroyLayer();
|
||||
auto created = object_ptr<Intro::Widget>(bodyWidget(), &account(), point);
|
||||
clearWidgets();
|
||||
_intro.create(bodyWidget(), &account(), point);
|
||||
_intro = std::move(created);
|
||||
if (_passcodeLock) {
|
||||
_intro->hide();
|
||||
} else {
|
||||
|
@ -284,6 +286,7 @@ void MainWindow::setupMain() {
|
|||
auto animated = (_intro || _passcodeLock);
|
||||
auto bg = animated ? grabInner() : QPixmap();
|
||||
|
||||
destroyLayer();
|
||||
auto created = object_ptr<MainWidget>(bodyWidget(), sessionController());
|
||||
clearWidgets();
|
||||
_main = std::move(created);
|
||||
|
@ -711,12 +714,6 @@ void MainWindow::activate() {
|
|||
}
|
||||
}
|
||||
|
||||
void MainWindow::noIntro(Intro::Widget *was) {
|
||||
if (was == _intro) {
|
||||
_intro = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool MainWindow::takeThirdSectionFromLayer() {
|
||||
return _layer ? _layer->takeToThirdSection() : false;
|
||||
}
|
||||
|
|
|
@ -59,7 +59,6 @@ public:
|
|||
|
||||
void activate();
|
||||
|
||||
void noIntro(Intro::Widget *was);
|
||||
bool takeThirdSectionFromLayer();
|
||||
|
||||
void checkHistoryActivation();
|
||||
|
|
|
@ -286,12 +286,7 @@ FloatController::Item::Item(
|
|||
|
||||
FloatController::FloatController(not_null<FloatDelegate*> delegate)
|
||||
: _delegate(delegate)
|
||||
, _parent(_delegate->floatPlayerWidget())
|
||||
, _controller(_delegate->floatPlayerController()) {
|
||||
subscribe(_controller->floatPlayerAreaUpdated(), [=] {
|
||||
checkVisibility();
|
||||
});
|
||||
|
||||
, _parent(_delegate->floatPlayerWidget()) {
|
||||
subscribe(Media::Player::instance()->trackChangedNotifier(), [=](
|
||||
AudioMsgId::Type type) {
|
||||
if (type == AudioMsgId::Type::Voice) {
|
||||
|
@ -347,6 +342,11 @@ void FloatController::startDelegateHandling() {
|
|||
const FloatDelegate::FloatPlayerFilterWheelEventRequest &request) {
|
||||
*request.result = filterWheelEvent(request.object, request.event);
|
||||
}, _delegateLifetime);
|
||||
|
||||
_delegate->floatPlayerAreaUpdates(
|
||||
) | rpl::start_with_next([=] {
|
||||
checkVisibility();
|
||||
}, _delegateLifetime);
|
||||
}
|
||||
|
||||
void FloatController::checkCurrent() {
|
||||
|
@ -457,7 +457,7 @@ std::optional<bool> FloatController::filterWheelEvent(
|
|||
if (instance->widget == object) {
|
||||
const auto section = _delegate->floatPlayerGetSection(
|
||||
instance->column);
|
||||
return section->wheelEventFromFloatPlayer(event);
|
||||
return section->floatPlayerHandleWheelEvent(event);
|
||||
}
|
||||
}
|
||||
return std::nullopt;
|
||||
|
@ -517,7 +517,7 @@ QPoint FloatController::getHiddenPosition(
|
|||
|
||||
QPoint FloatController::getPosition(not_null<Item*> instance) const {
|
||||
const auto section = _delegate->floatPlayerGetSection(instance->column);
|
||||
const auto rect = section->rectForFloatPlayer();
|
||||
const auto rect = section->floatPlayerAvailableRect();
|
||||
auto position = rect.topLeft();
|
||||
if (IsBottomCorner(instance->corner)) {
|
||||
position.setY(position.y() + rect.height() - instance->widget->height());
|
||||
|
@ -566,9 +566,10 @@ void FloatController::updateColumnCorner(QPoint center) {
|
|||
auto column = Core::App().settings().floatPlayerColumn();
|
||||
auto corner = Core::App().settings().floatPlayerCorner();
|
||||
auto checkSection = [&](
|
||||
not_null<Window::AbstractSectionWidget*> widget,
|
||||
not_null<FloatSectionDelegate*> widget,
|
||||
Window::Column widgetColumn) {
|
||||
auto rect = _parent->mapFromGlobal(widget->rectForFloatPlayer());
|
||||
auto rect = _parent->mapFromGlobal(
|
||||
widget->floatPlayerAvailableRect());
|
||||
auto left = rect.x() + (size.width() / 2);
|
||||
auto right = rect.x() + rect.width() - (size.width() / 2);
|
||||
auto top = rect.y() + (size.height() / 2);
|
||||
|
|
|
@ -14,7 +14,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
|
||||
namespace Window {
|
||||
class SessionController;
|
||||
class AbstractSectionWidget;
|
||||
enum class Column;
|
||||
} // namespace Window
|
||||
|
||||
|
@ -105,14 +104,19 @@ private:
|
|||
|
||||
};
|
||||
|
||||
class FloatSectionDelegate {
|
||||
public:
|
||||
virtual QRect floatPlayerAvailableRect() = 0;
|
||||
virtual bool floatPlayerHandleWheelEvent(QEvent *e) = 0;
|
||||
};
|
||||
|
||||
class FloatDelegate {
|
||||
public:
|
||||
virtual not_null<Ui::RpWidget*> floatPlayerWidget() = 0;
|
||||
virtual not_null<Window::SessionController*> floatPlayerController() = 0;
|
||||
virtual not_null<Window::AbstractSectionWidget*> floatPlayerGetSection(
|
||||
virtual not_null<FloatSectionDelegate*> floatPlayerGetSection(
|
||||
Window::Column column) = 0;
|
||||
virtual void floatPlayerEnumerateSections(Fn<void(
|
||||
not_null<Window::AbstractSectionWidget*> widget,
|
||||
not_null<FloatSectionDelegate*> widget,
|
||||
Window::Column widgetColumn)> callback) = 0;
|
||||
virtual bool floatPlayerIsVisible(not_null<HistoryItem*> item) = 0;
|
||||
|
||||
|
@ -129,7 +133,10 @@ public:
|
|||
return _raiseAll.events();
|
||||
}
|
||||
virtual rpl::producer<> floatPlayerUpdatePositionsRequests() {
|
||||
return _updatePositions.events();;
|
||||
return _updatePositions.events();
|
||||
}
|
||||
virtual rpl::producer<> floatPlayerAreaUpdates() {
|
||||
return _areaUpdates.events();
|
||||
}
|
||||
|
||||
struct FloatPlayerFilterWheelEventRequest {
|
||||
|
@ -160,6 +167,9 @@ protected:
|
|||
void floatPlayerUpdatePositions() {
|
||||
_updatePositions.fire({});
|
||||
}
|
||||
void floatPlayerAreaUpdated() {
|
||||
_areaUpdates.fire({});
|
||||
}
|
||||
std::optional<bool> floatPlayerFilterWheelEvent(
|
||||
not_null<QObject*> object,
|
||||
not_null<QEvent*> event) {
|
||||
|
@ -174,6 +184,7 @@ private:
|
|||
rpl::event_stream<> _showVisible;
|
||||
rpl::event_stream<> _raiseAll;
|
||||
rpl::event_stream<> _updatePositions;
|
||||
rpl::event_stream<> _areaUpdates;
|
||||
rpl::event_stream<FloatPlayerFilterWheelEventRequest> _filterWheelEvent;
|
||||
|
||||
};
|
||||
|
@ -240,7 +251,6 @@ private:
|
|||
|
||||
not_null<FloatDelegate*> _delegate;
|
||||
not_null<Ui::RpWidget*> _parent;
|
||||
not_null<Window::SessionController*> _controller;
|
||||
std::vector<std::unique_ptr<Item>> _items;
|
||||
|
||||
rpl::event_stream<FullMsgId> _closeEvents;
|
||||
|
|
|
@ -228,6 +228,8 @@ void Instance::clearStreamed(not_null<Data*> data, bool savePosition) {
|
|||
requestRoundVideoResize();
|
||||
emitUpdate(data->type);
|
||||
data->streamed = nullptr;
|
||||
|
||||
_roundPlaying = false;
|
||||
App::wnd()->sessionController()->disableGifPauseReason(
|
||||
Window::GifPauseReason::RoundPlaying);
|
||||
}
|
||||
|
@ -729,6 +731,10 @@ void Instance::setupShortcuts() {
|
|||
}, _lifetime);
|
||||
}
|
||||
|
||||
bool Instance::pauseGifByRoundVideo() const {
|
||||
return _roundPlaying;
|
||||
}
|
||||
|
||||
void Instance::handleStreamingUpdate(
|
||||
not_null<Data*> data,
|
||||
Streaming::Update &&update) {
|
||||
|
@ -741,6 +747,7 @@ void Instance::handleStreamingUpdate(
|
|||
float64) {
|
||||
requestRoundVideoRepaint();
|
||||
});
|
||||
_roundPlaying = true;
|
||||
App::wnd()->sessionController()->enableGifPauseReason(
|
||||
Window::GifPauseReason::RoundPlaying);
|
||||
requestRoundVideoResize();
|
||||
|
|
|
@ -158,6 +158,7 @@ public:
|
|||
return _updatedNotifier.events();
|
||||
}
|
||||
|
||||
bool pauseGifByRoundVideo() const;
|
||||
|
||||
void documentLoadProgress(DocumentData *document);
|
||||
|
||||
|
@ -254,12 +255,12 @@ private:
|
|||
void requestRoundVideoResize() const;
|
||||
void requestRoundVideoRepaint() const;
|
||||
|
||||
|
||||
void setHistory(not_null<Data*> data, History *history);
|
||||
void setSession(not_null<Data*> data, Main::Session *session);
|
||||
|
||||
Data _songData;
|
||||
Data _voiceData;
|
||||
bool _roundPlaying = false;
|
||||
|
||||
base::Observable<Switch> _switchToNextNotifier;
|
||||
base::Observable<bool> _playerWidgetOver;
|
||||
|
|
|
@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
|
||||
#include "ui/rp_widget.h"
|
||||
#include "dialogs/dialogs_key.h"
|
||||
#include "media/player/media_player_float.h" // FloatSectionDelegate
|
||||
#include "base/object_ptr.h"
|
||||
|
||||
namespace Main {
|
||||
|
@ -34,6 +35,7 @@ enum class Column {
|
|||
|
||||
class AbstractSectionWidget
|
||||
: public Ui::RpWidget
|
||||
, public Media::Player::FloatSectionDelegate
|
||||
, protected base::Subscriber {
|
||||
public:
|
||||
AbstractSectionWidget(
|
||||
|
@ -58,14 +60,6 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
// Float player interface.
|
||||
virtual bool wheelEventFromFloatPlayer(QEvent *e) {
|
||||
return false;
|
||||
}
|
||||
[[nodiscard]] virtual QRect rectForFloatPlayer() const {
|
||||
return mapToGlobal(rect());
|
||||
}
|
||||
|
||||
private:
|
||||
const not_null<Window::SessionController*> _controller;
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "history/history_item.h"
|
||||
#include "history/view/history_view_element.h"
|
||||
//#include "history/feed/history_feed_section.h" // #feed
|
||||
#include "media/player/media_player_instance.h"
|
||||
#include "data/data_media_types.h"
|
||||
#include "data/data_session.h"
|
||||
#include "data/data_folder.h"
|
||||
|
@ -128,6 +129,10 @@ SessionController::SessionController(
|
|||
this)) {
|
||||
init();
|
||||
|
||||
if (Media::Player::instance()->pauseGifByRoundVideo()) {
|
||||
enableGifPauseReason(GifPauseReason::RoundPlaying);
|
||||
}
|
||||
|
||||
subscribe(session->api().fullPeerUpdated(), [=](PeerData *peer) {
|
||||
if (peer == _showEditPeer) {
|
||||
_showEditPeer = nullptr;
|
||||
|
@ -414,6 +419,12 @@ bool SessionController::isGifPausedAtLeastFor(GifPauseReason reason) const {
|
|||
return (static_cast<int>(_gifPauseReasons) >= 2 * static_cast<int>(reason)) || !widget()->isActive();
|
||||
}
|
||||
|
||||
void SessionController::floatPlayerAreaUpdated() {
|
||||
if (const auto main = widget()->sessionContent()) {
|
||||
main->floatPlayerAreaUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
int SessionController::dialogsSmallColumnWidth() const {
|
||||
return st::dialogsPadding.x() + st::dialogsPhotoSize + st::dialogsPadding.x();
|
||||
}
|
||||
|
@ -781,39 +792,6 @@ not_null<MainWidget*> SessionController::content() const {
|
|||
return widget()->sessionContent();
|
||||
}
|
||||
|
||||
void SessionController::setDefaultFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> delegate) {
|
||||
Expects(_defaultFloatPlayerDelegate == nullptr);
|
||||
|
||||
_defaultFloatPlayerDelegate = delegate;
|
||||
_floatPlayers = std::make_unique<Media::Player::FloatController>(
|
||||
delegate);
|
||||
}
|
||||
|
||||
void SessionController::replaceFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> replacement) {
|
||||
Expects(_floatPlayers != nullptr);
|
||||
|
||||
_replacementFloatPlayerDelegate = replacement;
|
||||
_floatPlayers->replaceDelegate(replacement);
|
||||
}
|
||||
|
||||
void SessionController::restoreFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> replacement) {
|
||||
Expects(_floatPlayers != nullptr);
|
||||
|
||||
if (_replacementFloatPlayerDelegate == replacement) {
|
||||
_replacementFloatPlayerDelegate = nullptr;
|
||||
_floatPlayers->replaceDelegate(_defaultFloatPlayerDelegate);
|
||||
}
|
||||
}
|
||||
|
||||
rpl::producer<FullMsgId> SessionController::floatPlayerClosed() const {
|
||||
Expects(_floatPlayers != nullptr);
|
||||
|
||||
return _floatPlayers->closeEvents();
|
||||
}
|
||||
|
||||
int SessionController::filtersWidth() const {
|
||||
return _filters ? st::windowFiltersWidth : 0;
|
||||
}
|
||||
|
|
|
@ -37,13 +37,6 @@ namespace Settings {
|
|||
enum class Type;
|
||||
} // namespace Settings
|
||||
|
||||
namespace Media {
|
||||
namespace Player {
|
||||
class FloatController;
|
||||
class FloatDelegate;
|
||||
} // namespace Player
|
||||
} // namespace Media
|
||||
|
||||
namespace Passport {
|
||||
struct FormRequest;
|
||||
class FormController;
|
||||
|
@ -208,9 +201,7 @@ public:
|
|||
return _gifPauseLevelChanged;
|
||||
}
|
||||
bool isGifPausedAtLeastFor(GifPauseReason reason) const;
|
||||
base::Observable<void> &floatPlayerAreaUpdated() {
|
||||
return _floatPlayerAreaUpdated;
|
||||
}
|
||||
void floatPlayerAreaUpdated();
|
||||
|
||||
struct ColumnLayout {
|
||||
int bodyWidth;
|
||||
|
@ -289,14 +280,6 @@ public:
|
|||
return this;
|
||||
}
|
||||
|
||||
void setDefaultFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> delegate);
|
||||
void replaceFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> replacement);
|
||||
void restoreFloatPlayerDelegate(
|
||||
not_null<Media::Player::FloatDelegate*> replacement);
|
||||
rpl::producer<FullMsgId> floatPlayerClosed() const;
|
||||
|
||||
[[nodiscard]] int filtersWidth() const;
|
||||
[[nodiscard]] rpl::producer<FilterId> activeChatsFilter() const;
|
||||
[[nodiscard]] FilterId activeChatsFilterCurrent() const;
|
||||
|
@ -342,7 +325,6 @@ private:
|
|||
|
||||
GifPauseReasons _gifPauseReasons = 0;
|
||||
base::Observable<void> _gifPauseLevelChanged;
|
||||
base::Observable<void> _floatPlayerAreaUpdated;
|
||||
|
||||
// Depends on _gifPause*.
|
||||
const std::unique_ptr<ChatHelpers::TabbedSelector> _tabbedSelector;
|
||||
|
@ -355,10 +337,6 @@ private:
|
|||
|
||||
rpl::variable<FilterId> _activeChatsFilter;
|
||||
|
||||
std::unique_ptr<Media::Player::FloatController> _floatPlayers;
|
||||
Media::Player::FloatDelegate *_defaultFloatPlayerDelegate = nullptr;
|
||||
Media::Player::FloatDelegate *_replacementFloatPlayerDelegate = nullptr;
|
||||
|
||||
PeerData *_showEditPeer = nullptr;
|
||||
rpl::variable<Data::Folder*> _openedFolder;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue