rhx / SwiftGtk

A Swift wrapper around gtk-3.x and gtk-4.x that is largely auto-generated from gobject-introspection
https://rhx.github.io/SwiftGtk/
BSD 2-Clause "Simplified" License
317 stars 26 forks source link

Build for linux does not copy resources folder content #37

Open sh1l0n opened 3 years ago

sh1l0n commented 3 years ago

In the build.sh script the app-bundle is generated only for MacOSX devices but if we compile from Linux we also want the resources. So maybe we need to add an else condition in that script. The modified build.sh could be something as the next

gtk=`echo .build/checkouts/SwiftGtk*/Sources/Gtk/Gtk-3.0.swift`
[ -e $gtk ] || ./generate-wrapper.sh
swift build $CCFLAGS $LINKFLAGS "$@"
if [ `uname` = "Darwin" ]; then
    . ./app-bundle.sh
else
    cp -r $RESOURCES_DIR/* $BUILD_BIN/  
fi

I found the problem while trying to load css file from resources throught the next function:

func readCssFile(forResource: String) {
    if let fileURL = Bundle.main.url(forResource: forResource, withExtension: "css") { 
        if let fileContents = try? String(contentsOf: fileURL) {
            if let screen = ScreenRef.getDefault(), let css = try? CSSProvider(from: fileContents) {
                screen.add(provider: css, priority: STYLE_PROVIDER_PRIORITY_APPLICATION)
            }
        }
    }
}
rhx commented 3 years ago

This is probably something that the app-bundle.sh script (or an install script) should be doing. At the moment, the app-bundle script is macOS only. The question is what would be a good app structure on Linux that is somewhat idiomatic for different desktop environments (such as Gnome, KDE, etc.)?