aboutsummaryrefslogtreecommitdiffstats
path: root/examples/webenginewidgets/notifications/main.py
blob: b59aead97cccb21cce0fa1d09a8f18d007e1246f (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
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

"""PySide6 WebEngineWidgets Notifications Example"""

import sys
from pathlib import Path

from PySide6.QtCore import QUrl, QCoreApplication
from PySide6.QtWidgets import QApplication
from PySide6.QtWebEngineCore import QWebEnginePage
from PySide6.QtWebEngineWidgets import QWebEngineView
from PySide6.QtGui import QDesktopServices

from notificationpopup import NotificationPopup


class WebEnginePage(QWebEnginePage):
    def __init__(self, parent):
        super().__init__(parent)

    def acceptNavigationRequest(self, url: QUrl, *_):
        if url.scheme != "https":
            return True
        QDesktopServices.openUrl(url)
        return False


if __name__ == '__main__':

    src_dir = Path(__file__).resolve().parent
    QCoreApplication.setOrganizationName("QtProject")
    app = QApplication(sys.argv)
    view = QWebEngineView()

    # set custom page to open all page's links for https scheme in system browser
    view.setPage(WebEnginePage(view))

    def set_feature_permission(origin: QUrl, feature: QWebEnginePage.Feature):
        if feature != QWebEnginePage.Notifications:
            return

        view.page().setFeaturePermission(origin, feature, QWebEnginePage.PermissionGrantedByUser)

    view.page().featurePermissionRequested.connect(set_feature_permission)
    profile = view.page().profile()
    popup = NotificationPopup(view)

    def presentNotification(notification):
        popup.present(notification)

    profile.setNotificationPresenter(presentNotification)
    view.resize(640, 480)
    view.show()
    view.setUrl(QUrl.fromLocalFile(src_dir / "resources" / "index.html"))

    sys.exit(app.exec())