diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-08-08 10:15:28 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-08-08 10:15:28 +0530 |
| commit | 5e3f233c239de63e8ac3549a32b0e6343b32fc7a (patch) | |
| tree | b0e0eedf47632c5765bdd554a5fdd7a11e6838a5 | |
| parent | 4ecfe688a016232656b383f82da4d6e2ba75a328 (diff) | |
| download | null-browser-5e3f233c239de63e8ac3549a32b0e6343b32fc7a.tar.gz null-browser-5e3f233c239de63e8ac3549a32b0e6343b32fc7a.zip | |
Add decorations.*.set_size api
| -rw-r--r-- | init.lua | 8 | ||||
| -rw-r--r-- | lua/null-browser/api.lua | 2 | ||||
| -rw-r--r-- | src/LuaRuntime.hpp | 1 | ||||
| -rw-r--r-- | src/LuaRuntimeApi.hpp | 13 | ||||
| -rw-r--r-- | src/WindowActionRouter.cpp | 6 | ||||
| -rw-r--r-- | src/widgets/BrowserWindow.hpp | 1 | ||||
| -rw-r--r-- | src/widgets/Decorations.cpp | 8 | ||||
| -rw-r--r-- | src/widgets/Decorations.hpp | 1 |
8 files changed, 39 insertions, 1 deletions
@@ -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; |
