--- a/src/overview.cpp +++ b/src/overview.cpp @@ -1471,15 +1471,19 @@ public: void init() override { - wf::get_core().connect(&on_output_added); wf::get_core().connect(&on_output_removed); + wf::get_core().output_layout->connect(&on_output_added); + wf::get_core().output_layout->connect(&on_output_removed); wf::get_core().connect(&on_motion); wf::get_core().connect(&on_button); for (auto &o : wf::get_core().output_layout->get_outputs()) add_output(o); } void fini() override { + on_output_added.disconnect(); on_output_removed.disconnect(); + on_motion.disconnect(); on_button.disconnect(); for (auto &[o, i] : outputs) { o->rem_binding(&i->toggle_cb); i->fini(); } outputs.clear(); } void add_output(wf::output_t *out) { + if (outputs.count(out)) return; auto i = std::make_unique(); i->show_panel = opt_show_panel; i->panel_height = opt_panel_height; i->panel_color = (std::string)opt_panel_color;