Index: src/wp-admin/includes/user.php
===================================================================
--- src/wp-admin/includes/user.php	(revision 27046)
+++ src/wp-admin/includes/user.php	(working copy)
@@ -92,6 +92,7 @@
 
 	if ( $update ) {
 		$user->rich_editing = isset( $_POST['rich_editing'] ) && 'false' == $_POST['rich_editing'] ? 'false' : 'true';
+		$user->dfw_mouse = isset( $_POST['dfw_mouse'] ) && 'true' == $_POST['dfw_mouse'] ? 'true' : 'false';
 		$user->admin_color = isset( $_POST['admin_color'] ) ? sanitize_text_field( $_POST['admin_color'] ) : 'fresh';
 		$user->show_admin_bar_front = isset( $_POST['admin_bar_front'] ) ? 'true' : 'false';
 	}
Index: src/wp-admin/js/wp-fullscreen.js
===================================================================
--- src/wp-admin/js/wp-fullscreen.js	(revision 27046)
+++ src/wp-admin/js/wp-fullscreen.js	(working copy)
@@ -11,7 +11,8 @@
 		uiScrollTop = 0,
 		transitionend = 'transitionend webkitTransitionEnd',
 		$body = $( document.body ),
-		$document = $( document );
+		$document = $( document ),
+		MouseInToolbar = false;
 
 	/**
 	 * PubSub
@@ -101,7 +102,7 @@
 			$body.addClass('wp-dfw-show-ui');
 		}
 
-		if ( hide === 'hide' ) {
+		if ( hide === 'hide' || hide === 'peak' ) {
 			uiTimer = setTimeout( _hideUI, 2000 );
 		}
 	};
@@ -198,6 +199,44 @@
 			s.$dfwTitle = null;
 		}
 
+		/*
+			Bind mouse/touch events to the document root, this usually catches events anywhere on screen 
+			*except* within TinyMCE.
+
+			To capture events within TinyMCE's iframe we also have to bind to the iframe that TinyMCE creates 
+			for it's contents.
+
+			For the mouse capture on the document we don't ru toggleUI as otherwise it will cancel out the
+			behaviour of keeping the toolbar visible when the pointer is inside of it.
+		*/
+		var wpfs_capture = wp_fullscreen_mouse();
+		
+		if( wpfs_capture == true ) {
+			var fs_body = $(document);
+			
+			// Show/hide the ui when a touch event happens anywhere on screen.
+			fs_body.on( 'touchstart.wpdfw', function() {
+				toggleUI('show');
+			}).on( 'touchend', function() {
+				toggleUI('hide');
+			});
+
+			// Show the ui when the mouse moves.
+			fs_body.on( 'mousemove.wpdfw', function() {
+				if( MouseInToolbar == false ) {
+					toggleUI('peak');
+				}
+			});
+
+			// Bind to the iframe, we don't need to check if we're in the toolbar as we can't be, we're in the iframe ;)
+			var content_ifr = document.getElementById('content_ifr');
+			if( content_ifr != null ) {
+				content_ifr.contentWindow.document.onmousemove = function() {
+					toggleUI('peak');
+				}
+			}
+		}
+		
 		api.ui.fade( 'show', 'showing', 'shown' );
 	};
 
@@ -210,6 +249,21 @@
 		if ( ! s.visible )
 			return;
 
+		var wpfs_capture = wp_fullscreen_mouse();
+		
+		if( wpfs_capture == true ) {
+			// Clear out the mouse/touch events we setup when we enabled fullscreen.
+			var fs_body = $(document);
+			fs_body.off( 'mousemove.wpdfw' );
+			fs_body.off( 'touchstart.wpdfw' );
+
+			// Clear out the iframe mouse event we setup when we enabled fullscreen.
+			var content_ifr = document.getElementById('content_ifr');
+			if( content_ifr != null ) {
+				content_ifr.contentWindow.document.onmousemove = null;
+			}
+		}
+		
 		api.ui.fade( 'hide', 'hiding', 'hidden' );
 	};
 
@@ -510,12 +564,15 @@
 				}
 			});
 
+			// Show/hide the toolbar when entering/leaving it on the screen.
 			toolbar.on( 'mouseenter', function() {
+				MouseInToolbar = true;
 				toggleUI('show');
 			}).on( 'mouseleave', function() {
+				MouseInToolbar = false;
 				toggleUI('hide');
 			});
-
+			
 			// Bind buttons
 			$('#wp-fullscreen-buttons').on( 'click.wp-fullscreen', 'button', function( event ) {
 				var command = event.currentTarget.id ? event.currentTarget.id.substr(6) : null;
Index: src/wp-admin/user-edit.php
===================================================================
--- src/wp-admin/user-edit.php	(revision 27046)
+++ src/wp-admin/user-edit.php	(working copy)
@@ -246,6 +246,10 @@
 		<th scope="row"><?php _e('Visual Editor')?></th>
 		<td><label for="rich_editing"><input name="rich_editing" type="checkbox" id="rich_editing" value="false" <?php if ( ! empty( $profileuser->rich_editing ) ) checked( 'false', $profileuser->rich_editing ); ?> /> <?php _e( 'Disable the visual editor when writing' ); ?></label></td>
 	</tr>
+	<tr>
+		<th scope="row"><?php _e('DFW Mouse')?></th>
+		<td><label for="dfw_mouse"><input name="dfw_mouse" type="checkbox" id="dfw_mouse" value="true" <?php if ( ! empty( $profileuser->dfw_mouse ) ) checked( 'true', $profileuser->dfw_mouse ); ?> /> <?php _e( 'Disable showing the toolbar in Distraction Free Writing mode unless the mouse is inside the toolbar' ); ?></label></td>
+	</tr>
 <?php endif; ?>
 <?php if ( count($_wp_admin_css_colors) > 1 && has_action('admin_color_scheme_picker') ) : ?>
 <tr>
Index: src/wp-includes/class-wp-editor.php
===================================================================
--- src/wp-includes/class-wp-editor.php	(revision 27046)
+++ src/wp-includes/class-wp-editor.php	(working copy)
@@ -836,6 +836,10 @@
 				}
 			}
 		}());
+		
+		function wp_fullscreen_mouse() {
+			return <?php $dfw_mouse = get_user_option( 'dfw_mouse' ); if( $dfw_mouse === false ) { echo 'true'; } else { echo $dfw_mouse; }?>;
+		}
 		</script>
 		<?php
 
@@ -893,7 +897,12 @@
 				continue;
 			}
 
-			$onclick = ! empty( $args['onclick'] ) ? ' onclick="' . $args['onclick'] . '"' : '';
+			if( true == array_key_exists( 'customhtml', $args ) ) {
+				echo $args['customhtml'];
+			}
+			else {
+			
+				$onclick = ! empty( $args['onclick'] ) ? ' onclick="' . $args['onclick'] . '"' : '';
 			?>
 
 			<div class="mce-widget mce-btn<?php if ( $args['both'] ) { ?> wp-fullscreen-both<?php } ?>">
@@ -902,6 +911,7 @@
 			</button>
 			</div>
 			<?php
+			}
 		}
 
 		?>
Index: src/wp-includes/user.php
===================================================================
--- src/wp-includes/user.php	(revision 27046)
+++ src/wp-includes/user.php	(working copy)
@@ -1607,6 +1607,9 @@
 	if ( empty($rich_editing) )
 		$rich_editing = 'true';
 
+	if ( empty($dfw_mouse) )
+		$dfw_mouse = 'false';
+		
 	if ( empty($comment_shortcuts) )
 		$comment_shortcuts = 'false';
 
@@ -1780,7 +1783,7 @@
  * @return array
  */
 function _get_additional_user_keys( $user ) {
-	$keys = array( 'first_name', 'last_name', 'nickname', 'description', 'rich_editing', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front' );
+	$keys = array( 'first_name', 'last_name', 'nickname', 'description', 'rich_editing', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front', 'dfw_mouse' );
 	return array_merge( $keys, array_keys( wp_get_user_contact_methods( $user ) ) );
 }
 
