GTK: followup update search state on activation (#9766)

followup from comment in this PR
https://github.com/ghostty-org/ghostty/pull/9765
pull/9777/head
Mitchell Hashimoto 2025-12-01 07:25:45 -08:00 committed by GitHub
commit 09f7e38b45
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 4 deletions

View File

@ -43,7 +43,14 @@ pub const SearchOverlay = extern struct {
bool, bool,
.{ .{
.default = false, .default = false,
.accessor = C.privateShallowFieldAccessor("active"), .accessor = gobject.ext.typedAccessor(
Self,
bool,
.{
.getter = getSearchActive,
.setter = setSearchActive,
},
),
}, },
); );
}; };
@ -231,10 +238,16 @@ pub const SearchOverlay = extern struct {
// Select all text in the search entry field. -1 is distance from // Select all text in the search entry field. -1 is distance from
// the end, causing the entire text to be selected. // the end, causing the entire text to be selected.
priv.search_entry.as(gtk.Editable).selectRegion(0, -1); priv.search_entry.as(gtk.Editable).selectRegion(0, -1);
}
// update search state with the active text // Set active status, and update search on activation
const text = priv.search_entry.as(gtk.Editable).getText(); fn setSearchActive(self: *Self, active: bool) void {
signals.@"search-changed".impl.emit(self, null, .{text}, null); const priv = self.private();
if (!priv.active and active) {
const text = priv.search_entry.as(gtk.Editable).getText();
signals.@"search-changed".impl.emit(self, null, .{text}, null);
}
priv.active = active;
} }
/// Set the total number of search matches. /// Set the total number of search matches.
@ -261,6 +274,10 @@ pub const SearchOverlay = extern struct {
} }
} }
fn getSearchActive(self: *Self) bool {
return self.private().active;
}
fn getSearchTotal(self: *Self) u64 { fn getSearchTotal(self: *Self) u64 {
return self.private().search_total orelse 0; return self.private().search_total orelse 0;
} }

View File

@ -1964,6 +1964,7 @@ pub const Surface = extern struct {
SearchOverlay.properties.active.name, SearchOverlay.properties.active.name,
&value, &value,
); );
if (active) { if (active) {
priv.search_overlay.grabFocus(); priv.search_overlay.grabFocus();
} }