perf: some low-hanging fruit
This commit is contained in:
parent
015190af19
commit
23eb6dc880
@ -30,7 +30,6 @@ class GlobalMenuService(private val app: Application) : ApplicationActivationLis
|
|||||||
val peer: Peer
|
val peer: Peer
|
||||||
val menuBar: JMenuBar?
|
val menuBar: JMenuBar?
|
||||||
val frame: JFrame
|
val frame: JFrame
|
||||||
GlobalMenu.Log.warn(ideFrame.toString())
|
|
||||||
when (ideFrame) {
|
when (ideFrame) {
|
||||||
is ProjectFrameHelper -> {
|
is ProjectFrameHelper -> {
|
||||||
peer = ideFrame.rootPane.peer
|
peer = ideFrame.rootPane.peer
|
||||||
|
@ -76,7 +76,7 @@ class DbusmenuImpl(windowId: Long, private val menuHolder: MenuHolder) : Dbusmen
|
|||||||
try {
|
try {
|
||||||
when (eventId) {
|
when (eventId) {
|
||||||
"clicked" -> menuHolder.find(id)?.onEvent()
|
"clicked" -> menuHolder.find(id)?.onEvent()
|
||||||
"opened" -> menuHolder.find(id)?.update()
|
"opened" -> menuHolder.find(id)?.maybeUpdate()
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
GlobalMenu.Log.error("Failed to handle event $eventId for menu $id", e)
|
GlobalMenu.Log.error("Failed to handle event $eventId for menu $id", e)
|
||||||
@ -88,7 +88,7 @@ class DbusmenuImpl(windowId: Long, private val menuHolder: MenuHolder) : Dbusmen
|
|||||||
override fun AboutToShow(id: Int): Boolean {
|
override fun AboutToShow(id: Int): Boolean {
|
||||||
if (GlobalMenu.debugging) GlobalMenu.Log.warn("About to show menu $id")
|
if (GlobalMenu.debugging) GlobalMenu.Log.warn("About to show menu $id")
|
||||||
try {
|
try {
|
||||||
menuHolder.find(id)?.update()
|
menuHolder.find(id)?.maybeUpdate()
|
||||||
return true
|
return true
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
GlobalMenu.Log.error("Failed to update menu $id", e)
|
GlobalMenu.Log.error("Failed to update menu $id", e)
|
||||||
|
@ -13,4 +13,18 @@ interface Menu {
|
|||||||
val children: List<Menu>?
|
val children: List<Menu>?
|
||||||
fun onEvent()
|
fun onEvent()
|
||||||
fun update()
|
fun update()
|
||||||
|
fun maybeUpdate()
|
||||||
|
|
||||||
|
abstract class Abstract : Menu {
|
||||||
|
private var lastUpdated = 0L
|
||||||
|
override fun maybeUpdate() {
|
||||||
|
if (System.currentTimeMillis() - lastUpdated > 1000) {
|
||||||
|
update()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun update() {
|
||||||
|
lastUpdated = System.currentTimeMillis()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -17,7 +17,7 @@ import java.util.*
|
|||||||
import javax.imageio.ImageIO
|
import javax.imageio.ImageIO
|
||||||
import javax.swing.*
|
import javax.swing.*
|
||||||
|
|
||||||
class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuHolder) : Menu {
|
class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuHolder) : Menu.Abstract() {
|
||||||
override val id = holder.getId(menuItem)
|
override val id = holder.getId(menuItem)
|
||||||
override val isSeparator: Boolean get() = menuItem == null
|
override val isSeparator: Boolean get() = menuItem == null
|
||||||
override val label: String get() = menuItem?.text ?: ""
|
override val label: String get() = menuItem?.text ?: ""
|
||||||
@ -94,6 +94,7 @@ class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuH
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun update() {
|
override fun update() {
|
||||||
|
super.update()
|
||||||
try {
|
try {
|
||||||
if (menuItem is ActionMenu) {
|
if (menuItem is ActionMenu) {
|
||||||
runBlocking {
|
runBlocking {
|
||||||
|
@ -7,7 +7,7 @@ import kotlinx.coroutines.launch
|
|||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import javax.swing.JMenuItem
|
import javax.swing.JMenuItem
|
||||||
|
|
||||||
class SwingRootMenu(private var menuItems: List<JMenuItem>?, private val name: String, private val holder: SwingMenuHolder): Menu {
|
class SwingRootMenu(private var menuItems: List<JMenuItem>?, private val name: String, private val holder: SwingMenuHolder): Menu.Abstract() {
|
||||||
override val id: Int get() = 0
|
override val id: Int get() = 0
|
||||||
override val isSeparator: Boolean get() = menuItems == null
|
override val isSeparator: Boolean get() = menuItems == null
|
||||||
override val label: String get() = name
|
override val label: String get() = name
|
||||||
@ -24,6 +24,7 @@ class SwingRootMenu(private var menuItems: List<JMenuItem>?, private val name: S
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun update() {
|
override fun update() {
|
||||||
|
super.update()
|
||||||
runBlocking {
|
runBlocking {
|
||||||
launch(Dispatchers.EDT) {
|
launch(Dispatchers.EDT) {
|
||||||
syncChildren()
|
syncChildren()
|
||||||
@ -41,6 +42,6 @@ class SwingRootMenu(private var menuItems: List<JMenuItem>?, private val name: S
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun syncChildren() {
|
private fun syncChildren() {
|
||||||
_children = menuItems?.map { SwingMenu(it, holder).apply { syncChildren(2) } }
|
_children = menuItems?.map { SwingMenu(it, holder).apply { syncChildren(1) } } // setting this to 2 may help prevent missing entries but is SLLOOOOWWW
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user