diff options
Diffstat (limited to 'platform/platform-impl/src/com/intellij/ui')
10 files changed, 168 insertions, 130 deletions
diff --git a/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java b/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java index d8b204cfd76c..1fc23e5f4055 100644 --- a/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java +++ b/platform/platform-impl/src/com/intellij/ui/AbstractExpandableItemsHandler.java @@ -54,7 +54,7 @@ public abstract class AbstractExpandableItemsHandler<KeyType, ComponentType exte myTipComponent = new TipComponent(); - myTipComponent.addMouseListener(new MouseAdapter() { + MouseAdapter tipMouseAdapter = new MouseAdapter() { @Override public void mouseExited(MouseEvent e) { // don't hide the hint if mouse exited to myComponent @@ -62,7 +62,60 @@ public abstract class AbstractExpandableItemsHandler<KeyType, ComponentType exte hideHint(); } } - }); + + @Override + public void mouseWheelMoved(MouseWheelEvent e) { + Point p = e.getLocationOnScreen(); + SwingUtilities.convertPointFromScreen(p, myComponent); + myComponent.dispatchEvent(new MouseWheelEvent(myComponent, + e.getID(), + e.getWhen(), + e.getModifiers(), + p.x, p.y, + e.getClickCount(), + e.isPopupTrigger(), + e.getScrollType(), + e.getScrollAmount(), + e.getWheelRotation())); + } + + @Override + public void mouseClicked(MouseEvent e) { + Point p = e.getLocationOnScreen(); + SwingUtilities.convertPointFromScreen(p, myComponent); + myComponent.dispatchEvent(new MouseEvent(myComponent, + e.getID(), + e.getWhen(), + e.getModifiers(), + p.x, p.y, + e.getClickCount(), + e.isPopupTrigger(), + e.getButton())); + } + + @Override + public void mousePressed(MouseEvent e) { + mouseClicked(e); + } + + @Override + public void mouseReleased(MouseEvent e) { + mouseClicked(e); + } + + @Override + public void mouseMoved(MouseEvent e) { + mouseClicked(e); + } + + @Override + public void mouseDragged(MouseEvent e) { + mouseClicked(e); + } + }; + myTipComponent.addMouseListener(tipMouseAdapter); + myTipComponent.addMouseWheelListener(tipMouseAdapter); + myTipComponent.addMouseMotionListener(tipMouseAdapter); myComponent.addMouseListener( new MouseListener() { diff --git a/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java b/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java index 513d5cedb2ab..d41d0bb5ef18 100644 --- a/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java @@ -331,7 +331,7 @@ public class BalloonImpl implements Balloon, IdeTooltip.Ui { Integer result = JLayeredPane.DEFAULT_LAYER; switch (myLayer) { case normal: - result = JLayeredPane.DEFAULT_LAYER; + result = JLayeredPane.POPUP_LAYER; break; case top: result = JLayeredPane.DRAG_LAYER; diff --git a/platform/platform-impl/src/com/intellij/ui/JBTabsPaneImpl.java b/platform/platform-impl/src/com/intellij/ui/JBTabsPaneImpl.java index d5fc8dcca1ba..fe041c5ea02b 100644 --- a/platform/platform-impl/src/com/intellij/ui/JBTabsPaneImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/JBTabsPaneImpl.java @@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.tabs.*; import com.intellij.ui.tabs.impl.JBEditorTabs; +import com.intellij.ui.tabs.impl.JBTabsImpl; import com.intellij.ui.tabs.impl.TabLabel; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -34,8 +35,7 @@ import java.awt.event.MouseListener; import java.util.concurrent.CopyOnWriteArraySet; public class JBTabsPaneImpl implements TabbedPane, SwingConstants { - - private final JBTabs myTabs; + private final JBTabsImpl myTabs; private final CopyOnWriteArraySet<ChangeListener> myListeners = new CopyOnWriteArraySet<ChangeListener>(); public JBTabsPaneImpl(@Nullable Project project, int tabPlacement, @NotNull Disposable parent) { @@ -64,6 +64,9 @@ public class JBTabsPaneImpl implements TabbedPane, SwingConstants { maxOffset++; g2d.setPaint(UIUtil.getPanelBackground()); + if (getFirstTabOffset() > 0) { + g2d.fillRect(clip.x, clip.y, clip.x + getFirstTabOffset() - 1, clip.y + maxLength - TabsUtil.ACTIVE_TAB_UNDERLINE_HEIGHT); + } g2d.fillRect(clip.x + maxOffset, clip.y, clip.width - maxOffset, clip.y + maxLength - TabsUtil.ACTIVE_TAB_UNDERLINE_HEIGHT); g2d.setPaint(new JBColor(Gray._181, UIUtil.getPanelBackground())); g2d.drawLine(clip.x + maxOffset, clip.y + maxLength - TabsUtil.ACTIVE_TAB_UNDERLINE_HEIGHT, clip.x + clip.width, clip.y + maxLength - TabsUtil.ACTIVE_TAB_UNDERLINE_HEIGHT); @@ -77,6 +80,7 @@ public class JBTabsPaneImpl implements TabbedPane, SwingConstants { super.paintSelectionAndBorder(g2d); } }; + myTabs.setFirstTabOffset(10); myTabs.addListener(new TabsListener.Adapter() { @Override diff --git a/platform/platform-impl/src/com/intellij/ui/LibNotifyWrapper.java b/platform/platform-impl/src/com/intellij/ui/LibNotifyWrapper.java index aac2e77982ba..e8c6f49f8088 100644 --- a/platform/platform-impl/src/com/intellij/ui/LibNotifyWrapper.java +++ b/platform/platform-impl/src/com/intellij/ui/LibNotifyWrapper.java @@ -49,6 +49,7 @@ class LibNotifyWrapper implements SystemNotificationsImpl.Notifier { } private final LibNotify myLibNotify; + private final String myIcon; private LibNotifyWrapper() { myLibNotify = (LibNotify)Native.loadLibrary("libnotify.so.4", LibNotify.class); @@ -58,6 +59,9 @@ class LibNotifyWrapper implements SystemNotificationsImpl.Notifier { throw new IllegalStateException("notify_init failed"); } + String icon = AppUIUtil.findIcon(PathManager.getBinPath()); + myIcon = icon != null ? icon : "dialog-information"; + MessageBusConnection connection = ApplicationManager.getApplication().getMessageBus().connect(); connection.subscribe(AppLifecycleListener.TOPIC, new AppLifecycleListener.Adapter() { @Override @@ -69,9 +73,7 @@ class LibNotifyWrapper implements SystemNotificationsImpl.Notifier { @Override public void notify(@NotNull Set<String> allNames, @NotNull String name, @NotNull String title, @NotNull String description) { - String icon = AppUIUtil.findIcon(PathManager.getBinPath()); - if (icon == null) icon = "dialog-information"; - Pointer notification = myLibNotify.notify_notification_new(title, description, icon); + Pointer notification = myLibNotify.notify_notification_new(title, description, myIcon); myLibNotify.notify_notification_show(notification, null); } } diff --git a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java index c738995059dc..cbcde2d36418 100644 --- a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java +++ b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java @@ -288,6 +288,10 @@ public abstract class SpeedSearchBase<Comp extends JComponent> extends SpeedSear return null; } + public void showPopup() { + manageSearchPopup(new SearchPopup("")); + } + public void hidePopup() { manageSearchPopup(null); } diff --git a/platform/platform-impl/src/com/intellij/ui/TableSpeedSearch.java b/platform/platform-impl/src/com/intellij/ui/TableSpeedSearch.java index b596204e6ad2..eeeb90dc7ae7 100644 --- a/platform/platform-impl/src/com/intellij/ui/TableSpeedSearch.java +++ b/platform/platform-impl/src/com/intellij/ui/TableSpeedSearch.java @@ -20,7 +20,6 @@ import com.intellij.util.PairFunction; import com.intellij.util.containers.Convertor; import javax.swing.*; -import javax.swing.table.TableModel; import java.util.ListIterator; public class TableSpeedSearch extends SpeedSearchBase<JTable> { @@ -55,9 +54,8 @@ public class TableSpeedSearch extends SpeedSearchBase<JTable> { @Override protected boolean isSpeedSearchEnabled() { - JTable table = getComponent(); - boolean tableIsNotEmpty = table.getRowCount() != 0 && table.getColumnCount() != 0; - return tableIsNotEmpty && !table.isEditing() && super.isSpeedSearchEnabled(); + boolean tableIsNotEmpty = myComponent.getRowCount() != 0 && myComponent.getColumnCount() != 0; + return tableIsNotEmpty && !myComponent.isEditing() && super.isSpeedSearchEnabled(); } @Override @@ -67,16 +65,14 @@ public class TableSpeedSearch extends SpeedSearchBase<JTable> { @Override protected int getElementCount() { - final TableModel tableModel = myComponent.getModel(); - return tableModel.getRowCount() * tableModel.getColumnCount(); + return myComponent.getRowCount() * myComponent.getColumnCount(); } @Override protected void selectElement(Object element, String selectedText) { final int index = ((Integer)element).intValue(); - final TableModel model = myComponent.getModel(); - final int row = index / model.getColumnCount(); - final int col = index % model.getColumnCount(); + final int row = index / myComponent.getColumnCount(); + final int col = index % myComponent.getColumnCount(); myComponent.getSelectionModel().setSelectionInterval(row, row); myComponent.getColumnModel().getSelectionModel().setSelectionInterval(col, col); TableUtil.scrollSelectionToVisible(myComponent); @@ -87,7 +83,7 @@ public class TableSpeedSearch extends SpeedSearchBase<JTable> { final int row = myComponent.getSelectedRow(); final int col = myComponent.getSelectedColumn(); // selected row is not enough as we want to select specific cell in a large multi-column table - return row > -1 && col > -1 ? row * myComponent.getModel().getColumnCount() + col : -1; + return row > -1 && col > -1 ? row * myComponent.getColumnCount() + col : -1; } @Override @@ -98,10 +94,9 @@ public class TableSpeedSearch extends SpeedSearchBase<JTable> { @Override protected String getElementText(Object element) { final int index = ((Integer)element).intValue(); - final TableModel model = myComponent.getModel(); - int row = myComponent.convertRowIndexToModel(index / model.getColumnCount()); - int col = myComponent.convertColumnIndexToModel(index % model.getColumnCount()); - Object value = model.getValueAt(row, col); + int row = index / myComponent.getColumnCount(); + int col = index % myComponent.getColumnCount(); + Object value = myComponent.getValueAt(row, col); return myToStringConvertor.fun(value, new Cell(row, col)); } diff --git a/platform/platform-impl/src/com/intellij/ui/content/impl/ContentImpl.java b/platform/platform-impl/src/com/intellij/ui/content/impl/ContentImpl.java index 82dd6ff085fd..595a93db592f 100644 --- a/platform/platform-impl/src/com/intellij/ui/content/impl/ContentImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/content/impl/ContentImpl.java @@ -1,6 +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. @@ -45,7 +44,7 @@ public class ContentImpl extends UserDataHolderBase implements Content { private JComponent myComponent; private Icon myIcon; private final PropertyChangeSupport myChangeSupport = new PropertyChangeSupport(this); - private ContentManager myManager = null; + private ContentManager myManager; private boolean myIsLocked = false; private boolean myPinnable = true; private Icon myLayeredIcon = new LayeredIcon(2); @@ -294,6 +293,7 @@ public class ContentImpl extends UserDataHolderBase implements Content { return myPlace; } + @Override @NonNls public String toString() { StringBuilder sb = new StringBuilder("Content name=").append(myDisplayName); diff --git a/platform/platform-impl/src/com/intellij/ui/content/impl/ContentManagerImpl.java b/platform/platform-impl/src/com/intellij/ui/content/impl/ContentManagerImpl.java index b6e739692ede..d0b110f083bf 100644 --- a/platform/platform-impl/src/com/intellij/ui/content/impl/ContentManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/content/impl/ContentManagerImpl.java @@ -15,6 +15,7 @@ */ package com.intellij.ui.content.impl; +import com.intellij.ide.DataManager; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.DataProvider; @@ -32,13 +33,15 @@ import com.intellij.ui.components.panels.Wrapper; import com.intellij.ui.content.*; import com.intellij.ui.switcher.SwitchProvider; import com.intellij.ui.switcher.SwitchTarget; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.SmartList; + import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import javax.swing.event.EventListenerList; import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -55,21 +58,21 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene private static final Logger LOG = Logger.getInstance("#com.intellij.ui.content.impl.ContentManagerImpl"); private ContentUI myUI; - private final ArrayList<Content> myContents; - private EventListenerList myListeners; - private List<Content> mySelection = new ArrayList<Content>(); + private final List<Content> myContents = new ArrayList<Content>(); + private final List<ContentManagerListener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList(); + private final List<Content> mySelection = new ArrayList<Content>(); private final boolean myCanCloseContents; - private MyContentComponent myContentComponent; - private MyFocusProxy myFocusProxy; - private JPanel myComponent; - + private Wrapper.FocusHolder myFocusProxy; + private MyNonOpaquePanel myComponent; private final Set<Content> myContentWithChangedComponent = new HashSet<Content>(); private boolean myDisposed; private final Project myProject; + private final List<DataProvider> dataProviders = new SmartList<DataProvider>(); + /** * WARNING: as this class adds listener to the ProjectManager which is removed on projectClosed event, all instances of this class * must be created on already OPENED projects, otherwise there will be memory leak! @@ -77,8 +80,6 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene public ContentManagerImpl(@NotNull ContentUI contentUI, boolean canCloseContents, @NotNull Project project) { myProject = project; myCanCloseContents = canCloseContents; - myContents = new ArrayList<Content>(); - myListeners = new EventListenerList(); myUI = contentUI; myUI.setManager(this); @@ -95,15 +96,18 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene @Override public JComponent getComponent() { if (myComponent == null) { - myComponent = new NonOpaquePanel(new BorderLayout()); + myComponent = new MyNonOpaquePanel(); + + myFocusProxy = new Wrapper.FocusHolder(); + myFocusProxy.setOpaque(false); + myFocusProxy.setPreferredSize(new Dimension(0, 0)); - myFocusProxy = new MyFocusProxy(); - myContentComponent = new MyContentComponent(); - myContentComponent.setContent(myUI.getComponent()); - myContentComponent.setFocusCycleRoot(true); + MyContentComponent contentComponent = new MyContentComponent(); + contentComponent.setContent(myUI.getComponent()); + contentComponent.setFocusCycleRoot(true); myComponent.add(myFocusProxy, BorderLayout.NORTH); - myComponent.add(myContentComponent, BorderLayout.CENTER); + myComponent.add(contentComponent, BorderLayout.CENTER); } return myComponent; } @@ -117,58 +121,51 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene return busyObject != null ? busyObject.getReady(requestor) : new ActionCallback.Done(); } - private class MyContentComponent extends NonOpaquePanel implements DataProvider, SwitchProvider { - - private final List<DataProvider> myProviders = new ArrayList<DataProvider>(); - - public void addProvider(final DataProvider provider) { - myProviders.add(provider); + private class MyNonOpaquePanel extends NonOpaquePanel implements DataProvider { + public MyNonOpaquePanel() { + super(new BorderLayout()); } @Override @Nullable - public Object getData(@NonNls final String dataId) { - if (PlatformDataKeys.CONTENT_MANAGER.is(dataId)) return ContentManagerImpl.this; - if (PlatformDataKeys.NONEMPTY_CONTENT_MANAGER.is(dataId) && getContentCount() > 1) { + public Object getData(@NonNls String dataId) { + if (PlatformDataKeys.CONTENT_MANAGER.is(dataId) || PlatformDataKeys.NONEMPTY_CONTENT_MANAGER.is(dataId) && getContentCount() > 1) { return ContentManagerImpl.this; } - for (DataProvider each : myProviders) { - final Object data = each.getData(dataId); - if (data != null) return data; + for (DataProvider dataProvider : dataProviders) { + Object data = dataProvider.getData(dataId); + if (data != null) { + return data; + } } if (myUI instanceof DataProvider) { return ((DataProvider)myUI).getData(dataId); } - return null; + DataProvider provider = DataManager.getDataProvider(this); + return provider == null ? null : provider.getData(dataId); } + } + private class MyContentComponent extends NonOpaquePanel implements SwitchProvider { @Override public List<SwitchTarget> getTargets(boolean onlyVisible, boolean originalProvider) { if (myUI instanceof SwitchProvider) { return ((SwitchProvider)myUI).getTargets(onlyVisible, false); } - return new ArrayList<SwitchTarget>(); + return new SmartList<SwitchTarget>(); } @Override public SwitchTarget getCurrentTarget() { - if (myUI instanceof SwitchProvider) { - return ((SwitchProvider)myUI).getCurrentTarget(); - } - - return null; + return myUI instanceof SwitchProvider ? ((SwitchProvider)myUI).getCurrentTarget() : null; } @Override public JComponent getComponent() { - if (myUI instanceof SwitchProvider) { - return myUI.getComponent(); - } - - return this; + return myUI instanceof SwitchProvider ? myUI.getComponent() : this; } @Override @@ -177,35 +174,23 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene } } - private class MyFocusProxy extends Wrapper.FocusHolder implements DataProvider { - private MyFocusProxy() { - setOpaque(false); - setPreferredSize(new Dimension(0, 0)); - } - - @Override - @Nullable - public Object getData(@NonNls final String dataId) { - return myContentComponent.getData(dataId); - } - } - @Override public void addContent(@NotNull Content content, final int order) { - addContent(content, null, order); + doAddContent(content, order); } @Override public void addContent(@NotNull Content content) { - addContent(content, null, -1); + doAddContent(content, -1); } @Override public void addContent(@NotNull final Content content, final Object constraints) { - addContent(content, constraints, -1); + doAddContent(content, -1); } - private void addContent(@NotNull final Content content, final Object constraints, final int index) { + private void doAddContent(@NotNull final Content content, final int index) { + ApplicationManager.getApplication().assertIsDispatchThread(); if (myContents.contains(content)) return; ((ContentImpl)content).setManager(this); @@ -227,24 +212,26 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene @Override public boolean removeContent(@NotNull Content content, final boolean dispose) { - return removeContent(content, true, dispose); + return removeContent(content, true, dispose).isDone(); } @NotNull @Override public ActionCallback removeContent(@NotNull Content content, boolean dispose, final boolean trackFocus, final boolean forcedFocus) { final ActionCallback result = new ActionCallback(); - _removeContent(content, true, dispose).doWhenDone(new Runnable() { + removeContent(content, true, dispose).doWhenDone(new Runnable() { @Override public void run() { if (trackFocus) { Content current = getSelectedContent(); if (current != null) { setSelectedContent(current, true, true, !forcedFocus); - } else { + } + else { result.setDone(); } - } else { + } + else { result.setDone(); } } @@ -253,11 +240,9 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene return result; } - private boolean removeContent(final Content content, boolean trackSelection, boolean dispose) { - return _removeContent(content, trackSelection, dispose).isDone(); - } - - private ActionCallback _removeContent(Content content, boolean trackSelection, boolean dispose) { + @NotNull + private ActionCallback removeContent(@NotNull Content content, boolean trackSelection, boolean dispose) { + ApplicationManager.getApplication().assertIsDispatchThread(); int indexToBeRemoved = getIndexOfContent(content); if (indexToBeRemoved == -1) return new ActionCallback.Rejected(); @@ -604,43 +589,39 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene @Override public void addContentManagerListener(@NotNull ContentManagerListener l) { - myListeners.add(ContentManagerListener.class, l); + myListeners.add(0,l); } @Override public void removeContentManagerListener(@NotNull ContentManagerListener l) { - myListeners.remove(ContentManagerListener.class, l); + myListeners.remove(l); } private void fireContentAdded(Content content, int newIndex, ContentManagerEvent.ContentOperation operation) { ContentManagerEvent event = new ContentManagerEvent(this, content, newIndex, operation); - ContentManagerListener[] listeners = myListeners.getListeners(ContentManagerListener.class); - for (ContentManagerListener listener : listeners) { + for (ContentManagerListener listener : myListeners) { listener.contentAdded(event); } } private void fireContentRemoved(Content content, int oldIndex, ContentManagerEvent.ContentOperation operation) { ContentManagerEvent event = new ContentManagerEvent(this, content, oldIndex, operation); - ContentManagerListener[] listeners = myListeners.getListeners(ContentManagerListener.class); - for (ContentManagerListener listener : listeners) { + for (ContentManagerListener listener : myListeners) { listener.contentRemoved(event); } } private void fireSelectionChanged(Content content, ContentManagerEvent.ContentOperation operation) { ContentManagerEvent event = new ContentManagerEvent(this, content, myContents.indexOf(content), operation); - ContentManagerListener[] listeners = myListeners.getListeners(ContentManagerListener.class); - for (ContentManagerListener listener : listeners) { + for (ContentManagerListener listener : myListeners) { listener.selectionChanged(event); } } private boolean fireContentRemoveQuery(Content content, int oldIndex, ContentManagerEvent.ContentOperation operation) { ContentManagerEvent event = new ContentManagerEvent(this, content, oldIndex, operation); - ContentManagerListener[] listeners = myListeners.getListeners(ContentManagerListener.class); - for (ContentManagerListener listener : listeners) { + for (ContentManagerListener listener : myListeners) { listener.contentRemoveQuery(event); if (event.isConsumed()) { return false; @@ -692,13 +673,13 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene @Override public void addDataProvider(@NotNull final DataProvider provider) { - myContentComponent.addProvider(provider); + dataProviders.add(provider); } @Override - public void propertyChange(final PropertyChangeEvent evt) { - if (Content.PROP_COMPONENT.equals(evt.getPropertyName())) { - myContentWithChangedComponent.add((Content)evt.getSource()); + public void propertyChange(@NotNull PropertyChangeEvent event) { + if (Content.PROP_COMPONENT.equals(event.getPropertyName())) { + myContentWithChangedComponent.add((Content)event.getSource()); } } @@ -718,10 +699,10 @@ public class ContentManagerImpl implements ContentManager, PropertyChangeListene myDisposed = true; myContents.clear(); - mySelection = null; + mySelection.clear(); myContentWithChangedComponent.clear(); myUI = null; - myListeners = null; + myListeners.clear(); } @Override diff --git a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java index e50403abef45..a967245c9224 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java @@ -487,22 +487,24 @@ public class AbstractPopup implements JBPopup { if (dominantArea != null) { final Component focusedComponent = getWndManager().getFocusedComponent(myProject); - Window window = SwingUtilities.windowForComponent(focusedComponent); - JLayeredPane layeredPane; - if (window instanceof JFrame) { - layeredPane = ((JFrame)window).getLayeredPane(); - } - else if (window instanceof JDialog) { - layeredPane = ((JDialog)window).getLayeredPane(); - } - else if (window instanceof JWindow) { - layeredPane = ((JWindow)window).getLayeredPane(); - } - else { - throw new IllegalStateException("cannot find parent window: project=" + myProject + "; window=" + window); - } + if (focusedComponent != null) { + Window window = SwingUtilities.windowForComponent(focusedComponent); + JLayeredPane layeredPane; + if (window instanceof JFrame) { + layeredPane = ((JFrame)window).getLayeredPane(); + } + else if (window instanceof JDialog) { + layeredPane = ((JDialog)window).getLayeredPane(); + } + else if (window instanceof JWindow) { + layeredPane = ((JWindow)window).getLayeredPane(); + } + else { + throw new IllegalStateException("cannot find parent window: project=" + myProject + "; window=" + window); + } - return relativePointWithDominantRectangle(layeredPane, dominantArea); + return relativePointWithDominantRectangle(layeredPane, dominantArea); + } } return JBPopupFactory.getInstance().guessBestPopupLocation(dataContext); @@ -777,7 +779,9 @@ public class AbstractPopup implements JBPopup { Rectangle original = new Rectangle(targetBounds); if (myLocateWithinScreen) { - ScreenUtil.moveRectangleToFitTheScreen(targetBounds); + if (myMovable) { + ScreenUtil.moveRectangleToFitTheScreen(targetBounds); + } } if (myMouseOutCanceller != null) { diff --git a/platform/platform-impl/src/com/intellij/ui/popup/list/PopupListElementRenderer.java b/platform/platform-impl/src/com/intellij/ui/popup/list/PopupListElementRenderer.java index 5d657487f6a5..1428ffc9b29d 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/list/PopupListElementRenderer.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/list/PopupListElementRenderer.java @@ -16,7 +16,7 @@ package com.intellij.ui.popup.list; import com.intellij.icons.AllIcons; -import com.intellij.openapi.ui.popup.ListItemDescriptor; +import com.intellij.openapi.ui.popup.ListItemDescriptorAdapter; import com.intellij.openapi.ui.popup.ListPopupStep; import com.intellij.ui.ColorUtil; import com.intellij.util.ui.UIUtil; @@ -27,18 +27,13 @@ public class PopupListElementRenderer extends GroupedItemsListRenderer { private final ListPopupImpl myPopup; public PopupListElementRenderer(final ListPopupImpl aPopup) { - super(new ListItemDescriptor() { + super(new ListItemDescriptorAdapter() { @Override public String getTextFor(Object value) { return aPopup.getListStep().getTextFor(value); } @Override - public String getTooltipFor(Object value) { - return null; - } - - @Override public Icon getIconFor(Object value) { return aPopup.getListStep().getIconFor(value); } |