Added initial ability to show content in OverlayWidget from Controller.
This commit is contained in:
parent
b422ec025e
commit
0e89c93993
|
@ -805,6 +805,7 @@ PRIVATE
|
|||
media/view/media_view_playback_controls.h
|
||||
media/view/media_view_playback_progress.cpp
|
||||
media/view/media_view_playback_progress.h
|
||||
media/view/media_view_open_common.h
|
||||
mtproto/config_loader.cpp
|
||||
mtproto/config_loader.h
|
||||
mtproto/connection_abstract.cpp
|
||||
|
|
|
@ -44,6 +44,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "main/main_domain.h"
|
||||
#include "main/main_session.h"
|
||||
#include "media/view/media_view_overlay_widget.h"
|
||||
#include "media/view/media_view_open_common.h"
|
||||
#include "mtproto/mtproto_dc_options.h"
|
||||
#include "mtproto/mtproto_config.h"
|
||||
#include "mtproto/mtp_instance.h"
|
||||
|
@ -284,6 +285,13 @@ void Application::run() {
|
|||
&& Ui::Integration::Instance().openglLastCheckFailed()) {
|
||||
showOpenGLCrashNotification();
|
||||
}
|
||||
|
||||
_window->openInMediaViewRequests(
|
||||
) | rpl::start_with_next([=](Media::View::OpenRequest &&request) {
|
||||
if (_mediaView) {
|
||||
_mediaView->show(std::move(request));
|
||||
}
|
||||
}, _window->lifetime());
|
||||
}
|
||||
|
||||
void Application::showOpenGLCrashNotification() {
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
This file is part of Telegram Desktop,
|
||||
the official desktop application for the Telegram messaging service.
|
||||
|
||||
For license and copyright information please follow this link:
|
||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "data/data_cloud_themes.h"
|
||||
|
||||
class DocumentData;
|
||||
class PeerData;
|
||||
class PhotoData;
|
||||
class HistoryItem;
|
||||
|
||||
namespace Media::View {
|
||||
|
||||
struct OpenRequest {
|
||||
public:
|
||||
OpenRequest(not_null<PhotoData*> photo, HistoryItem *item)
|
||||
: _photo(photo)
|
||||
, _item(item) {
|
||||
}
|
||||
OpenRequest(not_null<PhotoData*> photo, not_null<PeerData*> peer)
|
||||
: _photo(photo)
|
||||
, _peer(peer) {
|
||||
}
|
||||
|
||||
OpenRequest(not_null<DocumentData*> document, HistoryItem *item)
|
||||
: _document(document)
|
||||
, _item(item) {
|
||||
}
|
||||
OpenRequest(
|
||||
not_null<DocumentData*> document,
|
||||
const Data::CloudTheme &cloudTheme)
|
||||
: _document(document)
|
||||
, _cloudTheme(cloudTheme) {
|
||||
}
|
||||
|
||||
PeerData *peer() const {
|
||||
return _peer;
|
||||
}
|
||||
|
||||
PhotoData *photo() const {
|
||||
return _photo;
|
||||
}
|
||||
|
||||
HistoryItem *item() const {
|
||||
return _item;
|
||||
}
|
||||
|
||||
DocumentData *document() const {
|
||||
return _document;
|
||||
}
|
||||
|
||||
std::optional<Data::CloudTheme> cloudTheme() const {
|
||||
return _cloudTheme;
|
||||
}
|
||||
|
||||
private:
|
||||
DocumentData *_document = nullptr;
|
||||
PhotoData *_photo = nullptr;
|
||||
PeerData *_peer = nullptr;
|
||||
HistoryItem *_item = nullptr;
|
||||
std::optional<Data::CloudTheme> _cloudTheme = std::nullopt;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Media::View
|
|
@ -2315,6 +2315,9 @@ void OverlayWidget::showDocument(
|
|||
}
|
||||
}
|
||||
|
||||
void OverlayWidget::show(OpenRequest request) {
|
||||
}
|
||||
|
||||
void OverlayWidget::displayPhoto(not_null<PhotoData*> photo, HistoryItem *item) {
|
||||
if (photo->isNull()) {
|
||||
displayDocument(nullptr, item);
|
||||
|
|
|
@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "data/data_web_page.h"
|
||||
#include "data/data_cloud_themes.h" // Data::CloudTheme.
|
||||
#include "media/view/media_view_playback_controls.h"
|
||||
#include "media/view/media_view_open_common.h"
|
||||
|
||||
namespace Data {
|
||||
class PhotoMedia;
|
||||
|
@ -86,6 +87,8 @@ public:
|
|||
not_null<DocumentData*> document,
|
||||
const Data::CloudTheme &cloud);
|
||||
|
||||
void show(OpenRequest request);
|
||||
|
||||
//void leaveToChildEvent(QEvent *e, QWidget *child) override {
|
||||
// // e -- from enterEvent() of child TWidget
|
||||
// updateOverState(OverNone);
|
||||
|
|
|
@ -17,6 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "main/main_session.h"
|
||||
#include "main/main_session_settings.h"
|
||||
#include "main/main_app_config.h"
|
||||
#include "media/view/media_view_open_common.h"
|
||||
#include "intro/intro_widget.h"
|
||||
#include "mtproto/mtproto_config.h"
|
||||
#include "ui/layers/box_content.h"
|
||||
|
@ -373,4 +374,17 @@ Window::Adaptive &Controller::adaptive() const {
|
|||
return *_adaptive;
|
||||
}
|
||||
|
||||
void Controller::openInMediaView(Media::View::OpenRequest &&request) {
|
||||
_openInMediaViewRequests.fire(std::move(request));
|
||||
}
|
||||
|
||||
auto Controller::openInMediaViewRequests() const
|
||||
-> rpl::producer<Media::View::OpenRequest> {
|
||||
return _openInMediaViewRequests.events();
|
||||
}
|
||||
|
||||
rpl::lifetime &Controller::lifetime() {
|
||||
return _lifetime;
|
||||
}
|
||||
|
||||
} // namespace Window
|
||||
|
|
|
@ -15,6 +15,10 @@ namespace Main {
|
|||
class Account;
|
||||
} // namespace Main
|
||||
|
||||
namespace Media::View {
|
||||
struct OpenRequest;
|
||||
} // namespace Media::View
|
||||
|
||||
namespace Window {
|
||||
|
||||
class Controller final {
|
||||
|
@ -79,8 +83,14 @@ public:
|
|||
|
||||
void preventOrInvoke(Fn<void()> &&callback);
|
||||
|
||||
void openInMediaView(Media::View::OpenRequest &&request);
|
||||
[[nodiscard]] auto openInMediaViewRequests() const
|
||||
-> rpl::producer<Media::View::OpenRequest>;
|
||||
|
||||
QPoint getPointForCallPanelCenter() const;
|
||||
|
||||
rpl::lifetime &lifetime();
|
||||
|
||||
private:
|
||||
void showBox(
|
||||
object_ptr<Ui::BoxContent> content,
|
||||
|
@ -98,6 +108,8 @@ private:
|
|||
base::Timer _isActiveTimer;
|
||||
QPointer<Ui::BoxContent> _termsBox;
|
||||
|
||||
rpl::event_stream<Media::View::OpenRequest> _openInMediaViewRequests;
|
||||
|
||||
rpl::lifetime _accountLifetime;
|
||||
rpl::lifetime _lifetime;
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
#include "history/view/history_view_element.h"
|
||||
#include "history/view/history_view_replies_section.h"
|
||||
#include "media/player/media_player_instance.h"
|
||||
#include "media/view/media_view_open_common.h"
|
||||
#include "data/data_media_types.h"
|
||||
#include "data/data_session.h"
|
||||
#include "data/data_folder.h"
|
||||
|
@ -1217,6 +1218,28 @@ QPointer<Ui::BoxContent> SessionController::show(
|
|||
return _window->show(std::move(content), options, animated);
|
||||
}
|
||||
|
||||
void SessionController::openPhoto(
|
||||
not_null<PhotoData*> photo,
|
||||
FullMsgId contextId) {
|
||||
_window->openInMediaView(Media::View::OpenRequest(
|
||||
photo,
|
||||
session().data().message(contextId)));
|
||||
}
|
||||
|
||||
void SessionController::openPhoto(
|
||||
not_null<PhotoData*> photo,
|
||||
not_null<PeerData*> peer) {
|
||||
_window->openInMediaView(Media::View::OpenRequest(photo, peer));
|
||||
}
|
||||
|
||||
void SessionController::openDocument(
|
||||
not_null<DocumentData*> document,
|
||||
FullMsgId contextId) {
|
||||
_window->openInMediaView(Media::View::OpenRequest(
|
||||
document,
|
||||
session().data().message(contextId)));
|
||||
}
|
||||
|
||||
SessionController::~SessionController() = default;
|
||||
|
||||
} // namespace Window
|
||||
|
|
|
@ -347,6 +347,10 @@ public:
|
|||
void showPassportForm(const Passport::FormRequest &request);
|
||||
void clearPassportForm();
|
||||
|
||||
void openPhoto(not_null<PhotoData*> photo, FullMsgId contextId);
|
||||
void openPhoto(not_null<PhotoData*> photo, not_null<PeerData*> peer);
|
||||
void openDocument(not_null<DocumentData*> document, FullMsgId contextId);
|
||||
|
||||
void showChooseReportMessages(
|
||||
not_null<PeerData*> peer,
|
||||
Ui::ReportReason reason,
|
||||
|
|
Loading…
Reference in New Issue