現在、次のEclipseRCPコマンドに苦労しています。
org.eclipse.ui.edit.cut
org.eclipse.ui.edit.copy
org.eclipse.ui.edit.paste
handled
ツールバーのコマンドコントリビューションとして使用していますが、これらのコマンドの''状態が変更されても、UIElements(ツールバーアイテム)は更新されません。
テストでは、ポーリングメカニズムを使用して、現在フォーカスされている要素に応じてこれらのコマンドの状態が実際に変化することを確認しました。ハンドラーは同じままですが、ハンドラーの「処理済み」状態が適切に変化し、コマンド「処理済み」が発生することがわかりました。状態もきちんと変化します。
唯一の問題は、これらの状態の変化のいずれも通知を引き起こさないため(コマンドICommandListener
でもハンドラーでもIHandlerListener
)、UIElementsが更新されないことです。
コマンドの状態を観察するためのテストコードは次のとおりです。
ICommandService commandService = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
final String commandId="org.eclipse.ui.edit.copy";
Command command = commandService.getCommand(commandId);
command.addCommandListener(new ICommandListener() {
public void commandChanged (CommandEvent commandEvent) {
System.out.println(">> Command changed: " + commandId);
}
});
私は何かが足りないのですか、それともこれはカット/コピー/貼り付けハンドラーの実装のバグですか?洞察はありますか?
編集:
コマンドは常に有効になっており、ハンドラーが交換されることはありません。フォーカスがあるui要素に応じて、ハンドラーの' handled
'状態(したがってコマンドの' '状態)のみが変更されます。handled
ただし、この状態が変化しても通知はありません。これにより、ツールバーボタンが常に有効になり、それらを押すと。が発生しorg.eclipse.core.commands.NotHandledException: There is no handler to execute for command
ます。