From a8317d8805732de2c34243411e020e083039a628 Mon Sep 17 00:00:00 2001 From: Hue Date: Sun, 18 Jan 2026 23:28:19 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Panel=C2=A0:=20Fix=20memory=20leaks=20Memor?= =?UTF-8?q?y=20was=20leaked=20when=20the=20menu=20of=20the=20`menu`=20widg?= =?UTF-8?q?et=20was=20shown/hidden,=20and=20when=20reloading=20the=20widge?= =?UTF-8?q?t.=20In=20menu=20widget,=20properly=20delete=20widgets.=20Every?= =?UTF-8?q?where,=20ensure=20all=20the=20signal=20handlers=20get=20properl?= =?UTF-8?q?y=20disconnected.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/panel/widgets/battery.cpp | 9 +- src/panel/widgets/battery.hpp | 5 +- src/panel/widgets/clock.cpp | 3 +- src/panel/widgets/clock.hpp | 2 +- src/panel/widgets/command-output.cpp | 23 +++- src/panel/widgets/command-output.hpp | 10 +- src/panel/widgets/language.cpp | 3 +- src/panel/widgets/language.hpp | 2 + src/panel/widgets/launchers.cpp | 6 +- src/panel/widgets/launchers.hpp | 1 + src/panel/widgets/menu.cpp | 111 ++++++++++++------ src/panel/widgets/menu.hpp | 14 ++- src/panel/widgets/network.cpp | 22 ++-- src/panel/widgets/network.hpp | 3 + .../notifications/single-notification.cpp | 24 ++-- .../notifications/single-notification.hpp | 2 +- src/panel/widgets/tray/dbusmenu.cpp | 9 +- src/panel/widgets/tray/dbusmenu.hpp | 3 + src/panel/widgets/tray/host.cpp | 8 +- src/panel/widgets/tray/host.hpp | 3 + src/panel/widgets/tray/item.cpp | 25 ++-- src/panel/widgets/tray/item.hpp | 2 + src/panel/widgets/volume.cpp | 21 ++-- src/panel/widgets/volume.hpp | 3 +- src/panel/widgets/window-list/toplevel.cpp | 37 +++--- 25 files changed, 232 insertions(+), 119 deletions(-) diff --git a/src/panel/widgets/battery.cpp b/src/panel/widgets/battery.cpp index 090e1f23..ee4d9053 100644 --- a/src/panel/widgets/battery.cpp +++ b/src/panel/widgets/battery.cpp @@ -1,4 +1,5 @@ #include "battery.hpp" +#include "wf-ipc.hpp" #include #include #include @@ -197,7 +198,7 @@ bool WayfireBatteryInfo::setup_dbus() display_device->get_cached_property(present, SHOULD_DISPLAY); if (present.get()) { - display_device->signal_properties_changed().connect( + disp_dev_sig = display_device->signal_properties_changed().connect( sigc::mem_fun(*this, &WayfireBatteryInfo::on_properties_changed)); return true; @@ -232,3 +233,9 @@ void WayfireBatteryInfo::init(Gtk::Box *container) button.property_scale_factor().signal_changed() .connect(sigc::mem_fun(*this, &WayfireBatteryInfo::update_icon)); } + +WayfireBatteryInfo::~WayfireBatteryInfo() +{ + btn_sig.disconnect(); + disp_dev_sig.disconnect(); +} diff --git a/src/panel/widgets/battery.hpp b/src/panel/widgets/battery.hpp index a3366e19..43f9f264 100644 --- a/src/panel/widgets/battery.hpp +++ b/src/panel/widgets/battery.hpp @@ -10,6 +10,7 @@ #include #include "../widget.hpp" +#include "sigc++/connection.h" using DBusConnection = Glib::RefPtr; using DBusProxy = Glib::RefPtr; @@ -23,6 +24,8 @@ class WayfireBatteryInfo : public WayfireWidget { WfOption status_opt{"panel/battery_status"}; + sigc::connection btn_sig, disp_dev_sig; + Gtk::Button button; Gtk::Label label; Gtk::Box button_box; @@ -44,7 +47,7 @@ class WayfireBatteryInfo : public WayfireWidget public: virtual void init(Gtk::Box *container); - virtual ~WayfireBatteryInfo() = default; + virtual ~WayfireBatteryInfo(); }; diff --git a/src/panel/widgets/clock.cpp b/src/panel/widgets/clock.cpp index b89bdf82..f2ab69ae 100644 --- a/src/panel/widgets/clock.cpp +++ b/src/panel/widgets/clock.cpp @@ -16,7 +16,7 @@ void WayfireClock::init(Gtk::Box *container) button->get_popover()->get_style_context()->add_class("clock-popover"); button->get_children()[0]->get_style_context()->add_class("flat"); button->get_popover()->set_child(calendar); - button->get_popover()->signal_show().connect( + btn_sig = button->get_popover()->signal_show().connect( sigc::mem_fun(*this, &WayfireClock::on_calendar_shown)); container->append(*button); @@ -57,5 +57,6 @@ bool WayfireClock::update_label() WayfireClock::~WayfireClock() { + btn_sig.disconnect(); timeout.disconnect(); } diff --git a/src/panel/widgets/clock.hpp b/src/panel/widgets/clock.hpp index 91486fb1..03663a4a 100644 --- a/src/panel/widgets/clock.hpp +++ b/src/panel/widgets/clock.hpp @@ -12,7 +12,7 @@ class WayfireClock : public WayfireWidget Gtk::Calendar calendar; std::unique_ptr button; - sigc::connection timeout; + sigc::connection timeout, btn_sig; WfOption format{"panel/clock_format"}; void on_calendar_shown(); diff --git a/src/panel/widgets/command-output.cpp b/src/panel/widgets/command-output.cpp index 23597099..2ee12a84 100644 --- a/src/panel/widgets/command-output.cpp +++ b/src/panel/widgets/command-output.cpp @@ -1,4 +1,5 @@ #include "command-output.hpp" +#include "sigc++/connection.h" #include #include @@ -11,7 +12,7 @@ #include -static void label_set_from_command(std::string command_line, +static sigc::connection label_set_from_command(std::string command_line, Gtk::Label& label) { command_line = "/bin/sh -c \"" + command_line + "\""; @@ -21,7 +22,7 @@ static void label_set_from_command(std::string command_line, Glib::spawn_async_with_pipes("", Glib::shell_parse_argv(command_line), Glib::SpawnFlags::DO_NOT_REAP_CHILD | Glib::SpawnFlags::SEARCH_PATH_FROM_ENVP, Glib::SlotSpawnChildSetup{}, &pid, nullptr, &output_fd, nullptr); - Glib::signal_child_watch().connect([=, &label] (Glib::Pid pid, int exit_status) + return Glib::signal_child_watch().connect([=, &label] (Glib::Pid pid, int exit_status) { FILE *file = fdopen(output_fd, "r"); Glib::ustring output; @@ -95,10 +96,11 @@ WfCommandOutputButtons::CommandOutput::CommandOutput(const std::string & name, const auto update_output = [=] () { - label_set_from_command(command, main_label); + command_sig.disconnect(); + command_sig = label_set_from_command(command, main_label); }; - signal_clicked().connect(update_output); + signals.push_back(signal_clicked().connect(update_output)); if (period > 0) { @@ -118,8 +120,17 @@ WfCommandOutputButtons::CommandOutput::CommandOutput(const std::string & name, { set_has_tooltip(); tooltip_label.show(); - signal_query_tooltip().connect(sigc::mem_fun(*this, - &WfCommandOutputButtons::CommandOutput::query_tooltip), false); + signals.push_back(signal_query_tooltip().connect(sigc::mem_fun(*this, + &WfCommandOutputButtons::CommandOutput::query_tooltip), false)); + } +} + +WfCommandOutputButtons::CommandOutput::~CommandOutput() +{ + timeout_connection.disconnect(); + for (auto signal : signals) + { + signal.disconnect(); } } diff --git a/src/panel/widgets/command-output.hpp b/src/panel/widgets/command-output.hpp index 308b7127..13c188c3 100644 --- a/src/panel/widgets/command-output.hpp +++ b/src/panel/widgets/command-output.hpp @@ -2,19 +2,22 @@ #define COMMAND_OUTPUT_HPP #include "../widget.hpp" +#include "sigc++/connection.h" #include #include #include #include +#include #include class WfCommandOutputButtons : public WayfireWidget { struct CommandOutput : public Gtk::Button { - sigc::connection timeout_connection; + sigc::connection timeout_connection, command_sig; + std::vector signals; Gtk::Box box; Gtk::Image icon; @@ -39,10 +42,7 @@ class WfCommandOutputButtons : public WayfireWidget CommandOutput& operator =(const CommandOutput&) = delete; bool query_tooltip(int i, int j, bool k, const std::shared_ptr& tooltip); void update_tooltip(); - ~CommandOutput() override - { - timeout_connection.disconnect(); - } + ~CommandOutput() override; }; Gtk::Box box; diff --git a/src/panel/widgets/language.cpp b/src/panel/widgets/language.cpp index c0d925fa..310f9515 100644 --- a/src/panel/widgets/language.cpp +++ b/src/panel/widgets/language.cpp @@ -18,7 +18,7 @@ void WayfireLanguage::init(Gtk::Box *container) button.get_style_context()->add_class("language"); button.get_style_context()->add_class("flat"); button.get_style_context()->remove_class("activated"); - button.signal_clicked().connect(sigc::mem_fun(*this, &WayfireLanguage::next_layout)); + btn_sig = button.signal_clicked().connect(sigc::mem_fun(*this, &WayfireLanguage::next_layout)); button.show(); ipc_client->subscribe(this, {"keyboard-modifier-state-changed"}); @@ -121,4 +121,5 @@ WayfireLanguage::WayfireLanguage() WayfireLanguage::~WayfireLanguage() { ipc_client->unsubscribe(this); + btn_sig.disconnect(); } diff --git a/src/panel/widgets/language.hpp b/src/panel/widgets/language.hpp index a1819724..aecbdd81 100644 --- a/src/panel/widgets/language.hpp +++ b/src/panel/widgets/language.hpp @@ -3,6 +3,7 @@ #include "../widget.hpp" #include "gtkmm/button.h" +#include "sigc++/connection.h" #include "wf-ipc.hpp" #include #include @@ -21,6 +22,7 @@ class WayfireLanguage : public WayfireWidget, public IIPCSubscriber { // Gtk::Label label; Gtk::Button button; + sigc::connection btn_sig; std::shared_ptr ipc_client; uint32_t current_layout; diff --git a/src/panel/widgets/launchers.cpp b/src/panel/widgets/launchers.cpp index 46da4d35..1339ad96 100644 --- a/src/panel/widgets/launchers.cpp +++ b/src/panel/widgets/launchers.cpp @@ -49,7 +49,7 @@ bool WfLauncherButton::initialize(std::string name, std::string icon, std::strin style->add_class("flat"); style->add_class("launcher"); - button.signal_clicked().connect([=] () { launch(); }); + btn_sig = button.signal_clicked().connect([=] () { launch(); }); update_icon(); @@ -74,7 +74,9 @@ void WfLauncherButton::launch() WfLauncherButton::WfLauncherButton() {} WfLauncherButton::~WfLauncherButton() -{} +{ + btn_sig.disconnect(); +} static bool begins_with(const std::string& string, const std::string& prefix) { diff --git a/src/panel/widgets/launchers.hpp b/src/panel/widgets/launchers.hpp index 4f1fb696..c87f8007 100644 --- a/src/panel/widgets/launchers.hpp +++ b/src/panel/widgets/launchers.hpp @@ -13,6 +13,7 @@ struct WfLauncherButton { Gtk::Image m_icon; Gtk::Button button; + sigc::connection btn_sig; Glib::RefPtr app_info; WfLauncherButton(); diff --git a/src/panel/widgets/menu.cpp b/src/panel/widgets/menu.cpp index 61cb6ad5..ec042ce1 100644 --- a/src/panel/widgets/menu.cpp +++ b/src/panel/widgets/menu.cpp @@ -46,10 +46,15 @@ WfMenuCategoryButton::WfMenuCategoryButton(WayfireMenu *_menu, std::string _cate this->get_style_context()->add_class("flat"); this->get_style_context()->add_class("app-category"); - this->signal_clicked().connect( + sig_click = this->signal_clicked().connect( sigc::mem_fun(*this, &WfMenuCategoryButton::on_click)); } +WfMenuCategoryButton::~WfMenuCategoryButton() +{ + sig_click.disconnect(); +} + void WfMenuCategoryButton::on_click() { menu->set_category(category); @@ -68,11 +73,11 @@ WfMenuMenuItem::WfMenuMenuItem(WayfireMenu *_menu, Glib::RefPtron_click(); - }); + })); m_padding_box.append(m_button); m_label.set_ellipsize(Pango::EllipsizeMode::END); m_label.set_max_width_chars(5); @@ -100,13 +105,13 @@ WfMenuMenuItem::WfMenuMenuItem(WayfireMenu *_menu, Glib::RefPtrget_action_name(action), full_action); auto action_obj = Gio::SimpleAction::create(action); - action_obj->signal_activate().connect( + signals.push_back(action_obj->signal_activate().connect( [this, action] (Glib::VariantBase vb) { auto ctx = Gdk::Display::get_default()->get_app_launch_context(); m_app_info->launch_action(action, ctx); menu->hide_menu(); - }); + })); m_menu->append_item(menu_item); m_actions->add_action(action_obj); @@ -114,30 +119,38 @@ WfMenuMenuItem::WfMenuMenuItem(WayfireMenu *_menu, Glib::RefPtradd_class("app-button"); set_has_tooltip(); - signal_query_tooltip().connect([=] (int x, int y, bool key_mode, - const std::shared_ptr& tooltip) -> bool + signals.push_back(signal_query_tooltip().connect([=] (int x, int y, bool key_mode, + const std::shared_ptr& tooltip) -> + bool { tooltip->set_text(app->get_name()); return true; - }, false); + }, false)); m_extra_actions_button.insert_action_group("app", m_actions); auto click_gesture = Gtk::GestureClick::create(); click_gesture->set_button(3); - click_gesture->signal_pressed().connect([=] (int count, double x, double y) + signals.push_back(click_gesture->signal_pressed().connect([=] (int count, double x, double y) { m_extra_actions_button.activate(); click_gesture->set_state(Gtk::EventSequenceState::CLAIMED); - }); + })); m_button.add_controller(click_gesture); } +WfMenuMenuItem::~WfMenuMenuItem() +{ + for (auto signal : signals) + { + signal.disconnect(); + } +} + void WfMenuMenuItem::on_click() { auto ctx = Gdk::Display::get_default()->get_app_launch_context(); @@ -325,6 +338,7 @@ void WayfireMenu::populate_menu_categories() for (auto child : category_box.get_children()) { category_box.remove(*child); + delete child; } // Iterate allowed categories in order @@ -353,6 +367,7 @@ void WayfireMenu::populate_menu_items(std::string category) for (auto child : flowbox.get_children()) { flowbox.remove(*child); + delete child; } for (auto app_info : category_list[category]->items) @@ -552,8 +567,8 @@ void WayfireMenu::update_popover_layout() auto typing_gesture = Gtk::EventControllerKey::create(); typing_gesture->set_propagation_phase(Gtk::PropagationPhase::CAPTURE); - typing_gesture->signal_key_pressed().connect([=] (guint keyval, guint keycode, - Gdk::ModifierType state) + signals.push_back(typing_gesture->signal_key_pressed().connect([ = ](guint keyval, guint keycode, + Gdk::ModifierType state)) { if (keyval == GDK_KEY_BackSpace) { @@ -591,7 +606,7 @@ void WayfireMenu::update_popover_layout() return false; }, false); button->get_popover()->add_controller(typing_gesture); - button->get_popover()->signal_closed().connect([=] () + signals.push_back(button->get_popover()->signal_closed().connect([=] () { Gtk::Window *window = dynamic_cast(button->get_root()); WfOption panel_layer{"panel/layer"}; @@ -615,7 +630,7 @@ void WayfireMenu::update_popover_layout() { gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_BACKGROUND); } - }); + })); } else { /* Layout was already initialized, make sure to remove widgets before @@ -708,41 +723,41 @@ void WayfireLogoutUI::create_logout_ui_button(WayfireLogoutUIButton *button, con WayfireLogoutUI::WayfireLogoutUI() { create_logout_ui_button(&suspend, "emblem-synchronizing", "Suspend"); - suspend.button.signal_clicked().connect( - sigc::mem_fun(*this, &WayfireLogoutUI::on_suspend_click)); + signals.push_back(suspend.button.signal_clicked().connect( + sigc::mem_fun(*this, &WayfireLogoutUI::on_suspend_click))); main_layout.attach(suspend.button, 0, 0, 1, 1); create_logout_ui_button(&hibernate, "weather-clear-night", "Hibernate"); - hibernate.button.signal_clicked().connect( - sigc::mem_fun(*this, &WayfireLogoutUI::on_hibernate_click)); + signals.push_back(hibernate.button.signal_clicked().connect( + sigc::mem_fun(*this, &WayfireLogoutUI::on_hibernate_click))); main_layout.attach(hibernate.button, 1, 0, 1, 1); create_logout_ui_button(&switchuser, "system-users", "Switch User"); - switchuser.button.signal_clicked().connect( - sigc::mem_fun(*this, &WayfireLogoutUI::on_switchuser_click)); + signals.push_back(switchuser.button.signal_clicked().connect( + sigc::mem_fun(*this, &WayfireLogoutUI::on_switchuser_click))); main_layout.attach(switchuser.button, 2, 0, 1, 1); create_logout_ui_button(&logout, "system-log-out", "Log Out"); - logout.button.signal_clicked().connect( - sigc::mem_fun(*this, &WayfireLogoutUI::on_logout_click)); + signals.push_back(logout.button.signal_clicked().connect( + sigc::mem_fun(*this, &WayfireLogoutUI::on_logout_click))); main_layout.attach(logout.button, 0, 1, 1, 1); create_logout_ui_button(&reboot, "system-reboot", "Reboot"); - reboot.button.signal_clicked().connect( - sigc::mem_fun(*this, &WayfireLogoutUI::on_reboot_click)); + signals.push_back(reboot.button.signal_clicked().connect( + sigc::mem_fun(*this, &WayfireLogoutUI::on_reboot_click))); main_layout.attach(reboot.button, 1, 1, 1, 1); create_logout_ui_button(&shutdown, "system-shutdown", "Shut Down"); - shutdown.button.signal_clicked().connect( - sigc::mem_fun(*this, &WayfireLogoutUI::on_shutdown_click)); + signals.push_back(shutdown.button.signal_clicked().connect( + sigc::mem_fun(*this, &WayfireLogoutUI::on_shutdown_click))); main_layout.attach(shutdown.button, 2, 1, 1, 1); cancel.button.set_size_request(100, 50); cancel.button.set_label("Cancel"); main_layout.attach(cancel.button, 1, 2, 1, 1); - cancel.button.signal_clicked().connect( - sigc::mem_fun(*this, &WayfireLogoutUI::on_cancel_click)); + signals.push_back(cancel.button.signal_clicked().connect( + sigc::mem_fun(*this, &WayfireLogoutUI::on_cancel_click))); main_layout.set_row_spacing(LOGOUT_BUTTON_MARGIN); main_layout.set_column_spacing(LOGOUT_BUTTON_MARGIN); @@ -767,6 +782,14 @@ WayfireLogoutUI::WayfireLogoutUI() css_provider, GTK_STYLE_PROVIDER_PRIORITY_USER); } +WayfireLogoutUI::~WayfireLogoutUI() +{ + for (auto signal : signals) + { + signal.disconnect(); + } +} + void WayfireMenu::on_logout_click() { button->get_popover()->hide(); @@ -791,6 +814,7 @@ void WayfireMenu::refresh() for (auto child : flowbox.get_children()) { flowbox.remove(*child); + delete child; } load_menu_items_all(); @@ -838,7 +862,7 @@ void WayfireMenu::init(Gtk::Box *container) main_image.get_style_context()->add_class("menu-icon"); - output->toggle_menu_signal().connect(sigc::mem_fun(*this, &WayfireMenu::toggle_menu)); + signals.push_back(output->toggle_menu_signal().connect(sigc::mem_fun(*this, &WayfireMenu::toggle_menu))); menu_icon.set_callback([=] () { update_icon(); }); menu_min_category_width.set_callback([=] () { update_category_width(); }); @@ -855,32 +879,32 @@ void WayfireMenu::init(Gtk::Box *container) style->add_class("flat"); button->get_popover()->get_style_context()->add_class("menu-popover"); button->get_children()[0]->get_style_context()->add_class("flat"); - button->get_popover()->signal_show().connect( - sigc::mem_fun(*this, &WayfireMenu::on_popover_shown)); + signals.push_back(button->get_popover()->signal_show().connect( + sigc::mem_fun(*this, &WayfireMenu::on_popover_shown))); if (!update_icon()) { return; } - button->property_scale_factor().signal_changed().connect( - [=] () {update_icon(); }); + signals.push_back(button->property_scale_factor().signal_changed().connect( + [=] () {update_icon(); })); container->append(hbox); hbox.append(*button); auto click_gesture = Gtk::GestureClick::create(); - click_gesture->signal_pressed().connect([=] (int count, double x, double y) + signals.push_back(click_gesture->signal_pressed().connect([=] (int count, double x, double y) { toggle_menu(); - }); + })); hbox.add_controller(click_gesture); logout_image.set_icon_size(Gtk::IconSize::LARGE); logout_image.set_from_icon_name("system-shutdown"); logout_button.get_style_context()->add_class("flat"); - logout_button.signal_clicked().connect( - sigc::mem_fun(*this, &WayfireMenu::on_logout_click)); + signals.push_back(logout_button.signal_clicked().connect( + sigc::mem_fun(*this, &WayfireMenu::on_logout_click))); logout_button.set_margin_end(35); logout_button.set_child(logout_image); hbox_bottom.append(logout_button); @@ -955,3 +979,12 @@ void WayfireMenu::select_first_flowbox_item() } } } + +WayfireMenu::~WayfireMenu() +{ + g_signal_handler_disconnect(app_info_monitor, app_info_monitor_changed_handler_id); + for (auto signal : signals) + { + signal.disconnect(); + } +} diff --git a/src/panel/widgets/menu.hpp b/src/panel/widgets/menu.hpp index 6a872766..e3273abd 100644 --- a/src/panel/widgets/menu.hpp +++ b/src/panel/widgets/menu.hpp @@ -2,6 +2,7 @@ #define WIDGETS_MENU_HPP #include "../widget.hpp" +#include "sigc++/connection.h" #include "wf-popover.hpp" #include #include @@ -27,12 +28,14 @@ class WfMenuCategoryButton : public Gtk::Button { public: WfMenuCategoryButton(WayfireMenu *menu, std::string category, std::string label, std::string icon_name); + ~WfMenuCategoryButton(); private: WayfireMenu *menu; Gtk::Box m_box; Gtk::Label m_label; Gtk::Image m_image; + sigc::connection sig_click; std::string category; std::string label; @@ -44,6 +47,7 @@ class WfMenuMenuItem : public Gtk::FlowBoxChild { public: WfMenuMenuItem(WayfireMenu *menu, AppInfo app); + ~WfMenuMenuItem(); uint32_t matches(Glib::ustring text); uint32_t fuzzy_match(Glib::ustring text); @@ -64,6 +68,7 @@ class WfMenuMenuItem : public Gtk::FlowBoxChild Glib::RefPtr m_menu; Glib::RefPtr m_actions; Gtk::MenuButton m_extra_actions_button; + std::vector signals; bool m_has_actions = false; uint32_t m_search_value = 0; @@ -84,6 +89,7 @@ class WayfireLogoutUI { public: WayfireLogoutUI(); + ~WayfireLogoutUI(); WfOption logout_command{"panel/logout_command"}; WfOption reboot_command{"panel/reboot_command"}; WfOption shutdown_command{"panel/shutdown_command"}; @@ -100,6 +106,7 @@ class WayfireLogoutUI WayfireLogoutUIButton cancel; Gtk::CenterBox hbox; Gtk::Grid main_layout; + std::vector signals; void create_logout_ui_button(WayfireLogoutUIButton *button, const char *icon, const char *label); void on_logout_click(); @@ -163,6 +170,8 @@ class WayfireMenu : public WayfireWidget "Settings", "System", "Utility", "Hidden" }; + std::vector signals; + WfOption menu_logout_command{"panel/menu_logout_command"}; WfOption fuzzy_search_enabled{"panel/menu_fuzzy_search"}; WfOption panel_position{"panel/position"}; @@ -196,10 +205,7 @@ class WayfireMenu : public WayfireWidget this->output = output; } - ~WayfireMenu() override - { - g_signal_handler_disconnect(app_info_monitor, app_info_monitor_changed_handler_id); - } + ~WayfireMenu() override; }; #endif /* end of include guard: WIDGETS_MENU_HPP */ diff --git a/src/panel/widgets/network.cpp b/src/panel/widgets/network.cpp index 0ed71819..b1beca53 100644 --- a/src/panel/widgets/network.cpp +++ b/src/panel/widgets/network.cpp @@ -54,6 +54,7 @@ struct WifiConnectionInfo : public WfNetworkConnectionInfo { WayfireNetworkInfo *widget; DBusProxy ap; + sigc::connection ap_sig; WifiConnectionInfo(const DBusConnection& connection, std::string path, WayfireNetworkInfo *widget) @@ -65,7 +66,7 @@ struct WifiConnectionInfo : public WfNetworkConnectionInfo if (ap) { - ap->signal_properties_changed().connect( + ap_sig = ap->signal_properties_changed().connect( sigc::mem_fun(*this, &WifiConnectionInfo::on_properties_changed)); } } @@ -382,8 +383,8 @@ bool WayfireNetworkInfo::setup_dbus() return false; } - nm_proxy->signal_properties_changed().connect( - sigc::mem_fun(*this, &WayfireNetworkInfo::on_nm_properties_changed)); + signals.push_back(nm_proxy->signal_properties_changed().connect( + sigc::mem_fun(*this, &WayfireNetworkInfo::on_nm_properties_changed))); return true; } @@ -415,8 +416,8 @@ void WayfireNetworkInfo::init(Gtk::Box *container) button.set_child(button_content); button.get_style_context()->add_class("flat"); - button.signal_clicked().connect( - sigc::mem_fun(*this, &WayfireNetworkInfo::on_click)); + signals.push_back(button.signal_clicked().connect( + sigc::mem_fun(*this, &WayfireNetworkInfo::on_click))); button_content.set_valign(Gtk::Align::CENTER); button_content.append(icon); @@ -424,8 +425,8 @@ void WayfireNetworkInfo::init(Gtk::Box *container) button_content.set_spacing(6); icon.set_valign(Gtk::Align::CENTER); - icon.property_scale_factor().signal_changed().connect( - sigc::mem_fun(*this, &WayfireNetworkInfo::update_icon)); + signals.push_back(icon.property_scale_factor().signal_changed().connect( + sigc::mem_fun(*this, &WayfireNetworkInfo::update_icon))); icon.get_style_context()->add_class("network-icon"); update_active_connection(); @@ -455,4 +456,9 @@ void WayfireNetworkInfo::handle_config_reload() } WayfireNetworkInfo::~WayfireNetworkInfo() -{} +{ + for (auto signal : signals) + { + signal.disconnect(); + } +} diff --git a/src/panel/widgets/network.hpp b/src/panel/widgets/network.hpp index 1ef806ef..49e409f8 100644 --- a/src/panel/widgets/network.hpp +++ b/src/panel/widgets/network.hpp @@ -8,6 +8,7 @@ #include #include "../widget.hpp" +#include "sigc++/connection.h" using DBusConnection = Glib::RefPtr; using DBusProxy = Glib::RefPtr; @@ -56,6 +57,8 @@ class WayfireNetworkInfo : public WayfireWidget std::unique_ptr info; + std::vector signals; + Gtk::Button button; Gtk::Box button_content; Gtk::Image icon; diff --git a/src/panel/widgets/notifications/single-notification.cpp b/src/panel/widgets/notifications/single-notification.cpp index fbb5fb0b..9b5fa942 100644 --- a/src/panel/widgets/notifications/single-notification.cpp +++ b/src/panel/widgets/notifications/single-notification.cpp @@ -72,22 +72,22 @@ WfSingleNotification::WfSingleNotification(const Notification & notification) time_label.set_sensitive(false); time_label.set_label(format_recv_time(notification.additional_info.recv_time)); time_label.get_style_context()->add_class("time"); - time_label_update = Glib::signal_timeout().connect( + signals.push_back(Glib::signal_timeout().connect( [=] { time_label.set_label(format_recv_time(notification.additional_info.recv_time)); return true; }, // updating once a day doesn't work with system suspending/hybernating - 10000, Glib::PRIORITY_LOW); + 10000, Glib::PRIORITY_LOW)); top_bar.append(time_label); close_image.set_from_icon_name("window-close"); close_button.set_child(close_image); close_button.get_style_context()->add_class("flat"); close_button.get_style_context()->add_class("close"); - close_button.signal_clicked().connect( - [=] { Daemon::Instance()->closeNotification(notification.id, Daemon::CloseReason::Dismissed); }); + signals.push_back(close_button.signal_clicked().connect( + [=] { Daemon::Instance()->closeNotification(notification.id, Daemon::CloseReason::Dismissed); })); top_bar.set_spacing(5); child.append(top_bar); @@ -138,18 +138,21 @@ WfSingleNotification::WfSingleNotification(const Notification & notification) if (const auto action_key = notification.actions[i];action_key != "default") { auto action_button = Glib::RefPtr(new Gtk::Button(notification.actions[i + 1])); - action_button->signal_clicked().connect( - [id = notification.id, action_key] { Daemon::Instance()->invokeAction(id, action_key); }); + signals.push_back(action_button->signal_clicked().connect( + [id = notification.id, action_key] + { + Daemon::Instance()->invokeAction(id, action_key); + })); actions.append(*action_button.get()); } else { auto click_gesture = Gtk::GestureClick::create(); - click_gesture->signal_pressed().connect( + signals.push_back(click_gesture->signal_pressed().connect( [id = notification.id, action_key, click_gesture] (int count, double x, double y) { Daemon::Instance()->invokeAction(id, action_key); click_gesture->set_state(Gtk::EventSequenceState::CLAIMED); - }); + })); default_action_ev_box.add_controller(click_gesture); } } @@ -170,5 +173,8 @@ WfSingleNotification::WfSingleNotification(const Notification & notification) WfSingleNotification::~WfSingleNotification() { - time_label_update.disconnect(); + for (auto signal : signals) + { + signal.disconnect(); + } } diff --git a/src/panel/widgets/notifications/single-notification.hpp b/src/panel/widgets/notifications/single-notification.hpp index 4f481aea..0a2219b4 100644 --- a/src/panel/widgets/notifications/single-notification.hpp +++ b/src/panel/widgets/notifications/single-notification.hpp @@ -28,7 +28,7 @@ class WfSingleNotification : public Gtk::Revealer Gtk::Image app_icon; Gtk::Label app_name; Gtk::Label time_label; - sigc::connection time_label_update; + std::vector signals; Gtk::Button close_button; Gtk::Image close_image; diff --git a/src/panel/widgets/tray/dbusmenu.cpp b/src/panel/widgets/tray/dbusmenu.cpp index 82358011..07dbf1c5 100644 --- a/src/panel/widgets/tray/dbusmenu.cpp +++ b/src/panel/widgets/tray/dbusmenu.cpp @@ -21,8 +21,11 @@ DbusMenuModel::~DbusMenuModel() { if (client) { + g_signal_handler_disconnect(G_OBJECT(client), update_sig_handler_id); g_object_unref(client); } + + act_sig.disconnect(); } type_signal_action_group DbusMenuModel::signal_action_group() @@ -36,7 +39,7 @@ void DbusMenuModel::connect(const Glib::ustring & dbus_name, const Glib::ustring prefix = pref; client = dbusmenu_client_new(dbus_name.c_str(), menu_path.c_str()); auto gclient = G_OBJECT(client); - g_signal_connect( + update_sig_handler_id = g_signal_connect( gclient, DBUSMENU_CLIENT_SIGNAL_LAYOUT_UPDATED, G_CALLBACK(menu_updated), @@ -127,7 +130,7 @@ int DbusMenuModel::iterate_children(Gio::Menu *parent_menu, DbusmenuMenuitem *pa // Radio action auto boolean_action = Gio::SimpleAction::create_radio_string(action_name, toggle_state ? action_name : ""); - boolean_action->signal_activate().connect([=] (Glib::VariantBase vb) + act_sig = boolean_action->signal_activate().connect([=] (Glib::VariantBase vb) { GVariant *data = g_variant_new_int32(0); dbusmenu_menuitem_handle_event(child, "clicked", data, 0); @@ -140,7 +143,7 @@ int DbusMenuModel::iterate_children(Gio::Menu *parent_menu, DbusmenuMenuitem *pa // Checkbox action auto boolean_action = Gio::SimpleAction::create_bool(action_name, toggle_state); - boolean_action->signal_activate().connect([=] (Glib::VariantBase vb) + act_sig = boolean_action->signal_activate().connect([=] (Glib::VariantBase vb) { GVariant *data = g_variant_new_int32(0); dbusmenu_menuitem_handle_event(child, "clicked", data, 0); diff --git a/src/panel/widgets/tray/dbusmenu.hpp b/src/panel/widgets/tray/dbusmenu.hpp index 77af59f6..75f57650 100644 --- a/src/panel/widgets/tray/dbusmenu.hpp +++ b/src/panel/widgets/tray/dbusmenu.hpp @@ -21,6 +21,9 @@ class DbusMenuModel std::string label_to_action_name(std::string, int counter); + gulong update_sig_handler_id; + sigc::connection act_sig; + public: explicit DbusMenuModel(); ~DbusMenuModel(); diff --git a/src/panel/widgets/tray/host.cpp b/src/panel/widgets/tray/host.cpp index 80c4489e..693cef74 100644 --- a/src/panel/widgets/tray/host.cpp +++ b/src/panel/widgets/tray/host.cpp @@ -26,9 +26,10 @@ void StatusNotifierHost::on_bus_acquired(const Glib::RefPtrcall("RegisterStatusNotifierHost", Glib::Variant>::create({host_name})); - watcher_proxy->signal_signal().connect([this] (const Glib::ustring & sender_name, - const Glib::ustring & signal_name, - const Glib::VariantContainerBase & params) + watch_sig = watcher_proxy->signal_signal().connect([this] (const Glib::ustring & sender_name, + const Glib::ustring & signal_name, + const Glib::VariantContainerBase & + params) { if (!params.is_of_type(Glib::VariantType("(s)"))) { @@ -63,4 +64,5 @@ StatusNotifierHost::~StatusNotifierHost() { Gio::DBus::unwatch_name(watcher_id); Gio::DBus::unown_name(dbus_name_id); + watch_sig.disconnect(); } diff --git a/src/panel/widgets/tray/host.hpp b/src/panel/widgets/tray/host.hpp index ae8bc574..56e97694 100644 --- a/src/panel/widgets/tray/host.hpp +++ b/src/panel/widgets/tray/host.hpp @@ -1,6 +1,7 @@ #ifndef TRAY_HOST_HPP #define TRAY_HOST_HPP +#include "sigc++/connection.h" #include "watcher.hpp" #include @@ -20,6 +21,8 @@ class StatusNotifierHost WayfireStatusNotifier *tray; + sigc::connection watch_sig; + void on_bus_acquired(const Glib::RefPtr & connection, const Glib::ustring & name); void register_host(const Glib::RefPtr & result); diff --git a/src/panel/widgets/tray/item.cpp b/src/panel/widgets/tray/item.cpp index 4255fcb6..3db7ff19 100644 --- a/src/panel/widgets/tray/item.cpp +++ b/src/panel/widgets/tray/item.cpp @@ -62,9 +62,9 @@ StatusNotifierItem::StatusNotifierItem(const Glib::ustring & service) [this] (const Glib::RefPtr & result) { item_proxy = Gio::DBus::Proxy::create_for_bus_finish(result); - item_proxy->signal_signal().connect( + signals.push_back(item_proxy->signal_signal().connect( [this] (const Glib::ustring & sender, const Glib::ustring & signal, - const Glib::VariantContainerBase & params) { handle_signal(signal, params); }); + const Glib::VariantContainerBase & params) { handle_signal(signal, params); })); init_widget(); }); } @@ -72,6 +72,10 @@ StatusNotifierItem::StatusNotifierItem(const Glib::ustring & service) StatusNotifierItem::~StatusNotifierItem() { gtk_widget_unparent(GTK_WIDGET(popover.gobj())); + for (auto signal : signals) + { + signal.disconnect(); + } } void StatusNotifierItem::init_widget() @@ -86,17 +90,17 @@ void StatusNotifierItem::init_widget() auto scroll_gesture = Gtk::EventControllerScroll::create(); scroll_gesture->set_flags(Gtk::EventControllerScroll::Flags::BOTH_AXES); - scroll_gesture->signal_scroll().connect([=] (double dx, double dy) -> bool + signals.push_back(scroll_gesture->signal_scroll().connect([=] (double dx, double dy) -> bool { using ScrollParams = Glib::Variant>; item_proxy->call("Scroll", ScrollParams::create({dx, "horizontal"})); item_proxy->call("Scroll", ScrollParams::create({dy, "vertical"})); return true; - }, true); + }, true)); auto click_gesture = Gtk::GestureClick::create(); click_gesture->set_button(0); - click_gesture->signal_pressed().connect([=] (int count, double x, double y) + signals.push_back(click_gesture->signal_pressed().connect([=] (int count, double x, double y) { int butt = click_gesture->get_current_button(); const auto ev_coords = Glib::Variant>::create({0, 0}); @@ -140,7 +144,7 @@ void StatusNotifierItem::init_widget() click_gesture->set_state(Gtk::EventSequenceState::CLAIMED); return; - }); + })); add_controller(scroll_gesture); add_controller(click_gesture); @@ -149,7 +153,8 @@ void StatusNotifierItem::init_widget() void StatusNotifierItem::setup_tooltip() { set_has_tooltip(); - signal_query_tooltip().connect([this] (int, int, bool, const std::shared_ptr & tooltip) + signals.push_back(signal_query_tooltip().connect([this] (int, int, bool, + const std::shared_ptr & tooltip) { auto [tooltip_icon_name, tooltip_icon_data, tooltip_title, tooltip_text] = get_item_property>("ToolTip"); @@ -173,7 +178,7 @@ void StatusNotifierItem::setup_tooltip() tooltip->set_markup(tooltip_label_text); return icon_shown || !tooltip_label_text.empty(); - }, true); + }, true)); } void StatusNotifierItem::update_icon() @@ -222,12 +227,12 @@ void StatusNotifierItem::init_menu() auto action_prefix = dbus_name_as_prefix(); menu->connect(dbus_name, menu_path, action_prefix); - menu->signal_action_group().connect([=] () + signals.push_back(menu->signal_action_group().connect([=] () { auto action_group = menu->get_action_group(); insert_action_group(action_prefix, action_group); popover.set_menu_model(menu->get_menu()); - }); + })); has_menu = true; } diff --git a/src/panel/widgets/tray/item.hpp b/src/panel/widgets/tray/item.hpp index f9689487..591ee989 100644 --- a/src/panel/widgets/tray/item.hpp +++ b/src/panel/widgets/tray/item.hpp @@ -7,6 +7,7 @@ #include #include #include "dbusmenu.hpp" +#include "sigc++/connection.h" #include #include @@ -33,6 +34,7 @@ class StatusNotifierItem : public Gtk::Button gdouble distance_scrolled_x = 0; gdouble distance_scrolled_y = 0; + std::vector signals; Glib::RefPtr icon_theme; diff --git a/src/panel/widgets/volume.cpp b/src/panel/widgets/volume.cpp index d6bd8034..91e9d841 100644 --- a/src/panel/widgets/volume.cpp +++ b/src/panel/widgets/volume.cpp @@ -17,6 +17,11 @@ WayfireVolumeScale::WayfireVolumeScale() }); } +WayfireVolumeScale::~WayfireVolumeScale() +{ + value_changed.disconnect(); +} + void WayfireVolumeScale::set_target_value(double value) { this->current_volume.animate(value); @@ -216,7 +221,7 @@ void WayfireVolume::on_volume_value_changed() void WayfireVolume::init(Gtk::Box *container) { /* Setup button */ - button.signal_clicked().connect([=] + signals.push_back(button.signal_clicked().connect([=] { if (!popover.is_visible()) { @@ -225,7 +230,7 @@ void WayfireVolume::init(Gtk::Box *container) { popover.popdown(); } - }); + })); auto style = button.get_style_context(); style->add_class("volume"); style->add_class("flat"); @@ -260,7 +265,7 @@ void WayfireVolume::init(Gtk::Box *container) // popover->set_modal(false); popover.get_style_context()->add_class("volume-popover"); auto scroll_gesture2 = Gtk::EventControllerScroll::create(); - scroll_gesture2->signal_scroll().connect([=] (double dx, double dy) + signals.push_back(scroll_gesture2->signal_scroll().connect([=] (double dx, double dy) { int change = 0; if (scroll_gesture->get_unit() == Gdk::ScrollUnit::WHEEL) @@ -276,7 +281,7 @@ void WayfireVolume::init(Gtk::Box *container) set_volume(std::clamp(volume_scale.get_target_value() - change, 0.0, max_norm)); return true; - }, false); + }, false)); scroll_gesture2->set_flags(Gtk::EventControllerScroll::Flags::VERTICAL); scroll_gesture2->set_propagation_phase(Gtk::PropagationPhase::CAPTURE); volume_scale.add_controller(scroll_gesture2); @@ -285,8 +290,8 @@ void WayfireVolume::init(Gtk::Box *container) volume_scale.set_size_request(300, 0); volume_scale.set_user_changed_callback([=] () { on_volume_value_changed(); }); - volume_scale.signal_state_flags_changed().connect( - [=] (Gtk::StateFlags) { check_set_popover_timeout(); }); + signals.push_back(volume_scale.signal_state_flags_changed().connect( + [=] (Gtk::StateFlags) { check_set_popover_timeout(); })); /* Setup gvc control */ gvc_control = gvc_mixer_control_new("Wayfire Volume Control"); @@ -297,12 +302,12 @@ void WayfireVolume::init(Gtk::Box *container) /* Middle click toggle mute */ auto middle_click_gesture = Gtk::GestureClick::create(); middle_click_gesture->set_button(2); - middle_click_gesture->signal_pressed().connect([=] (int count, double x, double y) + signals.push_back(middle_click_gesture->signal_pressed().connect([=] (int count, double x, double y) { bool muted = !(gvc_stream && gvc_mixer_stream_get_is_muted(gvc_stream)); gvc_mixer_stream_change_is_muted(gvc_stream, muted); gvc_mixer_stream_push_volume(gvc_stream); - }); + })); button.add_controller(middle_click_gesture); /* Setup layout */ diff --git a/src/panel/widgets/volume.hpp b/src/panel/widgets/volume.hpp index 39d3dd25..942e87ab 100644 --- a/src/panel/widgets/volume.hpp +++ b/src/panel/widgets/volume.hpp @@ -21,6 +21,7 @@ class WayfireVolumeScale : public Gtk::Scale public: WayfireVolumeScale(); + ~WayfireVolumeScale(); /* Gets the current target value */ double get_target_value() const; @@ -55,7 +56,7 @@ class WayfireVolume : public WayfireWidget gulong notify_is_muted_signal = 0; gulong notify_default_sink_changed = 0; sigc::connection popover_timeout; - sigc::connection volume_changed_signal; + std::vector signals; void disconnect_gvc_stream_signals(); enum set_volume_flags_t diff --git a/src/panel/widgets/window-list/toplevel.cpp b/src/panel/widgets/window-list/toplevel.cpp index e5d2b0cd..e2ed319e 100644 --- a/src/panel/widgets/window-list/toplevel.cpp +++ b/src/panel/widgets/window-list/toplevel.cpp @@ -43,6 +43,7 @@ class WayfireToplevel::impl // Gtk::PopoverMenu menu; Glib::RefPtr drag_gesture; sigc::connection m_drag_timeout; + std::vector signals; Glib::ustring app_id, title; @@ -80,11 +81,12 @@ class WayfireToplevel::impl close_action = Gio::SimpleAction::create("close"); minimize_action = Gio::SimpleAction::create_bool("minimize", false); maximize_action = Gio::SimpleAction::create_bool("maximize", false); - close_action->signal_activate().connect(sigc::mem_fun(*this, &WayfireToplevel::impl::on_menu_close)); - minimize_action->signal_change_state().connect(sigc::mem_fun(*this, - &WayfireToplevel::impl::on_menu_minimize)); - maximize_action->signal_change_state().connect(sigc::mem_fun(*this, - &WayfireToplevel::impl::on_menu_maximize)); + signals.push_back(close_action->signal_activate().connect(sigc::mem_fun(*this, + &WayfireToplevel::impl::on_menu_close))); + signals.push_back(minimize_action->signal_change_state().connect(sigc::mem_fun(*this, + &WayfireToplevel::impl::on_menu_minimize))); + signals.push_back(maximize_action->signal_change_state().connect(sigc::mem_fun(*this, + &WayfireToplevel::impl::on_menu_maximize))); actions->add_action(close_action); actions->add_action(minimize_action); @@ -106,17 +108,17 @@ class WayfireToplevel::impl popover.set_menu_model(menu); drag_gesture = Gtk::GestureDrag::create(); - drag_gesture->signal_drag_begin().connect( - sigc::mem_fun(*this, &WayfireToplevel::impl::on_drag_begin)); - drag_gesture->signal_drag_update().connect( - sigc::mem_fun(*this, &WayfireToplevel::impl::on_drag_update)); - drag_gesture->signal_drag_end().connect( - sigc::mem_fun(*this, &WayfireToplevel::impl::on_drag_end)); + signals.push_back(drag_gesture->signal_drag_begin().connect( + sigc::mem_fun(*this, &WayfireToplevel::impl::on_drag_begin))); + signals.push_back(drag_gesture->signal_drag_update().connect( + sigc::mem_fun(*this, &WayfireToplevel::impl::on_drag_update))); + signals.push_back(drag_gesture->signal_drag_end().connect( + sigc::mem_fun(*this, &WayfireToplevel::impl::on_drag_end))); button.add_controller(drag_gesture); auto click_gesture = Gtk::GestureClick::create(); click_gesture->set_button(0); - click_gesture->signal_pressed().connect( + signals.push_back(click_gesture->signal_pressed().connect( [=] (int count, double x, double y) { int butt = click_gesture->get_current_button(); @@ -133,9 +135,9 @@ class WayfireToplevel::impl zwlr_foreign_toplevel_handle_v1_close(handle); click_gesture->set_state(Gtk::EventSequenceState::CLAIMED); } - }); + })); - click_gesture->signal_released().connect( + signals.push_back(click_gesture->signal_released().connect( [=] (int count, double x, double y) { if (click_gesture->get_current_button() == 1) @@ -148,7 +150,7 @@ class WayfireToplevel::impl ignore_next_click = false; } - }); + })); button.add_controller(click_gesture); this->window_list = window_list; @@ -484,6 +486,11 @@ class WayfireToplevel::impl m_drag_timeout.disconnect(); } + for (auto signal : signals) + { + signal.disconnect(); + } + zwlr_foreign_toplevel_handle_v1_destroy(handle); } From 2fbf3834378776263bd807e89e73c7e561fc9e54 Mon Sep 17 00:00:00 2001 From: Hue Date: Tue, 20 Jan 2026 14:33:24 +0100 Subject: [PATCH 2/3] Style fixes In menu widget, separated update_popover_layout into itself and a setup function In a few widgets, replaced names hbox and vbox inherited from gtk3 version to box --- src/panel/widgets/menu.cpp | 208 +++++++++--------- src/panel/widgets/menu.hpp | 5 +- .../notifications/notification-center.cpp | 8 +- .../notifications/notification-center.hpp | 2 +- src/panel/widgets/tray/tray.cpp | 10 +- src/panel/widgets/tray/tray.hpp | 2 +- 6 files changed, 118 insertions(+), 117 deletions(-) diff --git a/src/panel/widgets/menu.cpp b/src/panel/widgets/menu.cpp index ec042ce1..0b4efd10 100644 --- a/src/panel/widgets/menu.cpp +++ b/src/panel/widgets/menu.cpp @@ -526,133 +526,131 @@ bool WayfireMenu::update_icon() return true; } -void WayfireMenu::update_popover_layout() +void WayfireMenu::setup_popover_layout() { - /* First time updating layout, need to setup everything */ - if (popover_layout_box.get_parent() == nullptr) - { - button->get_popover()->set_child(popover_layout_box); + button->get_popover()->set_child(popover_layout_box); - flowbox.set_selection_mode(Gtk::SelectionMode::SINGLE); - flowbox.set_activate_on_single_click(true); - flowbox.set_valign(Gtk::Align::START); - flowbox.set_homogeneous(true); - flowbox.set_sort_func(sigc::mem_fun(*this, &WayfireMenu::on_sort)); - flowbox.set_filter_func(sigc::mem_fun(*this, &WayfireMenu::on_filter)); - flowbox.get_style_context()->add_class("app-list"); - flowbox.set_size_request(int(menu_min_content_width), int(menu_min_content_height)); + flowbox.set_selection_mode(Gtk::SelectionMode::SINGLE); + flowbox.set_activate_on_single_click(true); + flowbox.set_valign(Gtk::Align::START); + flowbox.set_homogeneous(true); + flowbox.set_sort_func(sigc::mem_fun(*this, &WayfireMenu::on_sort)); + flowbox.set_filter_func(sigc::mem_fun(*this, &WayfireMenu::on_filter)); + flowbox.get_style_context()->add_class("app-list"); + flowbox.set_size_request(int(menu_min_content_width), int(menu_min_content_height)); - flowbox_container.append(flowbox); + flowbox_container.append(flowbox); - scroll_pair.append(category_scrolled_window); - scroll_pair.append(app_scrolled_window); - scroll_pair.set_homogeneous(false); + scroll_pair.append(category_scrolled_window); + scroll_pair.append(app_scrolled_window); + scroll_pair.set_homogeneous(false); - app_scrolled_window.set_min_content_width(int(menu_min_content_width)); - app_scrolled_window.set_min_content_height(int(menu_min_content_height)); - app_scrolled_window.set_child(flowbox_container); - app_scrolled_window.get_style_context()->add_class("app-list-scroll"); - app_scrolled_window.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC); + app_scrolled_window.set_min_content_width(int(menu_min_content_width)); + app_scrolled_window.set_min_content_height(int(menu_min_content_height)); + app_scrolled_window.set_child(flowbox_container); + app_scrolled_window.get_style_context()->add_class("app-list-scroll"); + app_scrolled_window.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC); - category_box.get_style_context()->add_class("category-list"); - category_box.set_orientation(Gtk::Orientation::VERTICAL); + category_box.get_style_context()->add_class("category-list"); + category_box.set_orientation(Gtk::Orientation::VERTICAL); - category_scrolled_window.set_min_content_width(int(menu_min_category_width)); - category_scrolled_window.set_min_content_height(int(menu_min_content_height)); - category_scrolled_window.set_child(category_box); - category_scrolled_window.get_style_context()->add_class("categtory-list-scroll"); - category_scrolled_window.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC); + category_scrolled_window.set_min_content_width(int(menu_min_category_width)); + category_scrolled_window.set_min_content_height(int(menu_min_content_height)); + category_scrolled_window.set_child(category_box); + category_scrolled_window.get_style_context()->add_class("categtory-list-scroll"); + category_scrolled_window.set_policy(Gtk::PolicyType::NEVER, Gtk::PolicyType::AUTOMATIC); - search_entry.get_style_context()->add_class("app-search"); + search_entry.get_style_context()->add_class("app-search"); - auto typing_gesture = Gtk::EventControllerKey::create(); - typing_gesture->set_propagation_phase(Gtk::PropagationPhase::CAPTURE); - signals.push_back(typing_gesture->signal_key_pressed().connect([ = ](guint keyval, guint keycode, - Gdk::ModifierType state)) + auto typing_gesture = Gtk::EventControllerKey::create(); + typing_gesture->set_propagation_phase(Gtk::PropagationPhase::CAPTURE); + signals.push_back(typing_gesture->signal_key_pressed().connect([=] (guint keyval, guint keycode, + Gdk::ModifierType state) + { + if (keyval == GDK_KEY_BackSpace) { - if (keyval == GDK_KEY_BackSpace) + if (search_contents.length() > 0) { - if (search_contents.length() > 0) - { - search_contents.pop_back(); - } + search_contents.pop_back(); + } - on_search_changed(); - return true; - } else if ((keyval == GDK_KEY_Return) || (keyval == GDK_KEY_KP_Enter)) + on_search_changed(); + return true; + } else if ((keyval == GDK_KEY_Return) || (keyval == GDK_KEY_KP_Enter)) + { + auto children = flowbox.get_selected_children(); + if (children.size() == 1) { - auto children = flowbox.get_selected_children(); - if (children.size() == 1) - { - auto child = dynamic_cast(children[0]); - child->on_click(); - } + auto child = dynamic_cast(children[0]); + child->on_click(); + } - return true; - } else if (keyval == GDK_KEY_Escape) - { - button->get_popover()->hide(); - } else + return true; + } else if (keyval == GDK_KEY_Escape) + { + button->get_popover()->hide(); + } else + { + std::string input = gdk_keyval_name(keyval); + if (input.length() == 1) { - std::string input = gdk_keyval_name(keyval); - if (input.length() == 1) - { - search_contents = search_contents + input; - on_search_changed(); - return true; - } + search_contents = search_contents + input; + on_search_changed(); + return true; } + } + + return false; + }, false)); + button->get_popover()->add_controller(typing_gesture); + signals.push_back(button->get_popover()->signal_closed().connect([=] () + { + Gtk::Window *window = dynamic_cast(button->get_root()); + WfOption panel_layer{"panel/layer"}; - return false; - }, false); - button->get_popover()->add_controller(typing_gesture); - signals.push_back(button->get_popover()->signal_closed().connect([=] () + if ((std::string)panel_layer == "overlay") { - Gtk::Window *window = dynamic_cast(button->get_root()); - WfOption panel_layer{"panel/layer"}; + gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_OVERLAY); + } - if ((std::string)panel_layer == "overlay") - { - gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_OVERLAY); - } + if ((std::string)panel_layer == "top") + { + gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_TOP); + } - if ((std::string)panel_layer == "top") - { - gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_TOP); - } + if ((std::string)panel_layer == "bottom") + { + gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_BOTTOM); + } - if ((std::string)panel_layer == "bottom") - { - gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_BOTTOM); - } + if ((std::string)panel_layer == "background") + { + gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_BACKGROUND); + } + })); +} - if ((std::string)panel_layer == "background") - { - gtk_layer_set_layer(window->gobj(), GTK_LAYER_SHELL_LAYER_BACKGROUND); - } - })); - } else - { - /* Layout was already initialized, make sure to remove widgets before - * adding them again */ - popover_layout_box.remove(search_entry); - popover_layout_box.remove(scroll_pair); - popover_layout_box.remove(separator); - popover_layout_box.remove(hbox_bottom); - } +void WayfireMenu::update_popover_layout() +{ + /* Layout was already initialized, make sure to remove widgets before + * adding them again */ + popover_layout_box.remove(search_entry); + popover_layout_box.remove(scroll_pair); + popover_layout_box.remove(separator); + popover_layout_box.remove(box_bottom); if ((std::string)panel_position == WF_WINDOW_POSITION_TOP) { popover_layout_box.append(search_entry); popover_layout_box.append(scroll_pair); popover_layout_box.append(separator); - popover_layout_box.append(hbox_bottom); + popover_layout_box.append(box_bottom); } else { popover_layout_box.append(scroll_pair); popover_layout_box.append(search_entry); popover_layout_box.append(separator); - popover_layout_box.append(hbox_bottom); + popover_layout_box.append(box_bottom); } if (!menu_show_categories) @@ -770,10 +768,10 @@ WayfireLogoutUI::WayfireLogoutUI() gtk_layer_set_anchor(ui.gobj(), GTK_LAYER_SHELL_EDGE_LEFT, true); gtk_layer_set_anchor(ui.gobj(), GTK_LAYER_SHELL_EDGE_RIGHT, true); main_layout.set_valign(Gtk::Align::CENTER); - hbox.set_center_widget(main_layout); - hbox.set_hexpand(true); - hbox.set_vexpand(true); - ui.set_child(hbox); + box.set_center_widget(main_layout); + box.set_hexpand(true); + box.set_vexpand(true); + ui.set_child(box); ui.get_style_context()->add_class("logout"); auto display = ui.get_display(); auto css_provider = Gtk::CssProvider::create(); @@ -864,6 +862,7 @@ void WayfireMenu::init(Gtk::Box *container) signals.push_back(output->toggle_menu_signal().connect(sigc::mem_fun(*this, &WayfireMenu::toggle_menu))); + // configuration reloading callbacks menu_icon.set_callback([=] () { update_icon(); }); menu_min_category_width.set_callback([=] () { update_category_width(); }); menu_min_content_height.set_callback([=] () { update_content_height(); }); @@ -890,15 +889,15 @@ void WayfireMenu::init(Gtk::Box *container) signals.push_back(button->property_scale_factor().signal_changed().connect( [=] () {update_icon(); })); - container->append(hbox); - hbox.append(*button); + container->append(box); + box.append(*button); auto click_gesture = Gtk::GestureClick::create(); signals.push_back(click_gesture->signal_pressed().connect([=] (int count, double x, double y) { toggle_menu(); })); - hbox.add_controller(click_gesture); + box.add_controller(click_gesture); logout_image.set_icon_size(Gtk::IconSize::LARGE); logout_image.set_from_icon_name("system-shutdown"); @@ -907,14 +906,15 @@ void WayfireMenu::init(Gtk::Box *container) sigc::mem_fun(*this, &WayfireMenu::on_logout_click))); logout_button.set_margin_end(35); logout_button.set_child(logout_image); - hbox_bottom.append(logout_button); - hbox_bottom.set_halign(Gtk::Align::END); + box_bottom.append(logout_button); + box_bottom.set_halign(Gtk::Align::END); popover_layout_box.set_orientation(Gtk::Orientation::VERTICAL); logout_ui = std::make_unique(); load_menu_items_all(); + setup_popover_layout(); update_popover_layout(); populate_menu_categories(); populate_menu_items("All"); @@ -922,7 +922,7 @@ void WayfireMenu::init(Gtk::Box *container) app_info_monitor_changed_handler_id = g_signal_connect(app_info_monitor, "changed", G_CALLBACK(app_info_changed), this); - hbox.show(); + box.show(); main_image.show(); button->show(); } diff --git a/src/panel/widgets/menu.hpp b/src/panel/widgets/menu.hpp index e3273abd..2b30c71b 100644 --- a/src/panel/widgets/menu.hpp +++ b/src/panel/widgets/menu.hpp @@ -104,7 +104,7 @@ class WayfireLogoutUI WayfireLogoutUIButton hibernate; WayfireLogoutUIButton switchuser; WayfireLogoutUIButton cancel; - Gtk::CenterBox hbox; + Gtk::CenterBox box; Gtk::Grid main_layout; std::vector signals; void create_logout_ui_button(WayfireLogoutUIButton *button, @@ -126,7 +126,7 @@ class WayfireMenu : public WayfireWidget std::string search_contents = ""; Gtk::Box flowbox_container; - Gtk::Box hbox, hbox_bottom, scroll_pair; + Gtk::Box box, box_bottom, scroll_pair; Gtk::Box bottom_pad; Gtk::Box popover_layout_box; Gtk::Box category_box; @@ -179,6 +179,7 @@ class WayfireMenu : public WayfireWidget WfOption menu_min_category_width{"panel/menu_min_category_width"}; WfOption menu_min_content_height{"panel/menu_min_content_height"}; WfOption menu_show_categories{"panel/menu_show_categories"}; + void setup_popover_layout(); void update_popover_layout(); void update_category_width(); void update_content_height(); diff --git a/src/panel/widgets/notifications/notification-center.cpp b/src/panel/widgets/notifications/notification-center.cpp index a0a51eed..361191e4 100644 --- a/src/panel/widgets/notifications/notification-center.cpp +++ b/src/panel/widgets/notifications/notification-center.cpp @@ -21,9 +21,9 @@ void WayfireNotificationCenter::init(Gtk::Box *container) popover->set_size_request(WIDTH, HEIGHT); popover->get_style_context()->add_class("notification-popover"); - vbox.set_valign(Gtk::Align::START); - vbox.set_orientation(Gtk::Orientation::VERTICAL); - scrolled_window.set_child(vbox); + box.set_valign(Gtk::Align::START); + box.set_orientation(Gtk::Orientation::VERTICAL); + scrolled_window.set_child(box); popover->set_child(scrolled_window); button->set_tooltip_text("Middle click to toggle DND mode."); @@ -60,7 +60,7 @@ void WayfireNotificationCenter::newNotification(Notification::id_type id, bool s g_assert(notification_widgets.count(id) == 0); notification_widgets.insert({id, std::make_unique(notification)}); auto & widget = notification_widgets.at(id); - vbox.append(*widget); + box.append(*widget); widget->set_reveal_child(); if (show_popup && !dnd_enabled || (show_critical_in_dnd && (notification.hints.urgency == 2))) { diff --git a/src/panel/widgets/notifications/notification-center.hpp b/src/panel/widgets/notifications/notification-center.hpp index f6944aad..08995324 100644 --- a/src/panel/widgets/notifications/notification-center.hpp +++ b/src/panel/widgets/notifications/notification-center.hpp @@ -21,7 +21,7 @@ class WayfireNotificationCenter : public WayfireWidget Gtk::Image icon; std::unique_ptr button; Gtk::ScrolledWindow scrolled_window; - Gtk::Box vbox; + Gtk::Box box; std::map> notification_widgets = {}; diff --git a/src/panel/widgets/tray/tray.cpp b/src/panel/widgets/tray/tray.cpp index bf9a0c3a..334af719 100644 --- a/src/panel/widgets/tray/tray.cpp +++ b/src/panel/widgets/tray/tray.cpp @@ -2,9 +2,9 @@ void WayfireStatusNotifier::init(Gtk::Box *container) { - icons_hbox.get_style_context()->add_class("tray"); - icons_hbox.set_spacing(5); - container->append(icons_hbox); + icons_box.get_style_context()->add_class("tray"); + icons_box.set_spacing(5); + container->append(icons_box); } void WayfireStatusNotifier::add_item(const Glib::ustring & service) @@ -15,7 +15,7 @@ void WayfireStatusNotifier::add_item(const Glib::ustring & service) } items.emplace(service, service); - icons_hbox.append(items.at(service)); + icons_box.append(items.at(service)); } void WayfireStatusNotifier::remove_item(const Glib::ustring & service) @@ -25,6 +25,6 @@ void WayfireStatusNotifier::remove_item(const Glib::ustring & service) return; } - icons_hbox.remove(items.at(service)); + icons_box.remove(items.at(service)); items.erase(service); } diff --git a/src/panel/widgets/tray/tray.hpp b/src/panel/widgets/tray/tray.hpp index 0fbfb881..a5143f34 100644 --- a/src/panel/widgets/tray/tray.hpp +++ b/src/panel/widgets/tray/tray.hpp @@ -11,7 +11,7 @@ class WayfireStatusNotifier : public WayfireWidget private: StatusNotifierHost host = StatusNotifierHost(this); - Gtk::Box icons_hbox; + Gtk::Box icons_box; std::map items; public: From ace28a1ac05eafda0ab314f969e5c4d4ecff58a4 Mon Sep 17 00:00:00 2001 From: Hue Date: Mon, 19 Jan 2026 16:47:44 +0100 Subject: [PATCH 3/3] Remove unused headers, variable, function and use pragma once everywhere Additionally, harmonise headers style --- src/dock/dock.hpp | 9 +++---- src/dock/toplevel-icon.hpp | 5 +--- src/dock/toplevel.hpp | 5 +--- src/panel/panel.cpp | 1 - src/panel/panel.hpp | 5 +--- src/panel/widget.hpp | 5 +--- src/panel/widgets/battery.cpp | 5 ++-- src/panel/widgets/battery.hpp | 9 +++---- src/panel/widgets/clock.hpp | 5 +--- src/panel/widgets/command-output.cpp | 1 - src/panel/widgets/command-output.hpp | 7 ++---- src/panel/widgets/language.cpp | 7 +++--- src/panel/widgets/language.hpp | 14 +++++------ src/panel/widgets/launchers.cpp | 5 ++-- src/panel/widgets/launchers.hpp | 6 +---- src/panel/widgets/menu.cpp | 1 - src/panel/widgets/menu.hpp | 12 ++++----- src/panel/widgets/network.cpp | 25 ------------------- src/panel/widgets/network.hpp | 7 ++---- src/panel/widgets/notifications/daemon.hpp | 5 +--- .../notifications/notification-info.hpp | 5 +--- .../notifications/single-notification.cpp | 2 -- .../notifications/single-notification.hpp | 5 +--- src/panel/widgets/separator.hpp | 6 +---- src/panel/widgets/spacing.hpp | 6 +---- src/panel/widgets/tray/dbusmenu.hpp | 5 +--- src/panel/widgets/tray/host.hpp | 7 ++---- src/panel/widgets/tray/item.cpp | 1 - src/panel/widgets/tray/item.hpp | 11 +++----- src/panel/widgets/tray/tray.hpp | 5 +--- src/panel/widgets/tray/watcher.hpp | 5 +--- src/panel/widgets/volume.cpp | 3 --- src/panel/widgets/volume.hpp | 8 ++---- src/panel/widgets/window-list/layout.cpp | 3 +-- src/panel/widgets/window-list/layout.hpp | 4 +-- src/panel/widgets/window-list/toplevel.cpp | 5 ++-- src/panel/widgets/window-list/toplevel.hpp | 9 ++----- src/panel/widgets/window-list/window-list.cpp | 2 -- src/panel/widgets/window-list/window-list.hpp | 11 +++----- src/util/css-config.hpp | 2 ++ src/util/gtk-utils.hpp | 5 +--- src/util/wf-ipc.hpp | 17 ++++++------- src/util/wf-popover.cpp | 1 - src/util/wf-popover.hpp | 5 +--- src/util/wf-shell-app.hpp | 5 +--- 45 files changed, 75 insertions(+), 202 deletions(-) diff --git a/src/dock/dock.hpp b/src/dock/dock.hpp index 012c8e80..d4db695c 100644 --- a/src/dock/dock.hpp +++ b/src/dock/dock.hpp @@ -1,12 +1,11 @@ -#ifndef WF_DOCK_HPP -#define WF_DOCK_HPP +#pragma once #include #include +#include +#include #include "wf-shell-app.hpp" -#include "wlr-foreign-toplevel-management-unstable-v1-client-protocol.h" -#include class WfDock { @@ -49,5 +48,3 @@ class WfDockApp : public WayfireShellApp class impl; std::unique_ptr priv; }; - -#endif /* end of include guard: WF_DOCK_HPP */ diff --git a/src/dock/toplevel-icon.hpp b/src/dock/toplevel-icon.hpp index 7c589b05..e6c33fb0 100644 --- a/src/dock/toplevel-icon.hpp +++ b/src/dock/toplevel-icon.hpp @@ -1,5 +1,4 @@ -#ifndef WF_DOCK_TOPLEVEL_ICON_HPP -#define WF_DOCK_TOPLEVEL_ICON_HPP +#pragma once #include #include @@ -26,5 +25,3 @@ namespace IconProvider * They have the format icon_mapping_ = */ void load_custom_icons(); } - -#endif /* end of include guard: WF_DOCK_TOPLEVEL_ICON_HPP */ diff --git a/src/dock/toplevel.hpp b/src/dock/toplevel.hpp index 64202dbd..dfada25f 100644 --- a/src/dock/toplevel.hpp +++ b/src/dock/toplevel.hpp @@ -1,5 +1,4 @@ -#ifndef WF_DOCK_TOPLEVEL_HPP -#define WF_DOCK_TOPLEVEL_HPP +#pragma once #include #include @@ -27,5 +26,3 @@ class WfToplevel private: std::unique_ptr pimpl; }; - -#endif /* end of include guard: WF_DOCK_TOPLEVEL_HPP */ diff --git a/src/panel/panel.cpp b/src/panel/panel.cpp index 34bdc513..cc7a6df7 100644 --- a/src/panel/panel.cpp +++ b/src/panel/panel.cpp @@ -14,7 +14,6 @@ #include #include "panel.hpp" -#include "wf-ipc.hpp" #include "widgets/battery.hpp" #include "widgets/command-output.hpp" #include "widgets/language.hpp" diff --git a/src/panel/panel.hpp b/src/panel/panel.hpp index cae9903e..c26bfc56 100644 --- a/src/panel/panel.hpp +++ b/src/panel/panel.hpp @@ -1,5 +1,4 @@ -#ifndef WF_PANEL_HPP -#define WF_PANEL_HPP +#pragma once #include #include @@ -45,5 +44,3 @@ class WayfirePanelApp : public WayfireShellApp class impl; std::unique_ptr priv; }; - -#endif /* end of include guard: WF_PANEL_HPP */ diff --git a/src/panel/widget.hpp b/src/panel/widget.hpp index 6f85c344..7452a901 100644 --- a/src/panel/widget.hpp +++ b/src/panel/widget.hpp @@ -1,5 +1,4 @@ -#ifndef WIDGET_HPP -#define WIDGET_HPP +#pragma once #include #include @@ -23,5 +22,3 @@ class WayfireWidget virtual ~WayfireWidget() {} }; - -#endif /* end of include guard: WIDGET_HPP */ diff --git a/src/panel/widgets/battery.cpp b/src/panel/widgets/battery.cpp index ee4d9053..268f433c 100644 --- a/src/panel/widgets/battery.cpp +++ b/src/panel/widgets/battery.cpp @@ -1,8 +1,7 @@ -#include "battery.hpp" -#include "wf-ipc.hpp" #include #include -#include + +#include "battery.hpp" #define UPOWER_NAME "org.freedesktop.UPower" #define DISPLAY_DEVICE "/org/freedesktop/UPower/devices/DisplayDevice" diff --git a/src/panel/widgets/battery.hpp b/src/panel/widgets/battery.hpp index 43f9f264..d2b1e7d0 100644 --- a/src/panel/widgets/battery.hpp +++ b/src/panel/widgets/battery.hpp @@ -1,5 +1,4 @@ -#ifndef WIDGETS_BATTERY_HPP -#define WIDGETS_BATTERY_HPP +#pragma once #include #include @@ -9,8 +8,9 @@ #include #include +#include + #include "../widget.hpp" -#include "sigc++/connection.h" using DBusConnection = Glib::RefPtr; using DBusProxy = Glib::RefPtr; @@ -49,6 +49,3 @@ class WayfireBatteryInfo : public WayfireWidget virtual void init(Gtk::Box *container); virtual ~WayfireBatteryInfo(); }; - - -#endif /* end of include guard: WIDGETS_BATTERY_HPP */ diff --git a/src/panel/widgets/clock.hpp b/src/panel/widgets/clock.hpp index 03663a4a..1685f2be 100644 --- a/src/panel/widgets/clock.hpp +++ b/src/panel/widgets/clock.hpp @@ -1,5 +1,4 @@ -#ifndef WIDGETS_CLOCK_HPP -#define WIDGETS_CLOCK_HPP +#pragma once #include "../widget.hpp" #include "wf-popover.hpp" @@ -22,5 +21,3 @@ class WayfireClock : public WayfireWidget bool update_label(); ~WayfireClock(); }; - -#endif /* end of include guard: WIDGETS_CLOCK_HPP */ diff --git a/src/panel/widgets/command-output.cpp b/src/panel/widgets/command-output.cpp index 2ee12a84..25c117bf 100644 --- a/src/panel/widgets/command-output.cpp +++ b/src/panel/widgets/command-output.cpp @@ -1,5 +1,4 @@ #include "command-output.hpp" -#include "sigc++/connection.h" #include #include diff --git a/src/panel/widgets/command-output.hpp b/src/panel/widgets/command-output.hpp index 13c188c3..f815e36b 100644 --- a/src/panel/widgets/command-output.hpp +++ b/src/panel/widgets/command-output.hpp @@ -1,8 +1,6 @@ -#ifndef COMMAND_OUTPUT_HPP -#define COMMAND_OUTPUT_HPP +#pragma once #include "../widget.hpp" -#include "sigc++/connection.h" #include #include @@ -10,6 +8,7 @@ #include #include +#include #include class WfCommandOutputButtons : public WayfireWidget @@ -55,5 +54,3 @@ class WfCommandOutputButtons : public WayfireWidget void init(Gtk::Box *container) override; void update_buttons(); }; - -#endif /* end of include guard: COMMAND_OUTPUT_HPP */ diff --git a/src/panel/widgets/language.cpp b/src/panel/widgets/language.cpp index 310f9515..75589d27 100644 --- a/src/panel/widgets/language.cpp +++ b/src/panel/widgets/language.cpp @@ -1,16 +1,17 @@ #include #include + #include -#include +#include + #include #include #include #include #include #include + #include "language.hpp" -#include "gtkmm/button.h" -#include "sigc++/functors/mem_fun.h" #include "wf-ipc.hpp" void WayfireLanguage::init(Gtk::Box *container) diff --git a/src/panel/widgets/language.hpp b/src/panel/widgets/language.hpp index aecbdd81..bcf4b900 100644 --- a/src/panel/widgets/language.hpp +++ b/src/panel/widgets/language.hpp @@ -1,16 +1,16 @@ -#ifndef WIDGETS_LANGUAGE_HPP -#define WIDGETS_LANGUAGE_HPP +#pragma once -#include "../widget.hpp" -#include "gtkmm/button.h" -#include "sigc++/connection.h" -#include "wf-ipc.hpp" #include +#include #include #include #include #include #include +#include + +#include "../widget.hpp" +#include "wf-ipc.hpp" struct Layout { @@ -38,5 +38,3 @@ class WayfireLanguage : public WayfireWidget, public IIPCSubscriber WayfireLanguage(); ~WayfireLanguage(); }; - -#endif /* end of include guard: WIDGETS_LANGUAGE_HPP */ diff --git a/src/panel/widgets/launchers.cpp b/src/panel/widgets/launchers.cpp index 1339ad96..007368d9 100644 --- a/src/panel/widgets/launchers.cpp +++ b/src/panel/widgets/launchers.cpp @@ -1,13 +1,14 @@ #include "launchers.hpp" + #include #include #include #include #include #include -#include #include -#include + +#include "wf-shell-app.hpp" bool WfLauncherButton::initialize(std::string name, std::string icon, std::string label) { diff --git a/src/panel/widgets/launchers.hpp b/src/panel/widgets/launchers.hpp index c87f8007..ea424b21 100644 --- a/src/panel/widgets/launchers.hpp +++ b/src/panel/widgets/launchers.hpp @@ -1,5 +1,4 @@ -#ifndef LAUNCHERS_HPP -#define LAUNCHERS_HPP +#pragma once #include "../widget.hpp" #include @@ -39,6 +38,3 @@ class WayfireLaunchers : public WayfireWidget virtual ~WayfireLaunchers() {} }; - - -#endif /* end of include guard: LAUNCHERS_HPP */ diff --git a/src/panel/widgets/menu.cpp b/src/panel/widgets/menu.cpp index 0b4efd10..b13b699f 100644 --- a/src/panel/widgets/menu.cpp +++ b/src/panel/widgets/menu.cpp @@ -10,7 +10,6 @@ #include "menu.hpp" #include "gtk-utils.hpp" -#include "launchers.hpp" #include "wf-autohide-window.hpp" const std::string default_icon = "wayfire"; diff --git a/src/panel/widgets/menu.hpp b/src/panel/widgets/menu.hpp index 2b30c71b..9f7f403f 100644 --- a/src/panel/widgets/menu.hpp +++ b/src/panel/widgets/menu.hpp @@ -1,13 +1,13 @@ -#ifndef WIDGETS_MENU_HPP -#define WIDGETS_MENU_HPP +#pragma once -#include "../widget.hpp" -#include "sigc++/connection.h" -#include "wf-popover.hpp" #include #include +#include #include +#include "../widget.hpp" +#include "wf-popover.hpp" + class WayfireMenu; using AppInfo = Glib::RefPtr; @@ -208,5 +208,3 @@ class WayfireMenu : public WayfireWidget ~WayfireMenu() override; }; - -#endif /* end of include guard: WIDGETS_MENU_HPP */ diff --git a/src/panel/widgets/network.cpp b/src/panel/widgets/network.cpp index b1beca53..04e4be0e 100644 --- a/src/panel/widgets/network.cpp +++ b/src/panel/widgets/network.cpp @@ -247,31 +247,6 @@ struct status_color #define MAX_COLORS (sizeof(status_colors) / sizeof(status_color)) -static Gdk::RGBA get_color_for_pc(int pc) -{ - for (int i = MAX_COLORS - 2; i >= 0; i--) - { - if (status_colors[i].point <= pc) - { - auto& r1 = status_colors[i].rgba; - auto& r2 = status_colors[i + 1].rgba; - - double a = 1.0 * (pc - status_colors[i].point) / - (status_colors[i + 1].point - status_colors[i].point); - Gdk::RGBA result; - result.set_rgba( - r1.get_red() * (1 - a) + r2.get_red() * a, - r1.get_green() * (1 - a) + r2.get_green() * a, - r1.get_blue() * (1 - a) + r2.get_blue() * a, - r1.get_alpha() * (1 - a) + r2.get_alpha() * a); - - return result; - } - } - - return Gdk::RGBA{"#ffffff"}; -} - void WayfireNetworkInfo::update_status() { std::string description = info->get_connection_name(); diff --git a/src/panel/widgets/network.hpp b/src/panel/widgets/network.hpp index 49e409f8..e6ab1d90 100644 --- a/src/panel/widgets/network.hpp +++ b/src/panel/widgets/network.hpp @@ -1,14 +1,13 @@ -#ifndef WIDGETS_NETWORK_HPP -#define WIDGETS_NETWORK_HPP +#pragma once #include #include #include #include #include +#include #include "../widget.hpp" -#include "sigc++/connection.h" using DBusConnection = Glib::RefPtr; using DBusProxy = Glib::RefPtr; @@ -85,5 +84,3 @@ class WayfireNetworkInfo : public WayfireWidget void handle_config_reload(); virtual ~WayfireNetworkInfo(); }; - -#endif /* end of include guard: WIDGETS_NETWORK_HPP */ diff --git a/src/panel/widgets/notifications/daemon.hpp b/src/panel/widgets/notifications/daemon.hpp index 8496de72..29c83bf6 100644 --- a/src/panel/widgets/notifications/daemon.hpp +++ b/src/panel/widgets/notifications/daemon.hpp @@ -1,5 +1,4 @@ -#ifndef NOTIFICATION_DAEMON_HPP -#define NOTIFICATION_DAEMON_HPP +#pragma once #include "notification-info.hpp" @@ -90,5 +89,3 @@ class Daemon void on_bus_acquired(const Glib::RefPtr & connection, const Glib::ustring & name); }; - -#endif diff --git a/src/panel/widgets/notifications/notification-info.hpp b/src/panel/widgets/notifications/notification-info.hpp index 17e3ff9f..4627e872 100644 --- a/src/panel/widgets/notifications/notification-info.hpp +++ b/src/panel/widgets/notifications/notification-info.hpp @@ -1,5 +1,4 @@ -#ifndef NOTIFICATION_INFO_HPP -#define NOTIFICATION_INFO_HPP +#pragma once #include #include @@ -53,5 +52,3 @@ struct Notification private: inline static guint notifications_count = 0; }; - -#endif diff --git a/src/panel/widgets/notifications/single-notification.cpp b/src/panel/widgets/notifications/single-notification.cpp index 9b5fa942..827255a5 100644 --- a/src/panel/widgets/notifications/single-notification.cpp +++ b/src/panel/widgets/notifications/single-notification.cpp @@ -94,8 +94,6 @@ WfSingleNotification::WfSingleNotification(const Notification & notification) if (notification.hints.image_data) { - int width; - int height; auto image_pixbuf = notification.hints.image_data; image.set(image_pixbuf); diff --git a/src/panel/widgets/notifications/single-notification.hpp b/src/panel/widgets/notifications/single-notification.hpp index 0a2219b4..6b631f87 100644 --- a/src/panel/widgets/notifications/single-notification.hpp +++ b/src/panel/widgets/notifications/single-notification.hpp @@ -1,5 +1,4 @@ -#ifndef WIDGETS_SINGLE_NOTIFICATION_HPP -#define WIDGETS_SINGLE_NOTIFICATION_HPP +#pragma once #include #include @@ -41,5 +40,3 @@ class WfSingleNotification : public Gtk::Revealer explicit WfSingleNotification(const Notification & notification); ~WfSingleNotification() override; }; - -#endif diff --git a/src/panel/widgets/separator.hpp b/src/panel/widgets/separator.hpp index 74b615bb..bb70d3da 100644 --- a/src/panel/widgets/separator.hpp +++ b/src/panel/widgets/separator.hpp @@ -1,5 +1,4 @@ -#ifndef WIDGET_SEPARATOR_HPP -#define WIDGET_SEPARATOR_HPP +#pragma once #include "../widget.hpp" #include @@ -15,6 +14,3 @@ class WayfireSeparator : public WayfireWidget virtual ~WayfireSeparator() {} }; - - -#endif /* end of include guard: WIDGET_SEPARATOR_HPP */ diff --git a/src/panel/widgets/spacing.hpp b/src/panel/widgets/spacing.hpp index 0c2e0915..d53fd92a 100644 --- a/src/panel/widgets/spacing.hpp +++ b/src/panel/widgets/spacing.hpp @@ -1,5 +1,4 @@ -#ifndef WIDGET_SPACING_HPP -#define WIDGET_SPACING_HPP +#pragma once #include "../widget.hpp" @@ -14,6 +13,3 @@ class WayfireSpacing : public WayfireWidget virtual ~WayfireSpacing() {} }; - - -#endif /* end of include guard: WIDGET_SPACING_HPP */ diff --git a/src/panel/widgets/tray/dbusmenu.hpp b/src/panel/widgets/tray/dbusmenu.hpp index 75f57650..957755b4 100644 --- a/src/panel/widgets/tray/dbusmenu.hpp +++ b/src/panel/widgets/tray/dbusmenu.hpp @@ -1,5 +1,4 @@ -#ifndef TRAY_DBUSMENU_HPP -#define TRAY_DBUSMENU_HPP +#pragma once #include #include @@ -40,5 +39,3 @@ class DbusMenuModel type_signal_action_group signal_action_group(); }; - -#endif diff --git a/src/panel/widgets/tray/host.hpp b/src/panel/widgets/tray/host.hpp index 56e97694..deadf0c1 100644 --- a/src/panel/widgets/tray/host.hpp +++ b/src/panel/widgets/tray/host.hpp @@ -1,9 +1,8 @@ -#ifndef TRAY_HOST_HPP -#define TRAY_HOST_HPP +#pragma once -#include "sigc++/connection.h" #include "watcher.hpp" +#include #include class WayfireStatusNotifier; @@ -30,5 +29,3 @@ class StatusNotifierHost explicit StatusNotifierHost(WayfireStatusNotifier *tray); ~StatusNotifierHost(); }; - -#endif diff --git a/src/panel/widgets/tray/item.cpp b/src/panel/widgets/tray/item.cpp index 3db7ff19..aa701a65 100644 --- a/src/panel/widgets/tray/item.cpp +++ b/src/panel/widgets/tray/item.cpp @@ -9,7 +9,6 @@ #include #include -#include #include static std::pair name_and_obj_path(const Glib::ustring & service) diff --git a/src/panel/widgets/tray/item.hpp b/src/panel/widgets/tray/item.hpp index 591ee989..0a8bd1d9 100644 --- a/src/panel/widgets/tray/item.hpp +++ b/src/panel/widgets/tray/item.hpp @@ -1,17 +1,14 @@ -#ifndef TRAY_ITEM_HPP -#define TRAY_ITEM_HPP +#pragma once #include #include #include #include -#include "dbusmenu.hpp" -#include "sigc++/connection.h" -#include +#include #include -#include +#include "dbusmenu.hpp" class StatusNotifierItem : public Gtk::Button { @@ -66,5 +63,3 @@ class StatusNotifierItem : public Gtk::Button ~StatusNotifierItem(); std::string get_unique_name(); }; - -#endif diff --git a/src/panel/widgets/tray/tray.hpp b/src/panel/widgets/tray/tray.hpp index a5143f34..b34bd9d5 100644 --- a/src/panel/widgets/tray/tray.hpp +++ b/src/panel/widgets/tray/tray.hpp @@ -1,5 +1,4 @@ -#ifndef TRAY_TRAY_HPP -#define TRAY_TRAY_HPP +#pragma once #include "item.hpp" #include "widgets/tray/host.hpp" @@ -20,5 +19,3 @@ class WayfireStatusNotifier : public WayfireWidget void add_item(const Glib::ustring & service); void remove_item(const Glib::ustring & service); }; - -#endif diff --git a/src/panel/widgets/tray/watcher.hpp b/src/panel/widgets/tray/watcher.hpp index 4a71cb4c..6a6ad6e0 100644 --- a/src/panel/widgets/tray/watcher.hpp +++ b/src/panel/widgets/tray/watcher.hpp @@ -1,5 +1,4 @@ -#ifndef TRAY_WATCHER_HPP -#define TRAY_WATCHER_HPP +#pragma once #include @@ -82,5 +81,3 @@ class Watcher watcher_connection->emit_signal(SNW_PATH, SNW_IFACE, name); } }; // namespace Watcher - -#endif diff --git a/src/panel/widgets/volume.cpp b/src/panel/widgets/volume.cpp index 91e9d841..1400d445 100644 --- a/src/panel/widgets/volume.cpp +++ b/src/panel/widgets/volume.cpp @@ -1,9 +1,6 @@ #include -#include #include #include "volume.hpp" -#include "launchers.hpp" -#include "gtk-utils.hpp" WayfireVolumeScale::WayfireVolumeScale() { diff --git a/src/panel/widgets/volume.hpp b/src/panel/widgets/volume.hpp index 942e87ab..d83eb00d 100644 --- a/src/panel/widgets/volume.hpp +++ b/src/panel/widgets/volume.hpp @@ -1,12 +1,10 @@ -#ifndef WIDGETS_VOLUME_HPP -#define WIDGETS_VOLUME_HPP +#pragma once #include "../widget.hpp" -#include "wf-popover.hpp" #include #include #include -#include "gvc-mixer-control.h" +#include #include /** @@ -100,5 +98,3 @@ class WayfireVolume : public WayfireWidget */ void check_set_popover_timeout(); }; - -#endif /* end of include guard: WIDGETS_VOLUME_HPP */ diff --git a/src/panel/widgets/window-list/layout.cpp b/src/panel/widgets/window-list/layout.cpp index f39342b7..271f4afb 100644 --- a/src/panel/widgets/window-list/layout.cpp +++ b/src/panel/widgets/window-list/layout.cpp @@ -1,6 +1,5 @@ #include "toplevel.hpp" -#include -#include "gtk/gtklayoutmanager.h" +#include "window-list.hpp" WayfireWindowListLayout::WayfireWindowListLayout(WayfireWindowList *window_list) { diff --git a/src/panel/widgets/window-list/layout.hpp b/src/panel/widgets/window-list/layout.hpp index ee40269d..148d766c 100644 --- a/src/panel/widgets/window-list/layout.hpp +++ b/src/panel/widgets/window-list/layout.hpp @@ -1,8 +1,8 @@ +#pragma once + #include -#include "toplevel.hpp" #include - class WayfireWindowList; class WayfireWindowListLayout : public Gtk::LayoutManager diff --git a/src/panel/widgets/window-list/toplevel.cpp b/src/panel/widgets/window-list/toplevel.cpp index e2ed319e..1f63ddfc 100644 --- a/src/panel/widgets/window-list/toplevel.cpp +++ b/src/panel/widgets/window-list/toplevel.cpp @@ -1,16 +1,17 @@ #include #include -#include #include #include #include #include +#include + #include "toplevel.hpp" +#include "window-list.hpp" #include "gtk-utils.hpp" #include "panel.hpp" -#include namespace { diff --git a/src/panel/widgets/window-list/toplevel.hpp b/src/panel/widgets/window-list/toplevel.hpp index 36c98838..2796f329 100644 --- a/src/panel/widgets/window-list/toplevel.hpp +++ b/src/panel/widgets/window-list/toplevel.hpp @@ -1,14 +1,11 @@ -#ifndef WAYFIRE_PANEL_TOPLEVEL_HPP -#define WAYFIRE_PANEL_TOPLEVEL_HPP +#pragma once #include #include #include #include #include - -#include "layout.hpp" -#include "window-list.hpp" +#include class WayfireWindowList; class WayfireWindowListBox; @@ -38,5 +35,3 @@ class WayfireToplevel private: std::unique_ptr pimpl; }; - -#endif /* end of include guard: WAYFIRE_PANEL_TOPLEVEL_HPP */ diff --git a/src/panel/widgets/window-list/window-list.cpp b/src/panel/widgets/window-list/window-list.cpp index 3e67f111..d8db6c04 100644 --- a/src/panel/widgets/window-list/window-list.cpp +++ b/src/panel/widgets/window-list/window-list.cpp @@ -2,9 +2,7 @@ #include #include -#include "toplevel.hpp" #include "window-list.hpp" -#include "panel.hpp" #define DEFAULT_SIZE_PC 0.1 diff --git a/src/panel/widgets/window-list/window-list.hpp b/src/panel/widgets/window-list/window-list.hpp index f38c64ab..998b7ee6 100644 --- a/src/panel/widgets/window-list/window-list.hpp +++ b/src/panel/widgets/window-list/window-list.hpp @@ -1,12 +1,11 @@ -#ifndef WIDGETS_WINDOW_LIST_HPP -#define WIDGETS_WINDOW_LIST_HPP +#pragma once -#include "../../widget.hpp" -#include "panel.hpp" #include - #include + +#include "../../widget.hpp" #include "toplevel.hpp" +#include "layout.hpp" class WayfireToplevel; @@ -71,5 +70,3 @@ class WayfireWindowList : public Gtk::Box, public WayfireWidget int get_default_button_width(); int get_target_button_width(); }; - -#endif /* end of include guard: WIDGETS_WINDOW_LIST_HPP */ diff --git a/src/util/css-config.hpp b/src/util/css-config.hpp index bfd83f04..dcf3ebe6 100644 --- a/src/util/css-config.hpp +++ b/src/util/css-config.hpp @@ -1,3 +1,5 @@ +#pragma once + #include #include #include diff --git a/src/util/gtk-utils.hpp b/src/util/gtk-utils.hpp index 0272f2bf..8cac6c29 100644 --- a/src/util/gtk-utils.hpp +++ b/src/util/gtk-utils.hpp @@ -1,5 +1,4 @@ -#ifndef WF_GTK_UTILS -#define WF_GTK_UTILS +#pragma once #include #include @@ -21,5 +20,3 @@ struct WfIconLoadOptions void invert_pixbuf(Glib::RefPtr& pbuff); void image_set_icon(Gtk::Image *image, std::string path); - -#endif /* end of include guard: WF_GTK_UTILS */ diff --git a/src/util/wf-ipc.hpp b/src/util/wf-ipc.hpp index 968190f4..82a6b3f2 100644 --- a/src/util/wf-ipc.hpp +++ b/src/util/wf-ipc.hpp @@ -1,13 +1,12 @@ -#ifndef WF_IPC_HPP -#define WF_IPC_HPP +#pragma once -#include "giomm/cancellable.h" -#include "giomm/outputstream.h" -#include "giomm/socketconnection.h" -#include "glibmm/iochannel.h" -#include "glibmm/refptr.h" +#include +#include +#include +#include +#include #include -#include "sigc++/connection.h" +#include #include #include #include @@ -80,5 +79,3 @@ class WayfireIPC : public std::enable_shared_from_this WayfireIPC(); ~WayfireIPC(); }; - -#endif // WF_IPC_HPP diff --git a/src/util/wf-popover.cpp b/src/util/wf-popover.cpp index a12c0ed7..20519e35 100644 --- a/src/util/wf-popover.cpp +++ b/src/util/wf-popover.cpp @@ -1,6 +1,5 @@ #include "wf-popover.hpp" #include "wf-autohide-window.hpp" -#include WayfireMenuButton::WayfireMenuButton(const std::string& section) : panel_position{section + "/position"} diff --git a/src/util/wf-popover.hpp b/src/util/wf-popover.hpp index 17ba17bd..1bd416c8 100644 --- a/src/util/wf-popover.hpp +++ b/src/util/wf-popover.hpp @@ -1,5 +1,4 @@ -#ifndef WF_PANEL_POPOVER_HPP -#define WF_PANEL_POPOVER_HPP +#pragma once #include #include @@ -49,5 +48,3 @@ class WayfireMenuButton : public Gtk::MenuButton */ void grab_focus(); }; - -#endif /* end of include guard: WF_PANEL_POPOVER_HPP */ diff --git a/src/util/wf-shell-app.hpp b/src/util/wf-shell-app.hpp index c7036ba8..cc95c2ba 100644 --- a/src/util/wf-shell-app.hpp +++ b/src/util/wf-shell-app.hpp @@ -1,5 +1,4 @@ -#ifndef WF_SHELL_APP_HPP -#define WF_SHELL_APP_HPP +#pragma once #include #include @@ -92,5 +91,3 @@ class WayfireShellApp */ static WayfireShellApp& get(); }; - -#endif /* end of include guard: WF_SHELL_APP_HPP */