Jelajahi Sumber

focus fixes

milan jurkulák 2 tahun lalu
induk
melakukan
3fb6255368

+ 3 - 2
src/main/kotlin/eu/mjdev/desktop/windows/ChromeWindow.kt

@@ -111,13 +111,14 @@ fun ChromeWindow(
 ) {
     val animState = rememberAnimState(visible)
     val wnState = rememberWnState()
-    windowState.onOpened.add({
+    windowState.onOpened.add {
+        windowState.requestFocus()
         windowState.updatePositionAndSize()
         if (visible) {
             animState.value.targetState = true
         }
         onOpened()
-    })
+    }
     windowState.onClosed.add(onClosed)
     windowState.onFocusChange.add(onFocusChange)
     WindowEx(

+ 6 - 2
src/main/kotlin/eu/mjdev/desktop/windows/ChromeWindowState.kt

@@ -21,11 +21,11 @@ class ChromeWindowState(
     var onOpened: MutableList<() -> Unit> = mutableStateListOf()
     var onClosed: MutableList<() -> Unit> = mutableStateListOf()
 
-    val focusHelper: WindowFocusHelper = WindowFocusHelper({ _, focus ->
+    val focusHelper: WindowFocusHelper = WindowFocusHelper { _, focus ->
         this@ChromeWindowState.onFocusChange.forEach {
             it.invoke(focus)
         }
-    })
+    }
 
     val stateHelper: WindowStateHelper = WindowStateHelper({
         setSize(size)
@@ -57,6 +57,10 @@ class ChromeWindowState(
     override var placement: WindowPlacement = placement
     override var isMinimized: Boolean = false
 
+    fun requestFocus() {
+        stateHelper.requestFocus()
+    }
+
     fun updatePositionAndSize() {
         stateHelper.setSize(size)
         stateHelper.setPosition(position)

+ 4 - 1
src/main/kotlin/eu/mjdev/desktop/windows/WindowFocusHelper.kt

@@ -2,10 +2,11 @@ package eu.mjdev.desktop.windows
 
 import androidx.compose.ui.awt.ComposeWindow
 import java.awt.event.WindowEvent
-import java.awt.event.WindowEvent.WINDOW_CLOSED
+import java.awt.event.WindowEvent.*
 import java.awt.event.WindowFocusListener
 import java.awt.event.WindowStateListener
 
+@Suppress("MemberVisibilityCanBePrivate")
 class WindowFocusHelper(
     val onFocusChange: WindowFocusHelper.(window: ComposeWindow?, focus: Boolean) -> Unit
 ) : WindowFocusListener, WindowStateListener {
@@ -35,6 +36,8 @@ class WindowFocusHelper(
         when (e?.newState) {
             null -> Unit
             WINDOW_CLOSED -> window?.let { unregister(it) }
+            WINDOW_ACTIVATED -> onFocusChange(window, true)
+            WINDOW_DEACTIVATED -> onFocusChange(window, false)
         }
     }
 }

+ 5 - 0
src/main/kotlin/eu/mjdev/desktop/windows/WindowStateHelper.kt

@@ -11,6 +11,7 @@ import java.awt.event.WindowEvent.WINDOW_CLOSED
 import java.awt.event.WindowEvent.WINDOW_OPENED
 import java.awt.event.WindowStateListener
 
+@Suppress("MemberVisibilityCanBePrivate")
 class WindowStateHelper(
     val onOpened: WindowStateHelper.(window: ComposeWindow?) -> Unit = {},
     val onClosed: WindowStateHelper.(window: ComposeWindow?) -> Unit = {},
@@ -80,4 +81,8 @@ class WindowStateHelper(
             }
         }
     }
+
+    fun requestFocus() {
+        window?.requestFocus()
+    }
 }