From: Marcelo V. <va...@us...> - 2017-01-27 03:32:56
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "ProjectViewer jEdit plugin". The branch, master has been updated via c353e921af86315d9c5902d2b1251156d6bd4bfa (commit) from 465569179a2499f28ea80d5f62ff8ba1e4abaf66 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit: http://sourceforge.net/p/jedit/ProjectViewer/ci/c353e921af86315d9c5902d2b1251156d6bd4bfa/ tree: http://sourceforge.net/p/jedit/ProjectViewer/ci/c353e921af86315d9c5902d2b1251156d6bd4bfa/tree/ commit c353e921af86315d9c5902d2b1251156d6bd4bfa Author: Marcelo Vanzin <va...@us...> Date: Thu Jan 26 19:30:41 2017 -0800 Defer focusing of tree node until after UI is updated. Focusing the tree node on buffer change can become really expensive on large project trees and I was seeing noticeable lag in the UI because of it. It seemed to become worse with multiple views, to the point of the jEdit UI becoming almost hard to use. Deferring the action until after the buffer change event has been fully processed makes things better. diff --git a/projectviewer/PVActions.java b/projectviewer/PVActions.java index 0ed4d93..f34c44a 100644 --- a/projectviewer/PVActions.java +++ b/projectviewer/PVActions.java @@ -174,15 +174,15 @@ public final class PVActions { VPTProject curr = ProjectViewer.getActiveProject(view); if (curr != null) { String path = curr.getRootPath(); - VFSBrowser.browseDirectory(view, path); + VFSBrowser.browseDirectory(view, path); } else { - ProjectViewer viewer = ProjectViewer.getViewer(view); + ProjectViewer viewer = ProjectViewer.getViewer(view); viewer.setStatus(jEdit.getProperty("projectviewer.no_active_project")); return; } - } + } //}}} - + //{{{ +_launchCurrentBuffer(View)_ : void /** * Tries to launch the current buffer in the configured browser for @@ -226,31 +226,13 @@ public final class PVActions { * @param where Where to look for the node (null will start the * search at the active node for the given view). */ - public static boolean focusActiveBuffer(View v, VPTNode where) { - if (where == null) - where = ProjectViewer.getActiveNode(v, ProjectViewer.FORCE); - if (where != null) { - if (where.isProject()) { - VPTNode n = ((VPTProject)where).getChildNode(v.getBuffer().getPath()); - if (n != null) { - ProjectViewer pv = ProjectViewer.getViewer(v); - if (pv != null) { - JTree current = pv.getCurrentTree(); - TreeNode[] ns = ((DefaultTreeModel)current.getModel()).getPathToRoot(n); - TreePath path = new javax.swing.tree.TreePath(ns); - current.setSelectionPath(path); - current.scrollPathToVisible(path); - } - return true; - } - } else { - // group - for (int i = 0; i < where.getChildCount(); i++) - if (focusActiveBuffer(v, (VPTNode) where.getChildAt(i))) - return true; + public static void focusActiveBuffer(final View v, final VPTNode where) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + focusActiveBufferImpl(v, where); } - } - return false; + }); } //}}} //{{{ +_newFile(View)_ : void @@ -293,7 +275,7 @@ public final class PVActions { if (n.isProject() || n.isGroup()) pv.setActiveNode(v, n); } //}}} - + //{{{ +_openParentGroup(View)_ : void public static void openParentGroup(View v) { VPTNode n = projectviewer.ProjectViewer.getActiveNode(v); @@ -328,7 +310,7 @@ public final class PVActions { // we can ignore null pv, it works with null as well VPTNode oldNode = p.getChildNode(path); - + if (oldNode != null) { ProjectViewer.showMessage( @@ -390,7 +372,7 @@ public final class PVActions { VPTGroup parent, int flags) { return AddProjectAction.createProject(proj, parent, flags); - } + } /** Opens project creation dialog, like in "Add project" action, but * it does not depend on currently selected node. @@ -404,7 +386,7 @@ public final class PVActions { public static VPTProject createProject(VPTGroup parent, int flags) { return AddProjectAction.createProject(parent, flags); - } + } /** Opens project creation dialog. * Same as {@link #createProject(VPTGroup, int)}, but with no flags. @@ -414,7 +396,7 @@ public final class PVActions { { return AddProjectAction.createProject(parent, AddProjectAction.NO_FLAGS); - } + } //}}} //{{{ +_pvActionWrapper(Action, View, boolean)_ : void @@ -621,5 +603,32 @@ public final class PVActions { return path; } + private static boolean focusActiveBufferImpl(View v, VPTNode where) { + if (where == null) + where = ProjectViewer.getActiveNode(v, ProjectViewer.FORCE); + if (where != null) { + if (where.isProject()) { + VPTNode n = ((VPTProject)where).getChildNode(v.getBuffer().getPath()); + if (n != null) { + ProjectViewer pv = ProjectViewer.getViewer(v); + if (pv != null) { + JTree current = pv.getCurrentTree(); + TreeNode[] ns = ((DefaultTreeModel)current.getModel()).getPathToRoot(n); + TreePath path = new javax.swing.tree.TreePath(ns); + current.setSelectionPath(path); + current.scrollPathToVisible(path); + } + return true; + } + } else { + // group + for (int i = 0; i < where.getChildCount(); i++) + if (focusActiveBufferImpl(v, (VPTNode) where.getChildAt(i))) + return true; + } + } + return false; + } + } ----------------------------------------------------------------------- Summary of changes: projectviewer/PVActions.java | 75 +++++++++++++++++++++++------------------ 1 files changed, 42 insertions(+), 33 deletions(-) hooks/post-receive -- ProjectViewer jEdit plugin |