From 4df25b7aaf71044efc9aee810ff1c0c185e16cf7 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Tue, 8 Nov 2022 11:17:01 +0100 Subject: [PATCH 1/5] Ensure toplevel objects are destroyed --- src/Previewer/Internal.js | 6 ++++++ src/Previewer/vala-previewer/previewer.vala | 11 +++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Previewer/Internal.js b/src/Previewer/Internal.js index bf238e503..53caf2af9 100644 --- a/src/Previewer/Internal.js +++ b/src/Previewer/Internal.js @@ -158,6 +158,12 @@ export default function Internal({ object_root[prop_name] = new_value; } } + + // Toplevel windows returned by these functions will stay around until the user explicitly destroys them with gtk_window_destroy(). + // https://docs.gtk.org/gtk4/class.Builder.html + if (object_preview instanceof Gtk.Root) { + object_preview.destroy(); + } } if (!object_root.name) { diff --git a/src/Previewer/vala-previewer/previewer.vala b/src/Previewer/vala-previewer/previewer.vala index 31794c269..a62c4b744 100644 --- a/src/Previewer/vala-previewer/previewer.vala +++ b/src/Previewer/vala-previewer/previewer.vala @@ -19,7 +19,8 @@ namespace Workbench { default_width = 600, default_height = 800 }; - this.set_window(window); + this.window = window; + this.window.close_request.connect (this.on_window_closed); } private void set_window(Gtk.Window window) { @@ -42,7 +43,7 @@ namespace Workbench { var target = this.builder.get_object (target_id) as Gtk.Widget; if (target == null) { stderr.printf (@"Widget with target_id='$target_id' could not be found.\n"); - return; + return; } if (original_id != "") { @@ -75,6 +76,12 @@ namespace Workbench { ((Gtk.Window) target).child = null; this.window.child = child; } + + // FIXME: working for Internal but not here + // the list of root objects keeps growing in Inspector as you make changes to UI + // Toplevel windows returned by these functions will stay around until the user explicitly destroys them with gtk_window_destroy(). + // https://docs.gtk.org/gtk4/class.Builder.html + target.destroy(); } public void update_css (string content) { From 7a579d7495dd33e20edeaa39805abd48515d8768 Mon Sep 17 00:00:00 2001 From: Lorenz Wildberg Date: Sun, 18 Dec 2022 23:14:06 +0100 Subject: [PATCH 2/5] vala-previewer: Fix cast --- src/Previewer/vala-previewer/previewer.vala | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Previewer/vala-previewer/previewer.vala b/src/Previewer/vala-previewer/previewer.vala index a62c4b744..6aa1f552d 100644 --- a/src/Previewer/vala-previewer/previewer.vala +++ b/src/Previewer/vala-previewer/previewer.vala @@ -77,11 +77,7 @@ namespace Workbench { this.window.child = child; } - // FIXME: working for Internal but not here - // the list of root objects keeps growing in Inspector as you make changes to UI - // Toplevel windows returned by these functions will stay around until the user explicitly destroys them with gtk_window_destroy(). - // https://docs.gtk.org/gtk4/class.Builder.html - target.destroy(); + ((Gtk.Window) target).destroy(); } public void update_css (string content) { From 8a8b96b3612157a93c8d11fdd44d543cb60b2c5d Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Sun, 18 Dec 2022 23:27:15 +0100 Subject: [PATCH 3/5] f --- src/Previewer/vala-previewer/previewer.vala | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Previewer/vala-previewer/previewer.vala b/src/Previewer/vala-previewer/previewer.vala index 6aa1f552d..246c1011c 100644 --- a/src/Previewer/vala-previewer/previewer.vala +++ b/src/Previewer/vala-previewer/previewer.vala @@ -19,8 +19,7 @@ namespace Workbench { default_width = 600, default_height = 800 }; - this.window = window; - this.window.close_request.connect (this.on_window_closed); + this.set_window(window); } private void set_window(Gtk.Window window) { @@ -76,7 +75,6 @@ namespace Workbench { ((Gtk.Window) target).child = null; this.window.child = child; } - ((Gtk.Window) target).destroy(); } From 6d9f87faeb03d1e9b349562dbfcf4693e80d8922 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Sun, 18 Dec 2022 23:34:48 +0100 Subject: [PATCH 4/5] f --- src/Previewer/vala-previewer/previewer.vala | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Previewer/vala-previewer/previewer.vala b/src/Previewer/vala-previewer/previewer.vala index 246c1011c..6f2add4b0 100644 --- a/src/Previewer/vala-previewer/previewer.vala +++ b/src/Previewer/vala-previewer/previewer.vala @@ -75,7 +75,10 @@ namespace Workbench { ((Gtk.Window) target).child = null; this.window.child = child; } - ((Gtk.Window) target).destroy(); + + if (target is Gtk.Window) { + ((Gtk.Window) target).destroy(); + } } public void update_css (string content) { From 01d7705c1959c1344bd1db5659976d48da9ea5e9 Mon Sep 17 00:00:00 2001 From: Sonny Piers Date: Sun, 18 Dec 2022 23:37:35 +0100 Subject: [PATCH 5/5] f --- src/Previewer/Internal.js | 5 +++-- src/Previewer/vala-previewer/previewer.vala | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Previewer/Internal.js b/src/Previewer/Internal.js index 53caf2af9..eb3d7fb46 100644 --- a/src/Previewer/Internal.js +++ b/src/Previewer/Internal.js @@ -159,9 +159,10 @@ export default function Internal({ } } - // Toplevel windows returned by these functions will stay around until the user explicitly destroys them with gtk_window_destroy(). + // Toplevel windows returned by these functions will stay around + // until the user explicitly destroys them with gtk_window_destroy(). // https://docs.gtk.org/gtk4/class.Builder.html - if (object_preview instanceof Gtk.Root) { + if (object_preview instanceof Gtk.Window) { object_preview.destroy(); } } diff --git a/src/Previewer/vala-previewer/previewer.vala b/src/Previewer/vala-previewer/previewer.vala index 6f2add4b0..cd6d32264 100644 --- a/src/Previewer/vala-previewer/previewer.vala +++ b/src/Previewer/vala-previewer/previewer.vala @@ -76,6 +76,9 @@ namespace Workbench { this.window.child = child; } + // Toplevel windows returned by these functions will stay around + // until the user explicitly destroys them with gtk_window_destroy(). + // https://docs.gtk.org/gtk4/class.Builder.html if (target is Gtk.Window) { ((Gtk.Window) target).destroy(); }