From c90024fbabf0ef568ab7b5c8867f764b02b3d145 Mon Sep 17 00:00:00 2001 From: Maciej Date: Sat, 29 Oct 2022 21:52:20 +0200 Subject: [PATCH] SystemMonitor: Add context menu for opening adapter in NetworkSettings --- .../SystemMonitor/NetworkStatisticsWidget.cpp | 21 +++++++++++++++++++ .../SystemMonitor/NetworkStatisticsWidget.h | 1 + Userland/Applications/SystemMonitor/main.cpp | 1 + 3 files changed, 23 insertions(+) diff --git a/Userland/Applications/SystemMonitor/NetworkStatisticsWidget.cpp b/Userland/Applications/SystemMonitor/NetworkStatisticsWidget.cpp index 65b9448ab5..e77f6ee1c8 100644 --- a/Userland/Applications/SystemMonitor/NetworkStatisticsWidget.cpp +++ b/Userland/Applications/SystemMonitor/NetworkStatisticsWidget.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include #include @@ -71,6 +73,25 @@ NetworkStatisticsWidget::NetworkStatisticsWidget() net_adapters_fields.empend("bytes_out", "Bytes Out", Gfx::TextAlignment::CenterRight); m_adapter_model = GUI::JsonArrayModel::create("/sys/kernel/net/adapters", move(net_adapters_fields)); m_adapter_table_view->set_model(MUST(GUI::SortingProxyModel::create(*m_adapter_model))); + m_adapter_context_menu = MUST(GUI::Menu::try_create()); + m_adapter_context_menu->add_action(GUI::Action::create( + "Open in Network Settings...", MUST(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/network.png"sv)), [this](GUI::Action&) { + m_adapter_table_view->selection().for_each_index([this](GUI::ModelIndex const& index) { + auto adapter_name = index.sibling_at_column(1).data().as_string(); + GUI::Process::spawn_or_show_error(window(), "/bin/Escalator"sv, Array { "/bin/NetworkSettings", adapter_name.characters() }); + }); + }, + this)); + m_adapter_table_view->on_context_menu_request = [this](GUI::ModelIndex const& index, GUI::ContextMenuEvent const& event) { + if (!index.is_valid()) { + return; + } + auto adapter_name = index.sibling_at_column(1).data().as_string(); + if (adapter_name == "loop") { + return; + } + m_adapter_context_menu->popup(event.screen_position()); + }; auto& tcp_sockets_group_box = add("TCP Sockets"sv); tcp_sockets_group_box.set_layout(); diff --git a/Userland/Applications/SystemMonitor/NetworkStatisticsWidget.h b/Userland/Applications/SystemMonitor/NetworkStatisticsWidget.h index 6b9cda5bd1..f8e21e1485 100644 --- a/Userland/Applications/SystemMonitor/NetworkStatisticsWidget.h +++ b/Userland/Applications/SystemMonitor/NetworkStatisticsWidget.h @@ -22,6 +22,7 @@ private: void update_models(); RefPtr m_adapter_table_view; + RefPtr m_adapter_context_menu; RefPtr m_tcp_socket_table_view; RefPtr m_udp_socket_table_view; RefPtr m_adapter_model; diff --git a/Userland/Applications/SystemMonitor/main.cpp b/Userland/Applications/SystemMonitor/main.cpp index 49c5c3af6d..5a9cde793e 100644 --- a/Userland/Applications/SystemMonitor/main.cpp +++ b/Userland/Applications/SystemMonitor/main.cpp @@ -246,6 +246,7 @@ ErrorOr serenity_main(Main::Arguments arguments) TRY(Core::System::unveil("/sys/kernel", "r")); TRY(Core::System::unveil("/dev", "r")); TRY(Core::System::unveil("/bin", "r")); + TRY(Core::System::unveil("/bin/Escalator", "x")); TRY(Core::System::unveil("/usr/lib", "r")); // This directory only exists if ports are installed