breakpoint-intellij-plugin/src/main/kotlin/rs485/network/breakpoint/LWJGLExitMouseGrabDebuggerM...

44 lines
1.9 KiB
Kotlin

package rs485.network.breakpoint
import com.intellij.lang.java.JavaLanguage
import com.intellij.openapi.application.ApplicationManager
import com.intellij.xdebugger.XDebugProcess
import com.intellij.xdebugger.XDebugSessionListener
import com.intellij.xdebugger.XDebuggerManagerListener
import com.intellij.xdebugger.evaluation.EvaluationMode
import com.intellij.xdebugger.frame.XValue
import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl
import com.intellij.xdebugger.impl.ui.tree.nodes.XEvaluationCallbackBase
class LWJGLExitMouseGrabDebuggerManagerListener : XDebuggerManagerListener {
override fun processStarted(debugProcess: XDebugProcess) {
debugProcess.session.addSessionListener(object : XDebugSessionListener {
override fun sessionPaused() {
val evaluator = debugProcess.evaluator ?: return
ApplicationManager.getApplication().invokeLater {
val expression = XExpressionImpl(
/* expression = */ "Mouse.setGrabbed(false);",
/* language = */ JavaLanguage.INSTANCE,
/* customInfo = */ "org.lwjgl.input.Mouse",
/* mode = */ EvaluationMode.CODE_FRAGMENT,
)
evaluator.evaluate(
/* expression = */ expression,
/* callback = */
object : XEvaluationCallbackBase() {
override fun errorOccurred(errorMessage: String) {
// ignore
}
override fun evaluated(result: XValue) {
// ignore
}
},
/* expressionPosition = */ null,
)
}
}
})
}
}