Unverified Commit 4fbabeb5 authored by Roman Sedaikin's avatar Roman Sedaikin Committed by GitHub

Fix fullscreen mode on macos. (#385)

* Fix fullscreen mode on macos.
- fixed case where fullscreen mode is set before the window becomes visible and nothing happens after it becomes visible
see: https://github.com/JetBrains/compose-jb/issues/1134
parent 9454f4d9
......@@ -2,8 +2,40 @@ package org.jetbrains.skiko
import java.awt.Component
import java.awt.Window
import java.awt.event.ComponentAdapter
import java.awt.event.ComponentEvent
import javax.swing.SwingUtilities
internal open class FullscreenAdapter(
val backedLayer: HardwareLayer
): ComponentAdapter() {
private var _isFullscreenDispatched = false
private var _isFullscreen: Boolean = false
var fullscreen: Boolean
get() = _isFullscreen
set(value) {
_isFullscreen = value
val window = SwingUtilities.getRoot(backedLayer)
if ( window == null || !window.isVisible) {
_isFullscreenDispatched = value
} else {
backedLayer.fullscreen = value
}
}
override fun componentShown(e: ComponentEvent) {
backedLayer.fullscreen = _isFullscreenDispatched
}
override fun componentHidden(e: ComponentEvent) {
_isFullscreenDispatched = _isFullscreen
}
override fun componentResized(e: ComponentEvent) {
_isFullscreen = backedLayer.fullscreen
}
}
internal interface PlatformOperations {
fun isFullscreen(component: Component): Boolean
fun setFullscreen(component: Component, value: Boolean)
......@@ -14,7 +46,8 @@ internal interface PlatformOperations {
internal val platformOperations: PlatformOperations by lazy {
when (hostOs) {
OS.MacOS -> object: PlatformOperations {
OS.MacOS -> {
object: PlatformOperations {
override fun isFullscreen(component: Component): Boolean {
return osxIsFullscreenNative(component)
}
......@@ -34,6 +67,7 @@ internal val platformOperations: PlatformOperations by lazy {
override fun orderEmojiAndSymbolsPopup() {
osxOrderEmojiAndSymbolsPopup()
}
}
}
OS.Windows -> {
object: PlatformOperations {
......
......@@ -8,10 +8,12 @@ import java.awt.Component
import java.awt.Graphics
import java.awt.event.*
import java.awt.im.InputMethodRequests
import java.awt.Window
import java.util.concurrent.CancellationException
import javax.accessibility.Accessible
import javax.swing.JComponent
import javax.swing.JPanel
import javax.swing.SwingUtilities
import javax.swing.SwingUtilities.isEventDispatchThread
import javax.swing.UIManager
......@@ -92,13 +94,19 @@ actual open class SkiaLayer internal constructor(
}
}
private var fullscreenAdapter = FullscreenAdapter(backedLayer)
override fun removeNotify() {
val window = SwingUtilities.getRoot(this) as Window
window.removeComponentListener(fullscreenAdapter)
dispose()
super.removeNotify()
}
override fun addNotify() {
super.addNotify()
val window = SwingUtilities.getRoot(this) as Window
window.addComponentListener(fullscreenAdapter)
backedLayer.defineContentScale()
checkShowing()
init(isInited)
......@@ -135,9 +143,9 @@ actual open class SkiaLayer internal constructor(
get() = backedLayer.windowHandle
actual var fullscreen: Boolean
get() = backedLayer.fullscreen
get() = fullscreenAdapter.fullscreen
set(value) {
backedLayer.fullscreen = value
fullscreenAdapter.fullscreen = value
}
actual var skikoView: SkikoView? = null
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment