diff --git a/src/apprt/gtk-ng/class/window.zig b/src/apprt/gtk-ng/class/window.zig index 5745c333f..44f3eb0c5 100644 --- a/src/apprt/gtk-ng/class/window.zig +++ b/src/apprt/gtk-ng/class/window.zig @@ -807,6 +807,18 @@ pub const Window = extern struct { priv.tab_view.closePage(page); } + fn tabViewNPages( + _: *adw.TabView, + _: *gobject.ParamSpec, + self: *Self, + ) callconv(.c) void { + const priv = self.private(); + if (priv.tab_view.getNPages() == 0) { + // If we have no pages left then we want to close window. + self.as(gtk.Window).close(); + } + } + fn surfaceClipboardWrite( _: *Surface, clipboard_type: apprt.Clipboard, @@ -1013,9 +1025,10 @@ pub const Window = extern struct { // Template Callbacks class.bindTemplateCallback("close_request", &windowCloseRequest); class.bindTemplateCallback("close_page", &tabViewClosePage); - class.bindTemplateCallback("selected_page", &tabViewSelectedPage); class.bindTemplateCallback("page_attached", &tabViewPageAttached); class.bindTemplateCallback("page_detached", &tabViewPageDetached); + class.bindTemplateCallback("notify_n_pages", &tabViewNPages); + class.bindTemplateCallback("notify_selected_page", &tabViewSelectedPage); class.bindTemplateCallback("notify_config", &propConfig); class.bindTemplateCallback("notify_fullscreened", &propFullscreened); class.bindTemplateCallback("notify_maximized", &propMaximized); diff --git a/src/apprt/gtk-ng/ui/1.5/window.blp b/src/apprt/gtk-ng/ui/1.5/window.blp index 70974d1c7..cefabc91f 100644 --- a/src/apprt/gtk-ng/ui/1.5/window.blp +++ b/src/apprt/gtk-ng/ui/1.5/window.blp @@ -78,7 +78,8 @@ template $GhosttyWindow: Adw.ApplicationWindow { Adw.ToastOverlay toast_overlay { Adw.TabView tab_view { - notify::selected-page => $selected_page(); + notify::n-pages => $notify_n_pages(); + notify::selected-page => $notify_selected_page(); close-page => $close_page(); page-attached => $page_attached(); page-detached => $page_detached();