mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 875892 - Split ContextUI out of browser-ui.js. r=jwilde
This commit is contained in:
parent
feb2f8ac64
commit
d219662c9a
263
browser/metro/base/content/ContextUI.js
Normal file
263
browser/metro/base/content/ContextUI.js
Normal file
@ -0,0 +1,263 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/**
|
||||
* Tracks whether context UI (app bar, tab bar, url bar) is shown or hidden.
|
||||
* Manages events to summon and hide the context UI.
|
||||
*/
|
||||
var ContextUI = {
|
||||
_expandable: true,
|
||||
_hidingId: 0,
|
||||
|
||||
/*******************************************
|
||||
* init
|
||||
*/
|
||||
|
||||
init: function init() {
|
||||
Elements.browsers.addEventListener("mousedown", this, true);
|
||||
Elements.browsers.addEventListener("touchstart", this, true);
|
||||
Elements.browsers.addEventListener("AlertActive", this, true);
|
||||
window.addEventListener("MozEdgeUIStarted", this, true);
|
||||
window.addEventListener("MozEdgeUICanceled", this, true);
|
||||
window.addEventListener("MozEdgeUICompleted", this, true);
|
||||
window.addEventListener("keypress", this, true);
|
||||
window.addEventListener("KeyboardChanged", this, false);
|
||||
|
||||
Elements.tray.addEventListener("transitionend", this, true);
|
||||
|
||||
Appbar.init();
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Context UI state getters & setters
|
||||
*/
|
||||
|
||||
get isVisible() {
|
||||
return (Elements.navbar.hasAttribute("visible") ||
|
||||
Elements.navbar.hasAttribute("startpage"));
|
||||
},
|
||||
get isExpanded() { return Elements.tray.hasAttribute("expanded"); },
|
||||
get isExpandable() { return this._expandable; },
|
||||
|
||||
set isExpandable(aFlag) {
|
||||
this._expandable = aFlag;
|
||||
if (!this._expandable)
|
||||
this.dismiss();
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Context UI state control
|
||||
*/
|
||||
|
||||
toggle: function toggle() {
|
||||
if (!this._expandable) {
|
||||
// exandable setter takes care of resetting state
|
||||
// so if we're not expandable, there's nothing to do here
|
||||
return;
|
||||
}
|
||||
// if we're not showing, show
|
||||
if (!this.dismiss()) {
|
||||
dump("* ContextUI is hidden, show it\n");
|
||||
this.show();
|
||||
}
|
||||
},
|
||||
|
||||
// show all context UI
|
||||
// returns true if any non-visible UI was shown
|
||||
show: function() {
|
||||
let shown = false;
|
||||
if (!this.isExpanded) {
|
||||
// show the tab tray
|
||||
this._setIsExpanded(true);
|
||||
shown = true;
|
||||
}
|
||||
if (!Elements.navbar.isShowing) {
|
||||
// show the navbar
|
||||
Elements.navbar.show();
|
||||
shown = true;
|
||||
}
|
||||
|
||||
this._clearDelayedTimeout();
|
||||
if (shown) {
|
||||
ContentAreaObserver.update(window.innerWidth, window.innerHeight);
|
||||
}
|
||||
return shown;
|
||||
},
|
||||
|
||||
// Display the nav bar
|
||||
displayNavbar: function displayNavbar() {
|
||||
this._clearDelayedTimeout();
|
||||
Elements.navbar.show();
|
||||
},
|
||||
|
||||
// Display the toolbar and tabs
|
||||
displayTabs: function displayTabs() {
|
||||
this._clearDelayedTimeout();
|
||||
this._setIsExpanded(true, true);
|
||||
},
|
||||
|
||||
/** Briefly show the tab bar and then hide it */
|
||||
peekTabs: function peekTabs() {
|
||||
if (this.isExpanded) {
|
||||
setTimeout(function () {
|
||||
ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
|
||||
}, 0);
|
||||
} else {
|
||||
BrowserUI.setOnTabAnimationEnd(function () {
|
||||
ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
|
||||
});
|
||||
|
||||
this.displayTabs();
|
||||
}
|
||||
},
|
||||
|
||||
// Dismiss all context UI.
|
||||
// Returns true if any visible UI was dismissed.
|
||||
dismiss: function dismiss() {
|
||||
let dismissed = false;
|
||||
if (this.isExpanded) {
|
||||
this._setIsExpanded(false);
|
||||
dismissed = true;
|
||||
}
|
||||
if (Elements.navbar.isShowing) {
|
||||
this.dismissAppbar();
|
||||
dismissed = true;
|
||||
}
|
||||
this._clearDelayedTimeout();
|
||||
if (dismissed) {
|
||||
ContentAreaObserver.update(window.innerWidth, window.innerHeight);
|
||||
}
|
||||
return dismissed;
|
||||
},
|
||||
|
||||
// Dismiss all context ui after a delay
|
||||
dismissWithDelay: function dismissWithDelay(aDelay) {
|
||||
aDelay = aDelay || kHideContextAndTrayDelayMsec;
|
||||
this._clearDelayedTimeout();
|
||||
this._hidingId = setTimeout(function () {
|
||||
ContextUI.dismiss();
|
||||
}, aDelay);
|
||||
},
|
||||
|
||||
// Cancel any pending delayed dismiss
|
||||
cancelDismiss: function cancelDismiss() {
|
||||
this._clearDelayedTimeout();
|
||||
},
|
||||
|
||||
dismissTabs: function dimissTabs() {
|
||||
this._clearDelayedTimeout();
|
||||
this._setIsExpanded(false, true);
|
||||
},
|
||||
|
||||
dismissAppbar: function dismissAppbar() {
|
||||
this._fire("MozAppbarDismiss");
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Internal tray state setters
|
||||
*/
|
||||
|
||||
// tab tray state
|
||||
_setIsExpanded: function _setIsExpanded(aFlag, setSilently) {
|
||||
// if the tray can't be expanded, don't expand it.
|
||||
if (!this.isExpandable || this.isExpanded == aFlag)
|
||||
return;
|
||||
|
||||
if (aFlag)
|
||||
Elements.tray.setAttribute("expanded", "true");
|
||||
else
|
||||
Elements.tray.removeAttribute("expanded");
|
||||
|
||||
if (!setSilently)
|
||||
this._fire("MozContextUIExpand");
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Internal utils
|
||||
*/
|
||||
|
||||
_clearDelayedTimeout: function _clearDelayedTimeout() {
|
||||
if (this._hidingId) {
|
||||
clearTimeout(this._hidingId);
|
||||
this._hidingId = 0;
|
||||
}
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Events
|
||||
*/
|
||||
|
||||
_onEdgeUIStarted: function(aEvent) {
|
||||
this._hasEdgeSwipeStarted = true;
|
||||
this._clearDelayedTimeout();
|
||||
|
||||
if (StartUI.hide()) {
|
||||
this.dismiss();
|
||||
return;
|
||||
}
|
||||
this.toggle();
|
||||
},
|
||||
|
||||
_onEdgeUICanceled: function(aEvent) {
|
||||
this._hasEdgeSwipeStarted = false;
|
||||
StartUI.hide();
|
||||
this.dismiss();
|
||||
},
|
||||
|
||||
_onEdgeUICompleted: function(aEvent) {
|
||||
if (this._hasEdgeSwipeStarted) {
|
||||
this._hasEdgeSwipeStarted = false;
|
||||
return;
|
||||
}
|
||||
|
||||
this._clearDelayedTimeout();
|
||||
if (StartUI.hide()) {
|
||||
this.dismiss();
|
||||
return;
|
||||
}
|
||||
this.toggle();
|
||||
},
|
||||
|
||||
handleEvent: function handleEvent(aEvent) {
|
||||
switch (aEvent.type) {
|
||||
case "MozEdgeUIStarted":
|
||||
this._onEdgeUIStarted(aEvent);
|
||||
break;
|
||||
case "MozEdgeUICanceled":
|
||||
this._onEdgeUICanceled(aEvent);
|
||||
break;
|
||||
case "MozEdgeUICompleted":
|
||||
this._onEdgeUICompleted(aEvent);
|
||||
break;
|
||||
case "mousedown":
|
||||
if (aEvent.button == 0 && this.isVisible)
|
||||
this.dismiss();
|
||||
break;
|
||||
case "touchstart":
|
||||
// ContextUI can hide the notification bar. Workaround until bug 845348 is fixed.
|
||||
case "AlertActive":
|
||||
this.dismiss();
|
||||
break;
|
||||
case "keypress":
|
||||
if (String.fromCharCode(aEvent.which) == "z" &&
|
||||
aEvent.getModifierState("Win"))
|
||||
this.toggle();
|
||||
break;
|
||||
case "transitionend":
|
||||
setTimeout(function () {
|
||||
ContentAreaObserver.updateContentArea();
|
||||
}, 0);
|
||||
break;
|
||||
case "KeyboardChanged":
|
||||
this.dismissTabs();
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
_fire: function (name) {
|
||||
let event = document.createEvent("Events");
|
||||
event.initEvent(name, true, true);
|
||||
window.dispatchEvent(event);
|
||||
}
|
||||
};
|
@ -136,6 +136,7 @@ let ScriptContexts = {};
|
||||
["SSLExceptions", "chrome://browser/content/exceptions.js"],
|
||||
["ItemPinHelper", "chrome://browser/content/helperui/ItemPinHelper.js"],
|
||||
["NavButtonSlider", "chrome://browser/content/NavButtonSlider.js"],
|
||||
["ContextUI", "chrome://browser/content/ContextUI.js"],
|
||||
#ifdef MOZ_SERVICES_SYNC
|
||||
["Sync", "chrome://browser/content/sync.js"],
|
||||
["SyncPairDevice", "chrome://browser/content/sync.js"],
|
||||
|
@ -1319,266 +1319,6 @@ var BrowserUI = {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Tracks whether context UI (app bar, tab bar, url bar) is shown or hidden.
|
||||
* Manages events to summon and hide the context UI.
|
||||
*/
|
||||
var ContextUI = {
|
||||
_expandable: true,
|
||||
_hidingId: 0,
|
||||
|
||||
/*******************************************
|
||||
* init
|
||||
*/
|
||||
|
||||
init: function init() {
|
||||
Elements.browsers.addEventListener("mousedown", this, true);
|
||||
Elements.browsers.addEventListener("touchstart", this, true);
|
||||
Elements.browsers.addEventListener("AlertActive", this, true);
|
||||
window.addEventListener("MozEdgeUIStarted", this, true);
|
||||
window.addEventListener("MozEdgeUICanceled", this, true);
|
||||
window.addEventListener("MozEdgeUICompleted", this, true);
|
||||
window.addEventListener("keypress", this, true);
|
||||
window.addEventListener("KeyboardChanged", this, false);
|
||||
|
||||
Elements.tray.addEventListener("transitionend", this, true);
|
||||
|
||||
Appbar.init();
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Context UI state getters & setters
|
||||
*/
|
||||
|
||||
get isVisible() {
|
||||
return (Elements.navbar.hasAttribute("visible") ||
|
||||
Elements.navbar.hasAttribute("startpage"));
|
||||
},
|
||||
get isExpanded() { return Elements.tray.hasAttribute("expanded"); },
|
||||
get isExpandable() { return this._expandable; },
|
||||
|
||||
set isExpandable(aFlag) {
|
||||
this._expandable = aFlag;
|
||||
if (!this._expandable)
|
||||
this.dismiss();
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Context UI state control
|
||||
*/
|
||||
|
||||
toggle: function toggle() {
|
||||
if (!this._expandable) {
|
||||
// exandable setter takes care of resetting state
|
||||
// so if we're not expandable, there's nothing to do here
|
||||
return;
|
||||
}
|
||||
// if we're not showing, show
|
||||
if (!this.dismiss()) {
|
||||
dump("* ContextUI is hidden, show it\n");
|
||||
this.show();
|
||||
}
|
||||
},
|
||||
|
||||
// show all context UI
|
||||
// returns true if any non-visible UI was shown
|
||||
show: function() {
|
||||
let shown = false;
|
||||
if (!this.isExpanded) {
|
||||
// show the tab tray
|
||||
this._setIsExpanded(true);
|
||||
shown = true;
|
||||
}
|
||||
if (!Elements.navbar.isShowing) {
|
||||
// show the navbar
|
||||
Elements.navbar.show();
|
||||
shown = true;
|
||||
}
|
||||
|
||||
this._clearDelayedTimeout();
|
||||
if (shown) {
|
||||
ContentAreaObserver.update(window.innerWidth, window.innerHeight);
|
||||
}
|
||||
return shown;
|
||||
},
|
||||
|
||||
// Display the nav bar
|
||||
displayNavbar: function displayNavbar() {
|
||||
this._clearDelayedTimeout();
|
||||
Elements.navbar.show();
|
||||
},
|
||||
|
||||
// Display the toolbar and tabs
|
||||
displayTabs: function displayTabs() {
|
||||
this._clearDelayedTimeout();
|
||||
this._setIsExpanded(true, true);
|
||||
},
|
||||
|
||||
/** Briefly show the tab bar and then hide it */
|
||||
peekTabs: function peekTabs() {
|
||||
if (this.isExpanded) {
|
||||
setTimeout(function () {
|
||||
ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
|
||||
}, 0);
|
||||
} else {
|
||||
BrowserUI.setOnTabAnimationEnd(function () {
|
||||
ContextUI.dismissWithDelay(kNewTabAnimationDelayMsec);
|
||||
});
|
||||
|
||||
this.displayTabs();
|
||||
}
|
||||
},
|
||||
|
||||
// Dismiss all context UI.
|
||||
// Returns true if any visible UI was dismissed.
|
||||
dismiss: function dismiss() {
|
||||
let dismissed = false;
|
||||
if (this.isExpanded) {
|
||||
this._setIsExpanded(false);
|
||||
dismissed = true;
|
||||
}
|
||||
if (Elements.navbar.isShowing) {
|
||||
this.dismissAppbar();
|
||||
dismissed = true;
|
||||
}
|
||||
this._clearDelayedTimeout();
|
||||
if (dismissed) {
|
||||
ContentAreaObserver.update(window.innerWidth, window.innerHeight);
|
||||
}
|
||||
return dismissed;
|
||||
},
|
||||
|
||||
// Dismiss all context ui after a delay
|
||||
dismissWithDelay: function dismissWithDelay(aDelay) {
|
||||
aDelay = aDelay || kHideContextAndTrayDelayMsec;
|
||||
this._clearDelayedTimeout();
|
||||
this._hidingId = setTimeout(function () {
|
||||
ContextUI.dismiss();
|
||||
}, aDelay);
|
||||
},
|
||||
|
||||
// Cancel any pending delayed dismiss
|
||||
cancelDismiss: function cancelDismiss() {
|
||||
this._clearDelayedTimeout();
|
||||
},
|
||||
|
||||
dismissTabs: function dimissTabs() {
|
||||
this._clearDelayedTimeout();
|
||||
this._setIsExpanded(false, true);
|
||||
},
|
||||
|
||||
dismissAppbar: function dismissAppbar() {
|
||||
this._fire("MozAppbarDismiss");
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Internal tray state setters
|
||||
*/
|
||||
|
||||
// tab tray state
|
||||
_setIsExpanded: function _setIsExpanded(aFlag, setSilently) {
|
||||
// if the tray can't be expanded, don't expand it.
|
||||
if (!this.isExpandable || this.isExpanded == aFlag)
|
||||
return;
|
||||
|
||||
if (aFlag)
|
||||
Elements.tray.setAttribute("expanded", "true");
|
||||
else
|
||||
Elements.tray.removeAttribute("expanded");
|
||||
|
||||
if (!setSilently)
|
||||
this._fire("MozContextUIExpand");
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Internal utils
|
||||
*/
|
||||
|
||||
_clearDelayedTimeout: function _clearDelayedTimeout() {
|
||||
if (this._hidingId) {
|
||||
clearTimeout(this._hidingId);
|
||||
this._hidingId = 0;
|
||||
}
|
||||
},
|
||||
|
||||
/*******************************************
|
||||
* Events
|
||||
*/
|
||||
|
||||
_onEdgeUIStarted: function(aEvent) {
|
||||
this._hasEdgeSwipeStarted = true;
|
||||
this._clearDelayedTimeout();
|
||||
|
||||
if (StartUI.hide()) {
|
||||
this.dismiss();
|
||||
return;
|
||||
}
|
||||
this.toggle();
|
||||
},
|
||||
|
||||
_onEdgeUICanceled: function(aEvent) {
|
||||
this._hasEdgeSwipeStarted = false;
|
||||
StartUI.hide();
|
||||
this.dismiss();
|
||||
},
|
||||
|
||||
_onEdgeUICompleted: function(aEvent) {
|
||||
if (this._hasEdgeSwipeStarted) {
|
||||
this._hasEdgeSwipeStarted = false;
|
||||
return;
|
||||
}
|
||||
|
||||
this._clearDelayedTimeout();
|
||||
if (StartUI.hide()) {
|
||||
this.dismiss();
|
||||
return;
|
||||
}
|
||||
this.toggle();
|
||||
},
|
||||
|
||||
handleEvent: function handleEvent(aEvent) {
|
||||
switch (aEvent.type) {
|
||||
case "MozEdgeUIStarted":
|
||||
this._onEdgeUIStarted(aEvent);
|
||||
break;
|
||||
case "MozEdgeUICanceled":
|
||||
this._onEdgeUICanceled(aEvent);
|
||||
break;
|
||||
case "MozEdgeUICompleted":
|
||||
this._onEdgeUICompleted(aEvent);
|
||||
break;
|
||||
case "mousedown":
|
||||
if (aEvent.button == 0 && this.isVisible)
|
||||
this.dismiss();
|
||||
break;
|
||||
case "touchstart":
|
||||
// ContextUI can hide the notification bar. Workaround until bug 845348 is fixed.
|
||||
case "AlertActive":
|
||||
this.dismiss();
|
||||
break;
|
||||
case "keypress":
|
||||
if (String.fromCharCode(aEvent.which) == "z" &&
|
||||
aEvent.getModifierState("Win"))
|
||||
this.toggle();
|
||||
break;
|
||||
case "transitionend":
|
||||
setTimeout(function () {
|
||||
ContentAreaObserver.updateContentArea();
|
||||
}, 0);
|
||||
break;
|
||||
case "KeyboardChanged":
|
||||
this.dismissTabs();
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
_fire: function (name) {
|
||||
let event = document.createEvent("Events");
|
||||
event.initEvent(name, true, true);
|
||||
window.dispatchEvent(event);
|
||||
}
|
||||
};
|
||||
|
||||
var StartUI = {
|
||||
get isVisible() { return this.isStartPageVisible || this.isFiltering; },
|
||||
get isStartPageVisible() { return Elements.windowState.hasAttribute("startpage"); },
|
||||
|
@ -93,6 +93,7 @@ chrome.jar:
|
||||
content/RemoteTabs.js (content/RemoteTabs.js)
|
||||
#endif
|
||||
content/NavButtonSlider.js (content/NavButtonSlider.js)
|
||||
content/ContextUI.js (content/ContextUI.js)
|
||||
|
||||
% override chrome://global/content/config.xul chrome://browser/content/config.xul
|
||||
% override chrome://global/content/netError.xhtml chrome://browser/content/netError.xhtml
|
||||
|
Loading…
Reference in New Issue
Block a user