aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-07-25 20:27:44 +0530
committerAkshay Nair <phenax5@gmail.com>2025-07-25 20:28:05 +0530
commit81dcf7de91c1866d565f7aa9eb38f7fbd1cd7ad7 (patch)
treeaa24bcea93d19ce6298ad6aed499d324fac2ceae /src
parent2c7d36b4aa53ffa638a7aa7046767f10e7a152bf (diff)
downloadnull-browser-81dcf7de91c1866d565f7aa9eb38f7fbd1cd7ad7.tar.gz
null-browser-81dcf7de91c1866d565f7aa9eb38f7fbd1cd7ad7.zip
Add decoration is_enabled api + allowed specifying win_id for enabled
Diffstat (limited to 'src')
-rw-r--r--src/LuaRuntime.hpp4
-rw-r--r--src/LuaRuntimeApi.hpp18
-rw-r--r--src/WindowActionRouter.cpp17
-rw-r--r--src/WindowActionRouter.hpp22
-rw-r--r--src/events/UrlChangedEvent.hpp3
-rw-r--r--src/events/WinCreatedEvent.hpp19
-rw-r--r--src/widgets/BrowserApp.cpp5
-rw-r--r--src/widgets/BrowserWindow.hpp1
-rw-r--r--src/widgets/Decorations.cpp8
-rw-r--r--src/widgets/Decorations.hpp1
-rw-r--r--src/widgets/EdgeDecoration.hpp3
11 files changed, 90 insertions, 11 deletions
diff --git a/src/LuaRuntime.hpp b/src/LuaRuntime.hpp
index 58362af..0f46eab 100644
--- a/src/LuaRuntime.hpp
+++ b/src/LuaRuntime.hpp
@@ -3,10 +3,12 @@
#include <QtCore>
#include <functional>
#include <lua.hpp>
+#include <optional>
#include "AsyncEventLoop.hpp"
#include "lua.h"
#include "utils.hpp"
+#include "widgets/BrowserWindow.hpp"
#include "widgets/Decorations.hpp"
#include "widgets/WebViewStack.hpp"
@@ -60,7 +62,7 @@ signals:
void webview_scroll_requested(WebViewId webview_id, int deltax, int deltay);
void webview_scroll_top_requested(WebViewId webview_id);
void webview_scroll_bottom_requested(WebViewId webview_id);
- void decoration_set_enabled(DecorationType type, bool enabled);
+ void decoration_set_enabled(DecorationType type, bool enabled, std::optional<WindowId> win_id);
protected:
LuaRuntime();
diff --git a/src/LuaRuntimeApi.hpp b/src/LuaRuntimeApi.hpp
index d8e6073..b308f56 100644
--- a/src/LuaRuntimeApi.hpp
+++ b/src/LuaRuntimeApi.hpp
@@ -1,10 +1,13 @@
#pragma once
#include <lua.hpp>
+#include <optional>
#include "LuaRuntime.hpp"
#include "WindowActionRouter.hpp"
#include "events/Event.hpp"
+#include "lua.h"
+#include "widgets/BrowserWindow.hpp"
#include "widgets/Decorations.hpp"
int lua_api_view_set_url(lua_State *state) {
@@ -269,13 +272,23 @@ int lua_api_view_scroll_bottom(lua_State *state) {
int lua_api_decorations_set_enabled(lua_State *state) {
auto type = (DecorationType)lua_tointeger(state, 1);
bool enabled = lua_toboolean(state, 2);
- qDebug() << type << enabled;
+ std::optional<WindowId> win_id =
+ lua_isnoneornil(state, 3) ? std::nullopt : std::make_optional(lua_tointeger(state, 3));
auto &runtime = LuaRuntime::instance();
- emit runtime.decoration_set_enabled(type, enabled);
+ emit runtime.decoration_set_enabled(type, enabled, win_id);
lua_pushnil(state);
return 1;
}
+int lua_api_decorations_get_enabled(lua_State *state) {
+ auto type = (DecorationType)lua_tointeger(state, 1);
+ WindowId win_id = lua_isnoneornil(state, 2) ? lua_tointeger(state, 2) : 0;
+ auto &router = WindowActionRouter::instance();
+ auto value = router.fetch_is_decoration_enabled(type, win_id);
+ lua_pushboolean(state, value);
+ return 1;
+}
+
// NOLINTNEXTLINE
static luaL_Reg internals_api[] = {
luaL_Reg{"event_add_listener", &lua_event_register},
@@ -301,5 +314,6 @@ static luaL_Reg internals_api[] = {
luaL_Reg{"search_previous", &lua_api_search_previous},
luaL_Reg{"search_next", &lua_api_search_next},
luaL_Reg{"decorations_set_enabled", &lua_api_decorations_set_enabled},
+ luaL_Reg{"decorations_get_enabled", &lua_api_decorations_get_enabled},
luaL_Reg{nullptr, nullptr},
};
diff --git a/src/WindowActionRouter.cpp b/src/WindowActionRouter.cpp
index ba479f0..3a11134 100644
--- a/src/WindowActionRouter.cpp
+++ b/src/WindowActionRouter.cpp
@@ -1,5 +1,6 @@
#include <QWidget>
#include <QtCore>
+#include <optional>
#include <unordered_map>
#include "LuaRuntime.hpp"
@@ -94,11 +95,12 @@ void WindowActionRouter::initialize(Configuration *config) {
[this](WebViewId webview_id) {
WITH_WEBVIEW_WINDOW(webview_id, window, { window->scroll_to_bottom(webview_id); });
});
+
+ // Decoration
connect(&runtime, &LuaRuntime::decoration_set_enabled, this,
- [this](DecorationType type, bool enabled) {
- qDebug() << "routing" << type << enabled << window_map.size();
- for (auto &win_match : window_map)
- win_match.second->set_decoration_enabled(type, enabled);
+ [this](DecorationType type, bool enabled, std::optional<WindowId> win_id) {
+ for (auto *win : get_windows_for_optional_win_id(win_id))
+ win->set_decoration_enabled(type, enabled);
});
}
@@ -165,3 +167,10 @@ QList<WebViewData> WindowActionRouter::fetch_webview_data_list(WindowId win_id)
KeyMode WindowActionRouter::fetch_current_mode() const {
return KeymapEvaluator::instance().get_current_mode();
}
+
+bool WindowActionRouter::fetch_is_decoration_enabled(DecorationType type, WindowId win_id) {
+ auto windows = get_windows_for_optional_win_id(std::make_optional(win_id));
+ for (auto *win : windows)
+ return win->get_decoration_enabled(type);
+ return false;
+}
diff --git a/src/WindowActionRouter.hpp b/src/WindowActionRouter.hpp
index aa8737d..7cc530c 100644
--- a/src/WindowActionRouter.hpp
+++ b/src/WindowActionRouter.hpp
@@ -5,11 +5,14 @@
#include <cstdint>
#include <functional>
#include <mutex>
+#include <optional>
+#include <vector>
#include "EventQueue.hpp"
#include "keymap/KeymapEvaluator.hpp"
#include "utils.hpp"
#include "widgets/BrowserWindow.hpp"
+#include "widgets/Decorations.hpp"
#include "widgets/WebViewStack.hpp"
#define WITH_WEBVIEW_WINDOW(WEBVIEW_ID, IDENT, BLOCK) \
@@ -38,6 +41,7 @@ public:
QList<WebViewData> fetch_webview_data_list(WindowId win_id = 0);
QVariant fetch_config_value(const QString &key);
KeyMode fetch_current_mode() const;
+ bool fetch_is_decoration_enabled(DecorationType type, WindowId win_id);
DEFINE_GETTER(fetch_current_search_text, current_search_text)
DEFINE_SETTER(set_current_search_text, current_search_text)
@@ -45,6 +49,24 @@ public:
DELEGATE(&event_queue, dispatch_event, dispatch_event)
DELEGATE(&event_queue, register_event, register_event)
+ std::vector<BrowserWindow *> get_windows_for_optional_win_id(std::optional<WindowId> win_id) {
+ std::vector<BrowserWindow *> windows;
+
+ if (!win_id.has_value()) {
+ for (auto &win_pair : window_map)
+ windows.push_back(win_pair.second);
+ } else if (win_id.value() == 0) {
+ for (auto &win_pair : window_map) {
+ if (win_pair.second->isActiveWindow())
+ windows.push_back(win_pair.second);
+ }
+ } else if (win_id.value() > 0 && window_map.contains(win_id.value())) {
+ windows.push_back(window_map.at(win_id.value()));
+ }
+
+ return windows;
+ }
+
protected:
WindowActionRouter() = default;
diff --git a/src/events/UrlChangedEvent.hpp b/src/events/UrlChangedEvent.hpp
index 812f8db..ec3980b 100644
--- a/src/events/UrlChangedEvent.hpp
+++ b/src/events/UrlChangedEvent.hpp
@@ -19,8 +19,7 @@ public:
}
void lua_push(lua_State *state) const override {
- lua_newtable(state);
- SET_FIELD("type", string, kind.toStdString().c_str())
+ Event::lua_push(state);
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/events/WinCreatedEvent.hpp b/src/events/WinCreatedEvent.hpp
new file mode 100644
index 0000000..b2d1bba
--- /dev/null
+++ b/src/events/WinCreatedEvent.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <QtCore>
+#include <lua.hpp>
+
+#include "events/Event.hpp"
+#include "widgets/BrowserWindow.hpp"
+
+class WinCreatedEvent : public Event {
+public:
+ const WindowId win_id;
+
+ WinCreatedEvent(WindowId win_id) : win_id(win_id) { kind = "WinCreated"; }
+
+ void lua_push(lua_State *state) const override {
+ Event::lua_push(state);
+ SET_FIELD("win_id", integer, win_id)
+ }
+};
diff --git a/src/widgets/BrowserApp.cpp b/src/widgets/BrowserApp.cpp
index 49054b8..d096f01 100644
--- a/src/widgets/BrowserApp.cpp
+++ b/src/widgets/BrowserApp.cpp
@@ -6,6 +6,7 @@
#include "LuaRuntime.hpp"
#include "WindowActionRouter.hpp"
#include "events/NotificationReceivedEvent.hpp"
+#include "events/WinCreatedEvent.hpp"
#include "widgets/BrowserWindow.hpp"
#include "widgets/BrowserApp.hpp"
@@ -59,6 +60,10 @@ BrowserWindow *BrowserApp::create_window(const QStringList &urls) {
WindowActionRouter::instance().add_window(window);
window->show();
+
+ auto *event = new WinCreatedEvent(window->get_id());
+ WindowActionRouter::instance().dispatch_event(event);
+
return window;
}
diff --git a/src/widgets/BrowserWindow.hpp b/src/widgets/BrowserWindow.hpp
index 98686fd..2927683 100644
--- a/src/widgets/BrowserWindow.hpp
+++ b/src/widgets/BrowserWindow.hpp
@@ -32,6 +32,7 @@ public:
DELEGATE(webview_stack, scroll_to_top, scroll_to_top)
DELEGATE(webview_stack, scroll_to_bottom, scroll_to_bottom)
DELEGATE(decorations, set_enabled, set_decoration_enabled)
+ DELEGATE(decorations, get_enabled, get_decoration_enabled)
bool on_window_key_event(QKeyEvent *event);
diff --git a/src/widgets/Decorations.cpp b/src/widgets/Decorations.cpp
index d559776..82c1a65 100644
--- a/src/widgets/Decorations.cpp
+++ b/src/widgets/Decorations.cpp
@@ -45,12 +45,16 @@ Decorations::Decorations(QWidget *content_widget, QWebEngineProfile *profile, QW
}
void Decorations::set_enabled(DecorationType type, bool enabled) {
- std::optional<EdgeDecoration *> decoration = get_decoration_widget(type);
-
+ auto decoration = get_decoration_widget(type);
if (decoration.has_value())
decoration.value()->set_enabled(enabled);
}
+bool Decorations::get_enabled(DecorationType type) {
+ auto decoration = get_decoration_widget(type);
+ return decoration.has_value() && decoration.value()->is_enabled();
+}
+
std::optional<EdgeDecoration *> Decorations::get_decoration_widget(DecorationType type) {
switch (type) {
case DecorationType::DecorationTop:
diff --git a/src/widgets/Decorations.hpp b/src/widgets/Decorations.hpp
index d58ee7f..30df104 100644
--- a/src/widgets/Decorations.hpp
+++ b/src/widgets/Decorations.hpp
@@ -20,6 +20,7 @@ public:
Decorations(QWidget *content_widget, QWebEngineProfile *profile, QWidget *parent = nullptr);
void set_enabled(DecorationType type, bool enabled);
+ bool get_enabled(DecorationType type);
private:
EdgeDecoration *decoration_top;
diff --git a/src/widgets/EdgeDecoration.hpp b/src/widgets/EdgeDecoration.hpp
index 59390dc..3ee0ab5 100644
--- a/src/widgets/EdgeDecoration.hpp
+++ b/src/widgets/EdgeDecoration.hpp
@@ -7,6 +7,7 @@
#include <qwebengineprofile.h>
#include <qwebengineview.h>
+#include "utils.hpp"
#include "widgets/WebView.hpp"
class EdgeDecoration : public QWidget {
@@ -19,6 +20,8 @@ public:
void set_html(const QString &content);
void set_enabled(bool enabled_value);
+ DEFINE_GETTER(is_enabled, enabled)
+
private:
bool vertical;
std::optional<WebView *> webview = std::nullopt;