Index: ui/org/eclipse/debug/internal/ui/views/memory/ASCIIRenderer.java =================================================================== RCS file: /home/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/ASCIIRenderer.java,v retrieving revision 1.3 diff -u -r1.3 ASCIIRenderer.java --- ui/org/eclipse/debug/internal/ui/views/memory/ASCIIRenderer.java 10 Nov 2004 22:19:53 -0000 1.3 +++ ui/org/eclipse/debug/internal/ui/views/memory/ASCIIRenderer.java 5 Jan 2005 20:22:19 -0000 @@ -49,7 +49,7 @@ byte[] bytes = super.getBytes(renderingId, address, currentValues, data); // undo the replacement of 1's to 0's. - for (int i=0; i= 3 && table.getItemCount() - (index+getNumberOfVisibleLines()) >= 3) { // update cursor position - table.setTopIndex(index); + setTopIndex(table, index); if (!isAddressVisible(fSelectedAddress)) { @@ -2084,7 +2176,7 @@ { updateCursorPosition(); updateTableSelection(); - table.setTopIndex(index); + setTopIndex(table, index); // BUG 64831: to get around SWT problem with // the table cursor not painted properly after @@ -2127,7 +2219,7 @@ if (index >= 0) { - table.setTopIndex(index); + setTopIndex(table, index); if (!isAddressVisible(fSelectedAddress)) { @@ -2137,7 +2229,7 @@ { updateCursorPosition(); updateTableSelection(); - table.setTopIndex(index); + setTopIndex(table, index); // BUG 64831: to get around SWT problem with // the table cursor not painted properly after @@ -2153,6 +2245,7 @@ { displayError(e); } + fEvtHandleLock.releaseLock(this); } /** @@ -2238,11 +2331,14 @@ /* (non-Javadoc) * @see org.eclipse.debug.ui.ISynchronizedMemoryBlockView#propertyChanged(java.lang.String, java.lang.Object) */ - public void propertyChanged(String propertyName, Object value) + public void propertyChanged(Object evtSrc, String propertyName, Object value) { if (isDisplayingError()) return; + if (evtSrc == this) + return; + if (propertyName.equals(IMemoryViewConstants.PROPERTY_SELECTED_ADDRESS) && value instanceof BigInteger) { try { @@ -2441,6 +2537,29 @@ // an error and if it's enabled if (!isDisplayingError() && enabled && fEnabled) synchronize(); + } + + private static int getTopVisibleIndex(Table table) + { + MemoryViewUtil.linuxWorkAround(table); + int index = table.getTopIndex(); + + TableItem item = table.getItem(index); + + MemoryViewUtil.linuxWorkAround(table); + while (item.getBounds(0).y < 0) + { + index++; + item = table.getItem(index); + } + + return index; + } + + private static void setTopIndex(Table table, int index) + { + MemoryViewUtil.linuxWorkAround(table); + table.setTopIndex(index); } } Index: ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewUtil.java =================================================================== RCS file: /home/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewUtil.java,v retrieving revision 1.6 diff -u -r1.6 MemoryViewUtil.java --- ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewUtil.java 23 Nov 2004 14:23:10 -0000 1.6 +++ ui/org/eclipse/debug/internal/ui/views/memory/MemoryViewUtil.java 5 Jan 2005 20:22:19 -0000 @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.views.memory; +import org.eclipse.core.runtime.Platform; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IMemoryBlockManager; import org.eclipse.debug.core.model.IDebugElement; @@ -20,6 +21,7 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; /** * Util class for Memory View @@ -97,4 +99,24 @@ { return DebugPlugin.getDefault().getMemoryBlockManager(); } + + + static void linuxWorkAround(Table table) + { + if (table == null) + return; + + if (table.isDisposed()) + return; + + if(isLinuxGTK()) + while(table.getDisplay().readAndDispatch()){} + } + + static boolean isLinuxGTK() + { + String ws = Platform.getWS(); + return ws.equals(Platform.WS_GTK); + } + } Index: ui/org/eclipse/debug/internal/ui/views/memory/SynchronizeInfo.java =================================================================== RCS file: /home/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/SynchronizeInfo.java,v retrieving revision 1.7 diff -u -r1.7 SynchronizeInfo.java --- ui/org/eclipse/debug/internal/ui/views/memory/SynchronizeInfo.java 6 Dec 2004 20:57:38 -0000 1.7 +++ ui/org/eclipse/debug/internal/ui/views/memory/SynchronizeInfo.java 5 Jan 2005 20:22:19 -0000 @@ -49,12 +49,14 @@ ISynchronizedMemoryBlockView fView; String fPropertyId; Object fValue; + Object fSrc; - PropertyChangeNotifier(ISynchronizedMemoryBlockView view, String propertyId, Object value) + PropertyChangeNotifier(ISynchronizedMemoryBlockView view, String propertyId, Object value, Object eventSrc) { fView = view; fPropertyId = propertyId; fValue = value; + fSrc = eventSrc; } /* (non-Javadoc) @@ -68,7 +70,7 @@ * @see org.eclipse.core.runtime.ISafeRunnable#run() */ public void run() throws Exception { - fView.propertyChanged(fPropertyId, fValue); + fView.propertyChanged(fSrc, fPropertyId, fValue); } } @@ -202,7 +204,7 @@ * Fire property change events * @param propertyId */ - public void firePropertyChanged(final String propertyId) + public void firePropertyChanged(final Object evtSrc, final String propertyId) { if (!DebugUIPlugin.getDefault().getMemoryBlockViewSynchronizer().isEnabled()) return; @@ -230,7 +232,7 @@ // if view is enabled and if it's a valid property if (view.isEnabled() && listener.isValidProperty(propertyId)){ - PropertyChangeNotifier notifier = new PropertyChangeNotifier(view, propertyId, value); + PropertyChangeNotifier notifier = new PropertyChangeNotifier(view, propertyId, value, evtSrc); Platform.run(notifier); } } Index: ui/org/eclipse/debug/internal/ui/views/memory/ViewTabCursorManager.java =================================================================== RCS file: /home/eclipse/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/ViewTabCursorManager.java,v retrieving revision 1.10 diff -u -r1.10 ViewTabCursorManager.java --- ui/org/eclipse/debug/internal/ui/views/memory/ViewTabCursorManager.java 8 Dec 2004 21:37:24 -0000 1.10 +++ ui/org/eclipse/debug/internal/ui/views/memory/ViewTabCursorManager.java 5 Jan 2005 20:22:19 -0000 @@ -100,22 +100,21 @@ private void handleTableMouseEvent(MouseEvent e) { // figure out new cursor position based on here the mouse is pointing - TableItem[] selections = fTableViewer.getTable().getSelection(); + TableItem[] tableItems = fTableViewer.getTable().getItems(); TableItem selectedRow = null; int colNum = -1; + int numCol = fTableViewer.getColumnProperties().length; - if (selections.length > 0) + for (int j=0; j