rcp アプリケーションでパースペクティブ ツールバーを右クリックしたときに表示されるコンテキスト メニューを抑制したいと考えています。明確にするために、パースペクティブ バーとショートカットを表示したいのですが、コンテキスト メニューをポップアップさせたくありません。すべてのパースペクティブ ツールバー API は内部のようです。
ありがとう。
rcp アプリケーションでパースペクティブ ツールバーを右クリックしたときに表示されるコンテキスト メニューを抑制したいと考えています。明確にするために、パースペクティブ バーとショートカットを表示したいのですが、コンテキスト メニューをポップアップさせたくありません。すべてのパースペクティブ ツールバー API は内部のようです。
ありがとう。
これを試すことができます
PerspectiveBarManager perspectiveBarManager = ((WorkbenchWindow) PlatformUI.getWorkbench()
.getActiveWorkbenchWindow()).getPerspectiveBar();
ToolBar toolBar = perspectiveBarManager.getControl();
Listener[] listeners = toolBar.getListeners(SWT.MenuDetect);
if (listeners != null)
{
for (Listener listener : listeners)
{
toolBar.removeListener(SWT.MenuDetect, listener);
}
}
PerspectiveSwitcher のコンテキスト メニューは、おっしゃる通りワークベンチ フレームワークの内部クラスの奥深くに作成されます。内部クラスを多用したり、既存の機能を再実装したりしなければ、PerspectiveSwitcher への参照を取得してメニューを非表示にすることはできません。
つまり、簡単に言えば、私見では、コンテキストメニューは抑制されることを意図していないようです。
問題を解決する最も簡単でクリーンな方法は、パースペクティブ バー全体を抑制し、独自のものを実装することです。既存のパースペクティブのクエリ (IWorkbench.getPerspectiveRegistry) とパースペクティブの切り替え (IWorkbenchPage.setPerspective) のためのパブリック API があり、コーディングする必要があるのは UI だけです。