Open menu on long-press.

This commit is contained in:
Michael Jumper
2012-01-24 18:24:05 -08:00
parent db69e717a0
commit 66f11d5c57
2 changed files with 69 additions and 71 deletions

View File

@@ -158,7 +158,7 @@ var GuacamoleUI = {
var detectMenuCloseTimeout = null; var detectMenuCloseTimeout = null;
// Clear detection timeouts // Clear detection timeouts
function resetMenuDetect() { GuacamoleUI.resetMenuDetect = function() {
if (detectMenuOpenTimeout != null) { if (detectMenuOpenTimeout != null) {
window.clearTimeout(detectMenuOpenTimeout); window.clearTimeout(detectMenuOpenTimeout);
@@ -170,54 +170,61 @@ var GuacamoleUI = {
detectMenuCloseTimeout = null; detectMenuCloseTimeout = null;
} }
} };
// Initiate detection of menu open action. If not canceled through some // Initiate detection of menu open action. If not canceled through some
// user event, menu will open. // user event, menu will open.
function startMenuOpenDetect() { GuacamoleUI.startMenuOpenDetect = function() {
// Clear detection state if (!detectMenuOpenTimeout) {
resetMenuDetect();
// Wait and then show menu // Clear detection state
detectMenuOpenTimeout = window.setTimeout(function() { GuacamoleUI.resetMenuDetect();
GuacamoleUI.showMenu();
detectMenuOpenTimeout = null;
}, 325);
} // Wait and then show menu
detectMenuOpenTimeout = window.setTimeout(function() {
GuacamoleUI.showMenu();
detectMenuOpenTimeout = null;
}, 325);
}
};
// Initiate detection of menu close action. If not canceled through some // Initiate detection of menu close action. If not canceled through some
// user event, menu will close. // user event, menu will close.
function startMenuCloseDetect() { GuacamoleUI.startMenuCloseDetect = function() {
// Clear detection state if (!detectMenuCloseTimeout) {
resetMenuDetect();
// Wait and then shade menu // Clear detection state
detectMenuCloseTimeout = window.setTimeout(function() { GuacamoleUI.resetMenuDetect();
GuacamoleUI.shadeMenu();
detectMenuCloseTimeout = null;
}, 500);
} // Wait and then shade menu
detectMenuCloseTimeout = window.setTimeout(function() {
GuacamoleUI.shadeMenu();
detectMenuCloseTimeout = null;
}, 500);
}
};
// Show menu if mouseover any part of menu // Show menu if mouseover any part of menu
GuacamoleUI.menu.addEventListener('mouseover', GuacamoleUI.showMenu, true); GuacamoleUI.menu.addEventListener('mouseover', GuacamoleUI.showMenu, true);
// Stop detecting menu state change intents if mouse is over menu // Stop detecting menu state change intents if mouse is over menu
GuacamoleUI.menu.addEventListener('mouseover', resetMenuDetect, true); GuacamoleUI.menu.addEventListener('mouseover', GuacamoleUI.resetMenuDetect, true);
// When mouse hovers over top of screen, start detection of intent to open menu // When mouse hovers over top of screen, start detection of intent to open menu
GuacamoleUI.menuControl.addEventListener('mousemove', startMenuOpenDetect, true); GuacamoleUI.menuControl.addEventListener('mousemove', GuacamoleUI.startMenuOpenDetect, true);
// When mouse enters display, start detection of intent to close menu // When mouse enters display, start detection of intent to close menu
GuacamoleUI.display.addEventListener('mouseover', startMenuCloseDetect, true); GuacamoleUI.display.addEventListener('mouseover', GuacamoleUI.startMenuCloseDetect, true);
var menuShowLongPressTimeout = null; var menuShowLongPressTimeout = null;
// Detect long-press at bottom of screen GuacamoleUI.startLongPressDetect = function() {
document.body.addEventListener('touchstart', function(e) {
if (!menuShowLongPressTimeout) { if (!menuShowLongPressTimeout) {
@@ -229,23 +236,16 @@ var GuacamoleUI = {
}, 1000); }, 1000);
} }
};
}, true);
// Reset detection when touch stops GuacamoleUI.stopLongPressDetect = function() {
document.body.addEventListener('touchend', function() {
// Reset opacity, stop detection of keyboard show gesture
GuacamoleUI.shadeMenu();
window.clearTimeout(menuShowLongPressTimeout); window.clearTimeout(menuShowLongPressTimeout);
menuShowLongPressTimeout = null; menuShowLongPressTimeout = null;
};
}, false);
// Detect long-press at bottom of screen
document.body.addEventListener('touchstart', GuacamoleUI.startLongPressDetect, true);
GuacamoleUI.menu.addEventListener('touchend', function(e) {
e.stopPropagation();
}, false);
// Show menu if mouse leaves document // Show menu if mouse leaves document
document.addEventListener('mouseout', function(e) { document.addEventListener('mouseout', function(e) {
@@ -261,7 +261,7 @@ var GuacamoleUI = {
} }
// Start detection of intent to open menu // Start detection of intent to open menu
startMenuOpenDetect(); GuacamoleUI.startMenuOpenDetect();
}, true); }, true);
@@ -327,6 +327,12 @@ GuacamoleUI.attach = function(guac) {
// Scroll (if necessary) to keep mouse on screen. // Scroll (if necessary) to keep mouse on screen.
window.scrollBy(scroll_amount_x, scroll_amount_y); window.scrollBy(scroll_amount_x, scroll_amount_y);
// Hide menu on movement
GuacamoleUI.startMenuCloseDetect();
// Stop detecting long presses if mouse is being used
GuacamoleUI.stopLongPressDetect();
// Send mouse event // Send mouse event
guac.sendMouseState(mouseState); guac.sendMouseState(mouseState);

View File

@@ -24,10 +24,20 @@ body {
margin: 0; margin: 0;
} }
img {
border: none;
}
.guac-hide-cursor {
cursor: url('../images/mouse/dot.gif'),url('../images/mouse/blank.cur'),default;
}
* { * {
-webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-tap-highlight-color: rgba(0,0,0,0);
} }
/* Dialogs */
div.dialogOuter { div.dialogOuter {
display: table; display: table;
height: 100%; height: 100%;
@@ -37,18 +47,6 @@ div.dialogOuter {
top: 0; top: 0;
visibility: hidden; visibility: hidden;
/*
background-image: url('../images/spinner.gif');
background-position: center;
background-repeat: no-repeat;
*/
/*
background-image: url('../images/noimage.png');
background-position: center;
background-repeat: no-repeat;
*/
} }
div.dialogMiddle { div.dialogMiddle {
@@ -88,6 +86,20 @@ div.dialog p {
margin: 0; margin: 0;
} }
#statusText {
text-shadow: 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black;
font-weight: bold;
font-size: xx-large;
color: white;
}
.guac-error #statusText {
text-shadow: 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black;
color: #D44;
}
/* Menu */
#menu { #menu {
position: fixed; position: fixed;
left: 0; left: 0;
@@ -103,22 +115,6 @@ div.dialog p {
background: #D44; background: #D44;
} }
#statusText {
text-shadow: 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black;
font-weight: bold;
font-size: xx-large;
color: white;
}
.guac-error #statusText {
text-shadow: 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black, 0 0 0.25em black;
color: #D44;
}
img {
border: none;
}
div#display { div#display {
position: relative; position: relative;
width: 640px; width: 640px;
@@ -165,10 +161,6 @@ div#clipboardDiv textarea {
width: 100%; width: 100%;
} }
.guac-hide-cursor {
cursor: url('../images/mouse/dot.gif'),url('../images/mouse/blank.cur'),default;
}
div#menuControl { div#menuControl {
position: fixed; position: fixed;
top: 0; top: 0;