From 81c982df96985c398fca41acc28a386bcb121679 Mon Sep 17 00:00:00 2001 From: "Jeffrey C. Ollie" Date: Sat, 11 Oct 2025 14:51:52 -0500 Subject: gtk: fix clicking on desktop notifications (#9146) Clicking on desktop notifications sent by Ghostty _should_ cause the window that sent the notification to come to the top. However, because the notification that was sent targeted the wrong surface (apprt surface vs core surface) and the window did not call `present()` on itself the window would never be brought to the surface, the correct tab would not be selected, etc. Fixes #9145 --- src/apprt/gtk/class/surface.zig | 8 +++++++- src/apprt/gtk/class/window.zig | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/apprt/gtk/class/surface.zig b/src/apprt/gtk/class/surface.zig index cc17e3470..51e4ea7b2 100644 --- a/src/apprt/gtk/class/surface.zig +++ b/src/apprt/gtk/class/surface.zig @@ -1468,6 +1468,12 @@ pub const Surface = extern struct { pub fn sendDesktopNotification(self: *Self, title: [:0]const u8, body: [:0]const u8) void { const app = Application.default(); + const priv: *Private = self.private(); + + const core_surface = priv.core_surface orelse { + log.warn("can't send notification because there is no core surface", .{}); + return; + }; const t = switch (title.len) { 0 => "Ghostty", @@ -1482,7 +1488,7 @@ pub const Surface = extern struct { defer icon.unref(); notification.setIcon(icon.as(gio.Icon)); - const pointer = glib.Variant.newUint64(@intFromPtr(self)); + const pointer = glib.Variant.newUint64(@intFromPtr(core_surface)); notification.setDefaultActionAndTargetValue( "app.present-surface", pointer, diff --git a/src/apprt/gtk/class/window.zig b/src/apprt/gtk/class/window.zig index 8efff8729..746bcd379 100644 --- a/src/apprt/gtk/class/window.zig +++ b/src/apprt/gtk/class/window.zig @@ -1585,6 +1585,9 @@ pub const Window = extern struct { // Grab focus surface.grabFocus(); + + // Bring the window to the front. + self.as(gtk.Window).present(); } fn surfaceToggleFullscreen( -- cgit v1.2.3