public void hide( CDockable dockable ){
if( !dockable.isVisible() )
return;
DockRegister register = frontend.getController().getRegister();
try{
register.setStalled( true );
Map<Dockable, ExtendedMode> nonBasic = new HashMap<Dockable, ExtendedMode>();
for( Dockable check : locationManager.listDockables() ){
if( check != dockable.intern() ){
CLocationMode mode = locationManager.getCurrentMode( check );
if( mode != null && !mode.isBasicMode() ){
nonBasic.put( check, mode.getExtendedMode() );
}
}
}
Dockable[] focusHistory = getController().getFocusHistory().getHistory();
boolean changes = locationManager.ensureBasicModes();
frontend.hide( dockable.intern() );
if( changes ){
for( Dockable focused : focusHistory ){
ExtendedMode mode = nonBasic.get( focused );
if( mode != null ){
if( frontend.isShown( focused ) && locationManager.isModeAvailable( focused, mode )){
locationManager.setMode( focused, mode );
}
}
}
}
}
finally{
register.setStalled( false );
}
}