summaryrefslogtreecommitdiff
path: root/gui-libs/wf-overview/files/wf-overview-0.1.0_p20260228-output-lifecycle.patch
blob: 7eda920eaa2044aca35fb42333f3eb6ec3687939 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
--- 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<overview_output_t>();
     i->show_panel = opt_show_panel;
     i->panel_height = opt_panel_height; i->panel_color = (std::string)opt_panel_color;