aboutsummaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/WindowActionRouter.cpp25
-rw-r--r--src/WindowActionRouter.hpp8
2 files changed, 22 insertions, 11 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;
diff --git a/src/WindowActionRouter.hpp b/src/WindowActionRouter.hpp
index efc54ca..7982667 100644
--- a/src/WindowActionRouter.hpp
+++ b/src/WindowActionRouter.hpp
@@ -34,7 +34,7 @@ public:
void initialize(Configuration *config);
void add_window(BrowserWindow *window);
- const WindowMap &windows();
+ const WindowMap &windows() { return window_map; }
WebViewId fetch_current_view_id(WindowId win_id = 0);
QList<WebViewData> fetch_webview_data_list(WindowId win_id = 0);
@@ -49,12 +49,14 @@ public:
DELEGATE(&event_queue, dispatch_event, dispatch_event)
DELEGATE(&event_queue, register_event, register_event)
-private:
+protected:
WindowActionRouter() = default;
void add_keymap(const QString &mode_string, const QString &keyseq, std::function<void()> action);
void find_current_search_text(WebViewId webview_id, bool forward);
- std::vector<BrowserWindow *> get_relevant_windows(std::optional<WindowId> win_id);
+ std::vector<BrowserWindow *>
+ get_relevant_windows(std::optional<WindowId> win_id = std::nullopt,
+ std::optional<WebViewId> view_id = std::nullopt);
signals:
void new_window_requested(const QUrl &url);