From 031b22e0bb0f1d132731aea3776917731a8ab4ce Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Fri, 25 Jul 2025 23:17:02 +0530 Subject: Add decorations.*.view lua api + support decoration views for open url --- src/WindowActionRouter.cpp | 51 ++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 18 deletions(-) (limited to 'src/WindowActionRouter.cpp') diff --git a/src/WindowActionRouter.cpp b/src/WindowActionRouter.cpp index 3a11134..6028c60 100644 --- a/src/WindowActionRouter.cpp +++ b/src/WindowActionRouter.cpp @@ -99,7 +99,7 @@ void WindowActionRouter::initialize(Configuration *config) { // Decoration connect(&runtime, &LuaRuntime::decoration_set_enabled, this, [this](DecorationType type, bool enabled, std::optional win_id) { - for (auto *win : get_windows_for_optional_win_id(win_id)) + for (auto *win : get_relevant_windows(win_id)) win->set_decoration_enabled(type, enabled); }); } @@ -141,26 +141,14 @@ void WindowActionRouter::add_keymap(const QString &mode_string, const QString &k } WebViewId WindowActionRouter::fetch_current_view_id(WindowId win_id) { - const std::lock_guard lock(window_map_mutex); - for (auto &pair : window_map) { - auto *win = pair.second; - auto is_current_window = win_id == win->get_id() || (win_id == 0 && win->isActiveWindow()); - if (is_current_window) { - return win->current_webview_id(); - } - } + for (auto *win : get_relevant_windows(std::make_optional(win_id))) + return win->current_webview_id(); return 0; } QList WindowActionRouter::fetch_webview_data_list(WindowId win_id) { - const std::lock_guard lock(window_map_mutex); - for (auto &pair : window_map) { - auto *win = pair.second; - auto is_current_window = win_id == win->get_id() || (win_id == 0 && win->isActiveWindow()); - if (is_current_window) { - return win->get_webview_list(); - } - } + for (auto *win : get_relevant_windows(std::make_optional(win_id))) + return win->get_webview_list(); return {}; } @@ -169,8 +157,35 @@ KeyMode WindowActionRouter::fetch_current_mode() const { } bool WindowActionRouter::fetch_is_decoration_enabled(DecorationType type, WindowId win_id) { - auto windows = get_windows_for_optional_win_id(std::make_optional(win_id)); + auto windows = get_relevant_windows(std::make_optional(win_id)); for (auto *win : windows) return win->get_decoration_enabled(type); return false; } + +std::optional WindowActionRouter::fetch_get_decoration_view_id(DecorationType type, + WindowId win_id) { + for (auto *win : get_relevant_windows(std::make_optional(win_id))) + return win->get_decoration_view_id(type); + return std::nullopt; +} + +std::vector +WindowActionRouter::get_relevant_windows(std::optional win_id) { + const std::lock_guard lock(window_map_mutex); + std::vector 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; +} -- cgit v1.3.1