+ function preserveSelectedStateOnDisable( widget ) {
+ var widgetWasSelected;
+
+ if ( !widget ) {
+ return;
+ }
+
+ // 'disable' event fires if disabled state changes
+ widget.on( 'disable', function ( disabled ) {
+ if ( disabled ) {
+ // Disabling an enabled widget
+ // Save selected and set selected to false
+ widgetWasSelected = widget.isSelected();
+ widget.setSelected( false );
+ } else {
+ // Enabling a disabled widget
+ // Set selected to the saved value
+ if ( widgetWasSelected !== undefined ) {
+ widget.setSelected( widgetWasSelected );
+ }
+ widgetWasSelected = undefined;
+ }
+ } );
+ }
+