IDEA-326402 Add recentlyActive variable in JBTabsImpl for relayout tads after delay, make delay 2s

GitOrigin-RevId: 16f0bf1c8c23b7e6934420f12f1011d4581e8be4
This commit is contained in:
Vera Petrenkova
2024-03-28 15:27:03 +00:00
committed by intellij-monorepo-bot
parent f72e57b099
commit 2ba6cd13ff
3 changed files with 23 additions and 15 deletions
@@ -91,7 +91,7 @@ private const val LAYOUT_DONE: @NonNls String = "Layout.done"
@DirtyUI
open class JBTabsImpl(
private var project: Project?,
parentDisposable: Disposable,
private val parentDisposable: Disposable,
) : JComponent(), JBTabsEx, PropertyChangeListener, TimerListener, DataProvider,
PopupMenuListener, JBTabsPresentation, Queryable, UISettingsListener,
QuickActionProvider, MorePopupAware, Accessible {
@@ -154,7 +154,8 @@ open class JBTabsImpl(
}
}
private final val RELAYOUT_DELAY = 5000
private val RELAYOUT_DELAY = 2000
private val relayoutAlarm = Alarm(parentDisposable)
private val visibleInfos = ArrayList<TabInfo>()
private val infoToPage = HashMap<TabInfo, AccessibleTabPage>()
@@ -208,6 +209,8 @@ open class JBTabsImpl(
private var hideTabs = false
private var isRequestFocusOnLastFocusedComponent = false
private var listenerAdded = false
var isRecentlyActive: Boolean = false
private set
@JvmField
internal val attractions: MutableSet<TabInfo> = HashSet()
@@ -395,11 +398,21 @@ open class JBTabsImpl(
scrollBarChangeListener = ChangeListener { updateTabsOffsetFromScrollBar() }
}
private fun setRecentlyActive() {
relayoutAlarm.cancelAllRequests()
isRecentlyActive = true
relayoutAlarm.addRequest({
isRecentlyActive = false
relayout(false, false)
}, RELAYOUT_DELAY)
}
fun isScrollBarAdjusting(): Boolean = scrollBar.valueIsAdjusting
private fun addMouseMotionAwtListener(parentDisposable: Disposable) {
StartupUiUtil.addAwtListener(object : AWTEventListener {
val afterScroll = Alarm(parentDisposable)
override fun eventDispatched(event: AWTEvent) {
val tabRectangle = lastLayoutPass?.headerRectangle ?: return
@@ -417,13 +430,9 @@ open class JBTabsImpl(
}
isMouseInsideTabsArea = inside
afterScroll.cancelAllRequests()
relayoutAlarm.cancelAllRequests()
if (!inside) {
afterScroll.addRequest({
if (!isMouseInsideTabsArea) {
relayout(false, false)
}
}, RELAYOUT_DELAY)
setRecentlyActive()
}
}
}, AWTEvent.MOUSE_MOTION_EVENT_MASK, parentDisposable)
@@ -543,10 +552,8 @@ open class JBTabsImpl(
fun unHover(label: TabLabel) {
if (tabLabelAtMouse === label) {
tabLabelAtMouse = null
Alarm().addRequest({
label.revalidate()
label.repaint()
}, RELAYOUT_DELAY)
label.revalidate()
label.repaint()
}
}
@@ -1841,6 +1848,7 @@ open class JBTabsImpl(
}
private fun updateTabsOffsetFromScrollBar() {
if (!isScrollBarAdjusting()) setRecentlyActive()
val currentUnitsOffset = effectiveLayout!!.scrollOffset
val updatedOffset = scrollBarModel.value
effectiveLayout!!.scroll(updatedOffset - currentUnitsOffset)
@@ -11,7 +11,7 @@ class ScrollableMultiRowLayout(tabs: JBTabsImpl,
private var scrollOffset: Int = 0
override fun layoutTable(visibleInfos: List<TabInfo>): LayoutPassInfo {
if (!tabs.isMouseInsideTabsArea && !tabs.isHideTabs && !tabs.isScrollBarAdjusting()) {
if (!tabs.isMouseInsideTabsArea && !tabs.isHideTabs && !tabs.isScrollBarAdjusting() && !tabs.isRecentlyActive) {
scrollToSelectedTab()
}
return super.layoutTable(visibleInfos)
@@ -62,7 +62,7 @@ public final class ScrollableSingleRowLayout extends SingleRowLayout {
}
private void doScrollToSelectedTab(SingleRowPassInfo passInfo) {
if (myTabs.isMouseInsideTabsArea() || myTabs.isScrollBarAdjusting()) {
if (myTabs.isMouseInsideTabsArea() || myTabs.isScrollBarAdjusting() || myTabs.isRecentlyActive()) {
return;
}
int offset = -myScrollOffset;