我有一個解決方案,但它不漂亮,還有幾個問題。
該解決方案需要複製Eclipse DnDAddon的整個包,並在DetachedDropAgent中做一些小改動。 (在@ greg-449的初步評論和一些初步研究之後,我曾希望用我自己的班級來取代DndAddon,這個班級安裝了DnDManager的一個子類,但是DnDManager和其他關鍵類是受封裝保護的。)
This working idea來自Eclipse e4的開發負責人Eric Moffat,迴應我的增強請求Disabling floating editors。他在那裏列出了兩個其他選項,其中之一類似於@ christoph.keimel的選項a。
以下是一些細節。這至少適用於Eclipse 4.4。
首先,您需要一個應用程序模型文件。如果還沒有,請從Eclipse插件org.eclipse.ui.workbench * .jar中提取文件LegacyIDE.e4xmi
。使用新名稱將其複製到您自己的插件中(在本例中,myApp.e4xmi)。然後通過將屬性applicationXMI
添加到應用程序的plugin.xml文件中的產品擴展中來使用它。
<extension
id="product"
point="org.eclipse.core.runtime.products">
<product
application="com.mycompany.myapp"
name="MyApplicationName">
...
<property
name="applicationXMI"
value="com.my.plugin/myApp.e4xmi">
</property>
</product>
</extension>
接下來,從複製整個包org.eclipse.e4.ui.workbench.addons.dndaddon
插件org.eclipse.e4.ui.workbench.addons.swt的* .jar到自己的包*.ui.workbench.addons.dndaddon
。
該包名的後綴很重要。不要更改附加類DnDAddon
的名稱也很重要。如果你改變了,你會發現標準的DnDAddOn除了被修改之外還被添加,這要歸功於org.eclipse.e4.ui.workbench.addons.swt.DnDProcessor
,並且編輯器可能仍然是浮動的。
接下來,在myApp.e4xmi中,修改「DnD Addon」行以指向您的版本。 contributionURI包括包含您的DnDAddon版本的插件的名稱以及它的類路徑。例如:
<插件XMI:ID = 「_ bqcWME2EEd-DfN2vYY4Lew」 elementId = 「的DnD附加組件」 contributionURI =「bundleclass://com.one.of.my.plugins/com.mypackage.e4。 ui.workbench.addons.dndaddon.DnDAddon「/ >
最後,在DetachedDropAgent類,修改canDrop()方法失敗的兼容性編輯器。 (我在下面寫了添加的代碼。)
public class DetachedDropAgent extends DropAgent {
...
@Override
public boolean canDrop(MUIElement dragElement, DnDInfo info) {
if (info.curElement != null)
return false;
// Add this code to disable floating of editors using the compatibility layer.
String elementId = dragElement.getElementId();
if ("org.eclipse.e4.ui.compatibility.editor".equals(elementId)) {
return false;
}
...
}
如果您將DndAddon離開應用程序模型,則會停止將窗口拖到任何地方。 –
我想保留3.x能夠將視圖拖出工作臺窗口。 –
您可以嘗試:a)創建一個AddOn,用於偵聽浮動窗口的創建並始終將該部分移回到其先前的堆棧中b)擴展/操作DndAddon以阻止浮動窗口 –