diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-07-25 20:27:44 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-07-25 20:28:05 +0530 |
| commit | 81dcf7de91c1866d565f7aa9eb38f7fbd1cd7ad7 (patch) | |
| tree | aa24bcea93d19ce6298ad6aed499d324fac2ceae /src | |
| parent | 2c7d36b4aa53ffa638a7aa7046767f10e7a152bf (diff) | |
| download | null-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.hpp | 4 | ||||
| -rw-r--r-- | src/LuaRuntimeApi.hpp | 18 | ||||
| -rw-r--r-- | src/WindowActionRouter.cpp | 17 | ||||
| -rw-r--r-- | src/WindowActionRouter.hpp | 22 | ||||
| -rw-r--r-- | src/events/UrlChangedEvent.hpp | 3 | ||||
| -rw-r--r-- | src/events/WinCreatedEvent.hpp | 19 | ||||
| -rw-r--r-- | src/widgets/BrowserApp.cpp | 5 | ||||
| -rw-r--r-- | src/widgets/BrowserWindow.hpp | 1 | ||||
| -rw-r--r-- | src/widgets/Decorations.cpp | 8 | ||||
| -rw-r--r-- | src/widgets/Decorations.hpp | 1 | ||||
| -rw-r--r-- | src/widgets/EdgeDecoration.hpp | 3 |
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; |
