mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-163208: new logic for showing debugger panel
show debugger-panel until user manually closes it, restore when user activates debugger-tool-window
This commit is contained in:
@@ -28,6 +28,8 @@ public class TouchBar implements NSTLibrary.ItemCreator {
|
||||
myNativePeer = NST.createTouchBar(touchbarName, this, myCustomEsc != null ? myCustomEsc.myUid : null);
|
||||
}
|
||||
|
||||
public boolean isManualClose() { return myCustomEsc != null; }
|
||||
|
||||
@Override
|
||||
public String toString() { return myName + "_" + myNativePeer; }
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import java.awt.*;
|
||||
|
||||
public class TouchBarDebugger extends TouchBarActionBase {
|
||||
TouchBarDebugger(@NotNull Project project, Component component) {
|
||||
super("debugger", project, component);
|
||||
super("debugger", project, component, true);
|
||||
|
||||
addButton(AllIcons.Actions.Restart, null, new PlatformAction(IdeActions.ACTION_RERUN));
|
||||
addAnActionButton("Pause");
|
||||
|
||||
@@ -8,7 +8,7 @@ import java.awt.*;
|
||||
|
||||
public class TouchBarDebuggerAlt extends TouchBarActionBase {
|
||||
public TouchBarDebuggerAlt(@NotNull Project project, Component component) {
|
||||
super("debugger_alt", project, component);
|
||||
super("debugger_alt", project, component, true);
|
||||
|
||||
addFlexibleSpacing();
|
||||
addAnActionButton("ViewBreakpoints", false);
|
||||
|
||||
@@ -55,13 +55,11 @@ public class TouchBarsManager {
|
||||
|
||||
@Override
|
||||
public void focusGained(Editor editor) {
|
||||
if (!hasTemporary())
|
||||
showTouchBar(myEditorBar);
|
||||
_elevateTouchBar(myEditorBar);
|
||||
}
|
||||
@Override
|
||||
public void focusLost(Editor editor) {
|
||||
if (!hasTemporary())
|
||||
closeTouchBar(myEditorBar);
|
||||
closeTouchBar(myEditorBar);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -116,12 +114,14 @@ public class TouchBarsManager {
|
||||
public void stateChanged() {
|
||||
final String activeId = twm.getActiveToolWindowId();
|
||||
if (activeId != null && activeId.equals("Debug")) {
|
||||
// TODO:
|
||||
// 1. check whether some debug session is running
|
||||
// 2. stateChanged can be skipped sometimes when user clicks debug tool-window, need check by focus events or fix stateChanged-subscription
|
||||
if (myDebuggerBar == null) {
|
||||
myDebuggerBar = ProjectBarsStorage.instance(project).createBarContainer(ProjectBarsStorage.DEBUGGER, twm.getToolWindow(activeId).getComponent());
|
||||
}
|
||||
showTouchBar(myDebuggerBar);
|
||||
} else
|
||||
closeTouchBar(myDebuggerBar);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -147,10 +147,6 @@ public class TouchBarsManager {
|
||||
}
|
||||
}
|
||||
|
||||
synchronized public static boolean hasTemporary() {
|
||||
return ourTouchBarStack.stream().anyMatch((bc)->bc.isTemporary());
|
||||
}
|
||||
|
||||
synchronized public static void showTempTouchBar(TouchBar tb) {
|
||||
if (tb == null)
|
||||
return;
|
||||
@@ -188,6 +184,24 @@ public class TouchBarsManager {
|
||||
_setBarContainer(bar);
|
||||
}
|
||||
|
||||
synchronized private static void _elevateTouchBar(@NotNull BarContainer bar) {
|
||||
final BarContainer top = ourTouchBarStack.peek();
|
||||
if (top == bar)
|
||||
return;
|
||||
|
||||
final boolean preserveTop = top != null && (top.isTemporary() || top.get().isManualClose());
|
||||
if (preserveTop) {
|
||||
ourTouchBarStack.remove(bar);
|
||||
ourTouchBarStack.remove(top);
|
||||
ourTouchBarStack.push(bar);
|
||||
ourTouchBarStack.push(top);
|
||||
} else {
|
||||
ourTouchBarStack.remove(bar);
|
||||
ourTouchBarStack.push(bar);
|
||||
_setBarContainer(bar);
|
||||
}
|
||||
}
|
||||
|
||||
synchronized public static void closeTouchBar(BarContainer tb) {
|
||||
if (tb == null || ourTouchBarStack.isEmpty())
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user