Como parar / solucionar os aplicativos Java que roubam o foco nos gerenciadores de janelas Linux

Queremos criar protótipos de widgets rapidamente em Java. Sobrepomos-os sobre uma tela gravada em um pacote gráfico de terceiros proprietário. Nós descobrimos que a GUI Java rouba o foco do teclado do gerenciador de janelas.

O gerenciador de janelas é fvwm, tentei configurá-lo para que o aplicativo Java seja configurado para não ter foco e, além disso, se algum dia conseguir foco, tire-o e entregue-o à outra GUI.

Se eu executar isso com o aplicativo Java, ele não funcionará (sempre que o mouse estiver sobre a GUI Java, ele terá foco no teclado) - se eu trocar algum widget X GUI padrão (XEyes) no lugar da GUI Java, ele funcionará como um encanto . Isso empresta alguma credibilidade à alegação (mantida pelo pessoal da fvwm) de que Java não está respeitando o ICCCM.

Gostaria de saber se outras pessoas resolveram esse problema e, em caso afirmativo, como. Até agora, tenho algumas opções de como tentar corrigir isso:

1) ajuste as configurações de Java, esperando que, se eu desativar o foco, talvez ele devolva o controle do foco ao gerenciador de janelas (até agora, tentei "setFocusable (false)" no JFrame pai. Isso não funcionou. fio "http://java.sun.com/javase/6/webnotes/trouble/TSG-Desktop/html/awt.html#gdaao"indicado que eu deveria fazer" Window.setFocusableWindowState (false) "A GUI em questão ainda não foi refeita em uma janela, mas também não estou completamente convencida de que o Java irá reativar o foco

2) faça chamadas X de baixo nível no programa Java usando JNI. Acho que isso provavelmente funcionaria, mas nunca joguei muito com o nível X baixo. Não tenho certeza de quais chamadas devo usar (XtSetKeyboardFocus () deve ser perigoso para chamar ...) ou como posso identificar as GUIs em que estou operando (nesse aspecto, o fvwm foi legal, pois elas tinham uma GUI que permitia clicar em outra GUI e descobrir seu "nome" e "classe")

3) use um gerenciador de janelas "mais forte". Alguns gerenciadores de janelas que não usam o ICCCM podem lidar melhor com o Java. Claro, há uma infinidade de gerentes, e não tenho certeza do que me concentrar. Da mesma forma, muitos parecem não especificar o foco pelo aplicativo (a maioria parece se importar apenas com políticas amplas).

questionAnswers(1)

yourAnswerToTheQuestion