Привязки клавиш Eclipse 3.x удаляются при переносе в серию e4 (Eclipse Luna)
Привязки клавиш, которые я определил в своем рабочем пространстве 3.x RCP:
<extension
id="vebscheme.scheme"
name="vebscheme.scheme"
point="org.eclipse.ui.bindings">
<key
commandId="com.ami.veb.ui.menu.file.new.command"
contextId="com.ami.veb.ui.context"
schemeId="com.ami.veb.ui.scheme"
sequence="CTRL+N"/>
<key
commandId="com.ami.veb.ui.menu.file.openexternalfile.command"
contextId="com.ami.veb.ui.context"
schemeId="com.ami.veb.ui.scheme"
sequence="CTRL+O"/>
<key
commandId="com.ami.veb.ui.menu.file.new.components.addcomponentwizard.command"
contextId="com.ami.veb.ui.context"
schemeId="com.ami.veb.ui.scheme"
sequence="CTRL+ALT+A"/>
<key
commandId="com.ami.veb.ui.menu.file.new.components.updatecomponentwizard.command"
contextId="com.ami.veb.ui.context"
schemeId="com.ami.veb.ui.scheme"
sequence="CTRL+ALT+U"/>
/** Scheme for the key-bindings **/
<scheme
id="com.ami.veb.ui.scheme"
name="com.ami.veb.ui.scheme">
</scheme>
//----------------
-----------------//
</extension>
Схема активации:
IBindingService bindingService = (IBindingService)PlatformUI.getWorkbench().getAdapter(IBindingService.class);
BindingService bindingServiceObj = (BindingService) bindingService;
//get the binding manager for the binding service
BindingManager bindingManager = bindingServiceObj.getBindingManager();
//constructs a scheme instance with the schemeId
Scheme newScheme = bindingManager.getScheme("com.ami.veb.ui.scheme");
//check if the newScheme is not null
//then set the scheme as active scheme
if(newScheme != null) {
try {
bindingManager.setActiveScheme(newScheme);
} catch (NotDefinedException e) {
String message = "Problem occurred when updating current active scheme."+
" This may result in issues with shortcut key bindings. "+
"Exit and re-launch the application to resolve this issue";
VeBLogger.getInstance().log(message);
VeBPluginActivator.getDefault().logPluginError(e);
}
}
Активация контекста:
IContextService contextService = (IContextService) PlatformUI.getWorkbench().getService(IContextService.class);
contextService.activateContext("com.ami.veb.ui.context");
Я создал продукт (с Луной). Я заметил, что сочетания клавиш не работают, как только я запускаю продукт (пока я не сохраню ярлыки).
BindingTable table = getTable(c.getId());
if (table != null) {
currentResult = table.getPerfectMatch(triggerSequence);
}
Во время отладки я заметил, что BindingTable table
изначально пуст для моего связующего контекста, и поэтому я получаю ярлыки, определенные в Eclipse, а не тот, который я определил для своего контекста.
PS Недавно я перенес свою рабочую область RCP из Eclipse Indigo (3.x RCP) в Luna (серия e4), и я заметил, что как только я экспортирую свой продукт RCP, мои привязки очищаются и когда я пытаюсь нажать любую горячую клавишу (скажем Ctrl+N) Я могу видеть только ярлыки затмения, а не тот, который я определил в моем plugin.xml.
Также обратите внимание, что миграция - это частичная миграция (или мягкая миграция), а не полная миграция (чистый "e4"), и приложение по-прежнему основано на уровне совместимости.
Привязки клавиш (определенные в plugin.xml), относящиеся к контексту привязки my, очищаются при запуске продукта.
Я запутался в том, что пошло не так с миграцией:(:(
Предложения приветствуются и будут оценены!