aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spec/LuaRuntimeApiSpec.cpp4
-rw-r--r--src/EventQueue.cpp5
-rw-r--r--src/EventQueue.hpp5
-rw-r--r--src/LuaRuntimeApi.hpp3
-rw-r--r--src/events/Event.hpp19
-rw-r--r--src/events/EventHandlerRequest.hpp12
-rw-r--r--src/events/PermissionRequestedEvent.hpp (renamed from src/events.hpp)71
-rw-r--r--src/events/UrlChangedEvent.hpp28
-rw-r--r--src/widgets/WebViewStack.cpp7
9 files changed, 89 insertions, 65 deletions
diff --git a/spec/LuaRuntimeApiSpec.cpp b/spec/LuaRuntimeApiSpec.cpp
index c340a03..fe29fcc 100644
--- a/spec/LuaRuntimeApiSpec.cpp
+++ b/spec/LuaRuntimeApiSpec.cpp
@@ -3,10 +3,10 @@
#include "LuaRuntime.hpp"
#include "WindowActionRouter.hpp"
-#include "events.hpp"
+#include "events/Event.hpp"
#include "testUtils.h"
-class TestEvent1 : public BrowserEvent {
+class TestEvent1 : public Event {
public:
int num;
TestEvent1(int num) : num(num) { kind = "TestEvent1"; }
diff --git a/src/EventQueue.cpp b/src/EventQueue.cpp
index 9fef368..127d453 100644
--- a/src/EventQueue.cpp
+++ b/src/EventQueue.cpp
@@ -1,7 +1,10 @@
+#include <mutex>
+#include <unordered_map>
+
#include "EventQueue.hpp"
#include "LuaRuntime.hpp"
-void EventQueue::dispatch_event(BrowserEvent *event) {
+void EventQueue::dispatch_event(Event *event) {
auto &runtime = LuaRuntime::instance();
runtime.queue_task([this, event]() {
diff --git a/src/EventQueue.hpp b/src/EventQueue.hpp
index c4a9f76..7bcbbf7 100644
--- a/src/EventQueue.hpp
+++ b/src/EventQueue.hpp
@@ -4,13 +4,14 @@
#include <mutex>
#include <unordered_map>
-#include "events.hpp"
+#include "events/Event.hpp"
+#include "events/EventHandlerRequest.hpp"
class EventQueue {
public:
EventQueue() = default;
- void dispatch_event(BrowserEvent *event);
+ void dispatch_event(Event *event);
void register_event(const EventHandlerRequest &event);
private:
diff --git a/src/LuaRuntimeApi.hpp b/src/LuaRuntimeApi.hpp
index 9994491..5ec72cc 100644
--- a/src/LuaRuntimeApi.hpp
+++ b/src/LuaRuntimeApi.hpp
@@ -4,6 +4,7 @@
#include "LuaRuntime.hpp"
#include "WindowActionRouter.hpp"
+#include "events/Event.hpp"
int lua_api_view_set_url(lua_State *state) {
const char *url = lua_tostring(state, 1);
@@ -172,7 +173,7 @@ int lua_event_register(lua_State *state) {
const int function_ref = luaL_ref(state, LUA_REGISTRYINDEX);
event.function_ref = function_ref;
// TODO: Delete ref on clear callback
- event.handler = [state, function_ref](BrowserEvent *event) {
+ event.handler = [state, function_ref](Event *event) {
preserve_top(state, {
lua_rawgeti(state, LUA_REGISTRYINDEX, function_ref);
event->lua_push(state);
diff --git a/src/events/Event.hpp b/src/events/Event.hpp
new file mode 100644
index 0000000..a0853d6
--- /dev/null
+++ b/src/events/Event.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <QtCore>
+#include <lua.hpp>
+
+#define SET_FIELD(NAME, TYPE, VALUE) \
+ lua_pushstring(state, NAME); \
+ lua_push##TYPE(state, VALUE); \
+ lua_settable(state, -3);
+
+class Event {
+public:
+ QString kind = "-";
+
+ virtual void lua_push(lua_State *state) const {
+ lua_newtable(state);
+ SET_FIELD("type", string, kind.toStdString().c_str())
+ };
+};
diff --git a/src/events/EventHandlerRequest.hpp b/src/events/EventHandlerRequest.hpp
new file mode 100644
index 0000000..94f4afc
--- /dev/null
+++ b/src/events/EventHandlerRequest.hpp
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <QtCore>
+
+#include "events/Event.hpp"
+
+struct EventHandlerRequest {
+ std::vector<QString> event_names;
+ std::vector<QString> patterns;
+ std::function<void(Event *)> handler;
+ int function_ref;
+};
diff --git a/src/events.hpp b/src/events/PermissionRequestedEvent.hpp
index f16c2a1..089cc99 100644
--- a/src/events.hpp
+++ b/src/events/PermissionRequestedEvent.hpp
@@ -1,52 +1,14 @@
#pragma once
+#include <QWebEnginePermission>
#include <QtCore>
-#include <functional>
#include <lua.hpp>
-#include <memory>
-#include <qwebenginepermission.h>
-#include "LuaRuntime.hpp"
-#include "lua.h"
+#include "events/Event.hpp"
#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 {
+class PermissionRequestedEvent : public Event {
public:
const QWebEnginePermission::PermissionType premission_type;
const WebViewId webview_id;
@@ -54,16 +16,18 @@ public:
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)
+ PermissionRequestedEvent(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) {
+ static PermissionRequestedEvent *
+ from_permission(std::shared_ptr<QWebEnginePermission> &permission, WebViewId webview_id,
+ WindowId win_id) {
auto accept = [permission]() {
QMetaObject::invokeMethod(qApp, [=]() { permission->grant(); }, Qt::QueuedConnection);
};
@@ -71,8 +35,8 @@ public:
QMetaObject::invokeMethod(qApp, [=]() { permission->deny(); }, Qt::QueuedConnection);
};
// TODO: Manage delete for permission object
- return new PermissionRequestEvent(permission->permissionType(), accept, reject, webview_id,
- win_id);
+ return new PermissionRequestedEvent(permission->permissionType(), accept, reject, webview_id,
+ win_id);
}
[[nodiscard]] const char *permission_type() const {
@@ -115,7 +79,7 @@ public:
state,
[](lua_State *state) {
void *userdata = lua_touserdata(state, lua_upvalueindex(1));
- auto *event = static_cast<PermissionRequestEvent *>(userdata);
+ auto *event = static_cast<PermissionRequestedEvent *>(userdata);
event->accept_request();
lua_pushnil(state);
return 1;
@@ -129,7 +93,7 @@ public:
state,
[](lua_State *state) {
void *userdata = lua_touserdata(state, lua_upvalueindex(1));
- auto *event = static_cast<PermissionRequestEvent *>(userdata);
+ auto *event = static_cast<PermissionRequestedEvent *>(userdata);
event->reject_request();
lua_pushnil(state);
return 1;
@@ -138,10 +102,3 @@ public:
lua_settable(state, -3);
}
};
-
-struct EventHandlerRequest {
- std::vector<QString> event_names;
- std::vector<QString> patterns;
- std::function<void(BrowserEvent *)> handler;
- int function_ref;
-};
diff --git a/src/events/UrlChangedEvent.hpp b/src/events/UrlChangedEvent.hpp
new file mode 100644
index 0000000..1685c89
--- /dev/null
+++ b/src/events/UrlChangedEvent.hpp
@@ -0,0 +1,28 @@
+#pragma once
+
+#include <QtCore>
+#include <lua.hpp>
+
+#include "events/Event.hpp"
+#include "widgets/BrowserWindow.hpp"
+#include "widgets/WebViewStack.hpp"
+
+class UrlChangedEvent : public Event {
+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())
+ }
+};
diff --git a/src/widgets/WebViewStack.cpp b/src/widgets/WebViewStack.cpp
index 7fe9218..37e7dca 100644
--- a/src/widgets/WebViewStack.cpp
+++ b/src/widgets/WebViewStack.cpp
@@ -2,14 +2,17 @@
#include <QWebEngineFindTextResult>
#include <QWebEngineHistory>
#include <QWebEngineNewWindowRequest>
+#include <QWebEngineNotification>
#include <QWebEngineProfile>
#include <cstdint>
#include <cstdlib>
#include <memory>
+#include <qwebengineprofile.h>
#include <vector>
#include "WindowActionRouter.hpp"
-#include "events.hpp"
+#include "events/PermissionRequestedEvent.hpp"
+#include "events/UrlChangedEvent.hpp"
#include "widgets/WebViewStack.hpp"
static WebViewId next_webview_id = 1;
@@ -62,7 +65,7 @@ WebView *WebViewStack::create_new_webview(const QUrl &url, bool focus) {
connect(page, &QWebEnginePage::permissionRequested, this, [webview](QWebEnginePermission perm) {
auto permission = std::make_shared<QWebEnginePermission>(std::move(perm));
// TODO: Add windown id
- auto *event = PermissionRequestEvent::from_permission(permission, webview->get_id(), 0);
+ auto *event = PermissionRequestedEvent::from_permission(permission, webview->get_id(), 0);
WindowActionRouter::instance().dispatch_event(event);
});