Commit Graph

7250 Commits

Author SHA1 Message Date
Mitchell Hashimoto
a8d0a84530 apprt/gtk-ng: hook up window close confirmation 2025-07-25 15:12:55 -07:00
Mitchell Hashimoto
a25a0011ea apprt/gtk-ng: more actions 2025-07-25 14:53:18 -07:00
Mitchell Hashimoto
7d33d39a45 blp formatting 2025-07-25 13:56:41 -07:00
Mitchell Hashimoto
7f2f603fbd apprt/gtk-ng: handle headerbar visibility by config 2025-07-25 13:52:12 -07:00
Mitchell Hashimoto
5fd7e0814d typos 2025-07-25 13:36:05 -07:00
Mitchell Hashimoto
7f3dda7ea4 apprt/gtk-ng: setup headervar-visible binding 2025-07-25 13:35:43 -07:00
Mitchell Hashimoto
6cf8007cf7 apprt/gtk-ng: toggle fullscreen and maximize 2025-07-25 13:17:13 -07:00
Jeffrey C. Ollie
95df073455 gtk-ng: tell systemd when Ghostty is ready 2025-07-25 15:16:50 -05:00
Mitchell Hashimoto
5b37e86391 apprt/gtk-ng: close surface, close window 2025-07-25 12:59:47 -07:00
Mitchell Hashimoto
f27fd0f550 apprt/gtk-ng: main menu button shouldn't focus 2025-07-25 12:47:26 -07:00
Mitchell Hashimoto
02e6ef7e9b apprt/gtk-ng: setup action maps in app and window 2025-07-25 12:10:30 -07:00
Mitchell Hashimoto
e865535f6e apprt/gtk-ng: simple headerbar 2025-07-25 12:10:11 -07:00
Mitchell Hashimoto
b8dd767fe4 apprt/gtk: fix double-free if quit action is used (#8068)
This fixes a double-free that Valgrind found when the quit action was
used (the keybinding to quit or the menu item). This fixes it in both
the gtk and gtk-ng apprts.

The issue stems from the fact that our quit action worked by traversing
the toplevels and destroying all windows. When all windows are
destroyed, GTK exits the main loop.

When fcitx is used as the input method editor (IME), it appears to hold
its own `gtk.Window` widget as a property (probably for the IME popup).
Unfortunately this does not react well to being destroyed externally and
triggers a double-free when the IME widget also tries to dispose itself.

I think this is probably a bug somewhere in the GTK IME widget because
it should be resilient to this kind of destruction. But, we can't
tolerate a double free in the mean time.

We can still quit by destroying only OUR windows (which cascades to
destroy everything else).
2025-07-25 12:01:54 -07:00
Mitchell Hashimoto
a477921b80 apprt/gtk: fix double-free if quit action is used
This fixes a double-free that Valgrind found when the quit action was
used (the keybinding to quit or the menu item). 

The issue stems from the fact that our quit action worked by traversing the 
toplevels and destroying all windows. When all windows are destroyed,
GTK exits the main loop.

When fcitx is used as the input method editor (IME), it appears to hold
its own `gtk.Window` widget as a property (probably for the IME popup).
Unfortunately this does not react well to being destroyed externally and
triggers a double-free when the IME widget also tries to dispose itself.

I think this is probably a bug somewhere in the GTK IME widget because
it should be resilient to this kind of destruction. But, we can't
tolerate a double free in the mean time.

We can still quit by destroying only OUR windows (which cascades to
destroy everything else).
2025-07-25 11:53:22 -07:00
Qwerasd
92fa2228e9 font: use non-mono symbols nerd font for embedded symbols
I changed my mind, this is a pretty small change and relevant to the
intent of the PR. This brings the appearance of the embedded symbols
much closer to patched fonts.

With this, the sizes of most symbols are nearly identical to a patched
font, the only big difference is positioning (and TBH I think we do a
better job positioning than the patcher does, since we have knowledge
about the cell size).
2025-07-25 12:41:00 -06:00
Qwerasd
6af6357949 font: clean up Collection api somewhat
Move size adjustment logic out of `Entry`, I understand the impulse to
put it there but it results in passing a lot of stuff around which isn't
great.

Rework `add(...)` in to `add(...)` and `addDeferred(...)`, faces are
passed directly now instead of passing an entry, and an options struct
is used instead of positional arguments for things like style, fallback,
and size adjustment.

Change size adjustment test back to a half pixel tolerance instead of 5%
because the previous commit (allowing fractional pixel sizes) fixed the
root cause of large differences.
2025-07-25 11:50:59 -06:00
Jeffrey C. Ollie
f390941fd6 gtk-ng: move debug property to window 2025-07-25 12:46:56 -05:00
Jeffrey C. Ollie
33135f19dc gtk-ng: add debug warning banner 2025-07-25 12:46:55 -05:00
Qwerasd
9405522dd5 font: allow fractional pixel sizes 2025-07-25 11:36:03 -06:00
Mitchell Hashimoto
830d49c185 apprt/gtk-ng: surface inheritance, new window
This makes the `new_window` action properly inherit properties from the
parent surface that initiated the action. Today, that is only the pwd
and font size.
2025-07-25 10:17:08 -07:00
Mitchell Hashimoto
b36b7031a1 apprt/gtk-ng: hook up bell ringing
For now, this just emits a signal that an embedding widget will react to
to do something like flashing the window. 

I think we should implement the audio bell in the actual surface view
but I don't currently have audio drivers hooked up in my Linux VM and
I'm away from my desktop PC. :)
2025-07-25 09:01:45 -07:00
Qwerasd
c0ee4a252a font: revert switch to non-mono symbols nerd font
This change might be good, but it is incomplete and not relevant to the
PR that it's a part of. I'll explore making this change separately after
this, since it might be a good idea.

(It's incomplete since the attribute data was not re-generated based on
the non-mono file.)
2025-07-24 17:52:41 -06:00
Qwerasd
2054a06533 cleanup
A variety of naming, commenting, and formatting improvements + a few
explicit error sets. This commit has no functional changes, though it
does remove a couple functions that didn't really need to exist.
2025-07-24 17:48:57 -06:00
Mitchell Hashimoto
00cce91dc4 apprt/gtk-ng: surface progress bar 2025-07-23 16:29:56 -07:00
Mitchell Hashimoto
eb3f3fff83 apprt/gtk-ng: keep child_exited property up to date 2025-07-23 16:03:27 -07:00
Mitchell Hashimoto
cd664078ad apprt/gtk-ng: child exited overlay 2025-07-23 15:47:44 -07:00
Mitchell Hashimoto
550d29d930 apprt/gtk-ng: surface drag and drop 2025-07-23 12:35:31 -07:00
Mitchell Hashimoto
b50c1c4fa0 New icon for Linux GTK app that aligns with the Gnome HIG
This adds a new icon for the GTK-based application that adheres (mostly)
to the Gnome Human Interface Guidelines (HIG). The icon is designed to
fit in better with other Gnome applications. 

While there isn't a single standard "native" style amongst Linux
applications, I believe this better fits the general Linux desktop
ecosystem over our macOS icon.

The icon itself is undeniably Ghostty. The core design language is the
same and I don't think ayone will mistake it for anything else. I wanted
to keep the brand the same, but making it fit in better aligns with
Ghostty's goal of being "platform native".
2025-07-23 10:00:55 -07:00
Mitchell Hashimoto
010e9199ca apprt/gtk-ng: bind template callbacks so we can connect signals in blp 2025-07-23 07:24:00 -07:00
Mitchell Hashimoto
2544c1fb22 apprt/gtk-ng: move overlays and event controllers into Blueprint
I became far less stupid and figured out how to figure this out by
reading the source code and since then I've been enlightened and can
clean up our Blueprints quite a bit. Yay!
2025-07-22 15:19:50 -07:00
Jayson Reis
acc2ea724f build-system: Replace deprecated usages of addStaticLibrary with addLibrary (#8029)
Hi there, this is just a low-hanging fruit and it also prepares the way
for the future 0.15, which removes addStaticLibrary.
Please, let me know what to do on the `// TODO` comments.
2025-07-22 14:47:18 -07:00
Mitchell Hashimoto
04143645f2 apprt/gtk-ng: fixed missing icon for hide button 2025-07-22 14:38:36 -07:00
Mitchell Hashimoto
2855c44118 typos 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
5c21d9a123 prettier 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
7e329d3e4c apprt/gtk-ng: paste can't remember 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
4d39f2728a apprt/gtk-ng: implement remember 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
58a5f3f1f8 apprt/gtk-ng: emit signal when clipboard read/write 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
a6e0878b11 apprt/gtk-ng: hook up all the dialogs 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
b11dadafb1 apprt/gtk-ng: clipboard confirm 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
46e395055d apprt/gtk-ng: implement blur 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
222c3c888d apprt/gtk-ng: clipboard confirmation dialog 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
a91ed99054 apprt/gtk-ng: fix focus deadlock 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
a4f494e2ae apprt/gtk-ng: wip set clipboard 2025-07-22 14:36:21 -07:00
Mitchell Hashimoto
c3acbf1a49 apprt/gtk-ng: clipboard read 2025-07-22 14:36:21 -07:00
Jeffrey C. Ollie
cc0a688b5d core: use std.testing.expectEqualStrings where appropriate 2025-07-22 13:08:24 -05:00
Leah Amelia Chen
a7b7c10474 gtk: only show clipboard toast when content isn't empty 2025-07-22 17:25:57 +00:00
Leah Amelia Chen
d3f40d70e2 terminal/osc: allow empty payloads
xterm docs explicitly say that empty payloads should be permitted and
are used to clear the selected clipboards, so we need to implement that
correctly. The GTK apprt still shows a "Copied to Clipboard" toast though
and we might want to change that too
2025-07-22 16:50:29 +00:00
Mitchell Hashimoto
8f8f2ebd2d apprt/gtk-ng: surfaces start in cgroup if enabled 2025-07-21 21:21:09 -07:00
Mitchell Hashimoto
4aaacc04a5 fix logger name 2025-07-21 20:54:16 -07:00
Mitchell Hashimoto
9caf5f5a86 apprt/gtk-ng: ResizeOverlay class 2025-07-21 20:48:59 -07:00