summaryrefslogtreecommitdiffstats
path: root/src/core/api/qwebenginefullscreenrequest.cpp
blob: 938aad19c26cdd3e493f35cbbc59bc96901dab4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

#include "qwebenginefullscreenrequest.h"

QT_BEGIN_NAMESPACE

/*!
    \class QWebEngineFullScreenRequest
    \brief The QWebEngineFullScreenRequest class enables accepting or rejecting
     requests for entering and exiting the fullscreen mode.

    \since 5.6

    \inmodule QtWebEngineCore

    To allow elements such as videos to be shown in the fullscreen mode,
    applications must set QWebEngineSettings::FullScreenSupportEnabled and
    connect to QWebEnginePage::fullScreenRequested, which takes a
    QWebEngineFullScreenRequest instance as an argument.

    If an element of a web page requests to be shown in the fullscreen mode,
    QWebEnginePage::fullScreenRequested will be emitted with an
    QWebEngineFullScreenRequest instance as an argument where toggleOn() returns
    \c true. The signal handler needs to then either call accept() or reject().

    If the request to enter the fullscreen mode is accepted, the element
    requesting fullscreen mode will fill the viewport, but it is up to the
    application to make the view fullscreen or to move the page to a view that
    is in the fullscreen mode.

    Likewise, a QWebEnginePage::fullScreenRequested will be emitted when
    the user wants to leave the full screen mode (that is, through the
    QWebEnginePage::ExitFullScreen context menu action). In this case,
    toggleOn() will return \c false, and the signal handler again needs to
    accept() or reject() the request. If it is accepted, the applicaton needs to
    make sure that the global window state is restored.
*/

/*!
    \property QWebEngineFullScreenRequest::toggleOn
    \brief Whether the web page has issued a request to enter fullscreen mode.
*/

/*!
    \property QWebEngineFullScreenRequest::origin
    \brief The URL to be opened in the fullscreen mode.
*/

/*
    Creates a request for opening the \a page from the URL specified by
    \a origin in the fullscreen mode if \a fullscreen is \c true.
*/

class QWebEngineFullScreenRequestPrivate : public QSharedData {
public:
    QWebEngineFullScreenRequestPrivate(const QUrl &origin, bool toggleOn, const std::function<void (bool)> &setFullScreenCallback)
        : m_origin(origin)
        , m_toggleOn(toggleOn)
        , m_setFullScreenCallback(setFullScreenCallback) { }

    const QUrl m_origin;
    const bool m_toggleOn;
    const std::function<void (bool)> m_setFullScreenCallback;
};

QWebEngineFullScreenRequest::QWebEngineFullScreenRequest(const QUrl &origin, bool toggleOn, const std::function<void (bool)> &setFullScreenCallback)
    : d_ptr(new QWebEngineFullScreenRequestPrivate(origin, toggleOn, setFullScreenCallback)) { }

QWebEngineFullScreenRequest::QWebEngineFullScreenRequest(const QWebEngineFullScreenRequest &other) = default;
QWebEngineFullScreenRequest& QWebEngineFullScreenRequest::operator=(const QWebEngineFullScreenRequest &other) = default;
QWebEngineFullScreenRequest::QWebEngineFullScreenRequest(QWebEngineFullScreenRequest &&other) = default;
QWebEngineFullScreenRequest& QWebEngineFullScreenRequest::operator=(QWebEngineFullScreenRequest &&other) = default;
QWebEngineFullScreenRequest::~QWebEngineFullScreenRequest() = default;

/*!
    Rejects a request to enter or exit the fullscreen mode.
*/
void QWebEngineFullScreenRequest::reject()
{
    d_ptr->m_setFullScreenCallback(!d_ptr->m_toggleOn);
}

/*!
    Accepts the request to enter or exit the fullscreen mode.
*/
void QWebEngineFullScreenRequest::accept()
{
    d_ptr->m_setFullScreenCallback(d_ptr->m_toggleOn);
}

/*!
    \fn QWebEngineFullScreenRequest::toggleOn() const
    Returns \c true if the web page has issued a request to enter the fullscreen
    mode, otherwise returns \c false.
*/
bool QWebEngineFullScreenRequest::toggleOn() const
{
    return d_ptr->m_toggleOn;
}

/*!
    \fn QWebEngineFullScreenRequest::origin() const
    Returns the URL to be opened in the fullscreen mode.
*/
QUrl QWebEngineFullScreenRequest::origin() const
{
    return d_ptr->m_origin;
}

QT_END_NAMESPACE

#include "moc_qwebenginefullscreenrequest.cpp"