summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibFileSystemAccessClient
diff options
context:
space:
mode:
authorMustafa Quraish <mustafaq9@gmail.com>2021-09-06 00:51:32 -0400
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2021-09-10 20:46:50 +0430
commit2a968e92f07a08df6cefccbe36b78fd84838d600 (patch)
tree7c7aee55ffda66584e3ca40533c5961001ac9361 /Userland/Libraries/LibFileSystemAccessClient
parentb37211a6158731e87ca72a325aacbd1ff7e40b77 (diff)
downloadserenity-2a968e92f07a08df6cefccbe36b78fd84838d600.zip
FileSystemAccessServer: Allow read-only access without prompting
This commit adds a new request to the FileSystemAccessServer endpoint, allowing the clients to get read-only access to a file without getting a Dialog-box prompting the user for access. This is only meant to be used in cases where the user has asked specifically to open a file through the command-line arguments. In those cases, I believe it makes sense for the read-only access to be implicit. Always prompting the user gets a bit annoying, especially if you just quickly want to open a file through the CLI. The new request name has been made extremely specific to make sure that it's only used when appropriate.
Diffstat (limited to 'Userland/Libraries/LibFileSystemAccessClient')
-rw-r--r--Userland/Libraries/LibFileSystemAccessClient/Client.cpp17
-rw-r--r--Userland/Libraries/LibFileSystemAccessClient/Client.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/Userland/Libraries/LibFileSystemAccessClient/Client.cpp b/Userland/Libraries/LibFileSystemAccessClient/Client.cpp
index a18b2ed357..227fd1e66d 100644
--- a/Userland/Libraries/LibFileSystemAccessClient/Client.cpp
+++ b/Userland/Libraries/LibFileSystemAccessClient/Client.cpp
@@ -22,6 +22,23 @@ Client& Client::the()
return *s_the;
}
+Result Client::request_file_read_only_approved(i32 parent_window_id, String const& path)
+{
+ m_promise = Core::Promise<Result>::construct();
+ auto parent_window_server_client_id = GUI::WindowServerConnection::the().expose_client_id();
+ auto child_window_server_client_id = expose_window_server_client_id();
+
+ GUI::WindowServerConnection::the().async_add_window_stealing_for_client(child_window_server_client_id, parent_window_id);
+
+ ScopeGuard guard([parent_window_id, child_window_server_client_id] {
+ GUI::WindowServerConnection::the().async_remove_window_stealing_for_client(child_window_server_client_id, parent_window_id);
+ });
+
+ async_request_file_read_only_approved(parent_window_server_client_id, parent_window_id, path);
+
+ return m_promise->await();
+}
+
Result Client::request_file(i32 parent_window_id, String const& path, Core::OpenMode mode)
{
m_promise = Core::Promise<Result>::construct();
diff --git a/Userland/Libraries/LibFileSystemAccessClient/Client.h b/Userland/Libraries/LibFileSystemAccessClient/Client.h
index b2b418fd54..4396d60392 100644
--- a/Userland/Libraries/LibFileSystemAccessClient/Client.h
+++ b/Userland/Libraries/LibFileSystemAccessClient/Client.h
@@ -27,6 +27,7 @@ class Client final
C_OBJECT(Client)
public:
+ Result request_file_read_only_approved(i32 parent_window_id, String const& path);
Result request_file(i32 parent_window_id, String const& path, Core::OpenMode mode);
Result open_file(i32 parent_window_id, String const& window_title = {}, StringView const& path = Core::StandardPaths::home_directory());
Result save_file(i32 parent_window_id, String const& name, String const ext);