diff options
author | Mustafa Quraish <mustafaq9@gmail.com> | 2021-09-06 00:51:32 -0400 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2021-09-10 20:46:50 +0430 |
commit | 2a968e92f07a08df6cefccbe36b78fd84838d600 (patch) | |
tree | 7c7aee55ffda66584e3ca40533c5961001ac9361 /Userland/Libraries/LibFileSystemAccessClient | |
parent | b37211a6158731e87ca72a325aacbd1ff7e40b77 (diff) | |
download | serenity-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.cpp | 17 | ||||
-rw-r--r-- | Userland/Libraries/LibFileSystemAccessClient/Client.h | 1 |
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); |