diff --git a/core/js/js.js b/core/js/js.js index 4e8d3a0141..ea621123fb 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -1501,17 +1501,21 @@ function initCore() { $navigation.hide(); // show loading feedback - $navigation.delegate('a', 'click', function(event) { + $navigation.delegate('a', 'mousedown', function(event) { var $app = $(event.target); 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(); + // On middle click or on first button click with ctrl key or meta key hold + if(event.which === 2 || (event.which === 1 && (event.ctrlKey || event.metaKey))) { + // Close navigation when opening app in + // a new tab + OC.hideMenus(); + window.open($app, '_blank'); + } } }); } @@ -1519,14 +1523,26 @@ function initCore() { function setupUserMenu() { var $menu = $('#header #settings'); - $menu.delegate('a', 'click', function(event) { + // show loading feedback + $menu.delegate('a', 'mousedown', 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($('
').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($('
').addClass('icon-loading-small-dark')); + } else { + // On middle click or on first button click with ctrl key or meta key hold + if(event.which === 2 || (event.which === 1 && (event.ctrlKey || event.metaKey))) { + // Close navigation when opening menu entry in + // a new tab + OC.hideMenus(); + window.open($page, '_blank'); + } + } + $($page).click(); }); }