diff --git a/Sources/Adwaita/AnyView++.swift b/Sources/Adwaita/AnyView++.swift index 67eb3f2..f83e1c7 100644 --- a/Sources/Adwaita/AnyView++.swift +++ b/Sources/Adwaita/AnyView++.swift @@ -339,19 +339,24 @@ extension AnyView { /// - Parameter getString: Get the CSS. /// - Returns: A view. public func css(_ getString: @escaping () -> String) -> AnyView { - inspectOnAppear { _ in - let provider = gtk_css_provider_new() - gtk_css_provider_load_from_string( - provider, - getString() - ) - let display = gdk_display_get_default() - gtk_style_context_add_provider_for_display( - display, - provider?.opaque(), - .init(GTK_STYLE_PROVIDER_PRIORITY_APPLICATION) - ) - g_object_unref(provider) + inspect { storage, updateProperties in + let cssID = "internal-css" + let previous = storage.fields[cssID] as? String + let string = getString() + if updateProperties, string != previous { + let provider = gtk_css_provider_new() + gtk_css_provider_load_from_string( + provider, + string + ) + let display = gdk_display_get_default() + gtk_style_context_add_provider_for_display( + display, + provider?.opaque(), + .init(GTK_STYLE_PROVIDER_PRIORITY_APPLICATION) + ) + g_object_unref(provider) + } } } diff --git a/Sources/Demo/DiceDemo.swift b/Sources/Demo/DiceDemo.swift index 66926bd..61b0397 100644 --- a/Sources/Demo/DiceDemo.swift +++ b/Sources/Demo/DiceDemo.swift @@ -32,7 +32,8 @@ struct DiceDemo: View { .css { """ .dice-button { - background-color: @green_5; + background-color: \(number == nil ? "@blue_5" : "@green_5"); + transition: 0.2s; } """ }