As Preferências do workbench permitem que os usuários especifiquem se as exibições devem abrir seus objetos com um clique único ou duplo.
Por que a rejeição a esta preferência não funciona para todas as exibições? Porque as exibições que recebem contribuição dos plug-ins devem suportar explicitamente esta preferência em sua implementação.
Lembre-se de que uma exibição pode ser implementada criando-se controles do SWT e gravando código padrão do SWT, ou utilizando Visualizadores do JFace para tratar dos detalhes de nível inferior. Aceitar a preferência de clique único pode ser feita em qualquer nível. A maioria das exibições que abrem outros objetos os apresenta em uma exibição estruturada, do tipo de lista. Focalizaremos esse tipo de exibição por enquanto. Se a sua exibição apresentar objetos de uma maneira diferente, provavelmente, você utilizará os conceitos em nível de SWT para suportar clique único.
Se você estiver utilizando um visualizador orientado a lista do JFace para apresentar seus objetos, o suporte ao clique único será direto. Em vez de utilizar addDoubleClickListener para disparar a abertura de itens em sua exibição, utilize addOpenListener. O ouvinte aberto aceita a preferência atual do workbench, ativando o evento aberto quando ocorre o evento de mouse especificado.
Talvez você ainda queira utilizar addDoubleClickListener para ações não abertas, tal como expandir os itens em uma árvore no clique duplo.
O JFace fornece uma classe de utilitário, OpenStrategy, para tratar da logística do clique único e do clique duplo no nível de controle do SWT. O OpenStrategy é configurado pelo diálogo Preferências do workbench para que aceite a preferência de abertura atual do workbench. Realmente, os visualizadores do JFace utilizam esta classe para implementar o ouvinte aberto.
Você deve criar um OpenStrategy e associá-lo a seu controle do SWT. O OpenStrategy conectará os eventos apropriados e os interpretará com base nas preferências do usuário. Seu trabalho é incluir um ouvinte aberto na estratégia que implementa o código para abertura. Assim, você não precisa saber qual evento de widget disparou o evento aberto.
OpenStrategy openHandler = new OpenStrategy(control); openHandler.addOpenListener(new IOpenEventListener() { public void handleOpen(SelectionEvent e) { // código para tratar do evento aberto. ... } }
As outras preferências de abertura do workbench (selecionar suspenso, abrir utilizando teclas de seta) também são tratadas por OpenStrategy. Isso significa que a "coisa certa" acontecerá se você utilizar os visualizadores do JFace ou a classe OpenStrategy para implementar o comportamento aberto.
Ao tratar de um evento aberto, você deve utilizar OpenStrategy.activateOnOpen() para determinar se um editor aberto deve ser ativado por padrão. Ativar um editor muda o foco da exibição para o editor, que pode ser particularmente confuso e indesejável no modo de clique único.