diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-05-01 22:38:12 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-05-02 16:21:23 +0530 |
| commit | f0faa92246c1f5fc58546051ace2d047869447df (patch) | |
| tree | 68ac05f65ca59915d5459b9957fe874e616fc2be /src/events.hpp | |
| parent | 86496d0ce96f2e57f3f301c08488b6421321b3c9 (diff) | |
| download | null-browser-f0faa92246c1f5fc58546051ace2d047869447df.tar.gz null-browser-f0faa92246c1f5fc58546051ace2d047869447df.zip | |
Refactor events into separate files
Diffstat (limited to 'src/events.hpp')
| -rw-r--r-- | src/events.hpp | 147 |
1 files changed, 0 insertions, 147 deletions
diff --git a/src/events.hpp b/src/events.hpp deleted file mode 100644 index f16c2a1..0000000 --- a/src/events.hpp +++ /dev/null @@ -1,147 +0,0 @@ -#pragma once - -#include <QtCore> -#include <functional> -#include <lua.hpp> -#include <memory> -#include <qwebenginepermission.h> - -#include "LuaRuntime.hpp" -#include "lua.h" -#include "widgets/BrowserWindow.hpp" -#include "widgets/WebViewStack.hpp" - -#define SET_FIELD(NAME, TYPE, VALUE) \ - lua_pushstring(state, NAME); \ - lua_push##TYPE(state, VALUE); \ - lua_settable(state, -3); - -class BrowserEvent { -public: - QString kind = "-"; - - virtual void lua_push(lua_State *state) const { - lua_newtable(state); - SET_FIELD("type", string, kind.toStdString().c_str()) - }; -}; - -class UrlChangedEvent : public BrowserEvent { -public: - const QString &url; - const WebViewId webview_id; - const WindowId win_id; - - UrlChangedEvent(const QString &url, WebViewId webview_id, WindowId win_id) - : url(url), webview_id(webview_id), win_id(win_id) { - kind = "UrlChanged"; - } - - void lua_push(lua_State *state) const override { - lua_newtable(state); - SET_FIELD("type", string, kind.toStdString().c_str()) - SET_FIELD("view_id", integer, webview_id) - SET_FIELD("win_id", integer, win_id) - SET_FIELD("url", string, url.toStdString().c_str()) - } -}; - -class PermissionRequestEvent : public BrowserEvent { -public: - const QWebEnginePermission::PermissionType premission_type; - const WebViewId webview_id; - const WindowId win_id; - std::function<void()> accept_request; - std::function<void()> reject_request; - - PermissionRequestEvent(QWebEnginePermission::PermissionType type, - std::function<void()> accept_request, std::function<void()> reject_request, - WebViewId webview_id, WindowId win_id) - : premission_type(type), webview_id(webview_id), win_id(win_id), - accept_request(std::move(accept_request)), reject_request(std::move(reject_request)) { - kind = "PermissionRequested"; - } - - static PermissionRequestEvent *from_permission(std::shared_ptr<QWebEnginePermission> &permission, - WebViewId webview_id, WindowId win_id) { - auto accept = [permission]() { - QMetaObject::invokeMethod(qApp, [=]() { permission->grant(); }, Qt::QueuedConnection); - }; - auto reject = [permission]() { - QMetaObject::invokeMethod(qApp, [=]() { permission->deny(); }, Qt::QueuedConnection); - }; - // TODO: Manage delete for permission object - return new PermissionRequestEvent(permission->permissionType(), accept, reject, webview_id, - win_id); - } - - [[nodiscard]] const char *permission_type() const { - switch (premission_type) { - case QWebEnginePermission::PermissionType::MediaAudioCapture: - return "MediaAudioCapture"; - case QWebEnginePermission::PermissionType::MediaVideoCapture: - return "MediaVideoCapture"; - case QWebEnginePermission::PermissionType::MediaAudioVideoCapture: - return "MediaAudioVideoCapture"; - case QWebEnginePermission::PermissionType::DesktopVideoCapture: - return "DesktopVideoCapture"; - case QWebEnginePermission::PermissionType::DesktopAudioVideoCapture: - return "DesktopAudioVideoCapture"; - case QWebEnginePermission::PermissionType::MouseLock: - return "MouseLock"; - case QWebEnginePermission::PermissionType::Notifications: - return "Notifications"; - case QWebEnginePermission::PermissionType::Geolocation: - return "Geolocation"; - case QWebEnginePermission::PermissionType::ClipboardReadWrite: - return "ClipboardReadWrite"; - case QWebEnginePermission::PermissionType::LocalFontsAccess: - return "LocalFontsAccess"; - default: - return "Unsupported"; - } - } - - void lua_push(lua_State *state) const override { - lua_newtable(state); - SET_FIELD("type", string, kind.toStdString().c_str()) - SET_FIELD("permission_type", string, permission_type()) - SET_FIELD("view_id", integer, webview_id) - SET_FIELD("win_id", integer, win_id) - - lua_pushstring(state, "accept"); - lua_pushlightuserdata(state, (void *)this); - lua_pushcclosure( - state, - [](lua_State *state) { - void *userdata = lua_touserdata(state, lua_upvalueindex(1)); - auto *event = static_cast<PermissionRequestEvent *>(userdata); - event->accept_request(); - lua_pushnil(state); - return 1; - }, - 1); - lua_settable(state, -3); - - lua_pushstring(state, "reject"); - lua_pushlightuserdata(state, (void *)this); - lua_pushcclosure( - state, - [](lua_State *state) { - void *userdata = lua_touserdata(state, lua_upvalueindex(1)); - auto *event = static_cast<PermissionRequestEvent *>(userdata); - event->reject_request(); - lua_pushnil(state); - return 1; - }, - 1); - lua_settable(state, -3); - } -}; - -struct EventHandlerRequest { - std::vector<QString> event_names; - std::vector<QString> patterns; - std::function<void(BrowserEvent *)> handler; - int function_ref; -}; |
