diff --git a/platform/platform-impl/api-dump-unreviewed.txt b/platform/platform-impl/api-dump-unreviewed.txt
index ea6230c43b25..0176f7a6d01c 100644
--- a/platform/platform-impl/api-dump-unreviewed.txt
+++ b/platform/platform-impl/api-dump-unreviewed.txt
@@ -14876,10 +14876,6 @@ c:com.intellij.ui.TreeTableSpeedSearch
- p:isSpeedSearchEnabled():Z
- p:selectElement(java.lang.Object,java.lang.String):V
- setCanExpand(Z):V
-f:com.intellij.ui.WinFocusStealer
-- java.awt.event.AWTEventListener
-- eventDispatched(java.awt.AWTEvent):V
-- s:setFocusStealingEnabled(Z):V
c:com.intellij.ui.WindowMoveListener
- java.awt.event.MouseAdapter
- javax.swing.event.MouseInputListener
diff --git a/platform/platform-impl/bootstrap/intellij.platform.ide.bootstrap.iml b/platform/platform-impl/bootstrap/intellij.platform.ide.bootstrap.iml
index 2a631b4fd19f..e7196b9197bd 100644
--- a/platform/platform-impl/bootstrap/intellij.platform.ide.bootstrap.iml
+++ b/platform/platform-impl/bootstrap/intellij.platform.ide.bootstrap.iml
@@ -26,6 +26,7 @@
+
diff --git a/platform/platform-impl/bootstrap/src/com/intellij/platform/ide/bootstrap/DirectoryLock.java b/platform/platform-impl/bootstrap/src/com/intellij/platform/ide/bootstrap/DirectoryLock.java
index 5a8d0ef927e0..04f19cce0eda 100644
--- a/platform/platform-impl/bootstrap/src/com/intellij/platform/ide/bootstrap/DirectoryLock.java
+++ b/platform/platform-impl/bootstrap/src/com/intellij/platform/ide/bootstrap/DirectoryLock.java
@@ -13,8 +13,8 @@ import com.intellij.openapi.diagnostic.LogLevel;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.SystemInfoRt;
import com.intellij.openapi.util.io.NioFiles;
+import com.intellij.ui.User32Ex;
import com.intellij.util.Suppressions;
-import com.intellij.util.User32Ex;
import com.sun.jna.platform.win32.WinDef;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
@@ -39,7 +39,7 @@ import static java.util.Objects.requireNonNullElseGet;
/**
* The class ensures that only one IDE instance is running on the given pair of configuration/cache directories
- * and participates in the CLI by passing arguments and relaying back exit codes and error messages.
+ * and participates in the CLI bypassing arguments and relaying back exit codes and error messages.
*/
final class DirectoryLock {
static final class CannotActivateException extends Exception {
diff --git a/platform/platform-impl/src/com/intellij/accessibility/AccessibilityUtils.kt b/platform/platform-impl/src/com/intellij/accessibility/AccessibilityUtils.kt
index 89973c25eb01..11e18a28ae72 100644
--- a/platform/platform-impl/src/com/intellij/accessibility/AccessibilityUtils.kt
+++ b/platform/platform-impl/src/com/intellij/accessibility/AccessibilityUtils.kt
@@ -11,10 +11,10 @@ import com.intellij.openapi.components.serviceAsync
import com.intellij.openapi.ui.MessageDialogBuilder
import com.intellij.openapi.ui.Messages
import com.intellij.openapi.util.SystemInfoRt
+import com.intellij.ui.User32Ex
import com.intellij.ui.mac.foundation.Foundation
import com.intellij.ui.mac.foundation.Foundation.NSAutoreleasePool
import com.intellij.ui.mac.foundation.ID
-import com.intellij.util.User32Ex
import com.sun.jna.platform.win32.WinDef
import kotlinx.coroutines.withContext
import org.jetbrains.annotations.ApiStatus
diff --git a/platform/platform-impl/src/com/intellij/execution/process/window/to/foreground/WinBringProcessWindowToForegroundSupport.kt b/platform/platform-impl/src/com/intellij/execution/process/window/to/foreground/WinBringProcessWindowToForegroundSupport.kt
index dc3420e56571..6acc0ca12d4e 100644
--- a/platform/platform-impl/src/com/intellij/execution/process/window/to/foreground/WinBringProcessWindowToForegroundSupport.kt
+++ b/platform/platform-impl/src/com/intellij/execution/process/window/to/foreground/WinBringProcessWindowToForegroundSupport.kt
@@ -3,9 +3,8 @@ package com.intellij.execution.process.window.to.foreground
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.UserDataHolder
-import com.intellij.openapi.util.getOrCreateUserData
import com.intellij.openapi.util.getOrCreateUserDataUnsafe
-import com.intellij.util.User32Ex
+import com.intellij.ui.User32Ex
import com.intellij.util.findMainWindow
import com.intellij.util.findWindowsWithText
import com.jetbrains.rd.util.getLogger
diff --git a/platform/platform-impl/src/com/intellij/ui/Win7TaskBar.java b/platform/platform-impl/src/com/intellij/ui/Win7TaskBar.java
index 4ff7d3dfff7c..a054b8828abc 100644
--- a/platform/platform-impl/src/com/intellij/ui/Win7TaskBar.java
+++ b/platform/platform-impl/src/com/intellij/ui/Win7TaskBar.java
@@ -3,7 +3,6 @@ package com.intellij.ui;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.util.User32Ex;
import com.intellij.util.ui.EDT;
import com.sun.jna.Function;
import com.sun.jna.Memory;
diff --git a/platform/platform-impl/src/com/intellij/util/User32Utils.kt b/platform/platform-impl/src/com/intellij/util/User32Utils.kt
index 459c2eef9de3..2d7bd0c4ad63 100644
--- a/platform/platform-impl/src/com/intellij/util/User32Utils.kt
+++ b/platform/platform-impl/src/com/intellij/util/User32Utils.kt
@@ -1,6 +1,7 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.util
+import com.intellij.ui.User32Ex
import com.jetbrains.rd.util.error
import com.jetbrains.rd.util.getLogger
import com.jetbrains.rd.util.trace
diff --git a/platform/platform-impl/ui/intellij.platform.ide.ui.iml b/platform/platform-impl/ui/intellij.platform.ide.ui.iml
index ca463359d908..76cc1f61ebae 100644
--- a/platform/platform-impl/ui/intellij.platform.ide.ui.iml
+++ b/platform/platform-impl/ui/intellij.platform.ide.ui.iml
@@ -12,5 +12,6 @@
+
\ No newline at end of file
diff --git a/platform/platform-impl/src/com/intellij/util/User32Ex.java b/platform/platform-impl/ui/src/com/intellij/ui/User32Ex.java
similarity index 93%
rename from platform/platform-impl/src/com/intellij/util/User32Ex.java
rename to platform/platform-impl/ui/src/com/intellij/ui/User32Ex.java
index 0973a146e6a4..2bec18d8992f 100644
--- a/platform/platform-impl/src/com/intellij/util/User32Ex.java
+++ b/platform/platform-impl/ui/src/com/intellij/ui/User32Ex.java
@@ -1,5 +1,5 @@
-// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package com.intellij.util;
+// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.ui;
import com.sun.jna.Callback;
import com.sun.jna.Memory;
@@ -29,10 +29,15 @@ public interface User32Ex extends StdCallLibrary {
int Flags);
boolean FlashWindow(WinDef.HWND hwnd, boolean bInvert);
+
boolean SystemParametersInfo(WinDef.UINT uiAction, WinDef.UINT uiParam, WinDef.BOOLByReference pvParam, WinDef.UINT fWinIni);
+
boolean SystemParametersInfo(WinDef.UINT uiAction, WinDef.UINT uiParam, WinDef.UINTByReference pvParam, WinDef.UINT fWinIni);
+
boolean SystemParametersInfo(WinDef.UINT uiAction, WinDef.UINT uiParam, WinDef.UINT pvParam, WinDef.UINT fWinIni);
+
boolean AllowSetForegroundWindow(WinDef.DWORD pid);
+
boolean SetForegroundWindow(WinDef.HWND hwnd);
@ApiStatus.Internal
diff --git a/platform/platform-impl/src/com/intellij/ui/WinFocusStealer.java b/platform/platform-impl/ui/src/com/intellij/ui/WinFocusStealer.java
similarity index 93%
rename from platform/platform-impl/src/com/intellij/ui/WinFocusStealer.java
rename to platform/platform-impl/ui/src/com/intellij/ui/WinFocusStealer.java
index abe59a375819..336c197fd8ae 100644
--- a/platform/platform-impl/src/com/intellij/ui/WinFocusStealer.java
+++ b/platform/platform-impl/ui/src/com/intellij/ui/WinFocusStealer.java
@@ -1,14 +1,14 @@
-// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ui;
import com.intellij.jna.JnaLoader;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.util.User32Ex;
import com.intellij.util.ui.UIUtil;
import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinReg;
+import org.jetbrains.annotations.ApiStatus;
import javax.swing.*;
import java.awt.*;
@@ -16,11 +16,12 @@ import java.awt.event.AWTEventListener;
/**
* This class allows to disable Windows focus stealing prevention mechanism. The changes have a system-wide effect,
- * i.e. focus stealing can only be enabled for all applications in the system, not just for IDE process.
+ * i.e., focus stealing can only be enabled for all applications in the system, not just for an IDE process.
*
* The desired effect is achieved by setting system-wide 'foreground lock timeout' value to zero. This is a duration that should pass after
* user input in one window before another window is allowed to steal focus.
*/
+@ApiStatus.Internal
public final class WinFocusStealer implements AWTEventListener {
private static final Logger LOG = Logger.getInstance(WinFocusStealer.class);
private static final int DEFAULT_TIMEOUT_MS = 200000; // default registry value on Windows 10 as of time this code is written
@@ -30,7 +31,7 @@ public final class WinFocusStealer implements AWTEventListener {
private WinFocusStealer() {
if (JnaLoader.isLoaded()) {
myEnabled = true;
- doUpdate(false); // make sure to restore the default state if IDE crashed after enabling focus stealing
+ doUpdate(false); // make sure to restore the default state if the IDE crashed after enabling focus stealing
SwingUtilities.invokeLater(() -> Toolkit.getDefaultToolkit().addAWTEventListener(this,
AWTEvent.KEY_EVENT_MASK |
AWTEvent.MOUSE_EVENT_MASK |
@@ -46,7 +47,7 @@ public final class WinFocusStealer implements AWTEventListener {
/**
* Enables or disables focus stealing globally in the system. This can only come to effect if the IDE window is currently active.
- * If this is not the case, at the time this method is invoked, the actual change will be performed when next user input event is
+ * If this is not the case, at the time this method is invoked, the actual change will be performed when the next user input event is
* received.
*
* With focus stealing enabled, {@link AppIcon#requestFocus(Window)} method should bring the target IDE window into foreground, even if
diff --git a/platform/remoteDev-util/intellij.remoteDev.util.iml b/platform/remoteDev-util/intellij.remoteDev.util.iml
index 17fa25f76422..2abbbc07b7ae 100644
--- a/platform/remoteDev-util/intellij.remoteDev.util.iml
+++ b/platform/remoteDev-util/intellij.remoteDev.util.iml
@@ -65,6 +65,7 @@
+
diff --git a/platform/xdebugger-impl/intellij.platform.debugger.impl.iml b/platform/xdebugger-impl/intellij.platform.debugger.impl.iml
index 3deaeeab140a..1fed0318f249 100644
--- a/platform/xdebugger-impl/intellij.platform.debugger.impl.iml
+++ b/platform/xdebugger-impl/intellij.platform.debugger.impl.iml
@@ -55,6 +55,7 @@
+