Index: src/wp-admin/js/widgets.js
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- src/wp-admin/js/widgets.js	(revision 32987)
+++ src/wp-admin/js/widgets.js	(revision )
@@ -94,6 +94,7 @@
 			helper: 'clone',
 			zIndex: 100,
 			containment: '#wpwrap',
+			refreshPositions: true,
 			start: function( event, ui ) {
 				var chooser = $(this).find('.widgets-chooser');
 
@@ -117,6 +118,38 @@
 			}
 		});
 
+		var $hoveredSidebar = false;
+
+		function closeWidgetWrap( widget ) {
+			var $widget = $( widget.target );
+			$hoveredSidebar.addClass( 'closed' );
+			$widget.css( 'min-height', '' );
+			$hoveredSidebar = false;
+		}
+
+		sidebars.droppable( {
+			tolerance: 'touch',
+			over     : function( e, ui ) {
+				var $widget = $( e.target ),
+					$wrap = $widget.parent();
+
+				if ( $hoveredSidebar && ! $wrap.is( $hoveredSidebar ) ) {
+					closeWidgetWrap( e );
+				}
+
+				if ( $wrap.hasClass( 'closed' ) ) {
+					$hoveredSidebar = $wrap;
+					$wrap.removeClass( 'closed' );
+				}
+			},
+
+			out: function( e, ui ) {
+				if ( $hoveredSidebar ) {
+					closeWidgetWrap( e );
+				}
+			},
+		} );
+
 		sidebars.sortable({
 			placeholder: 'widget-placeholder',
 			items: '> .widget',
@@ -147,6 +180,9 @@
 				var addNew, widgetNumber, $sidebar, $children, child, item,
 					$widget = ui.item,
 					id = the_id;
+
+				// Reset the var to hold a previously closed sidebar
+				$hoveredSidebar = false;
 
 				if ( $widget.hasClass('deleting') ) {
 					wpWidgets.save( $widget, 1, 0, 1 ); // delete widget
