FancyModLoader icon indicating copy to clipboard operation
FancyModLoader copied to clipboard

Wayland early display window

Open wired-tomato opened this issue 1 year ago • 12 comments

Wayland early display window implementation, requested in #98

wired-tomato avatar Jul 22 '24 20:07 wired-tomato

  • [ ] Publish PR to GitHub Packages

Just to clarify: this does not actually work unless you manually update GLFW To 3.4?

shartte avatar Jul 22 '24 21:07 shartte

the window will load up with wayland on GLFW 3.3+ (default for 1.20.1+), the icon won't load unless GLFW version 3.4+ (default for mc 1.21) is in use, everything else should work fine

wired-tomato avatar Jul 22 '24 21:07 wired-tomato

notably there is a GLFW error printed to the console 65548: Wayland: The platform does not support setting the cursor position when opening inventories & some other screens, however it does not cause any crashes or actual issues and can be solved with a mixin as demonstrated in my fabric wayland compat mod WayGL

wired-tomato avatar Jul 22 '24 22:07 wired-tomato

I am against merging this like this, since it feels extremely convoluted to set a window icon using an externally written file & spawned process.

There's apparently a Wayland proposal to be sane about setting window icons. Once that has been merged, I'd hope GLFW will just support this natively: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/269

Regardless of the window icon, setting the app_id is fine.

The rest of it, I do not want a separate window provider for this. It feels unnecessary and just complicates the code.

glfwWindowHint(GLFW_FOCUS_ON_SHOW, GLFW_FALSE);

Why is this actually necessary for Wayland support?

p.s.: Anything that is actually necessary for basic support of Wayland seems to just require a few lines in the current earlydisplay provider, and we can do that. Enabling wayland, for example, could simply be done via CLI args.

shartte avatar Jul 22 '24 22:07 shartte

I will try to test this on WSL2 l. Wish me luck.

shartte avatar Jul 23 '24 12:07 shartte

I think this is way easier to merge now. I'll test it out as soon as I can.

shartte avatar Jul 25 '24 17:07 shartte

Soooo.. How's the testing going :3

theendercore avatar Aug 29 '24 22:08 theendercore

glfwWindowHint(GLFW_FOCUS_ON_SHOW, GLFW_FALSE);

Why is this actually necessary for Wayland support?

After some testing, it seems that currently KDE Plasma incorrectly reports the Window as "not responding" on initial focus. After alt tabbing away and back onto the window this goes away. I assume that's what this hint is for.

DerCommander323 avatar Nov 12 '24 16:11 DerCommander323

I had initially removed the hint after testing for that issue on my own system, I've added it back to see if it fixes the issue.

wired-tomato avatar Nov 12 '24 22:11 wired-tomato

@wired-tomato, this PR introduces breaking changes. Fortunately, this project is currently accepting breaking changes, but if they are not intentional, please revert them. Last checked commit: 38f3ea7bbe91357e7c7f2779abd6e6201c2f879a.

Compatibility checks

loader (:loader)

  • cpw/mods/modlauncher/api/ITransformer
    • ❗ API class no longer exists
  • cpw/mods/util/LambdaExceptionUtils
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformer$Target
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformerVotingContext$ClassPredicate
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/serviceapi/ITransformerDiscoveryService
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/ModuleLayerHandler
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/impl/JarContentsImpl
    • ❗ API class no longer exists
  • cpw/mods/util/LambdaExceptionUtils$Consumer_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/TargetType
    • ❗ API class no longer exists
  • cpw/mods/util/LambdaExceptionUtils$Runnable_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformerVotingContext$FieldPredicate
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/IModuleLayerManager$Layer
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/ArgumentHandler
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/log/ExtraDataTextRenderer
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/serviceapi/ILaunchPluginService$ITransformerLoader
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/LambdaExceptionUtils$Function_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformerActivity
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/serviceapi/ILaunchPluginService$ComputeFlags
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/JarMetadata
    • ❗ API class no longer exists
  • cpw/mods/niofs/union/UnionPathFilter
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/LambdaExceptionUtils$BiConsumer_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/SecureJar$Status
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/DefaultLaunchHandlerService
    • ❗ API class no longer exists
  • cpw/mods/cl/JarModuleFinder
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformerVotingContext
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/TypesafeMap$Key
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/IEnvironment
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/serviceapi/ILaunchPluginService
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/SecureJar$ModuleDataProvider
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/TypesafeMap$KeyBuilder
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/VoteDeadlockException
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/LambdaExceptionUtils$Runnable_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/TypesafeMap
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/InvalidLauncherSetupException
    • ❗ API class no longer exists
  • cpw/mods/util/LambdaExceptionUtils$Function_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/niofs/union/UnionPath
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/JarContents
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/BootstrapLaunchConsumer
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/LambdaExceptionUtils$Consumer_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/log/MLClassLoaderContextSelector
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/serviceapi/ILaunchPluginService$Phase
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformerActivity$Type
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/VoteRejectedException
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformerVotingContext$MethodPredicate
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/EnumerationHelper
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/impl/JarSigningData
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/impl/SecureJarVerifier
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformerAuditTrail
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/NamedPath
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/IncompatibleEnvironmentException
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/TransformerHolder
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/util/ServiceLoaderUtils
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/LaunchPluginHandler
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformerVotingContext$InsnPredicate
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/impl/Jar
    • ❗ API class no longer exists
  • cpw/mods/cl/ModularURLHandler$IURLProvider
    • ❗ API class no longer exists
  • cpw/mods/cl/ProtectionDomainHelper
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/TransformList
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ServiceRunner
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/Launcher
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ILaunchHandlerService
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/ClassTransformer
    • ❗ API class no longer exists
  • cpw/mods/cl/ModularURLHandler
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/IEnvironment$Keys
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/SecureJar
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/LambdaExceptionUtils
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformationService
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/SecureJar$Provider
    • ❗ API class no longer exists
  • cpw/mods/util/Lazy
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/LambdaExceptionUtils$Supplier_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/cl/ModuleClassLoader
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/TransformerAuditTrail
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/TransformingClassLoader
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/TransformerVoteResult
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/JarContentsBuilder
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/PredicateVisitor
    • ❗ API class no longer exists
  • cpw/mods/niofs/union/UnionFileSystem
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/LazyJarMetadata
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformationService$OptionResult
    • ❗ API class no longer exists
  • cpw/mods/cl/UnionURLStreamHandler
    • ❗ API class no longer exists
  • cpw/mods/util/LambdaExceptionUtils$BiConsumer_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/impl/ModuleJarMetadata
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/log/TransformingThrowablePatternConverter
    • ❗ API class no longer exists
  • cpw/mods/niofs/union/UnionFileSystemProvider
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/IModuleLayerManager
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/TestingLaunchHandlerService
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/api/ITransformationService$Resource
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/Environment
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/TransformationServiceDecorator
    • ❗ API class no longer exists
  • cpw/mods/util/LambdaExceptionUtils$Supplier_WithExceptions
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/VirtualJar
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/TransformTargetLabel
    • ❗ API class no longer exists
  • cpw/mods/jarhandling/impl/SimpleJarMetadata
    • ❗ API class no longer exists
  • cpw/mods/modlauncher/TransformStore
    • ❗ API class no longer exists

@wired-tomato, this pull request has conflicts, please resolve them for this PR to move forward.