aboutsummaryrefslogtreecommitdiff
path: root/src/WindowActionRouter.cpp
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-08-17 14:25:45 +0530
committerAkshay Nair <phenax5@gmail.com>2025-08-17 14:25:45 +0530
commit98f3281256e6ff435c67d83c6895fff5841b70be (patch)
tree6b05a448b8d049de130ac7dbe24baef0e7a1fc81 /src/WindowActionRouter.cpp
parentb16d38df05cd80aac209f42bfcb47971c62227e6 (diff)
downloadnull-browser-98f3281256e6ff435c67d83c6895fff5841b70be.tar.gz
null-browser-98f3281256e6ff435c67d83c6895fff5841b70be.zip
Use view for filtering window actions + window action router spec
Diffstat (limited to 'src/WindowActionRouter.cpp')
-rw-r--r--src/WindowActionRouter.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/WindowActionRouter.cpp b/src/WindowActionRouter.cpp
index 7971024..8231fa0 100644
--- a/src/WindowActionRouter.cpp
+++ b/src/WindowActionRouter.cpp
@@ -160,8 +160,6 @@ void WindowActionRouter::add_window(BrowserWindow *window) {
&WindowActionRouter::new_window_requested);
}
-const WindowMap &WindowActionRouter::windows() { return window_map; }
-
void WindowActionRouter::add_keymap(const QString &mode_string, const QString &keyseq,
std::function<void()> action) {
auto &keymap_evaluator = KeymapEvaluator::instance();
@@ -199,20 +197,31 @@ std::optional<WebViewId> WindowActionRouter::fetch_get_decoration_view_id(Decora
}
std::vector<BrowserWindow *>
-WindowActionRouter::get_relevant_windows(std::optional<WindowId> win_id) {
+WindowActionRouter::get_relevant_windows(std::optional<WindowId> win_id,
+ std::optional<WebViewId> view_id) {
const std::lock_guard<std::mutex> lock(window_map_mutex);
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())
+ // TODO: If view is 0, use active window
+ if (!view_id.has_value() || win_pair.second->has_webview(view_id.value())) {
windows.push_back(win_pair.second);
+ }
+ }
+ } else if (win_id.value() == 0) {
+ for (auto &win_pair : window_map) {
+ if (win_pair.second->isActiveWindow()) {
+ if (!view_id.has_value() || win_pair.second->has_webview(view_id.value())) {
+ 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()));
+ auto *win = window_map.at(win_id.value());
+ if (!view_id.has_value() || win->has_webview(view_id.value())) {
+ windows.push_back(win);
+ }
}
return windows;