summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/openapi/wm/impl
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/wm/impl')
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java18
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowHeadlessManagerImpl.java408
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java36
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/wm/impl/commands/RequestFocusInEditorComponentCmd.java13
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/RecentProjectPanel.java9
5 files changed, 286 insertions, 198 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java
index 83696e07c7f8..71f964504102 100644
--- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeGlassPaneImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,8 +20,9 @@ import com.intellij.ide.IdeTooltipManager;
import com.intellij.ide.dnd.DnDAware;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.ui.Divider;
import com.intellij.openapi.ui.Painter;
-import com.intellij.openapi.ui.Splitter;
import com.intellij.openapi.ui.impl.GlassPaneDialogWrapperPeer;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopupFactory;
@@ -42,6 +43,8 @@ import java.util.List;
public class IdeGlassPaneImpl extends JPanel implements IdeGlassPaneEx, IdeEventQueue.EventDispatcher, Painter.Listener {
+ private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.wm.impl.IdeGlassPaneImpl");
+
private final List<EventListener> myMouseListeners = new ArrayList<EventListener>();
private final Set<EventListener> mySortedMouseListeners = new TreeSet<EventListener>(new Comparator<EventListener>() {
@Override
@@ -360,9 +363,12 @@ public class IdeGlassPaneImpl extends JPanel implements IdeGlassPaneEx, IdeEvent
}
else {
cursor = Cursor.getDefaultCursor();
- getRootPane().setCursor(cursor);
-
-
+ JRootPane rootPane = getRootPane();
+ if (rootPane != null) {
+ rootPane.setCursor(cursor);
+ } else {
+ LOG.warn("Root pane is null. Event: " + e);
+ }
restoreLastComponent(null);
myLastOriginalCursor = null;
myLastCursorComponent = null;
@@ -375,7 +381,7 @@ public class IdeGlassPaneImpl extends JPanel implements IdeGlassPaneEx, IdeEvent
private boolean canProcessCursorFor(Component target) {
if (target instanceof JMenu ||
target instanceof JMenuItem ||
- target instanceof Splitter.Divider ||
+ target instanceof Divider ||
target instanceof JSeparator ||
(target instanceof JEditorPane && ((JEditorPane)target).getEditorKit() instanceof HTMLEditorKit)) {
return false;
diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowHeadlessManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowHeadlessManagerImpl.java
index d6e1d9994500..8b78b1632f79 100644
--- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowHeadlessManagerImpl.java
+++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/ToolWindowHeadlessManagerImpl.java
@@ -27,9 +27,11 @@ import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.util.ActionCallback;
+import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.wm.*;
@@ -41,7 +43,7 @@ import com.intellij.ui.content.ContentFactory;
import com.intellij.ui.content.ContentManager;
import com.intellij.ui.content.ContentManagerListener;
import com.intellij.util.ArrayUtil;
-import org.jetbrains.annotations.NonNls;
+import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -50,12 +52,18 @@ import javax.swing.event.HyperlinkListener;
import java.awt.*;
import java.awt.event.InputEvent;
import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
-import java.util.Collections;
+import java.util.*;
import java.util.List;
@SuppressWarnings({"ConstantConditions"})
public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
+ private final Map<String, ToolWindow> myToolWindows = new HashMap<String, ToolWindow>();
+ private final Project myProject;
+
+ public ToolWindowHeadlessManagerImpl(Project project) {
+ myProject = project;
+ }
+
@Override
public boolean canShowNotification(@NotNull String toolWindowId) {
return false;
@@ -65,7 +73,184 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
public void notifyByBalloon(@NotNull final String toolWindowId, @NotNull final MessageType type, @NotNull final String htmlBody) {
}
- public static final ToolWindow HEADLESS_WINDOW = new ToolWindowEx() {
+ private ToolWindow doRegisterToolWindow(final String id, @Nullable Disposable parentDisposable) {
+ MockToolWindow tw = new MockToolWindow(myProject);
+ myToolWindows.put(id, tw);
+ if (parentDisposable != null) {
+ Disposer.register(parentDisposable, new Disposable() {
+ @Override
+ public void dispose() {
+ unregisterToolWindow(id);
+ }
+ });
+ }
+ return tw;
+ }
+
+ @Override
+ public ToolWindow registerToolWindow(@NotNull String id,
+ @NotNull JComponent component,
+ @NotNull ToolWindowAnchor anchor,
+ Disposable parentDisposable,
+ boolean canWorkInDumbMode) {
+ return doRegisterToolWindow(id, parentDisposable);
+ }
+
+ @Override
+ public ToolWindow registerToolWindow(@NotNull String id, @NotNull JComponent component, @NotNull ToolWindowAnchor anchor) {
+ return doRegisterToolWindow(id, null);
+ }
+
+ @Override
+ public ToolWindow registerToolWindow(@NotNull String id,
+ @NotNull JComponent component,
+ @NotNull ToolWindowAnchor anchor,
+ Disposable parentDisposable,
+ boolean canWorkInDumbMode,
+ boolean canCloseContents) {
+ return doRegisterToolWindow(id, parentDisposable);
+ }
+
+ @Override
+ public ToolWindow registerToolWindow(@NotNull String id,
+ @NotNull JComponent component,
+ @NotNull ToolWindowAnchor anchor,
+ Disposable parentDisposable) {
+ return doRegisterToolWindow(id, parentDisposable);
+ }
+
+ @Override
+ public ToolWindow registerToolWindow(@NotNull final String id, final boolean canCloseContent, @NotNull final ToolWindowAnchor anchor) {
+ return doRegisterToolWindow(id, null);
+ }
+
+ @Override
+ public ToolWindow registerToolWindow(@NotNull final String id,
+ final boolean canCloseContent,
+ @NotNull final ToolWindowAnchor anchor,
+ final boolean secondary) {
+ return doRegisterToolWindow(id, null);
+ }
+
+ @Override
+ public ToolWindow registerToolWindow(@NotNull final String id, final boolean canCloseContent, @NotNull final ToolWindowAnchor anchor,
+ final Disposable parentDisposable, final boolean dumbAware) {
+ return doRegisterToolWindow(id, parentDisposable);
+ }
+
+ @Override
+ public void unregisterToolWindow(@NotNull String id) {
+ myToolWindows.remove(id);
+ }
+
+ @Override
+ public void activateEditorComponent() {
+ }
+
+ @Override
+ public boolean isEditorComponentActive() {
+ return false;
+ }
+
+ @Override
+ public String[] getToolWindowIds() {
+ return ArrayUtil.EMPTY_STRING_ARRAY;
+ }
+
+ @Override
+ public String getActiveToolWindowId() {
+ return null;
+ }
+
+ @Override
+ public ToolWindow getToolWindow(String id) {
+ return myToolWindows.get(id);
+ }
+
+ @Override
+ public void invokeLater(Runnable runnable) {
+ }
+
+ @Override
+ public IdeFocusManager getFocusManager() {
+ return IdeFocusManagerHeadless.INSTANCE;
+ }
+
+ @Override
+ public void notifyByBalloon(@NotNull final String toolWindowId,
+ @NotNull final MessageType type,
+ @NotNull final String text,
+ @Nullable final Icon icon,
+ @Nullable final HyperlinkListener listener) {
+ }
+
+ @Override
+ public Balloon getToolWindowBalloon(String id) {
+ return null;
+ }
+
+ @Override
+ public void initToolWindow(ToolWindowEP bean) {
+
+ }
+
+ @Override
+ public void addToolWindowManagerListener(@NotNull ToolWindowManagerListener l) {
+
+ }
+
+ @Override
+ public void removeToolWindowManagerListener(@NotNull ToolWindowManagerListener l) {
+ }
+
+ @Override
+ public String getLastActiveToolWindowId() {
+ return null;
+ }
+
+ @Override
+ public String getLastActiveToolWindowId(Condition<JComponent> condition) {
+ return null;
+ }
+
+ @Override
+ public DesktopLayout getLayout() {
+ return new DesktopLayout();
+ }
+
+ @Override
+ public void setLayoutToRestoreLater(DesktopLayout layout) {
+ }
+
+ @Override
+ public DesktopLayout getLayoutToRestoreLater() {
+ return new DesktopLayout();
+ }
+
+ @Override
+ public void setLayout(@NotNull DesktopLayout layout) {
+ }
+
+ @Override
+ public void clearSideStack() {
+ }
+
+ @Override
+ public void hideToolWindow(@NotNull final String id, final boolean hideSide) {
+ }
+
+ @Override
+ public List<String> getIdsOn(@NotNull final ToolWindowAnchor anchor) {
+ return new ArrayList<String>();
+ }
+
+ public static class MockToolWindow implements ToolWindowEx {
+ ContentManager myContentManager = new MockContentManager();
+
+ public MockToolWindow(@NotNull Project project) {
+ Disposer.register(project, myContentManager);
+ }
+
@Override
public boolean isActive() {
return false;
@@ -206,7 +391,7 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
@Override
public ContentManager getContentManager() {
- return MOCK_CONTENT_MANAGER;
+ return myContentManager;
}
@Override
@@ -270,9 +455,9 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
public boolean isUseLastFocusedOnActivation() {
return false;
}
- };
+ }
- @NonNls private static final ContentManager MOCK_CONTENT_MANAGER = new ContentManager() {
+ private static class MockContentManager implements ContentManager {
private final List<Content> myContents = new ArrayList<Content>();
private Content mySelected;
@@ -284,27 +469,33 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
@Override
public void addContent(@NotNull final Content content) {
+ myContents.add(content);
+ if (mySelected == null) mySelected = content;
}
@Override
public void addContent(@NotNull Content content, int order) {
myContents.add(order, content);
+ if (mySelected == null) mySelected = content;
}
@Override
public void addContent(@NotNull final Content content, final Object constraints) {
+ addContent(content);
}
@Override
- public void addContentManagerListener(@NotNull final ContentManagerListener l) {
+ public void addSelectedContent(@NotNull final Content content) {
+ addContent(content);
+ setSelectedContent(content);
}
@Override
- public void addDataProvider(@NotNull final DataProvider provider) {
+ public void addContentManagerListener(@NotNull final ContentManagerListener l) {
}
@Override
- public void addSelectedContent(@NotNull final Content content) {
+ public void addDataProvider(@NotNull final DataProvider provider) {
}
@Override
@@ -319,6 +510,9 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
@Override
public Content findContent(final String displayName) {
+ for (Content each : myContents) {
+ if (each.getDisplayName().equals(displayName)) return each;
+ }
return null;
}
@@ -359,18 +553,24 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
@Override
public Content getContent(final JComponent component) {
+ Content[] contents = getContents();
+ for (Content content : contents) {
+ if (Comparing.equal(component, content.getComponent())) {
+ return content;
+ }
+ }
return null;
}
@Override
@Nullable
public Content getContent(final int index) {
- return null;
+ return myContents.get(index);
}
@Override
public int getContentCount() {
- return 0;
+ return myContents.size();
}
@Override
@@ -381,7 +581,7 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
@Override
public int getIndexOfContent(final Content content) {
- return -1;
+ return myContents.indexOf(content);
}
@Override
@@ -393,35 +593,37 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
@Override
@NotNull
public Content[] getSelectedContents() {
- return new Content[0];
+ return mySelected != null ? new Content[]{mySelected} : new Content[0];
}
@Override
public boolean isSelected(@NotNull final Content content) {
- return false;
+ return content == mySelected;
}
@Override
public void removeAllContents(final boolean dispose) {
for (int i = myContents.size() - 1; i >= 0; i--) {
Content content = myContents.get(i);
- removeContent(content, true);
+ removeContent(content, dispose);
}
mySelected = null;
}
@Override
public boolean removeContent(@NotNull final Content content, final boolean dispose) {
- Disposer.dispose(content);
+ if (dispose) Disposer.dispose(content);
+ boolean result = myContents.remove(content);
if (mySelected == content) {
- mySelected = null;
+ mySelected = ContainerUtil.getFirstItem(myContents);
}
- return myContents.remove(content);
+ return result;
}
@NotNull
@Override
public ActionCallback removeContent(@NotNull Content content, boolean dispose, boolean trackFocus, boolean implicitFocus) {
+ removeContent(content, dispose);
return new ActionCallback.Done();
}
@@ -451,33 +653,36 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
@NotNull
@Override
public ActionCallback setSelectedContentCB(@NotNull Content content) {
+ setSelectedContent(content);
return new ActionCallback.Done();
}
@Override
public void setSelectedContent(@NotNull final Content content, final boolean requestFocus) {
+ setSelectedContent(content);
}
@NotNull
@Override
public ActionCallback setSelectedContentCB(@NotNull final Content content, final boolean requestFocus) {
- return new ActionCallback.Done();
+ return setSelectedContentCB(content);
}
@Override
public void setSelectedContent(@NotNull Content content, boolean requestFocus, boolean forcedFocus) {
+ setSelectedContent(content);
}
@NotNull
@Override
public ActionCallback setSelectedContentCB(@NotNull final Content content, final boolean requestFocus, final boolean forcedFocus) {
- return new ActionCallback.Done();
+ return setSelectedContentCB(content);
}
@NotNull
@Override
public ActionCallback setSelectedContent(@NotNull Content content, boolean requestFocus, boolean forcedFocus, boolean implicit) {
- return new ActionCallback.Done();
+ return setSelectedContentCB(content);
}
@NotNull
@@ -506,161 +711,4 @@ public class ToolWindowHeadlessManagerImpl extends ToolWindowManagerEx {
public ContentFactory getFactory() {
return ServiceManager.getService(ContentFactory.class);
}
- };
-
- @Override
- public ToolWindow registerToolWindow(@NotNull String id,
- @NotNull JComponent component,
- @NotNull ToolWindowAnchor anchor,
- Disposable parentDisposable,
- boolean canWorkInDumbMode) {
- return HEADLESS_WINDOW;
- }
-
- @Override
- public ToolWindow registerToolWindow(@NotNull String id, @NotNull JComponent component, @NotNull ToolWindowAnchor anchor) {
- return HEADLESS_WINDOW;
- }
-
- @Override
- public ToolWindow registerToolWindow(@NotNull String id,
- @NotNull JComponent component,
- @NotNull ToolWindowAnchor anchor,
- Disposable parentDisposable,
- boolean canWorkInDumbMode,
- boolean canCloseContents) {
- return HEADLESS_WINDOW;
- }
-
- @Override
- public ToolWindow registerToolWindow(@NotNull String id,
- @NotNull JComponent component,
- @NotNull ToolWindowAnchor anchor,
- Disposable parentDisposable) {
- return HEADLESS_WINDOW;
- }
-
- @Override
- public ToolWindow registerToolWindow(@NotNull final String id, final boolean canCloseContent, @NotNull final ToolWindowAnchor anchor) {
- return HEADLESS_WINDOW;
- }
-
- @Override
- public ToolWindow registerToolWindow(@NotNull final String id,
- final boolean canCloseContent,
- @NotNull final ToolWindowAnchor anchor,
- final boolean secondary) {
- return HEADLESS_WINDOW;
- }
-
- @Override
- public ToolWindow registerToolWindow(@NotNull final String id, final boolean canCloseContent, @NotNull final ToolWindowAnchor anchor,
- final Disposable parentDisposable, final boolean dumbAware) {
- return HEADLESS_WINDOW;
- }
-
- @Override
- public void unregisterToolWindow(@NotNull String id) {
- }
-
- @Override
- public void activateEditorComponent() {
- }
-
- @Override
- public boolean isEditorComponentActive() {
- return false;
- }
-
- @Override
- public String[] getToolWindowIds() {
- return ArrayUtil.EMPTY_STRING_ARRAY;
- }
-
- @Override
- public String getActiveToolWindowId() {
- return null;
- }
-
- @Override
- public ToolWindow getToolWindow(String id) {
- return HEADLESS_WINDOW;
- }
-
- @Override
- public void invokeLater(Runnable runnable) {
- }
-
- @Override
- public IdeFocusManager getFocusManager() {
- return IdeFocusManagerHeadless.INSTANCE;
- }
-
- @Override
- public void notifyByBalloon(@NotNull final String toolWindowId,
- @NotNull final MessageType type,
- @NotNull final String text,
- @Nullable final Icon icon,
- @Nullable final HyperlinkListener listener) {
- }
-
- @Override
- public Balloon getToolWindowBalloon(String id) {
- return null;
- }
-
- @Override
- public void initToolWindow(ToolWindowEP bean) {
-
- }
-
- @Override
- public void addToolWindowManagerListener(@NotNull ToolWindowManagerListener l) {
-
- }
-
- @Override
- public void removeToolWindowManagerListener(@NotNull ToolWindowManagerListener l) {
- }
-
- @Override
- public String getLastActiveToolWindowId() {
- return null;
- }
-
- @Override
- public String getLastActiveToolWindowId(Condition<JComponent> condition) {
- return null;
- }
-
- @Override
- public DesktopLayout getLayout() {
- return new DesktopLayout();
- }
-
- @Override
- public void setLayoutToRestoreLater(DesktopLayout layout) {
- }
-
- @Override
- public DesktopLayout getLayoutToRestoreLater() {
- return new DesktopLayout();
- }
-
- @Override
- public void setLayout(@NotNull DesktopLayout layout) {
- }
-
- @Override
- public void clearSideStack() {
- }
-
- @Override
- public void hideToolWindow(@NotNull final String id, final boolean hideSide) {
- }
-
- @Override
- public List<String> getIdsOn(@NotNull final ToolWindowAnchor anchor) {
- return new ArrayList<String>();
- }
-}
+ }}
diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java
index 6c6bcd137949..120579bcb809 100644
--- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java
+++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/X11UiUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,9 +16,11 @@
package com.intellij.openapi.wm.impl;
import com.intellij.Patches;
+import com.intellij.execution.util.ExecUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.registry.Registry;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.IdeFrame;
import com.intellij.openapi.wm.WindowManager;
import org.jetbrains.annotations.Nullable;
@@ -29,6 +31,8 @@ import java.awt.*;
import java.awt.peer.ComponentPeer;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import static com.intellij.util.ArrayUtil.newLongArray;
import static com.intellij.util.containers.ContainerUtil.newHashSet;
@@ -254,11 +258,17 @@ public class X11UiUtil {
setWM("MARCO_WM", "METACITY_WM");
}
else if ("awesome".equals(wmName)) {
- setWM("SAWFISH_WM");
+ String version = getAwesomeWMVersion();
+ if (StringUtil.compareVersionNumbers(version, "3.5") >= 0) {
+ setWM("SAWFISH_WM");
+ }
+ else if (version != null) {
+ setWM("OTHER_NONREPARENTING_WM", "LG3D_WM");
+ }
}
}
- catch (Throwable e) {
- LOG.warn(e);
+ catch (Throwable t) {
+ LOG.warn(t);
}
}
@@ -273,6 +283,7 @@ public class X11UiUtil {
if (id != null) {
field(xwmClass, "awt_wmgr").set(null, id);
field(xwmClass, "WMID").set(xwm, id);
+ LOG.info("impersonated WM: " + wmConstant);
break;
}
}
@@ -281,6 +292,23 @@ public class X11UiUtil {
}
}
+ @Nullable
+ private static String getAwesomeWMVersion() {
+ try {
+ String version = ExecUtil.execAndReadLine("awesome", "--version");
+ if (version != null) {
+ Matcher m = Pattern.compile("awesome v([0-9.]+)").matcher(version);
+ if (m.find()) {
+ return m.group(1);
+ }
+ }
+ }
+ catch (Throwable t) {
+ LOG.warn(t);
+ }
+ return null;
+ }
+
// full-screen support
public static boolean isFullScreenSupported() {
diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/commands/RequestFocusInEditorComponentCmd.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/commands/RequestFocusInEditorComponentCmd.java
index 7a772e7aed34..2c681856a328 100644
--- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/commands/RequestFocusInEditorComponentCmd.java
+++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/commands/RequestFocusInEditorComponentCmd.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,11 +19,13 @@
*/
package com.intellij.openapi.wm.impl.commands;
+import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.impl.EditorWindow;
import com.intellij.openapi.fileEditor.impl.EditorWithProviderComposite;
import com.intellij.openapi.fileEditor.impl.EditorsSplitters;
import com.intellij.openapi.util.ActionCallback;
import com.intellij.openapi.util.Expirable;
+import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.openapi.wm.impl.FloatingDecorator;
import com.intellij.openapi.wm.impl.IdeFrameImpl;
@@ -44,10 +46,16 @@ public final class RequestFocusInEditorComponentCmd extends FinalizableCommand{
private final IdeFocusManager myFocusManager;
private final Expirable myTimestamp;
+ private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.wm.impl.commands.RequestFocusInEditorComponentCmd");
+
public RequestFocusInEditorComponentCmd(@NotNull final EditorsSplitters splitters, IdeFocusManager
focusManager, final Runnable finishCallBack, boolean forced){
super(finishCallBack);
+ boolean shouldLogFocuses = Registry.is("ide.log.focuses");
+ if (shouldLogFocuses) {
+ LOG.info(new Exception());
+ }
myComponent = null;
final EditorWindow window = splitters.getCurrentWindow();
if (window != null) {
@@ -94,7 +102,8 @@ public final class RequestFocusInEditorComponentCmd extends FinalizableCommand{
}
if(myComponent != null){
- myFocusManager.requestFocus(myComponent, myForced).notifyWhenDone(myDoneCallback).doWhenDone(new Runnable() {
+ final boolean forced = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == null;
+ myFocusManager.requestFocus(myComponent, myForced || forced).notifyWhenDone(myDoneCallback).doWhenDone(new Runnable() {
public void run() {
// if owner is active window or it has active child window which isn't floating decorator then
// don't bring owner window to font. If we will make toFront every time then it's possible
diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/RecentProjectPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/RecentProjectPanel.java
index 9140fc200a77..82dba7430827 100644
--- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/RecentProjectPanel.java
+++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/RecentProjectPanel.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2013 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -186,14 +186,11 @@ public class RecentProjectPanel extends JPanel {
private String getTitle2Text(ReopenProjectAction action, JComponent pathLabel) {
String fullText = action.getProjectPath();
- int labelWidth = pathLabel.getWidth();
if (fullText == null || fullText.length() == 0) return " ";
- String home = SystemProperties.getUserHome();
- if (FileUtil.startsWith(fullText, home)) {
- fullText = "~" + fullText.substring(home.length());
- }
+ fullText = FileUtil.getLocationRelativeToUserHome(fullText, false);
+ int labelWidth = pathLabel.getWidth();
if (pathLabel.getFontMetrics(pathLabel.getFont()).stringWidth(fullText) > labelWidth) {
return myPathShortener.getShortPath(action);
}