diff --git a/src/PanelCode.js b/src/PanelCode.js index 5bf0a619c..39a9b662a 100644 --- a/src/PanelCode.js +++ b/src/PanelCode.js @@ -46,7 +46,14 @@ export default function PanelCode({ builder, previewer, settings }) { function switchLanguage() { panel.language = dropdown_code_lang.selected_item?.string; stack_code.visible_child_name = panel.language; - previewer.useInternal().catch(console.error); + if (panel.language === "JavaScript") { + previewer.useInternal().catch(console.error); + } else { + // If we switch language to anything other than JS, + // we need the user to hit "Run" first to compile the code and/or + // init the demo in the external previewer. + previewer.hideShowPreviewerButton().catch(console.error); + } } switchLanguage(); diff --git a/src/Previewer/External.js b/src/Previewer/External.js index a85b9618b..f9d33c400 100644 --- a/src/Previewer/External.js +++ b/src/Previewer/External.js @@ -46,7 +46,12 @@ export default function External({ output, builder, onWindowChange }) { console.debug(err); return; } - stack.set_visible_child_name("open_window"); + // only do this, if we were previously on "close_window", because it's possible + // we have just been replaced with the internal previewer, which may have + // already switched tro "inline" + if (stack.get_visible_child_name() === "close_window") { + stack.set_visible_child_name("open_window"); + } } function stop() { diff --git a/src/Previewer/Previewer.js b/src/Previewer/Previewer.js index 992012e72..d4b1a5ebc 100644 --- a/src/Previewer/Previewer.js +++ b/src/Previewer/Previewer.js @@ -74,7 +74,6 @@ export default function Previewer({ stack.set_visible_child_name("close_window"); } else { stack.set_visible_child_name("open_window"); - useInternal().catch(console.error); } }, output, @@ -276,6 +275,7 @@ export default function Previewer({ current = previewer; + button_open.show(); handler_id_button_open = button_open.connect("clicked", async () => { try { await current.open(); @@ -301,6 +301,10 @@ export default function Previewer({ } } + async function hideShowPreviewerButton() { + button_open.hide(); + } + builder.get_object("button_screenshot").connect("clicked", () => { screenshot({ application, window, current }).catch(console.error); }); @@ -323,6 +327,7 @@ export default function Previewer({ }, useExternal, useInternal, + hideShowPreviewerButton, setPanelCode(v) { panel_code = v; }, diff --git a/src/Previewer/previewer.vala b/src/Previewer/previewer.vala index 23e1b97f0..70a972b1b 100644 --- a/src/Previewer/previewer.vala +++ b/src/Previewer/previewer.vala @@ -25,12 +25,12 @@ namespace Workbench { private void set_window (Gtk.Window window) { this.window?.destroy (); this.window = window; + this.window.hide_on_close = true; this.window.close_request.connect (this.on_window_closed); } private bool on_window_closed () { this.window_open (false); - this.window = null; return false; } diff --git a/src/langs/python/python-previewer.py b/src/langs/python/python-previewer.py index 0ed4ef5a4..4e75e7ec6 100644 --- a/src/langs/python/python-previewer.py +++ b/src/langs/python/python-previewer.py @@ -216,11 +216,12 @@ def set_window(self, the_window: Gtk.Window): if self.window is not None: self.window.destroy() self.window = the_window + # Make sure the preview can be re-opened by using the "Show Preview Window" button. + self.window.set_hide_on_close(True) self.window.connect("close-request", self.on_window_closed) def on_window_closed(self, *args): self.window_open(False) - self.window = None return False def on_css_parsing_error(self, _css, section: Gtk.CssSection, error: GLib.Error):