Add delay before updating the title

This commit is contained in:
Maciej Bartczak
2024-12-28 17:18:15 +01:00
parent 6cbd69da78
commit 4ed8306b02

View File

@ -346,6 +346,9 @@ cursor: ?*c.GdkCursor = null,
/// pass it to GTK. /// pass it to GTK.
title_text: ?[:0]const u8 = null, title_text: ?[:0]const u8 = null,
/// The timer used to delay title updates in order to prevent flickering.
update_title_timer: ?c.guint = null,
/// The core surface backing this surface /// The core surface backing this surface
core_surface: CoreSurface, core_surface: CoreSurface,
@ -894,7 +897,23 @@ pub fn setTitle(self: *Surface, slice: [:0]const u8) !void {
if (self.title_text) |old| alloc.free(old); if (self.title_text) |old| alloc.free(old);
self.title_text = copy; self.title_text = copy;
// delay the title update to prevent flickering
if (self.update_title_timer) |timer| {
if (c.g_source_remove(timer) == c.FALSE) {
log.warn("unable to remove update title timer", .{});
}
self.update_title_timer = null;
}
self.update_title_timer = c.g_timeout_add(75, updateTitleTimerExpired, self);
}
fn updateTitleTimerExpired(ctx: ?*anyopaque) callconv(.C) c.gboolean {
const self: *Surface = @ptrCast(@alignCast(ctx));
self.updateTitleLabels(); self.updateTitleLabels();
self.update_title_timer = null;
return c.FALSE;
} }
pub fn getTitle(self: *Surface) ?[:0]const u8 { pub fn getTitle(self: *Surface) ?[:0]const u8 {