mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
init TouchBar only after project open EDT task (part 3 - project registration)
GitOrigin-RevId: d016536961a21f78fee81d043dd7876f6bc9887f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
fca4aec4bc
commit
25fab69fdf
@@ -677,10 +677,13 @@ public final class IdeEventQueue extends EventQueue {
|
||||
return;
|
||||
}
|
||||
|
||||
if (e instanceof InputEvent)
|
||||
if (e instanceof InputEvent && SystemInfoRt.isMac) {
|
||||
TouchBarsManager.onInputEvent((InputEvent)e);
|
||||
}
|
||||
|
||||
if (dispatchByCustomDispatchers(e)) return;
|
||||
if (dispatchByCustomDispatchers(e)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (e instanceof InputMethodEvent) {
|
||||
if (SystemInfoRt.isMac && myKeyEventDispatcher.isWaitingForSecondKeyStroke()) {
|
||||
|
||||
+5
-2
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.ide.ui.customization;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
@@ -19,6 +19,7 @@ import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.SystemInfoRt;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -184,7 +185,9 @@ public class CustomizableActionsPanel {
|
||||
restorePathsAfterTreeOptimization(treePaths);
|
||||
CustomActionsSchema.getInstance().copyFrom(mySelectedSchema);
|
||||
CustomActionsSchema.setCustomizationSchemaForCurrentProjects();
|
||||
TouchBarsManager.reloadAll();
|
||||
if (SystemInfoRt.isMac) {
|
||||
TouchBarsManager.reloadAll();
|
||||
}
|
||||
}
|
||||
|
||||
private void restorePathsAfterTreeOptimization(final List<? extends TreePath> treePaths) {
|
||||
|
||||
@@ -421,9 +421,12 @@ public class DialogWrapperPeerImpl extends DialogWrapperPeer {
|
||||
|
||||
myDialog.getWindow().setAutoRequestFocus(!Registry.is("suppress.focus.stealing"));
|
||||
|
||||
final Disposable tb = TouchBarsManager.showDialogWrapperButtons(myDialog.getContentPane());
|
||||
if (tb != null)
|
||||
myDisposeActions.add(() -> Disposer.dispose(tb));
|
||||
if (SystemInfoRt.isMac) {
|
||||
final Disposable tb = TouchBarsManager.showDialogWrapperButtons(myDialog.getContentPane());
|
||||
if (tb != null) {
|
||||
myDisposeActions.add(() -> Disposer.dispose(tb));
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
myDialog.show();
|
||||
@@ -433,7 +436,8 @@ public class DialogWrapperPeerImpl extends DialogWrapperPeer {
|
||||
commandProcessor.leaveModal();
|
||||
if (perProjectModality) {
|
||||
LaterInvocator.leaveModal(project, myDialog.getWindow());
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
LaterInvocator.leaveModal(myDialog);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.openapi.project.ProjectManagerListener;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.ui.popup.JBPopup;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.SystemInfoRt;
|
||||
import com.intellij.openapi.wm.ToolWindowId;
|
||||
import com.intellij.ui.mac.TouchbarDataKeys;
|
||||
import com.intellij.ui.popup.list.ListPopupImpl;
|
||||
@@ -63,6 +64,10 @@ public final class TouchBarsManager {
|
||||
registerEditor(editor);
|
||||
}
|
||||
|
||||
for (Project project : ProjectManager.getInstance().getOpenProjects()) {
|
||||
registerProject(project);
|
||||
}
|
||||
|
||||
isInitialized = true;
|
||||
|
||||
EditorFactory.getInstance().addEditorFactoryListener(new EditorFactoryListener() {
|
||||
@@ -80,42 +85,7 @@ public final class TouchBarsManager {
|
||||
ApplicationManager.getApplication().getMessageBus().connect().subscribe(ProjectManager.TOPIC, new ProjectManagerListener() {
|
||||
@Override
|
||||
public void projectOpened(@NotNull Project project) {
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
// System.out.println("opened project " + project + ", set default touchbar");
|
||||
|
||||
final ProjectData pd = new ProjectData(project);
|
||||
synchronized (ourProjectData) {
|
||||
final ProjectData prev = ourProjectData.put(project, pd);
|
||||
if (prev != null) {
|
||||
LOG.error("previous project data wasn't removed: " + project);
|
||||
prev.releaseAll();
|
||||
}
|
||||
}
|
||||
|
||||
StartupManager.getInstance(project).registerPostStartupActivity(() -> pd.get(BarType.DEFAULT).show());
|
||||
|
||||
project.getMessageBus().connect().subscribe(ExecutionManager.EXECUTION_TOPIC, new ExecutionListener() {
|
||||
@Override
|
||||
public void processStarted(@NotNull String executorId, @NotNull ExecutionEnvironment env, @NotNull ProcessHandler handler) {
|
||||
ApplicationManager.getApplication().invokeLater(TouchBarsManager::_updateCurrentTouchbar);
|
||||
}
|
||||
@Override
|
||||
public void processTerminated(@NotNull String executorId, @NotNull ExecutionEnvironment env, @NotNull ProcessHandler handler, int exitCode) {
|
||||
// TODO: probably, need to remove debugger-panel from stack completely
|
||||
final String twid = env.getExecutor().getToolWindowId();
|
||||
ourStack.pop(topContainer -> {
|
||||
if (topContainer.getType() != BarType.DEBUGGER)
|
||||
return false;
|
||||
|
||||
if (!ToolWindowId.DEBUG.equals(twid) && !ToolWindowId.RUN_DASHBOARD.equals(twid) && !ToolWindowId.SERVICES.equals(twid))
|
||||
return false;
|
||||
|
||||
// System.out.println("processTerminated, dbgSessionsCount=" + pd.getDbgSessions());
|
||||
return !_hasAnyActiveSession(project, handler) || pd.getDbgSessions() <= 0;
|
||||
});
|
||||
ApplicationManager.getApplication().invokeLater(TouchBarsManager::_updateCurrentTouchbar);
|
||||
}
|
||||
});
|
||||
registerProject(project);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -140,11 +110,59 @@ public final class TouchBarsManager {
|
||||
_initExecutorsGroup();
|
||||
}
|
||||
|
||||
public static boolean isTouchBarAvailable() { return NST.isAvailable(); }
|
||||
private static void registerProject(@NotNull Project project) {
|
||||
if (project.isDisposed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// System.out.println("opened project " + project + ", set default touchbar");
|
||||
|
||||
final ProjectData projectData = new ProjectData(project);
|
||||
synchronized (ourProjectData) {
|
||||
final ProjectData prev = ourProjectData.put(project, projectData);
|
||||
if (prev != null) {
|
||||
LOG.error("previous project data wasn't removed: " + project);
|
||||
prev.releaseAll();
|
||||
}
|
||||
}
|
||||
|
||||
StartupManager.getInstance(project).registerPostStartupActivity(() -> projectData.get(BarType.DEFAULT).show());
|
||||
|
||||
project.getMessageBus().connect().subscribe(ExecutionManager.EXECUTION_TOPIC, new ExecutionListener() {
|
||||
@Override
|
||||
public void processStarted(@NotNull String executorId, @NotNull ExecutionEnvironment env, @NotNull ProcessHandler handler) {
|
||||
ApplicationManager.getApplication().invokeLater(TouchBarsManager::_updateCurrentTouchbar);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void processTerminated(@NotNull String executorId, @NotNull ExecutionEnvironment env, @NotNull ProcessHandler handler, int exitCode) {
|
||||
// TODO: probably, need to remove debugger-panel from stack completely
|
||||
final String twid = env.getExecutor().getToolWindowId();
|
||||
ourStack.pop(topContainer -> {
|
||||
if (topContainer.getType() != BarType.DEBUGGER) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ToolWindowId.DEBUG.equals(twid) && !ToolWindowId.RUN_DASHBOARD.equals(twid) && !ToolWindowId.SERVICES.equals(twid)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// System.out.println("processTerminated, dbgSessionsCount=" + pd.getDbgSessions());
|
||||
return !_hasAnyActiveSession(project, handler) || projectData.getDbgSessions() <= 0;
|
||||
});
|
||||
ApplicationManager.getApplication().invokeLater(TouchBarsManager::_updateCurrentTouchbar);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static boolean isTouchBarAvailable() {
|
||||
return SystemInfoRt.isMac && NST.isAvailable();
|
||||
}
|
||||
|
||||
public static void reloadAll() {
|
||||
if (!isTouchBarAvailable())
|
||||
if (!isInitialized || !isTouchBarAvailable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
synchronized (ourProjectData) {
|
||||
ourProjectData.forEach((p, pd)->pd.reloadAll());
|
||||
@@ -153,13 +171,15 @@ public final class TouchBarsManager {
|
||||
}
|
||||
|
||||
public static void onInputEvent(InputEvent e) {
|
||||
if (!isTouchBarAvailable())
|
||||
if (!isInitialized || !isTouchBarAvailable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// NOTE: skip wheel-events, because scrolling by touchpad produces mouse-wheel events with pressed modifier, example:
|
||||
// MouseWheelEvent[MOUSE_WHEEL,(890,571),absolute(0,0),button=0,modifiers=SHIFT,extModifiers=SHIFT,clickCount=0,scrollType=WHEEL_UNIT_SCROLL,scrollAmount=1,wheelRotation=0,preciseWheelRotation=0.1] on frame0
|
||||
if (e instanceof MouseWheelEvent)
|
||||
if (e instanceof MouseWheelEvent) {
|
||||
return;
|
||||
}
|
||||
|
||||
ourStack.updateKeyMask(e.getModifiersEx() & ProjectData.getUsedKeyMask());
|
||||
}
|
||||
@@ -366,8 +386,9 @@ public final class TouchBarsManager {
|
||||
}
|
||||
|
||||
public static @Nullable Disposable showDialogWrapperButtons(@NotNull Container contentPane) {
|
||||
if (!isTouchBarAvailable())
|
||||
if (!isTouchBarAvailable()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final ModalityState ms = Utils.getCurrentModalityState();
|
||||
final BarType btype = ModalityState.NON_MODAL.equals(ms) ? BarType.DIALOG : BarType.MODAL_DIALOG;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.ui.messages;
|
||||
|
||||
import com.apple.eawt.FullScreenUtilities;
|
||||
@@ -19,8 +19,6 @@ import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import static com.intellij.openapi.wm.IdeFocusManager.getGlobalInstance;
|
||||
|
||||
@@ -163,12 +161,14 @@ class SheetMessage implements Disposable {
|
||||
}
|
||||
|
||||
private void _showTouchBar() {
|
||||
if (!TouchBarsManager.isTouchBarAvailable())
|
||||
if (!TouchBarsManager.isTouchBarAvailable()) {
|
||||
return;
|
||||
}
|
||||
|
||||
final Disposable tb = TouchBarsManager.showDialogWrapperButtons(myController.getSheetPanel());
|
||||
if (tb != null)
|
||||
if (tb != null) {
|
||||
Disposer.register(this, tb);
|
||||
}
|
||||
}
|
||||
|
||||
private static void maximizeIfNeeded(final Window owner) {
|
||||
|
||||
Reference in New Issue
Block a user