Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 283586 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java (-18 / +45 lines)
Lines 70-75 Link Here
70
import org.eclipse.swt.custom.CTabFolderEvent;
70
import org.eclipse.swt.custom.CTabFolderEvent;
71
import org.eclipse.swt.custom.CTabItem;
71
import org.eclipse.swt.custom.CTabItem;
72
import org.eclipse.swt.custom.StackLayout;
72
import org.eclipse.swt.custom.StackLayout;
73
import org.eclipse.swt.events.DisposeEvent;
74
import org.eclipse.swt.events.DisposeListener;
73
import org.eclipse.swt.events.KeyEvent;
75
import org.eclipse.swt.events.KeyEvent;
74
import org.eclipse.swt.events.KeyListener;
76
import org.eclipse.swt.events.KeyListener;
75
import org.eclipse.swt.events.SelectionEvent;
77
import org.eclipse.swt.events.SelectionEvent;
Lines 270-278 Link Here
270
	public void launchChanged(ILaunch launch) {}
272
	public void launchChanged(ILaunch launch) {}
271
273
272
	public void launchRemoved(ILaunch launch) {
274
	public void launchRemoved(ILaunch launch) {
273
		IMemoryBlockRetrieval retrieval = ((IMemoryBlockRetrieval) launch.getAdapter(IMemoryBlockRetrieval.class));
275
		// For CDT launch is not adaptable to memory rendering, but the debug targets do.
274
		if(retrieval != null)
276
		for (IDebugTarget target : launch.getDebugTargets()) {
275
			releaseTabFolder(retrieval);
277
			IMemoryBlockRetrieval retrieval = ((IMemoryBlockRetrieval) target.getAdapter(IMemoryBlockRetrieval.class));
278
			if(retrieval != null)
279
				releaseTabFolder(retrieval);
280
		}
276
	}
281
	}
277
	
282
	
278
	public IMemoryRenderingContainer getContainer(String id) {
283
	public IMemoryRenderingContainer getContainer(String id) {
Lines 366-372 Link Here
366
	
371
	
367
	private CTabFolder createTabFolder(Composite parent)
372
	private CTabFolder createTabFolder(Composite parent)
368
	{
373
	{
369
		CTabFolder folder = new CTabFolder(parent, SWT.NO_REDRAW_RESIZE | SWT.NO_TRIM | SWT.FLAT);
374
		final CTabFolder folder = new CTabFolder(parent, SWT.NO_REDRAW_RESIZE | SWT.NO_TRIM | SWT.FLAT);
370
		
375
		
371
		ColorRegistry reg = JFaceResources.getColorRegistry();
376
		ColorRegistry reg = JFaceResources.getColorRegistry();
372
		Color c1 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"), //$NON-NLS-1$
377
		Color c1 = reg.get("org.eclipse.ui.workbench.ACTIVE_TAB_BG_START"), //$NON-NLS-1$
Lines 376-392 Link Here
376
		folder.setSimple(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
381
		folder.setSimple(PlatformUI.getPreferenceStore().getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
377
		folder.setBorderVisible(true);
382
		folder.setBorderVisible(true);
378
		
383
		
384
		// listener to dispose rendering resources for each closed tab
379
		folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
385
		folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
380
			public void close(CTabFolderEvent event) {
386
			public void close(CTabFolderEvent event) {
381
				event.doit = false;
387
				event.doit = true;
382
				CTabItem item = (CTabItem) event.item;
388
				CTabItem item = (CTabItem) event.item;
383
				IMemoryRenderingContainer container = (IMemoryRenderingContainer) item.getData(KEY_CONTAINER);
389
				disposeTab(item);
384
				fCurrentContainers.remove( container );
390
			}
391
		});
392
		
393
		// listener to dispose rendering resources for all tab items when view part is closed 
394
		folder.addDisposeListener(new DisposeListener() {
395
			public void widgetDisposed(DisposeEvent e) {
396
				for(CTabItem tab : folder.getItems()) {
397
					disposeTab(tab);
398
				}
399
				folder.removeDisposeListener(this);
385
			}
400
			}
386
		});
401
		});
387
		return folder;
402
		return folder;
388
	}
403
	}
389
	
404
	
405
	/**
406
	 * dispose rendering resources associated with the tab item
407
	 * @param item
408
	 */
409
	private void disposeTab(CTabItem item )  {
410
		if (item.isDisposed())
411
			return;
412
		
413
		IMemoryRenderingContainer container = (IMemoryRenderingContainer) item.getData(KEY_CONTAINER);
414
		fCurrentContainers.remove( container );
415
		IMemoryRendering rendering = (IMemoryRendering) item.getData(KEY_RENDERING);
416
		// always deactivate rendering before disposing it.
417
		rendering.deactivated();
418
		rendering.dispose();
419
	}
420
	
390
	private CTabItem createTab(CTabFolder tabFolder, int index) {
421
	private CTabItem createTab(CTabFolder tabFolder, int index) {
391
		int swtStyle = SWT.CLOSE;
422
		int swtStyle = SWT.CLOSE;
392
		CTabItem tab = new CTabItem(tabFolder, swtStyle, index);
423
		CTabItem tab = new CTabItem(tabFolder, swtStyle, index);
Lines 505-518 Link Here
505
				else
536
				else
506
				{
537
				{
507
					CTabFolder newFolder = this.createTabFolder(fRenderingsComposite);
538
					CTabFolder newFolder = this.createTabFolder(fRenderingsComposite);
508
					newFolder.addCTabFolder2Listener(new CTabFolder2Adapter() {
539
509
						public void close(CTabFolderEvent event) {
510
							event.doit = true;
511
							CTabItem item = (CTabItem) event.item;
512
							IMemoryRenderingContainer container = (IMemoryRenderingContainer) item.getData(KEY_CONTAINER);
513
							fCurrentContainers.remove( container );
514
						}
515
					});
516
					newFolder.addSelectionListener(new SelectionListener()
540
					newFolder.addSelectionListener(new SelectionListener()
517
					{
541
					{
518
						public void widgetDefaultSelected(SelectionEvent e) {}
542
						public void widgetDefaultSelected(SelectionEvent e) {}
Lines 647-658 Link Here
647
		if(folder != null)
671
		if(folder != null)
648
		{
672
		{
649
			for(CTabItem tab : folder.getItems()) {
673
			for(CTabItem tab : folder.getItems()) {
650
				IMemoryRenderingContainer container = (IMemoryRenderingContainer) tab.getData(KEY_CONTAINER);
674
				disposeTab(tab);
651
				fCurrentContainers.remove( container );
652
				tab.dispose();
653
			}
675
			}
654
		}
676
		}
655
		fContextFolders.remove(context);
677
		fContextFolders.remove(context);
678
		folder.dispose();
679
680
		if (fStackLayout.topControl.equals(folder)) {
681
			handleUnsupportedSelection();
682
		}
656
	}
683
	}
657
	
684
	
658
	class SelectionProviderAdapter implements ISelectionProvider {
685
	class SelectionProviderAdapter implements ISelectionProvider {

Return to bug 283586