From 58f9340d93f8d107ba7c849b7536d546be8cf7ad Mon Sep 17 00:00:00 2001
From: Thomas Pulzer <t.pulzer@kniel.de>
Date: Fri, 19 Aug 2016 10:47:02 +0200
Subject: [PATCH] Fixing infinite spinner animation

setupMainMenu() & setupUserMenu():
Changed click delegate to add the spinner animation only the primary mouse button was clicked without ctrl- or meta-key modifier
Adding mouseup delegate to hide the menu if the middle mouse button was clicked.

Redone #778
---
 core/js/js.js | 33 ++++++++++++++++++++++++++++-----
 1 file changed, 28 insertions(+), 5 deletions(-)

diff --git a/core/js/js.js b/core/js/js.js
index 4e8d3a01416..799d2ba0b24 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1506,12 +1506,20 @@ function initCore() {
 			if(!$app.is('a')) {
 				$app = $app.closest('a');
 			}
-			if(!event.ctrlKey) {
+			if(event.which === 1 && !event.ctrlKey && !event.metaKey) {
 				$app.addClass('app-loading');
 			} else {
 				// Close navigation when opening app in
 				// a new tab
-				OC.hideMenus();
+				OC.hideMenus(function(){return false});
+			}
+		});
+
+		$navigation.delegate('a', 'mouseup', function(event) {
+			if(event.which === 2) {
+				// Close navigation when opening app in
+				// a new tab via middle click
+				OC.hideMenus(function(){return false});
 			}
 		});
 	}
@@ -1519,14 +1527,29 @@ function initCore() {
 	function setupUserMenu() {
 		var $menu = $('#header #settings');
 
+		// show loading feedback
 		$menu.delegate('a', 'click', function(event) {
 			var $page = $(event.target);
 			if (!$page.is('a')) {
 				$page = $page.closest('a');
 			}
-			$page.find('img').remove();
-			$page.find('div').remove(); // prevent odd double-clicks
-			$page.prepend($('<div/>').addClass('icon-loading-small-dark'));
+			if(event.which === 1 && !event.ctrlKey && !event.metaKey) {
+				$page.find('img').remove();
+				$page.find('div').remove(); // prevent odd double-clicks
+				$page.prepend($('<div/>').addClass('icon-loading-small-dark'));
+			} else {
+				// Close navigation when opening menu entry in
+				// a new tab
+				OC.hideMenus(function(){return false});
+			}
+		});
+
+		$menu.delegate('a', 'mouseup', function(event) {
+			if(event.which === 2) {
+				// Close navigation when opening app in
+				// a new tab via middle click
+				OC.hideMenus(function(){return false});
+			}
 		});
 	}
 
-- 
GitLab