From 68f337e39882c8e27c1b7b48639b66df5de29d1c Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 14 Aug 2025 09:42:21 -0700 Subject: [PATCH] apprt/gtk-ng: close inspector window when widget loses surface --- src/apprt/gtk-ng/class/inspector_widget.zig | 4 ++++ src/apprt/gtk-ng/class/inspector_window.zig | 19 +++++++++++++++++++ src/apprt/gtk-ng/ui/1.5/inspector-window.blp | 1 + 3 files changed, 24 insertions(+) diff --git a/src/apprt/gtk-ng/class/inspector_widget.zig b/src/apprt/gtk-ng/class/inspector_widget.zig index b27aaf3ed..f71970a88 100644 --- a/src/apprt/gtk-ng/class/inspector_widget.zig +++ b/src/apprt/gtk-ng/class/inspector_widget.zig @@ -104,6 +104,10 @@ pub const InspectorWidget = extern struct { )); } + pub fn getSurface(self: *Self) ?*Surface { + return self.private().surface; + } + pub fn setSurface(self: *Self, surface_: ?*Surface) void { const priv = self.private(); diff --git a/src/apprt/gtk-ng/class/inspector_window.zig b/src/apprt/gtk-ng/class/inspector_window.zig index 01e4caa49..701718229 100644 --- a/src/apprt/gtk-ng/class/inspector_window.zig +++ b/src/apprt/gtk-ng/class/inspector_window.zig @@ -157,6 +157,22 @@ pub const InspectorWindow = extern struct { )); } + //--------------------------------------------------------------- + // Signal Handlers + + fn propInspectorSurface( + inspector: *InspectorWidget, + _: *gobject.ParamSpec, + self: *Self, + ) callconv(.c) void { + // If the inspector's surface went away, we destroy the window. + // The inspector has a weak notify on the surface so it knows + // if it goes nil. + if (inspector.getSurface() == null) { + self.as(gtk.Window).destroy(); + } + } + const C = Common(Self, Private); pub const as = C.as; pub const ref = C.ref; @@ -184,6 +200,9 @@ pub const InspectorWindow = extern struct { // Template Bindings class.bindTemplateChildPrivate("inspector_widget", .{}); + // Template callbacks + class.bindTemplateCallback("notify_inspector_surface", &propInspectorSurface); + // Properties gobject.ext.registerProperties(class, &.{ properties.surface.impl, diff --git a/src/apprt/gtk-ng/ui/1.5/inspector-window.blp b/src/apprt/gtk-ng/ui/1.5/inspector-window.blp index 2457450ee..a7625bc2c 100644 --- a/src/apprt/gtk-ng/ui/1.5/inspector-window.blp +++ b/src/apprt/gtk-ng/ui/1.5/inspector-window.blp @@ -30,6 +30,7 @@ template $GhosttyInspectorWindow: Adw.ApplicationWindow { } $GhosttyInspectorWidget inspector_widget { + notify::surface => $notify_inspector_surface(); surface: bind template.surface; } }