2016-07-15 4 views
1

Je développe une application RCP en eclipse. J'ai besoin de créer une liaison de clé pour faire une action, mais peu importe l'objectif actuel. En d'autres termes, j'ai besoin de créer une liaison de touches qui écoute en tout temps, peu importe la partie de l'application que vous utilisez ou quelle fenêtre a le focus actuel.Y at-il un moyen de créer une liaison de clé dans Eclipse RCP qui fonctionne quel que soit le focus?

Par exemple, étant donné une fenêtre avec un menu (File) et deux options (Open et Exit). Open ouvre une boîte de dialogue et Exit ferme l'application. Il existe également une liaison de clé (ctrl+1) qui exécute le bouton Exit. Ce que je veux, c'est pouvoir fermer l'application avec ctrl+1 même si j'ai le focus sur la boîte de dialogue affichée par Open.

Ce que j'ai testé

Maintenant, j'ai une application RCP qui a une liaison de ke (ctrl + 1) sur le bouton Quitter, mais quand je fais ctrl + 1 alors que l'accent est mis sur la boîte de dialogue affichée par ouverture , la liaison de clé ne fonctionne pas.

Voici les gestionnaires.

// Handler for the Open button 
public class OpenHandler implements IHandler { 

    ... 

    public Object execute(ExecutionEvent event) throws ExecutionException { 
     // TODO Auto-generated method stub 
     final ExecutionEvent auxEvent = event; 
     HandlerUtil.getActiveShell(event).getDisplay().asyncExec((new Runnable() { 
      public void run() { 
       MessageDialog.openWarning(HandlerUtil.getActiveShell(auxEvent),"wrong","no"); 
      } 
     })); 
     return null; 
    } 

    ... 

} 


// Handler for the Exit button 
    public class ExitHandler extends AbstractHandler { 

      public Object execute(ExecutionEvent event) throws ExecutionException { 
      HandlerUtil.getActiveWorkbenchWindow(event).close(); 
      return null; 
      } 
    } 

Et ici le manifeste avec les raccourcis clavier, etc .:

<?xml version="1.0" encoding="UTF-8"?> 
<?eclipse version="3.4"?> 
<plugin> 

    <extension 
     id="application" 
     point="org.eclipse.core.runtime.applications"> 
     <application> 
     <run 
       class="de.vogella.rcp.commands.first.Application"> 
     </run> 
     </application> 
    </extension> 
    <extension 
     point="org.eclipse.ui.perspectives"> 
     <perspective 
      name="RCP Perspective" 
      class="de.vogella.rcp.commands.first.Perspective" 
      id="de.vogella.rcp.commands.first.perspective"> 
     </perspective> 
    </extension> 
    <extension 
     point="org.eclipse.ui.commands"> 
     <command 
      defaultHandler="de.vogella.rcp.commands.first.commands.ExitHandler" 
      id="de.vogella.rcp.commands.first.commands.Exit" 
      name="Exit"> 
     </command> 
     <command 
      defaultHandler="de.vogella.rcp.commands.first.commands.OpenHandler" 
      id="de.vogella.rcp.commands.first.commands.Open" 
      name="Open"> 
     </command> 
    </extension> 
    <extension 
     point="org.eclipse.ui.menus"> 
     <menuContribution 
      allPopups="false" 
      locationURI="menu:org.eclipse.ui.main.menu"> 
     <menu 
       id="fileManu" 
       label="File"> 
      <command 
        commandId="de.vogella.rcp.commands.first.commands.Exit" 
        label="Exit" 
        style="push" 
        tooltip="Exits the application"> 
      </command> 
      <command 
        commandId="de.vogella.rcp.commands.first.commands.Open" 
        label="Open" 
        style="push" 
        tooltip="Opens"> 
      </command> 
     </menu> 
     </menuContribution> 
    </extension> 
    <extension 
     point="org.eclipse.ui.bindings"> 
     <key 
      commandId="de.vogella.rcp.commands.first.commands.Exit" 
      contextId="org.eclipse.ui.contexts.window" 
      schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" 
      sequence="M1+1"> 
     </key> 
    </extension> 

</plugin> 

Répondre

1

Les raccourcis clavier ne fonctionnent généralement pas lorsqu'une boîte de dialogue est ouverte.

Il est possible d'écrire des boîtes de dialogue là où elles fonctionnent, mais vous ne pouvez pas l'ajouter aux boîtes de dialogue existantes.