mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-326402 Add recentlyActive variable in JBTabsImpl for relayout tads after delay, make delay 2s
GitOrigin-RevId: 16f0bf1c8c23b7e6934420f12f1011d4581e8be4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f72e57b099
commit
2ba6cd13ff
@@ -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)
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user