diff --git a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/DbusmenuImpl.kt b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/DbusmenuImpl.kt index 91c8c73..9367e7a 100644 --- a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/DbusmenuImpl.kt +++ b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/DbusmenuImpl.kt @@ -31,7 +31,7 @@ class DbusmenuImpl(windowId: Long, private val menuHolder: MenuHolder) : Dbusmen for (sm in it) { children.add(Variant(getLayout(parentId, recursionDepth, propertyNames, sm))) } - if (it.isNotEmpty()) properties["children-display"] = Variant("submenu") + properties["children-display"] = Variant("submenu") } return GetLayoutStruct(menu.id, properties, children) diff --git a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingMenu.kt b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingMenu.kt index 1ed112d..0664029 100644 --- a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingMenu.kt +++ b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingMenu.kt @@ -88,9 +88,10 @@ class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuH ApplicationManager.getApplication().invokeLater { for (it in menuItem.actionListeners) it.actionPerformed(event) } - menuItem.doClick() + ApplicationManager.getApplication().invokeLater(menuItem::doClick) GlobalMenu.Log.warn("Event $event for menu $id (${menuItem.javaClass})") when (menuItem) { + is ActionMenuItem -> {} is JCheckBoxMenuItem -> menuItem.isSelected = !menuItem.isSelected is JRadioButtonMenuItem -> menuItem.isSelected = true } @@ -127,10 +128,12 @@ class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuH } if (each !is JMenuItem) continue val cmi = SwingMenu(each, holder) - if (deepness > 1 && each is ActionMenu) { - each.removeAll() - each.isSelected = true - each.fillMenu() + if (deepness > 1) { + if (each is ActionMenu) { + each.removeAll() + each.isSelected = true + each.fillMenu() + } cmi.syncChildren(deepness - 1) } ch.add(cmi) @@ -142,6 +145,10 @@ class SwingMenu(private val menuItem: JMenuItem?, private val holder: SwingMenuH } } + override fun toString(): String { + return "SwingMenu(id=$id, menuItem=$menuItem)" + } + companion object { val keyEvents: Map = KeyEvent::class.java.fields .filter { it.modifiers == Modifier.PUBLIC or Modifier.STATIC or Modifier.FINAL && it.name.startsWith("VK_") } diff --git a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingRootMenu.kt b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingRootMenu.kt index f34c2af..0bfd4ac 100644 --- a/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingRootMenu.kt +++ b/src/main/kotlin/io/gitlab/jfronny/globalmenu/proxy/SwingRootMenu.kt @@ -1,6 +1,10 @@ package io.gitlab.jfronny.globalmenu.proxy import com.intellij.openapi.actionSystem.impl.ActionMenu +import com.intellij.openapi.application.EDT +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import javax.swing.JMenuItem class SwingRootMenu(private var menuItems: List?, private val name: String, private val holder: SwingMenuHolder): Menu { @@ -20,7 +24,11 @@ class SwingRootMenu(private var menuItems: List?, private val name: S } override fun update() { - syncChildren() + runBlocking { + launch(Dispatchers.EDT) { + syncChildren() + } + } } fun update(items: List) { @@ -33,6 +41,6 @@ class SwingRootMenu(private var menuItems: List?, private val name: S } private fun syncChildren() { - _children = menuItems?.map { SwingMenu(it, holder).apply { syncChildren(1) } } + _children = menuItems?.map { SwingMenu(it, holder).apply { syncChildren(2) } } } }