aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-08-08 10:15:28 +0530
committerAkshay Nair <phenax5@gmail.com>2025-08-08 10:15:28 +0530
commit5e3f233c239de63e8ac3549a32b0e6343b32fc7a (patch)
treeb0e0eedf47632c5765bdd554a5fdd7a11e6838a5
parent4ecfe688a016232656b383f82da4d6e2ba75a328 (diff)
downloadnull-browser-5e3f233c239de63e8ac3549a32b0e6343b32fc7a.tar.gz
null-browser-5e3f233c239de63e8ac3549a32b0e6343b32fc7a.zip
Add decorations.*.set_size api
-rw-r--r--init.lua8
-rw-r--r--lua/null-browser/api.lua2
-rw-r--r--src/LuaRuntime.hpp1
-rw-r--r--src/LuaRuntimeApi.hpp13
-rw-r--r--src/WindowActionRouter.cpp6
-rw-r--r--src/widgets/BrowserWindow.hpp1
-rw-r--r--src/widgets/Decorations.cpp8
-rw-r--r--src/widgets/Decorations.hpp1
8 files changed, 39 insertions, 1 deletions
diff --git a/init.lua b/init.lua
index ae1f181..4b84113 100644
--- a/init.lua
+++ b/init.lua
@@ -56,9 +56,15 @@ web.event.add_listener('NotificationReceived', {
-- Tabline
require 'null-browser.extras.tabline'.init {
- decoration = web.decorations.top,
+ decoration = web.decorations.left,
}
+web.event.add_listener('WinCreated', {
+ callback = function(event)
+ web.decorations.left.set_size(200, { win = event.win_id })
+ end,
+})
+
-- Statusline
require 'null-browser.extras.statusline'.init {
decoration = web.decorations.bottom,
diff --git a/lua/null-browser/api.lua b/lua/null-browser/api.lua
index 6d6f974..670de3a 100644
--- a/lua/null-browser/api.lua
+++ b/lua/null-browser/api.lua
@@ -324,6 +324,7 @@ function web.view.scroll_to_bottom(view_id) return __internals.view_scroll_to_bo
--- @field set_enabled fun(enabled: boolean, opts?: DecorationOpts): nil
--- @field is_enabled fun(opts?: DecorationOpts): boolean
--- @field view fun(opts?: DecorationOpts): number|nil
+--- @field set_size fun(size: number, opts?: DecorationOpts): nil
--- @class DecorationType: number
@@ -345,6 +346,7 @@ local function create_decoration_api(type)
view = function(opts)
return __internals.decorations_get_view(type, (opts or {}).win)
end,
+ set_size = function(size, opts) __internals.decorations_set_size(type, size, (opts or {}).win) end,
}
end
diff --git a/src/LuaRuntime.hpp b/src/LuaRuntime.hpp
index 78ae354..8135d04 100644
--- a/src/LuaRuntime.hpp
+++ b/src/LuaRuntime.hpp
@@ -63,6 +63,7 @@ signals:
void webview_scroll_top_requested(WebViewId webview_id);
void webview_scroll_bottom_requested(WebViewId webview_id);
void decoration_set_enabled(DecorationType type, bool enabled, std::optional<WindowId> win_id);
+ void decoration_set_size(DecorationType type, uint16_t size, std::optional<WindowId> win_id);
void webview_html_set_requested(const QString &html, WebViewId view_id);
void webview_js_eval_requested(const QString &js_code, WebViewId view_id,
const JsOnResultFunc &on_result);
diff --git a/src/LuaRuntimeApi.hpp b/src/LuaRuntimeApi.hpp
index d6a78d5..239276e 100644
--- a/src/LuaRuntimeApi.hpp
+++ b/src/LuaRuntimeApi.hpp
@@ -339,6 +339,18 @@ int lua_api_decorations_set_enabled(lua_State *state) {
return 1;
}
+int lua_api_decorations_set_size(lua_State *state) {
+ auto type = (DecorationType)lua_tointeger(state, 1);
+ uint16_t size = lua_tointeger(state, 2);
+ qDebug() << "::api" << type << size;
+ 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_size(type, size, 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;
@@ -429,6 +441,7 @@ static luaL_Reg internals_api[] = {
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{"decorations_set_size", &lua_api_decorations_set_size},
luaL_Reg{"decorations_get_view", &lua_api_decorations_get_view},
luaL_Reg{"schedule", &lua_api_schedule_fn},
luaL_Reg{nullptr, nullptr},
diff --git a/src/WindowActionRouter.cpp b/src/WindowActionRouter.cpp
index f513210..db0398d 100644
--- a/src/WindowActionRouter.cpp
+++ b/src/WindowActionRouter.cpp
@@ -122,6 +122,12 @@ void WindowActionRouter::initialize(Configuration *config) {
for (auto *win : get_relevant_windows(win_id))
win->set_decoration_enabled(type, enabled);
});
+ connect(&runtime, &LuaRuntime::decoration_set_size, this,
+ [this](DecorationType type, uint16_t size, std::optional<WindowId> win_id) {
+ qDebug() << "::win" << type << size;
+ for (auto *win : get_relevant_windows(win_id))
+ win->set_decoration_size(type, size);
+ });
connect(&runtime, &LuaRuntime::schedule_for_next_tick, this,
[](const std::function<void()> &action) { LuaRuntime::instance().queue_task(action); });
diff --git a/src/widgets/BrowserWindow.hpp b/src/widgets/BrowserWindow.hpp
index 2842983..f51b0f7 100644
--- a/src/widgets/BrowserWindow.hpp
+++ b/src/widgets/BrowserWindow.hpp
@@ -33,6 +33,7 @@ public:
DELEGATE(decorations, set_enabled, set_decoration_enabled)
DELEGATE(decorations, get_enabled, get_decoration_enabled)
DELEGATE(decorations, get_view_id, get_decoration_view_id)
+ DELEGATE(decorations, set_size, set_decoration_size)
IWebViewMediator *get_webview_mediator(WebViewId webview_id);
bool has_webview(WebViewId webview_id);
diff --git a/src/widgets/Decorations.cpp b/src/widgets/Decorations.cpp
index 22aa9f9..5e11be4 100644
--- a/src/widgets/Decorations.cpp
+++ b/src/widgets/Decorations.cpp
@@ -3,6 +3,7 @@
#include <optional>
#include <qboxlayout.h>
#include <qlabel.h>
+#include <qlogging.h>
#include <qwidget.h>
#include "Decorations.hpp"
@@ -84,6 +85,13 @@ void Decorations::set_html(const QString &html, WebViewId view_id) {
decoration.value()->set_html(html);
}
+void Decorations::set_size(DecorationType type, uint16_t size) {
+ qDebug() << "::deco" << type << size;
+ auto decoration = get_decoration_widget_type(type);
+ if (decoration.has_value())
+ decoration.value()->set_size(size);
+}
+
void Decorations::run_javascript(const QString &js_code, WebViewId view_id,
const JsOnResultFunc &on_result) {
auto decoration = get_decoration_widget_by_view_id(view_id);
diff --git a/src/widgets/Decorations.hpp b/src/widgets/Decorations.hpp
index 3df4fd7..388a02f 100644
--- a/src/widgets/Decorations.hpp
+++ b/src/widgets/Decorations.hpp
@@ -25,6 +25,7 @@ public:
void set_enabled(DecorationType type, bool enabled);
bool get_enabled(DecorationType type);
+ void set_size(DecorationType type, uint16_t size_value);
std::optional<WebViewId> get_view_id(DecorationType type);
bool has_webview(WebViewId view_id) override;