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
pull/9151/head
Jeffrey C. Ollie 2025-10-11 14:51:52 -05:00 committed by GitHub
parent c5ad7563f9
commit 81c982df96
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 1 deletions

View File

@ -1468,6 +1468,12 @@ pub const Surface = extern struct {
pub fn sendDesktopNotification(self: *Self, title: [:0]const u8, body: [:0]const u8) void { pub fn sendDesktopNotification(self: *Self, title: [:0]const u8, body: [:0]const u8) void {
const app = Application.default(); 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) { const t = switch (title.len) {
0 => "Ghostty", 0 => "Ghostty",
@ -1482,7 +1488,7 @@ pub const Surface = extern struct {
defer icon.unref(); defer icon.unref();
notification.setIcon(icon.as(gio.Icon)); notification.setIcon(icon.as(gio.Icon));
const pointer = glib.Variant.newUint64(@intFromPtr(self)); const pointer = glib.Variant.newUint64(@intFromPtr(core_surface));
notification.setDefaultActionAndTargetValue( notification.setDefaultActionAndTargetValue(
"app.present-surface", "app.present-surface",
pointer, pointer,

View File

@ -1585,6 +1585,9 @@ pub const Window = extern struct {
// Grab focus // Grab focus
surface.grabFocus(); surface.grabFocus();
// Bring the window to the front.
self.as(gtk.Window).present();
} }
fn surfaceToggleFullscreen( fn surfaceToggleFullscreen(