[recent files] IJPL-206722 Introduce a registry key that controls debounce timeout for typing processing in the recent files frontend model

(cherry picked from commit 6c7b7823574c3babf1e98f6932f6c209f24b67b2)

Review: IJ-CR-176981

GitOrigin-RevId: 217fbc54b795d2378aafebf9e3c41c9b534ce5b8
This commit is contained in:
Nikita Katkov
2025-09-25 15:17:22 +02:00
committed by intellij-monorepo-bot
parent d6c8730eb8
commit 4c6edd442e
2 changed files with 8 additions and 1 deletions

View File

@@ -15,6 +15,9 @@
<extensions defaultExtensionNs="com.intellij">
<registryKey key="switcher.use.fallback.in.monolith" defaultValue="false"
description="Use old Switcher/Recent Files implementation in the monolith mode that is not remove dev-native"/>
<registryKey key="switcher.typing.debounce.interval.ms" defaultValue="3000"
description="A time period to skip typing events before requesting a switcher/recent files model update, measured in millis"/>
<postStartupActivity implementation="com.intellij.platform.recentFiles.frontend.model.RecentFileModelSynchronizer"/>
</extensions>
<actions>

View File

@@ -6,6 +6,7 @@ import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.actionSystem.ex.AnActionListener
import com.intellij.openapi.diagnostic.thisLogger
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.isFile
import com.intellij.platform.recentFiles.frontend.model.FrontendRecentFilesModel
@@ -17,6 +18,7 @@ import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.launch
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.seconds
@OptIn(FlowPreview::class)
@@ -26,7 +28,9 @@ private class RecentFilesEditorTypingListener : AnActionListener {
init {
RecentFilesApplicationCoroutineScopeProvider.getInstance().coroutineScope.launch {
recentlyChangedFiles.debounce(1.seconds)
val debounceInterval = Registry.intValue("switcher.typing.debounce.interval.ms", 3000)
LOG.debug("RecentFilesEditorTypingListener: debounceInterval=$debounceInterval")
recentlyChangedFiles.debounce(debounceInterval.milliseconds)
.collect { (file, project) ->
LOG.debug("Adding file to the frontend recent files model after typing: ${file.name}")
FrontendRecentFilesModel.getInstanceAsync(project).applyFrontendChanges(RecentFileKind.RECENTLY_EDITED, listOf(file), FileChangeKind.ADDED)