Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 62287 Details for
Bug 154571
[Viewers] Protect against label providers that spin the event loop
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
next patch (incremental)
patch-154571b.txt (text/plain), 5.71 KB, created by
Boris Bokowski
on 2007-03-28 16:33:32 EDT
(
hide
)
Description:
next patch (incremental)
Filename:
MIME Type:
Creator:
Boris Bokowski
Created:
2007-03-28 16:33:32 EDT
Size:
5.71 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jface >Index: src/org/eclipse/jface/viewers/AbstractTreeViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java,v >retrieving revision 1.115 >diff -u -r1.115 AbstractTreeViewer.java >--- src/org/eclipse/jface/viewers/AbstractTreeViewer.java 28 Mar 2007 03:54:15 -0000 1.115 >+++ src/org/eclipse/jface/viewers/AbstractTreeViewer.java 28 Mar 2007 20:33:02 -0000 >@@ -1720,17 +1720,24 @@ > > /* (non-Javadoc) Method declared on StructuredViewer. */ > protected void internalRefresh(Object element, boolean updateLabels) { >- // If element is null, do a full refresh. >- if (element == null) { >- internalRefresh(getControl(), getRoot(), true, updateLabels); >+ if (isBusy()) > return; >- } >- Widget[] items = findItems(element); >- if (items.length != 0) { >- for (int i = 0; i < items.length; i++) { >- // pick up structure changes too >- internalRefresh(items[i], element, true, updateLabels); >+ busy = true; >+ try { >+ // If element is null, do a full refresh. >+ if (element == null) { >+ internalRefresh(getControl(), getRoot(), true, updateLabels); >+ return; > } >+ Widget[] items = findItems(element); >+ if (items.length != 0) { >+ for (int i = 0; i < items.length; i++) { >+ // pick up structure changes too >+ internalRefresh(items[i], element, true, updateLabels); >+ } >+ } >+ } finally { >+ busy = false; > } > } > >Index: src/org/eclipse/jface/viewers/AbstractTableViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTableViewer.java,v >retrieving revision 1.9 >diff -u -r1.9 AbstractTableViewer.java >--- src/org/eclipse/jface/viewers/AbstractTableViewer.java 28 Mar 2007 03:54:15 -0000 1.9 >+++ src/org/eclipse/jface/viewers/AbstractTableViewer.java 28 Mar 2007 20:33:01 -0000 >@@ -73,8 +73,14 @@ > IContentProvider contentProvider = getContentProvider(); > // If we are building lazily then request lookup now > if (contentProvider instanceof ILazyContentProvider) { >- ((ILazyContentProvider) contentProvider) >- .updateElement(index); >+ boolean oldBusy = busy; >+ busy = false; >+ try { >+ ((ILazyContentProvider) contentProvider) >+ .updateElement(index); >+ } finally { >+ busy = oldBusy; >+ } > return; > } > } >@@ -468,17 +474,23 @@ > List result = new ArrayList(); > int[] selectionIndices = doGetSelectionIndices(); > if (getContentProvider() instanceof ILazyContentProvider) { >- ILazyContentProvider lazy = (ILazyContentProvider) getContentProvider(); >- for (int i = 0; i < selectionIndices.length; i++) { >- int selectionIndex = selectionIndices[i]; >- lazy.updateElement(selectionIndex);// Start the update >- Object element = doGetItem(selectionIndex).getData(); >- // Only add the element if it got updated. >- // If this is done deferred the selection will >- // be incomplete until selection is finished. >- if (element != null) { >- result.add(element); >+ boolean oldBusy = busy; >+ busy = false; >+ try { >+ ILazyContentProvider lazy = (ILazyContentProvider) getContentProvider(); >+ for (int i = 0; i < selectionIndices.length; i++) { >+ int selectionIndex = selectionIndices[i]; >+ lazy.updateElement(selectionIndex);// Start the update >+ Object element = doGetItem(selectionIndex).getData(); >+ // Only add the element if it got updated. >+ // If this is done deferred the selection will >+ // be incomplete until selection is finished. >+ if (element != null) { >+ result.add(element); >+ } > } >+ } finally { >+ busy = oldBusy; > } > } else { > for (int i = 0; i < selectionIndices.length; i++) { >@@ -609,18 +621,25 @@ > * boolean) > */ > protected void internalRefresh(Object element, boolean updateLabels) { >- applyEditorValue(); >- if (element == null || equals(element, getRoot())) { >- if (virtualManager == null) { >- internalRefreshAll(updateLabels); >+ if (isBusy()) >+ return; >+ busy = true; >+ try { >+ applyEditorValue(); >+ if (element == null || equals(element, getRoot())) { >+ if (virtualManager == null) { >+ internalRefreshAll(updateLabels); >+ } else { >+ internalVirtualRefreshAll(); >+ } > } else { >- internalVirtualRefreshAll(); >- } >- } else { >- Widget w = findItem(element); >- if (w != null) { >- updateItem(w, element); >+ Widget w = findItem(element); >+ if (w != null) { >+ updateItem(w, element); >+ } > } >+ } finally { >+ busy = false; > } > } > >Index: src/org/eclipse/jface/viewers/ColumnViewer.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java,v >retrieving revision 1.30 >diff -u -r1.30 ColumnViewer.java >--- src/org/eclipse/jface/viewers/ColumnViewer.java 28 Mar 2007 03:54:15 -0000 1.30 >+++ src/org/eclipse/jface/viewers/ColumnViewer.java 28 Mar 2007 20:33:02 -0000 >@@ -475,28 +475,6 @@ > return false; > } > >- public void refresh(Object element) { >- if (isBusy()) >- return; >- busy = true; >- try { >- super.refresh(element); >- } finally { >- busy = false; >- } >- } >- >- public void refresh(Object element, boolean updateLabels) { >- if (isBusy()) >- return; >- busy = true; >- try { >- super.refresh(element, updateLabels); >- } finally { >- busy = false; >- } >- } >- > public void update(Object element, String[] properties) { > if (isBusy()) > return;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 154571
:
62175
|
62287
|
65145