mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 07:46:12 +03:00
fix(gtk): fix segfault on ctrl-d on older adw (#4971)
Ghostty with libadwaita older than 1.4.0 (in my case, that of debian
bookworm) will segfault when you exit ghostty with ctrl+d. This was
already fixed by #3694 but it re-appeared during a refactor. The fix
simply uses a reference to `tab.window.window` to call
`gtk_window_destroy`, because `tab.window` has already been [destroyed
by a signal
handler](6cbd69da78/src/apprt/gtk/Tab.zig (L130-L137)
)
triggered in the old libadwaita path.
Original issue: #3135
This commit is contained in:
@ -137,6 +137,8 @@ pub const NotebookAdw = struct {
|
|||||||
|
|
||||||
// If we have no more tabs we close the window
|
// If we have no more tabs we close the window
|
||||||
if (self.nPages() == 0) {
|
if (self.nPages() == 0) {
|
||||||
|
const window = tab.window.window;
|
||||||
|
|
||||||
// libadw versions <= 1.3.x leak the final page view
|
// libadw versions <= 1.3.x leak the final page view
|
||||||
// which causes our surface to not properly cleanup. We
|
// which causes our surface to not properly cleanup. We
|
||||||
// unref to force the cleanup. This will trigger a critical
|
// unref to force the cleanup. This will trigger a critical
|
||||||
@ -150,7 +152,7 @@ pub const NotebookAdw = struct {
|
|||||||
|
|
||||||
// `self` will become invalid after this call because it will have
|
// `self` will become invalid after this call because it will have
|
||||||
// been freed up as part of the process of closing the window.
|
// been freed up as part of the process of closing the window.
|
||||||
c.gtk_window_destroy(tab.window.window);
|
c.gtk_window_destroy(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user