mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fix removing terminal tabs on drag'n'drop.
This commit is contained in:
@@ -236,7 +236,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac
|
||||
|
||||
myComponent.setContent(wrappper);
|
||||
|
||||
myTabs.addListener(new TabsListener() {
|
||||
myTabs.addListener(new TabsListener.Adapter() {
|
||||
|
||||
@Override
|
||||
public void beforeSelectionChanged(TabInfo oldSelection, TabInfo newSelection) {
|
||||
|
||||
@@ -22,18 +22,26 @@ public interface TabsListener {
|
||||
|
||||
void beforeSelectionChanged(TabInfo oldSelection, TabInfo newSelection);
|
||||
|
||||
void tabRemoved(TabInfo tabToRemove);
|
||||
|
||||
void tabsMoved();
|
||||
|
||||
class Adapter implements TabsListener {
|
||||
@Override
|
||||
public void selectionChanged(TabInfo oldSelection, TabInfo newSelection) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beforeSelectionChanged(TabInfo oldSelection, TabInfo newSelection) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tabsMoved() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tabRemoved(TabInfo tabToRemove) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -891,6 +891,15 @@ public class JBTabsImpl extends JComponent
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void fireTabRemoved(TabInfo info) {
|
||||
for (TabsListener eachListener : myTabListeners) {
|
||||
if (eachListener != null) {
|
||||
eachListener.tabRemoved(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private ActionCallback requestFocus(final JComponent toFocus) {
|
||||
if (toFocus == null) return new ActionCallback.Done();
|
||||
@@ -2438,6 +2447,8 @@ public class JBTabsImpl extends JComponent
|
||||
}
|
||||
|
||||
revalidateAndRepaint(true);
|
||||
|
||||
fireTabRemoved(info);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.wm.IdeFocusManager;
|
||||
import com.intellij.ui.SimpleColoredComponent;
|
||||
import com.intellij.ui.components.JBTextField;
|
||||
import com.intellij.ui.docking.DockContainer;
|
||||
import com.intellij.ui.docking.DockManager;
|
||||
import com.intellij.ui.docking.DragSession;
|
||||
import com.intellij.ui.tabs.TabInfo;
|
||||
@@ -28,8 +27,6 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.terminal.vfs.TerminalSessionVirtualFileImpl;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.util.List;
|
||||
@@ -95,7 +92,7 @@ public class JBTabbedTerminalWidget extends TabbedTerminalWidget {
|
||||
|
||||
private TabInfo.DragOutDelegate myDragDelegate = new MyDragOutDelegate();
|
||||
|
||||
private final CopyOnWriteArraySet<ChangeListener> myListeners = new CopyOnWriteArraySet<ChangeListener>();
|
||||
private final CopyOnWriteArraySet<TabChangeListener> myListeners = new CopyOnWriteArraySet<TabChangeListener>();
|
||||
|
||||
public JBTerminalTabs(@NotNull Project project, @NotNull Disposable parent) {
|
||||
final ActionManager actionManager = ActionManager.getInstance();
|
||||
@@ -109,19 +106,22 @@ public class JBTabbedTerminalWidget extends TabbedTerminalWidget {
|
||||
myTabs.addListener(new TabsListener.Adapter() {
|
||||
@Override
|
||||
public void selectionChanged(TabInfo oldSelection, TabInfo newSelection) {
|
||||
fireChanged(new ChangeEvent(myTabs));
|
||||
for (TabChangeListener each : myListeners) {
|
||||
each.selectionChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tabRemoved(TabInfo tabInfo) {
|
||||
for (TabChangeListener each : myListeners) {
|
||||
each.tabRemoved();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
myTabs.setTabDraggingEnabled(true);
|
||||
}
|
||||
|
||||
private void fireChanged(ChangeEvent event) {
|
||||
for (ChangeListener each : myListeners) {
|
||||
each.stateChanged(event);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSelectedIndex() {
|
||||
return myTabs.getIndexOf(myTabs.getSelectedInfo());
|
||||
@@ -161,7 +161,7 @@ public class JBTabbedTerminalWidget extends TabbedTerminalWidget {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addChangeListener(ChangeListener listener) {
|
||||
public void addChangeListener(TabChangeListener listener) {
|
||||
myListeners.add(listener);
|
||||
}
|
||||
|
||||
@@ -348,20 +348,15 @@ public class JBTabbedTerminalWidget extends TabbedTerminalWidget {
|
||||
|
||||
@Override
|
||||
public void dragOutFinished(MouseEvent event, TabInfo source) {
|
||||
boolean copy =
|
||||
com.intellij.util.ui.UIUtil.isControlKeyDown(event) || mySession.getResponse(event) == DockContainer.ContentResponse.ACCEPT_COPY;
|
||||
if (!copy) {
|
||||
myFile.putUserData(FileEditorManagerImpl.CLOSING_TO_REOPEN, Boolean.TRUE);
|
||||
// FileEditorManagerEx.getInstanceEx(myProject).closeFile(myFile, myWindow); TODO
|
||||
}
|
||||
else {
|
||||
source.setHidden(false);
|
||||
}
|
||||
|
||||
myFile.putUserData(FileEditorManagerImpl.CLOSING_TO_REOPEN, Boolean.TRUE);
|
||||
|
||||
|
||||
myTabs.removeTab(source);
|
||||
|
||||
mySession.process(event);
|
||||
if (!copy) {
|
||||
myFile.putUserData(FileEditorManagerImpl.CLOSING_TO_REOPEN, null);
|
||||
}
|
||||
|
||||
myFile.putUserData(FileEditorManagerImpl.CLOSING_TO_REOPEN, null);
|
||||
|
||||
|
||||
myFile = null;
|
||||
mySession = null;
|
||||
|
||||
@@ -21,8 +21,8 @@ import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.FileEditorLocation;
|
||||
import com.intellij.openapi.fileEditor.FileEditorState;
|
||||
import com.intellij.openapi.fileEditor.FileEditorStateLevel;
|
||||
import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
|
||||
import com.intellij.openapi.util.UserDataHolderBase;
|
||||
import com.jediterm.terminal.ui.JediTermWidget;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -34,31 +34,29 @@ import java.beans.PropertyChangeListener;
|
||||
*/
|
||||
public class TerminalSessionEditor extends UserDataHolderBase implements FileEditor {
|
||||
|
||||
private final JediTermWidget myTerminal;
|
||||
private final String myName;
|
||||
private final TerminalSessionVirtualFileImpl myFile;
|
||||
|
||||
public TerminalSessionEditor(@NotNull TerminalSessionVirtualFileImpl terminalFile) {
|
||||
myTerminal = terminalFile.getTerminal();
|
||||
myName = terminalFile.getName();
|
||||
myFile = terminalFile;
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public JComponent getComponent() {
|
||||
return myTerminal;
|
||||
return myFile.getTerminal();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public JComponent getPreferredFocusedComponent() {
|
||||
return myTerminal;
|
||||
return myFile.getTerminal();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return myName;
|
||||
return myFile.getName();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -122,6 +120,8 @@ public class TerminalSessionEditor extends UserDataHolderBase implements FileEdi
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
myTerminal.close();
|
||||
if (!myFile.getUserData(FileEditorManagerImpl.CLOSING_TO_REOPEN)) {
|
||||
myFile.getTerminal().close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user