Index: src/wp-admin/js/common.js
===================================================================
--- src/wp-admin/js/common.js	(revision 31473)
+++ src/wp-admin/js/common.js	(working copy)
@@ -707,7 +707,8 @@
 
 	window.wpResponsive = {
 		init: function() {
-			var self = this;
+			var self = this,
+				x, y;
 
 			// Modify functionality based on custom activate/deactivate event
 			$document.on( 'wp-responsive-activate.wp-responsive', function() {
@@ -722,7 +723,7 @@
 			$( '#wp-admin-bar-menu-toggle' ).on( 'click.wp-responsive', function( event ) {
 				event.preventDefault();
 				$wpwrap.toggleClass( 'wp-responsive-open' );
-				if ( $wpwrap.hasClass( 'wp-responsive-open' ) ) {
+				if ( self.isOpen() ) {
 					$(this).find('a').attr( 'aria-expanded', 'true' );
 					$( '#adminmenu a:first' ).focus();
 				} else {
@@ -730,6 +731,36 @@
 				}
 			} );
 
+			$window.on( 'touchstart.wp-responsive', function( event ) {
+				var touches = event.originalEvent.touches;
+
+				if ( 1 !== touches.length ) {
+					return;
+				}
+
+				x = touches[0].clientX;
+				y = touches[0].clientY;
+			} );
+
+			$window.on( 'touchend.wp-responsive', function( event ) {
+				var touches = event.originalEvent.changedTouches,
+					distanceX;
+
+				if ( 1 === touches.length && x && y ) {
+					if ( window.isRtl == self.isOpen() ) {
+						distanceX = touches[0].clientX - x;
+					} else {
+						distanceX = x - touches[0].clientX;
+					}
+
+					if ( distanceX > Math.abs( touches[0].clientY - y ) ) {
+						$( '#wp-admin-bar-menu-toggle' ).trigger( 'click' );
+					}
+				}
+
+				x = y = 0;
+			} );
+
 			// Add menu events
 			$adminmenu.on( 'click.wp-responsive', 'li.wp-has-submenu > a', function( event ) {
 				if ( ! $adminmenu.data('wp-responsive') ) {
@@ -753,6 +784,10 @@
 			});
 		},
 
+		isOpen: function() {
+			return $wpwrap.hasClass( 'wp-responsive-open' );
+		},
+
 		activate: function() {
 			setPinMenu();
 
