Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,6 @@ OpenIDE-Module-Long-Description=Favorites module enables you to create a view of

# Options Export
Favorites.Options.Export.displayName=Favorites

# Automatically open when first file opened for editing
Favorites.openOnFirstFile=true
36 changes: 28 additions & 8 deletions platform/favorites/src/org/netbeans/modules/favorites/Module.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,24 +32,35 @@
import org.netbeans.swing.plaf.LFCustoms;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.loaders.DataObject;
import org.openide.util.NbBundle;
import org.openide.util.NbPreferences;
import org.openide.windows.Mode;
import org.openide.windows.OnShowing;
import org.openide.windows.TopComponent;
import org.openide.windows.WindowManager;

/**
* For lifecycle tasks.
*
* @author mbien
*/
public final class Module {

private static final String INITIAL_OPEN_DONE_KEY = "initial-open-done"; //NOI18N
private static final String INITIAL_OPEN_BRANDING_KEY = "Favorites.openOnFirstFile"; //NOI18N

private Module() {}

@OnShowing
public final static class EDTInit implements Runnable {

private final boolean openOnFirstFile;

public EDTInit() {
openOnFirstFile = Boolean.parseBoolean(
NbBundle.getMessage(Module.class, INITIAL_OPEN_BRANDING_KEY));
}

@Override
public void run() {
registerFavAppenderFunction();
Expand All @@ -73,19 +84,23 @@ private void registerFavAppenderFunction() {
UIManager.put(LFCustoms.FILECHOOSER_SHORTCUTS_FILESFUNCTION, favAppender);
}

// very first on-editor-open event will also open the Favorites tab
// very first file editor opened will also open the Favorites tab
private void attachFirstEditorOpenListener() {
if (!openOnFirstFile) {
return;
}
Preferences prefs = NbPreferences.forModule(Module.class);
if (prefs.getBoolean(INITIAL_OPEN_DONE_KEY, false)) {
return;
}
WindowManager wm = WindowManager.getDefault();
wm.addPropertyChangeListener(new PropertyChangeListener() {
TopComponent.Registry registry = TopComponent.getRegistry();
registry.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if ("activeMode".equals(evt.getPropertyName()) //NOI18N
&& evt.getNewValue() instanceof Mode mode
&& wm.isEditorMode(mode)) {
if (TopComponent.Registry.PROP_TC_OPENED.equals(evt.getPropertyName())
&& evt.getNewValue() instanceof TopComponent tc
&& hasFileReference(tc)
&& WindowManager.getDefault().isEditorTopComponent(tc)) {
try {
Tab favTab = Tab.findDefault();
if (favTab != null && !favTab.wasOpened() && !favTab.isOpened()) {
Expand All @@ -95,13 +110,18 @@ public void propertyChange(PropertyChangeEvent evt) {
prefs.putBoolean(INITIAL_OPEN_DONE_KEY, true);
PropertyChangeListener thisListener = this;
SwingUtilities.invokeLater(() -> {
wm.removePropertyChangeListener(thisListener);
registry.removePropertyChangeListener(thisListener);
});
}
}

}
});
}

private boolean hasFileReference(TopComponent tc) {
return tc.getLookup().lookup(DataObject.class) != null;
}
}

}