diff --git a/src/apprt/gtk/App.zig b/src/apprt/gtk/App.zig index d746f2d8a..db7261714 100644 --- a/src/apprt/gtk/App.zig +++ b/src/apprt/gtk/App.zig @@ -69,20 +69,6 @@ pub fn init(core_app: *CoreApp, opts: Options) !App { } } - // Initialize libadwaita - if (build_options.libadwaita and config.@"gtk-adwaita") { - log.debug("initializing libadwaita", .{}); - c.adw_init(); - c.adw_style_manager_set_color_scheme( - c.adw_style_manager_get_default(), - switch (config.@"window-theme") { - .system => c.ADW_COLOR_SCHEME_PREFER_LIGHT, - .dark => c.ADW_COLOR_SCHEME_FORCE_DARK, - .light => c.ADW_COLOR_SCHEME_FORCE_LIGHT, - }, - ); - } - // The "none" cursor is used for hiding the cursor const cursor_none = c.gdk_cursor_new_from_name("none", null); errdefer if (cursor_none) |cursor| c.g_object_unref(cursor); @@ -121,10 +107,35 @@ pub fn init(core_app: *CoreApp, opts: Options) !App { app_id, single_instance, }); - const app = @as(?*c.GtkApplication, @ptrCast(c.gtk_application_new( - app_id.ptr, - app_flags, - ))) orelse return error.GtkInitFailed; + + const app: *c.GtkApplication = app: { + if (build_options.libadwaita and config.@"gtk-adwaita") { + const adw_app = @as(?*c.AdwApplication, @ptrCast(c.adw_application_new( + app_id.ptr, + app_flags, + ))) orelse return error.GtkInitFailed; + + const style_manager = c.adw_application_get_style_manager(adw_app); + c.adw_style_manager_set_color_scheme( + style_manager, + switch (config.@"window-theme") { + .system => c.ADW_COLOR_SCHEME_PREFER_LIGHT, + .dark => c.ADW_COLOR_SCHEME_FORCE_DARK, + .light => c.ADW_COLOR_SCHEME_FORCE_LIGHT, + }, + ); + + break :app @ptrCast(adw_app); + } else { + const app = @as(?*c.GtkApplication, @ptrCast(c.gtk_application_new( + app_id.ptr, + app_flags, + ))) orelse return error.GtkInitFailed; + + break :app app; + } + }; + errdefer c.g_object_unref(app); _ = c.g_signal_connect_data( app,