From: <kp...@us...> - 2008-04-09 08:34:58
|
Revision: 12391 http://jedit.svn.sourceforge.net/jedit/?rev=12391&view=rev Author: kpouer Date: 2008-04-09 01:34:51 -0700 (Wed, 09 Apr 2008) Log Message: ----------- When typing quickly in the activity logs filter, some exceptions were happening (patch #1938174) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/gui/FilteredListModel.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2008-04-09 07:06:24 UTC (rev 12390) +++ jEdit/trunk/doc/CHANGES.txt 2008-04-09 08:34:51 UTC (rev 12391) @@ -8,7 +8,7 @@ {{{ Bug Fixes -- Fixed NPE on SplashScreen init on certain strange X-window displays. +- Fixed NPE on SplashScreen init on certain strange X-window displays. (#1628432 - ezust) - Fixed an ArrayIndexOutOfBoundsException when opening search dialog on a fresh @@ -24,6 +24,8 @@ tags, so that is fixed. Also, add AT_LINE_START="TRUE" to the perl and shellscript heredoc rules' END tags. (Marcelo Vanzin) +- When typing quickly in the activity logs filter, some exceptions were happening + (patch #1938174) (Dale Anson) }}} {{{ Miscellaneous Modified: jEdit/trunk/org/gjt/sp/jedit/gui/FilteredListModel.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/FilteredListModel.java 2008-04-09 07:06:24 UTC (rev 12390) +++ jEdit/trunk/org/gjt/sp/jedit/gui/FilteredListModel.java 2008-04-09 08:34:51 UTC (rev 12391) @@ -102,34 +102,40 @@ } //}}} //{{{ setFilter() method - public void setFilter(String filter) + public void setFilter(final String filter) { - Set<Integer> selectedIndices = saveSelection(); - this.filter = filter; - if (filter != null && filter.length() > 0) - { - int size = delegated.getSize(); - filter = prepareFilter(filter); - Vector<Integer> indices = new Vector<Integer>(size); - Map<Integer, Integer> invertedIndices = new HashMap<Integer, Integer>(); - for (int i = 0; i < size; i++) + Runnable runner = new Runnable() { + public void run() { - if (passFilter(i, filter)) + Set<Integer> selectedIndices = saveSelection(); + FilteredListModel.this.filter = filter; + if (filter != null && filter.length() > 0) { - Integer delegatedIndice = Integer.valueOf(i); - indices.add(delegatedIndice); + int size = delegated.getSize(); + String prepped_filter = prepareFilter(filter); + Vector<Integer> indices = new Vector<Integer>(size); + Map<Integer, Integer> invertedIndices = new HashMap<Integer, Integer>(); + for (int i = 0; i < size; i++) + { + if (passFilter(i, prepped_filter)) + { + Integer delegatedIndice = Integer.valueOf(i); + indices.add(delegatedIndice); - invertedIndices.put(delegatedIndice, indices.size() - 1); + invertedIndices.put(delegatedIndice, indices.size() - 1); + } + } + FilteredListModel.this.invertedIndices = invertedIndices; + filteredIndices = indices; } + else + resetFilter(); + + fireContentsChanged(this, 0, getSize()); + restoreSelection(selectedIndices); } - this.invertedIndices = invertedIndices; - filteredIndices = indices; - } - else - resetFilter(); - - fireContentsChanged(this, 0, getSize()); - restoreSelection(selectedIndices); + }; + SwingUtilities.invokeLater(runner); } //}}} //{{{ prepareFilter() method @@ -170,7 +176,7 @@ protected void restoreSelection(Set<Integer> selectedIndices) { if (selectedIndices == null || getSize() == 0) - return; + return; for (Integer selectedIndex : selectedIndices) { @@ -214,36 +220,35 @@ } //}}} //{{{ getElementAt() method - public Object getElementAt(int index) + public Object getElementAt(int index) { int trueRowIndex = getTrueRow(index); return delegated.getElementAt(trueRowIndex); } //}}} //{{{ getSize() method - public int getSize() + public int getSize() { if (filteredIndices == null) return delegated.getSize(); return filteredIndices.size(); } //}}} - + //{{{ contentsChanged() method public void contentsChanged(ListDataEvent e) { setFilter(filter); } //}}} - + //{{{ intervalAdded() method - public void intervalAdded(ListDataEvent e) + public void intervalAdded(ListDataEvent e) { setFilter(filter); } //}}} - + //{{{ intervalRemoved() method - public void intervalRemoved(ListDataEvent e) + public void intervalRemoved(ListDataEvent e) { setFilter(filter); } //}}} - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |