From fda288b509267607109e018aee7f22705e6e6e4e Mon Sep 17 00:00:00 2001 From: rdp Date: Mon, 24 Feb 2025 14:57:38 +0300 Subject: [PATCH 1/4] Fix the disappearing controller issue when opening the queue from the sidebar or node library and etc --- js/controller_panel.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/js/controller_panel.js b/js/controller_panel.js index df39911..27ee0f5 100644 --- a/js/controller_panel.js +++ b/js/controller_panel.js @@ -111,6 +111,20 @@ export class ControllerPanel extends HTMLDivElement { this.clear_stacking_threshold() this.resize_observer = new ResizeObserver((x) => this.on_size_change()).observe(this) + + this._isDestroyed = false; + this.removalObserver = new MutationObserver((mutations) => { + if (!global_settings.hidden && !document.body.contains(this) && !this._isDestroyed) { + console.log(`ControllerPanel ${this.index} removed externally`); + this._isDestroyed = true; + ControllerPanel.redraw(); + } + }); + + this.removalObserver.observe(document.body, { + childList: true, + subtree: true + }); } static on_group_details_change(oldname, changes) { From 193969c844ccd629e0cf4bd440da2cc447c861e4 Mon Sep 17 00:00:00 2001 From: bananasss00 Date: Mon, 24 Feb 2025 17:51:49 +0300 Subject: [PATCH 2/4] fix stacking panels --- js/controller_panel.js | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/js/controller_panel.js b/js/controller_panel.js index 27ee0f5..f21bd14 100644 --- a/js/controller_panel.js +++ b/js/controller_panel.js @@ -112,19 +112,24 @@ export class ControllerPanel extends HTMLDivElement { this.resize_observer = new ResizeObserver((x) => this.on_size_change()).observe(this) - this._isDestroyed = false; - this.removalObserver = new MutationObserver((mutations) => { - if (!global_settings.hidden && !document.body.contains(this) && !this._isDestroyed) { - console.log(`ControllerPanel ${this.index} removed externally`); - this._isDestroyed = true; - ControllerPanel.redraw(); - } - }); + if (this.index==0) { + this.removalObserver = new MutationObserver((mutations) => { + if (!global_settings.hidden && !document.body.contains(this)) { + console.log(`ControllerPanel ${this.index} removed externally`); + this.removalObserver.disconnect(); + this.removalObserver = null; + + setTimeout(function() { + ControllerPanel.redraw(); + }, 100); + } + }); - this.removalObserver.observe(document.body, { - childList: true, - subtree: true - }); + this.removalObserver.observe(document.body, { + childList: true, + subtree: true + }); + } } static on_group_details_change(oldname, changes) { From 08e4e92cd58b13af46fc4c94b2456f6354e3e6ee Mon Sep 17 00:00:00 2001 From: bananasss00 Date: Mon, 24 Feb 2025 18:03:24 +0300 Subject: [PATCH 3/4] observe 'graph-canvas-container' instead document.body --- js/controller_panel.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/controller_panel.js b/js/controller_panel.js index f21bd14..02baefd 100644 --- a/js/controller_panel.js +++ b/js/controller_panel.js @@ -113,8 +113,9 @@ export class ControllerPanel extends HTMLDivElement { this.resize_observer = new ResizeObserver((x) => this.on_size_change()).observe(this) if (this.index==0) { + const canvas_container = document.getElementsByClassName('graph-canvas-container')[0]; this.removalObserver = new MutationObserver((mutations) => { - if (!global_settings.hidden && !document.body.contains(this)) { + if (!global_settings.hidden && !canvas_container.contains(this)) { console.log(`ControllerPanel ${this.index} removed externally`); this.removalObserver.disconnect(); this.removalObserver = null; @@ -125,7 +126,7 @@ export class ControllerPanel extends HTMLDivElement { } }); - this.removalObserver.observe(document.body, { + this.removalObserver.observe(canvas_container, { childList: true, subtree: true }); From 2c00c08bad1f79e8a67c650b22395c46e8db348c Mon Sep 17 00:00:00 2001 From: bananasss00 Date: Mon, 24 Feb 2025 20:23:13 +0300 Subject: [PATCH 4/4] better fix removed controller --- js/controller_panel.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/js/controller_panel.js b/js/controller_panel.js index 02baefd..4b5c655 100644 --- a/js/controller_panel.js +++ b/js/controller_panel.js @@ -24,6 +24,8 @@ import { close_context_menu, open_context_menu } from "./context_menu.js"; export class ControllerPanel extends HTMLDivElement { static instances = {} static count = 0 + static removalObserver = null; + static pendingRedraw = false; _remove() { Debug.trivia(`Removing ControllerPanel ${this.index}`) @@ -112,21 +114,27 @@ export class ControllerPanel extends HTMLDivElement { this.resize_observer = new ResizeObserver((x) => this.on_size_change()).observe(this) - if (this.index==0) { + if (!ControllerPanel.removalObserver) { const canvas_container = document.getElementsByClassName('graph-canvas-container')[0]; - this.removalObserver = new MutationObserver((mutations) => { - if (!global_settings.hidden && !canvas_container.contains(this)) { - console.log(`ControllerPanel ${this.index} removed externally`); - this.removalObserver.disconnect(); - this.removalObserver = null; + ControllerPanel.removalObserver = new MutationObserver((mutations) => { + let needsRedraw = false; + Object.values(ControllerPanel.instances).forEach((instance) => { + if (!canvas_container.contains(instance)) { + needsRedraw = true; + } + }); - setTimeout(function() { + if (needsRedraw && !ControllerPanel.pendingRedraw && !global_settings.hidden) { + ControllerPanel.pendingRedraw = true; + setTimeout(() => { ControllerPanel.redraw(); + ControllerPanel.pendingRedraw = false; + // console.log('ControllerPanel removed. Called redraw', ControllerPanel.instances); }, 100); } }); - this.removalObserver.observe(canvas_container, { + ControllerPanel.removalObserver.observe(canvas_container, { childList: true, subtree: true });