1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 09:48:11 +00:00

Userland: Make IPC results with one return value available directly

This changes client methods so that they return the IPC response's
return value directly - instead of the response struct - for IPC
methods which only have a single return value.
This commit is contained in:
Gunnar Beutner 2021-05-03 13:55:29 +02:00 committed by Andreas Kling
parent 5bb79ea0a7
commit eb21aa65d1
18 changed files with 58 additions and 111 deletions

View file

@ -48,12 +48,12 @@ MouseSettingsWindow::MouseSettingsWindow()
m_speed_slider->on_change = [&](const int value) { m_speed_slider->on_change = [&](const int value) {
m_speed_label->set_text(String::formatted("{} %", value)); m_speed_label->set_text(String::formatted("{} %", value));
}; };
const int slider_value = float { speed_slider_scale } * GUI::WindowServerConnection::the().get_mouse_acceleration().factor(); const int slider_value = float { speed_slider_scale } * GUI::WindowServerConnection::the().get_mouse_acceleration();
m_speed_slider->set_value(slider_value); m_speed_slider->set_value(slider_value);
m_scroll_length_spinbox = *main_widget.find_descendant_of_type_named<GUI::SpinBox>("scroll_length_spinbox"); m_scroll_length_spinbox = *main_widget.find_descendant_of_type_named<GUI::SpinBox>("scroll_length_spinbox");
m_scroll_length_spinbox->set_min(WindowServer::scroll_step_size_min); m_scroll_length_spinbox->set_min(WindowServer::scroll_step_size_min);
m_scroll_length_spinbox->set_value(GUI::WindowServerConnection::the().get_scroll_step_size().step_size()); m_scroll_length_spinbox->set_value(GUI::WindowServerConnection::the().get_scroll_step_size());
m_double_click_speed_label = *main_widget.find_descendant_of_type_named<GUI::Label>("double_click_speed_label"); m_double_click_speed_label = *main_widget.find_descendant_of_type_named<GUI::Label>("double_click_speed_label");
m_double_click_speed_slider = *main_widget.find_descendant_of_type_named<GUI::HorizontalSlider>("double_click_speed_slider"); m_double_click_speed_slider = *main_widget.find_descendant_of_type_named<GUI::HorizontalSlider>("double_click_speed_slider");
@ -62,7 +62,7 @@ MouseSettingsWindow::MouseSettingsWindow()
m_double_click_speed_slider->on_change = [&](const int value) { m_double_click_speed_slider->on_change = [&](const int value) {
m_double_click_speed_label->set_text(String::formatted("{} ms", value)); m_double_click_speed_label->set_text(String::formatted("{} ms", value));
}; };
m_double_click_speed_slider->set_value(GUI::WindowServerConnection::the().get_double_click_speed().speed()); m_double_click_speed_slider->set_value(GUI::WindowServerConnection::the().get_double_click_speed());
m_ok_button = *main_widget.find_descendant_of_type_named<GUI::Button>("ok_button"); m_ok_button = *main_widget.find_descendant_of_type_named<GUI::Button>("ok_button");
m_ok_button->on_click = [this](auto) { m_ok_button->on_click = [this](auto) {

View file

@ -316,7 +316,7 @@ void TreeMapWidget::mousewheel_event(GUI::MouseEvent& event)
{ {
int delta = event.wheel_delta(); int delta = event.wheel_delta();
// FIXME: The wheel_delta is premultiplied in the window server, we actually want a raw value here. // FIXME: The wheel_delta is premultiplied in the window server, we actually want a raw value here.
int step_size = GUI::WindowServerConnection::the().get_scroll_step_size().step_size(); int step_size = GUI::WindowServerConnection::the().get_scroll_step_size();
if (delta > 0) { if (delta > 0) {
size_t step_back = delta / step_size; size_t step_back = delta / step_size;
if (step_back > m_viewpoint) if (step_back > m_viewpoint)

View file

@ -491,8 +491,12 @@ public:
auto do_implement_proxy = [&](String const& name, Vector<Parameter> const& parameters, bool is_synchronous) { auto do_implement_proxy = [&](String const& name, Vector<Parameter> const& parameters, bool is_synchronous) {
String return_type = "void"; String return_type = "void";
if (is_synchronous && !message.outputs.is_empty()) if (is_synchronous) {
return_type = message_name(endpoint.name, message.name, true); if (message.outputs.size() == 1)
return_type = message.outputs[0].type;
else if (!message.outputs.is_empty())
return_type = message_name(endpoint.name, message.name, true);
}
message_generator.set("message.name", message.name); message_generator.set("message.name", message.name);
message_generator.set("message.complex_return_type", return_type); message_generator.set("message.complex_return_type", return_type);
message_generator.set("async_prefix_maybe", is_synchronous ? "" : "async_"); message_generator.set("async_prefix_maybe", is_synchronous ? "" : "async_");
@ -516,8 +520,10 @@ public:
if (is_synchronous) { if (is_synchronous) {
if (return_type != "void") { if (return_type != "void") {
message_generator.append(R"~~~( message_generator.append(R"~~~(
return move(*)~~~"); return )~~~");
} else{ if (message.outputs.size() != 1)
message_generator.append(" move(*");
} else {
message_generator.append(R"~~~( message_generator.append(R"~~~(
)~~~"); )~~~");
} }
@ -545,9 +551,17 @@ public:
message_generator.append(")"); message_generator.append(")");
} }
message_generator.append(R"~~~(); if (message.outputs.size() == 1) {
message_generator.append("->");
message_generator.append(message.outputs[0].name);
message_generator.append("()");
} else
message_generator.append(")");
message_generator.append(R"~~~(;
} }
)~~~"); )~~~");
} else { } else {
message_generator.append(R"~~~( }); message_generator.append(R"~~~( });
} }

View file

@ -22,8 +22,8 @@ void ClientConnection::handshake()
void ClientConnection::enqueue(const Buffer& buffer) void ClientConnection::enqueue(const Buffer& buffer)
{ {
for (;;) { for (;;) {
auto response = enqueue_buffer(buffer.anonymous_buffer(), buffer.id(), buffer.sample_count()); auto success = enqueue_buffer(buffer.anonymous_buffer(), buffer.id(), buffer.sample_count());
if (response.success()) if (success)
break; break;
sleep(1); sleep(1);
} }
@ -31,53 +31,7 @@ void ClientConnection::enqueue(const Buffer& buffer)
bool ClientConnection::try_enqueue(const Buffer& buffer) bool ClientConnection::try_enqueue(const Buffer& buffer)
{ {
auto response = enqueue_buffer(buffer.anonymous_buffer(), buffer.id(), buffer.sample_count()); return enqueue_buffer(buffer.anonymous_buffer(), buffer.id(), buffer.sample_count());
return response.success();
}
bool ClientConnection::get_muted()
{
return IPCProxy::get_muted().muted();
}
void ClientConnection::set_muted(bool muted)
{
IPCProxy::set_muted(muted);
}
int ClientConnection::get_main_mix_volume()
{
return IPCProxy::get_main_mix_volume().volume();
}
void ClientConnection::set_main_mix_volume(int volume)
{
IPCProxy::set_main_mix_volume(volume);
}
int ClientConnection::get_remaining_samples()
{
return IPCProxy::get_remaining_samples().remaining_samples();
}
int ClientConnection::get_played_samples()
{
return IPCProxy::get_played_samples().played_samples();
}
void ClientConnection::set_paused(bool paused)
{
IPCProxy::set_paused(paused);
}
void ClientConnection::clear_buffer(bool paused)
{
IPCProxy::clear_buffer(paused);
}
int ClientConnection::get_playing_buffer()
{
return IPCProxy::get_playing_buffer().buffer_id();
} }
void ClientConnection::finished_playing_buffer(i32 buffer_id) void ClientConnection::finished_playing_buffer(i32 buffer_id)

View file

@ -24,19 +24,6 @@ public:
void enqueue(const Buffer&); void enqueue(const Buffer&);
bool try_enqueue(const Buffer&); bool try_enqueue(const Buffer&);
bool get_muted();
void set_muted(bool);
int get_main_mix_volume();
void set_main_mix_volume(int);
int get_remaining_samples();
int get_played_samples();
int get_playing_buffer();
void set_paused(bool paused);
void clear_buffer(bool paused = false);
Function<void(i32 buffer_id)> on_finish_playing_buffer; Function<void(i32 buffer_id)> on_finish_playing_buffer;
Function<void(bool muted)> on_muted_state_change; Function<void(bool muted)> on_muted_state_change;
Function<void(int volume)> on_main_mix_volume_change; Function<void(int volume)> on_main_mix_volume_change;

View file

@ -99,7 +99,7 @@ bool Launcher::seal_allowlist()
bool Launcher::open(const URL& url, const String& handler_name) bool Launcher::open(const URL& url, const String& handler_name)
{ {
return connection().open_url(url, handler_name).response(); return connection().open_url(url, handler_name);
} }
bool Launcher::open(const URL& url, const Details& details) bool Launcher::open(const URL& url, const Details& details)
@ -110,12 +110,12 @@ bool Launcher::open(const URL& url, const Details& details)
Vector<String> Launcher::get_handlers_for_url(const URL& url) Vector<String> Launcher::get_handlers_for_url(const URL& url)
{ {
return connection().get_handlers_for_url(url.to_string()).handlers(); return connection().get_handlers_for_url(url.to_string());
} }
auto Launcher::get_handlers_with_details_for_url(const URL& url) -> NonnullRefPtrVector<Details> auto Launcher::get_handlers_with_details_for_url(const URL& url) -> NonnullRefPtrVector<Details>
{ {
auto details = connection().get_handlers_with_details_for_url(url.to_string()).handlers_details(); auto details = connection().get_handlers_with_details_for_url(url.to_string());
NonnullRefPtrVector<Details> handlers_with_details; NonnullRefPtrVector<Details> handlers_with_details;
for (auto& value : details) { for (auto& value : details) {
handlers_with_details.append(Details::from_details_str(value)); handlers_with_details.append(Details::from_details_str(value));

View file

@ -186,7 +186,7 @@ void Application::tooltip_show_timer_did_fire()
Gfx::IntRect desktop_rect = Desktop::the().rect(); Gfx::IntRect desktop_rect = Desktop::the().rect();
const int margin = 30; const int margin = 30;
Gfx::IntPoint adjusted_pos = WindowServerConnection::the().get_global_cursor_position().position(); Gfx::IntPoint adjusted_pos = WindowServerConnection::the().get_global_cursor_position();
adjusted_pos.translate_by(0, 18); adjusted_pos.translate_by(0, 18);

View file

@ -59,7 +59,7 @@ bool Desktop::set_wallpaper(const StringView& path, bool save_config)
String Desktop::wallpaper() const String Desktop::wallpaper() const
{ {
return WindowServerConnection::the().get_wallpaper().path(); return WindowServerConnection::the().get_wallpaper();
} }
} }

View file

@ -37,12 +37,12 @@ DragOperation::Outcome DragOperation::exec()
drag_bitmap = bitmap->to_shareable_bitmap(); drag_bitmap = bitmap->to_shareable_bitmap();
} }
auto response = WindowServerConnection::the().start_drag( auto started = WindowServerConnection::the().start_drag(
m_mime_data->text(), m_mime_data->text(),
m_mime_data->all_data(), m_mime_data->all_data(),
drag_bitmap); drag_bitmap);
if (!response.started()) { if (!started) {
m_outcome = Outcome::Cancelled; m_outcome = Outcome::Cancelled;
return m_outcome; return m_outcome;
} }

View file

@ -85,7 +85,7 @@ void Menu::dismiss()
int Menu::realize_menu(RefPtr<Action> default_action) int Menu::realize_menu(RefPtr<Action> default_action)
{ {
unrealize_menu(); unrealize_menu();
m_menu_id = WindowServerConnection::the().create_menu(m_name).menu_id(); m_menu_id = WindowServerConnection::the().create_menu(m_name);
dbgln_if(MENU_DEBUG, "GUI::Menu::realize_menu(): New menu ID: {}", m_menu_id); dbgln_if(MENU_DEBUG, "GUI::Menu::realize_menu(): New menu ID: {}", m_menu_id);
VERIFY(m_menu_id > 0); VERIFY(m_menu_id > 0);

View file

@ -30,7 +30,7 @@ Menu& Menubar::add_menu(String name)
int Menubar::realize_menubar() int Menubar::realize_menubar()
{ {
return WindowServerConnection::the().create_menubar().menubar_id(); return WindowServerConnection::the().create_menubar();
} }
void Menubar::unrealize_menubar() void Menubar::unrealize_menubar()

View file

@ -119,7 +119,7 @@ void Window::show()
auto* parent_window = find_parent_window(); auto* parent_window = find_parent_window();
auto response = WindowServerConnection::the().create_window( m_window_id = WindowServerConnection::the().create_window(
m_rect_when_windowless, m_rect_when_windowless,
!m_moved_by_client, !m_moved_by_client,
m_has_alpha_channel, m_has_alpha_channel,
@ -138,7 +138,6 @@ void Window::show()
(i32)m_window_type, (i32)m_window_type,
m_title_when_windowless, m_title_when_windowless,
parent_window ? parent_window->window_id() : 0); parent_window ? parent_window->window_id() : 0);
m_window_id = response.window_id();
m_visible = true; m_visible = true;
apply_icon(); apply_icon();
@ -178,10 +177,10 @@ void Window::hide()
{ {
if (!is_visible()) if (!is_visible())
return; return;
auto response = WindowServerConnection::the().destroy_window(m_window_id); auto destroyed_window_ids = WindowServerConnection::the().destroy_window(m_window_id);
server_did_destroy(); server_did_destroy();
for (auto child_window_id : response.destroyed_window_ids()) { for (auto child_window_id : destroyed_window_ids) {
if (auto* window = Window::from_window_id(child_window_id)) { if (auto* window = Window::from_window_id(child_window_id)) {
window->server_did_destroy(); window->server_did_destroy();
} }
@ -212,20 +211,20 @@ String Window::title() const
{ {
if (!is_visible()) if (!is_visible())
return m_title_when_windowless; return m_title_when_windowless;
return WindowServerConnection::the().get_window_title(m_window_id).title(); return WindowServerConnection::the().get_window_title(m_window_id);
} }
Gfx::IntRect Window::applet_rect_on_screen() const Gfx::IntRect Window::applet_rect_on_screen() const
{ {
VERIFY(m_window_type == WindowType::Applet); VERIFY(m_window_type == WindowType::Applet);
return WindowServerConnection::the().get_applet_rect_on_screen(m_window_id).rect(); return WindowServerConnection::the().get_applet_rect_on_screen(m_window_id);
} }
Gfx::IntRect Window::rect() const Gfx::IntRect Window::rect() const
{ {
if (!is_visible()) if (!is_visible())
return m_rect_when_windowless; return m_rect_when_windowless;
return WindowServerConnection::the().get_window_rect(m_window_id).rect(); return WindowServerConnection::the().get_window_rect(m_window_id);
} }
void Window::set_rect(const Gfx::IntRect& a_rect) void Window::set_rect(const Gfx::IntRect& a_rect)
@ -240,7 +239,7 @@ void Window::set_rect(const Gfx::IntRect& a_rect)
m_main_widget->resize(m_rect_when_windowless.size()); m_main_widget->resize(m_rect_when_windowless.size());
return; return;
} }
auto window_rect = WindowServerConnection::the().set_window_rect(m_window_id, a_rect).rect(); auto window_rect = WindowServerConnection::the().set_window_rect(m_window_id, a_rect);
if (m_back_store && m_back_store->size() != window_rect.size()) if (m_back_store && m_back_store->size() != window_rect.size())
m_back_store = nullptr; m_back_store = nullptr;
if (m_front_store && m_front_store->size() != window_rect.size()) if (m_front_store && m_front_store->size() != window_rect.size())
@ -254,7 +253,7 @@ Gfx::IntSize Window::minimum_size() const
if (!is_visible()) if (!is_visible())
return m_minimum_size_when_windowless; return m_minimum_size_when_windowless;
return WindowServerConnection::the().get_window_minimum_size(m_window_id).size(); return WindowServerConnection::the().get_window_minimum_size(m_window_id);
} }
void Window::set_minimum_size(const Gfx::IntSize& size) void Window::set_minimum_size(const Gfx::IntSize& size)
@ -904,7 +903,7 @@ bool Window::is_maximized() const
if (!is_visible()) if (!is_visible())
return false; return false;
return WindowServerConnection::the().is_maximized(m_window_id).maximized(); return WindowServerConnection::the().is_maximized(m_window_id);
} }
void Window::schedule_relayout() void Window::schedule_relayout()
@ -1084,7 +1083,7 @@ bool Window::is_modified() const
{ {
if (!m_window_id) if (!m_window_id)
return false; return false;
return WindowServerConnection::the().is_window_modified(m_window_id).modified(); return WindowServerConnection::the().is_window_modified(m_window_id);
} }
void Window::set_modified(bool modified) void Window::set_modified(bool modified)

View file

@ -21,11 +21,6 @@ void RequestClient::handshake()
greet(); greet();
} }
bool RequestClient::is_supported_protocol(const String& protocol)
{
return IPCProxy::is_supported_protocol(protocol).supported();
}
template<typename RequestHashMapTraits> template<typename RequestHashMapTraits>
RefPtr<Request> RequestClient::start_request(const String& method, const String& url, const HashMap<String, String, RequestHashMapTraits>& request_headers, ReadonlyBytes request_body) RefPtr<Request> RequestClient::start_request(const String& method, const String& url, const HashMap<String, String, RequestHashMapTraits>& request_headers, ReadonlyBytes request_body)
{ {
@ -49,14 +44,14 @@ bool RequestClient::stop_request(Badge<Request>, Request& request)
{ {
if (!m_requests.contains(request.id())) if (!m_requests.contains(request.id()))
return false; return false;
return IPCProxy::stop_request(request.id()).success(); return IPCProxy::stop_request(request.id());
} }
bool RequestClient::set_certificate(Badge<Request>, Request& request, String certificate, String key) bool RequestClient::set_certificate(Badge<Request>, Request& request, String certificate, String key)
{ {
if (!m_requests.contains(request.id())) if (!m_requests.contains(request.id()))
return false; return false;
return IPCProxy::set_certificate(request.id(), move(certificate), move(key)).success(); return IPCProxy::set_certificate(request.id(), move(certificate), move(key));
} }
void RequestClient::request_finished(i32 request_id, bool success, u32 total_size) void RequestClient::request_finished(i32 request_id, bool success, u32 total_size)

View file

@ -23,7 +23,6 @@ class RequestClient
public: public:
virtual void handshake() override; virtual void handshake() override;
bool is_supported_protocol(const String&);
template<typename RequestHashMapTraits = Traits<String>> template<typename RequestHashMapTraits = Traits<String>>
RefPtr<Request> start_request(const String& method, const String& url, const HashMap<String, String, RequestHashMapTraits>& request_headers = {}, ReadonlyBytes request_body = {}); RefPtr<Request> start_request(const String& method, const String& url, const HashMap<String, String, RequestHashMapTraits>& request_headers = {}, ReadonlyBytes request_body = {});

View file

@ -25,8 +25,7 @@ RefPtr<WebSocket> WebSocketClient::connect(const URL& url, const String& origin,
IPC::Dictionary header_dictionary; IPC::Dictionary header_dictionary;
for (auto& it : request_headers) for (auto& it : request_headers)
header_dictionary.add(it.key, it.value); header_dictionary.add(it.key, it.value);
auto response = IPCProxy::connect(url, origin, protocols, extensions, header_dictionary); auto connection_id = IPCProxy::connect(url, origin, protocols, extensions, header_dictionary);
auto connection_id = response.connection_id();
if (connection_id < 0) if (connection_id < 0)
return nullptr; return nullptr;
auto connection = WebSocket::create_from_id({}, *this, connection_id); auto connection = WebSocket::create_from_id({}, *this, connection_id);
@ -38,7 +37,7 @@ u32 WebSocketClient::ready_state(Badge<WebSocket>, WebSocket& connection)
{ {
if (!m_connections.contains(connection.id())) if (!m_connections.contains(connection.id()))
return (u32)WebSocket::ReadyState::Closed; return (u32)WebSocket::ReadyState::Closed;
return IPCProxy::ready_state(connection.id()).ready_state(); return IPCProxy::ready_state(connection.id());
} }
void WebSocketClient::send(Badge<WebSocket>, WebSocket& connection, ByteBuffer data, bool is_text) void WebSocketClient::send(Badge<WebSocket>, WebSocket& connection, ByteBuffer data, bool is_text)
@ -59,7 +58,7 @@ bool WebSocketClient::set_certificate(Badge<WebSocket>, WebSocket& connection, S
{ {
if (!m_connections.contains(connection.id())) if (!m_connections.contains(connection.id()))
return false; return false;
return IPCProxy::set_certificate(connection.id(), move(certificate), move(key)).success(); return IPCProxy::set_certificate(connection.id(), move(certificate), move(key));
} }
void WebSocketClient::connected(i32 connection_id) void WebSocketClient::connected(i32 connection_id)

View file

@ -178,7 +178,7 @@ NonnullRefPtr<GUI::Menu> build_system_menu()
quick_sort(g_themes, [](auto& a, auto& b) { return a.name < b.name; }); quick_sort(g_themes, [](auto& a, auto& b) { return a.name < b.name; });
} }
auto current_theme_name = GUI::WindowServerConnection::the().get_system_theme().theme_name(); auto current_theme_name = GUI::WindowServerConnection::the().get_system_theme();
{ {
int theme_identifier = 0; int theme_identifier = 0;
@ -186,8 +186,8 @@ NonnullRefPtr<GUI::Menu> build_system_menu()
auto action = GUI::Action::create_checkable(theme.name, [theme_identifier](auto&) { auto action = GUI::Action::create_checkable(theme.name, [theme_identifier](auto&) {
auto& theme = g_themes[theme_identifier]; auto& theme = g_themes[theme_identifier];
dbgln("Theme switched to {} at path {}", theme.name, theme.path); dbgln("Theme switched to {} at path {}", theme.name, theme.path);
auto response = GUI::WindowServerConnection::the().set_system_theme(theme.path, theme.name); auto success = GUI::WindowServerConnection::the().set_system_theme(theme.path, theme.name);
VERIFY(response.success()); VERIFY(success);
}); });
if (theme.name == current_theme_name) if (theme.name == current_theme_name)
action->set_checked(true); action->set_checked(true);

View file

@ -171,12 +171,12 @@ void PageHost::page_did_request_alert(const String& message)
bool PageHost::page_did_request_confirm(const String& message) bool PageHost::page_did_request_confirm(const String& message)
{ {
return m_client.did_request_confirm(message).result(); return m_client.did_request_confirm(message);
} }
String PageHost::page_did_request_prompt(const String& message, const String& default_) String PageHost::page_did_request_prompt(const String& message, const String& default_)
{ {
return m_client.did_request_prompt(message, default_).response(); return m_client.did_request_prompt(message, default_);
} }
void PageHost::page_did_change_favicon(const Gfx::Bitmap& favicon) void PageHost::page_did_change_favicon(const Gfx::Bitmap& favicon)
@ -191,7 +191,7 @@ void PageHost::page_did_request_image_context_menu(const Gfx::IntPoint& content_
String PageHost::page_did_request_cookie(const URL& url, Web::Cookie::Source source) String PageHost::page_did_request_cookie(const URL& url, Web::Cookie::Source source)
{ {
return m_client.did_request_cookie(url, static_cast<u8>(source)).cookie(); return m_client.did_request_cookie(url, static_cast<u8>(source));
} }
void PageHost::page_did_set_cookie(const URL& url, const Web::Cookie::ParsedCookie& cookie, Web::Cookie::Source source) void PageHost::page_did_set_cookie(const URL& url, const Web::Cookie::ParsedCookie& cookie, Web::Cookie::Source source)

View file

@ -34,9 +34,9 @@ int main(int argc, char** argv)
auto app = GUI::Application::construct(argc, argv); auto app = GUI::Application::construct(argc, argv);
sleep(delay); sleep(delay);
auto response = GUI::WindowServerConnection::the().get_screen_bitmap(); auto shared_bitmap = GUI::WindowServerConnection::the().get_screen_bitmap();
auto* bitmap = response.bitmap().bitmap(); auto* bitmap = shared_bitmap.bitmap();
if (!bitmap) { if (!bitmap) {
warnln("Failed to grab screenshot"); warnln("Failed to grab screenshot");
return 1; return 1;