b=446673, r=gavin. Sidebar never goes away

This commit is contained in:
Mark Finkle 2008-07-25 14:10:35 -04:00
parent b5c1bdb46a
commit 4205d6a277
6 changed files with 183 additions and 123 deletions

View File

@ -39,10 +39,14 @@ const TOOLBARSTATE_LOADING = 1;
const TOOLBARSTATE_LOADED = 2;
const TOOLBARSTATE_INDETERMINATE = 3;
const PANELMODE_VIEW = 1;
const PANELMODE_EDIT = 2;
const PANELMODE_NONE = 0;
const PANELMODE_URLVIEW = 1;
const PANELMODE_URLEDIT = 2;
const PANELMODE_BOOKMARK = 3;
const PANELMODE_BOOKMARKLIST = 4;
const PANELMODE_SIDEBAR = 5;
const PANELMODE_TABLIST = 6;
const PANELMODE_FULL = 7;
var BrowserUI = {
_panel : null,
@ -52,8 +56,6 @@ var BrowserUI = {
_autocompleteNavbuttons : null,
_favicon : null,
_faviconAdded : false,
_fadeoutID : null,
_allowHide : true,
_titleChanged : function(aEvent) {
if (aEvent.target != getBrowser().contentDocument)
@ -147,6 +149,8 @@ var BrowserUI = {
getBrowser().addEventListener("DOMTitleChanged", this, true);
getBrowser().addEventListener("DOMLinkAdded", this, true);
Browser.content.addEventListener("overpan", this, false);
Browser.content.addEventListener("pan", this, true);
},
update : function(aState) {
@ -158,7 +162,7 @@ var BrowserUI = {
var toolbar = document.getElementById("toolbar-main");
if (aState == TOOLBARSTATE_LOADING) {
this._showMode(PANELMODE_VIEW);
this.show(PANELMODE_URLVIEW);
toolbar.setAttribute("mode", "loading");
this._throbber.setAttribute("src", "chrome://browser/skin/images/throbber.gif");
@ -172,17 +176,12 @@ var BrowserUI = {
var faviconURI = getBrowser().currentURI.prePath + "/favicon.ico";
this._setIcon(faviconURI);
}
/*
if (this._allowHide)
this.hide(3000);
this._allowHide = true;
*/
}
},
/* Set the location to the current content */
setURI : function() {
var browser = getBrowser();
var browser = Browser.currentBrowser;
var back = document.getElementById("cmd_back");
var forward = document.getElementById("cmd_forward");
@ -212,8 +211,7 @@ var BrowserUI = {
var urlString = uri.spec;
if (urlString == "about:blank") {
urlString = "";
this._showMode(PANELMODE_EDIT);
this._allowHide = false;
this.show(PANELMODE_URLEDIT);
}
this._caption.value = urlString;
@ -228,20 +226,21 @@ var BrowserUI = {
var flags = Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
getBrowser().loadURIWithFlags(aURI, flags, null, null);
this._showMode(PANELMODE_VIEW);
this.show(PANELMODE_URLVIEW);
},
search : function() {
var queryURI = "http://www.google.com/search?q=" + this._edit.value + "&hl=en&lr=&btnG=Search";
getBrowser().loadURI(queryURI, null, null, false);
this._showMode(PANELMODE_VIEW);
this.show(PANELMODE_URLVIEW);
},
sizeAutocompletePopup : function () {
var rect = document.getElementById("browser-container").getBoundingClientRect();
var toolbar = document.getElementById("toolbar-main");
var popup = document.getElementById("popup_autocomplete");
popup.height = rect.bottom - rect.top;
popup.height = rect.bottom - rect.top - toolbar.boxObject.height;
},
openDefaultHistory : function () {
@ -296,44 +295,92 @@ var BrowserUI = {
}
},
_showMode : function(aMode) {
if (this._fadeoutID) {
clearTimeout(this._fadeoutID);
this._fadeoutID = null;
}
mode : PANELMODE_NONE,
show : function(aMode) {
if (this.mode == aMode)
return;
this.mode = aMode;
var toolbar = document.getElementById("toolbar-main");
var bookmark = document.getElementById("bookmark-container");
var urllist = document.getElementById("urllist-container");
if (aMode == PANELMODE_VIEW) {
var sidebar = document.getElementById("browser-controls");
var tablist = document.getElementById("tab-list-container");
var container = document.getElementById("browser-container");
// Make sure the UI elements are sized correctly since the window size can change
sidebar.left = toolbar.width = container.boxObject.width;
sidebar.height = tablist.height = container.boxObject.height - toolbar.boxObject.height;
if (aMode == PANELMODE_URLVIEW || aMode == PANELMODE_SIDEBAR ||
aMode == PANELMODE_TABLIST || aMode == PANELMODE_FULL)
{
toolbar.setAttribute("mode", "view");
toolbar.top = 0;
this._edit.hidden = true;
this._edit.reallyClosePopup();
this._caption.hidden = false;
bookmark.hidden = true;
urllist.hidden = true;
let sidebarTo = toolbar.boxObject.width;
let tablistTo = -tablist.boxObject.width;
if (aMode == PANELMODE_SIDEBAR || aMode == PANELMODE_FULL)
sidebarTo -= sidebar.boxObject.width;
if (aMode == PANELMODE_TABLIST || aMode == PANELMODE_FULL)
tablistTo = 0;
sidebar.left = sidebarTo;
tablist.left = tablistTo;
}
else if (aMode == PANELMODE_EDIT) {
else if (aMode == PANELMODE_URLEDIT) {
toolbar.setAttribute("mode", "edit");
toolbar.top = 0;
this._caption.hidden = true;
this._edit.hidden = false;
this._edit.focus();
bookmark.hidden = true;
urllist.hidden = true;
sidebar.left = toolbar.boxObject.width;
tablist.left = -tablist.boxObject.width;
}
else if (aMode == PANELMODE_BOOKMARK) {
toolbar.top = 0;
toolbar.setAttribute("mode", "view");
this._edit.hidden = true;
this._edit.reallyClosePopup();
this._caption.hidden = false;
urllist.hidden = true;
sidebar.left = toolbar.boxObject.width;
tablist.left = -tablist.boxObject.width;
bookmark.hidden = false;
bookmark.width = container.boxObject.width;
}
else if (aMode == PANELMODE_BOOKMARKLIST) {
toolbar.top = 0;
toolbar.setAttribute("mode", "view");
this._edit.hidden = true;
this._edit.reallyClosePopup();
this._caption.hidden = false;
bookmark.hidden = true;
sidebar.left = toolbar.boxObject.width;
tablist.left = -tablist.boxObject.width;
urllist.hidden = false;
urllist.width = container.boxObject.width;
urllist.height = container.boxObject.height - toolbar.boxObject.height;
}
else if (aMode == PANELMODE_NONE) {
toolbar.top = -toolbar.boxObject.height;
sidebar.left = toolbar.boxObject.width;
tablist.left = -tablist.boxObject.width;
this._edit.reallyClosePopup();
urllist.hidden = true;
bookmark.hidden = true;
}
},
@ -379,24 +426,20 @@ var BrowserUI = {
},
showBookmarks : function () {
this.show(PANELMODE_BOOKMARKLIST);
var bms = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Ci.nsINavBookmarksService);
this._showPlaces(this._getBookmarks([bms.bookmarksMenuFolder]));
},
show : function() {
this._showMode(PANELMODE_VIEW);
newTab : function() {
Browser.content.newTab(true);
this.show(PANELMODE_URLEDIT);
},
hide : function(aFadeout) {
if (!aFadeout) {
//FIXME hide toolbar stuff
this._showMode(PANELMODE_VIEW);
}
else {
//FIXME animate the close
//var self = this;
//this.fadeoutID = setTimeout(function() { self.hide(); }, aFadeout);
}
selectTab : function(aTab) {
Browser.content.selectTab(aTab);
this.show(PANELMODE_NONE);
},
handleEvent: function (aEvent) {
@ -410,7 +453,7 @@ var BrowserUI = {
break;
// URL textbox events
case "click":
this._showMode(PANELMODE_EDIT);
this.show(PANELMODE_URLEDIT);
this.openDefaultHistory();
break;
case "input":
@ -422,13 +465,31 @@ var BrowserUI = {
case "keypress":
if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE) {
this._edit.reallyClosePopup();
this._showMode(PANELMODE_VIEW);
this.show(PANELMODE_URLVIEW);
}
break;
// Favicon events
case "error":
this._favicon.setAttribute("src", "chrome://browser/skin/images/default-favicon.png");
break;
case "pan": {
// Default to hide the controls when user pans
let mode = PANELMODE_NONE;
// Open the urlbar controls if browser is at top of content
if (Browser.content.scrollY == 0)
mode = PANELMODE_URLVIEW
this.show(mode);
break;
}
case "overpan":
// Open the sidebar controls if we get a right side overpan
if (aEvent.detail == 2)
this.show(PANELMODE_SIDEBAR);
// Close the sidebar controls if we get a left side overpan
else if (aEvent.detail == 1)
this.show(PANELMODE_TABLIST);
break;
}
},
@ -443,6 +504,9 @@ var BrowserUI = {
case "cmd_go":
case "cmd_star":
case "cmd_bookmarks":
case "cmd_menu":
case "cmd_newTab":
case "cmd_closeTab":
isSupported = true;
break;
default:
@ -494,17 +558,29 @@ var BrowserUI = {
var fis = Cc["@mozilla.org/browser/favicon-service;1"].getService(Ci.nsIFaviconService);
fis.setAndLoadFaviconForPage(bookmarkURI, faviconURI, true);
this.show(PANELMODE_NONE);
}
else {
this._showMode(PANELMODE_BOOKMARK);
this.show(PANELMODE_BOOKMARK);
BookmarkHelper.edit(bookmarkURI);
}
break;
}
case "cmd_bookmarks":
this._showMode(PANELMODE_BOOKMARKLIST);
this.showBookmarks();
break;
case "cmd_menu":
if (this.mode == PANELMODE_FULL)
this.show(PANELMODE_NONE);
else
this.show(PANELMODE_FULL);
break;
case "cmd_newTab":
this.newTab();
break;
case "cmd_closeTab":
Browser.content.removeTab(Browser.content.browser);
}
}
};
@ -589,7 +665,7 @@ var BookmarkHelper = {
close : function() {
window.removeEventListener("keypress", this, true);
this._item = null;
BrowserUI.hide();
BrowserUI.show(PANELMODE_NONE);
},
handleEvent: function (aEvent) {

View File

@ -97,9 +97,9 @@ var Browser = {
return new ProgressController(content, browser);
};
this._content.tabList = document.getElementById("tab-list");
this._content.newTab(true);
this._content.addEventListener("DOMTitleChanged", this, true);
this._content.addEventListener("overpan", this, false);
this._content.addEventListener("DOMUpdatePageReport", gPopupBlockerObserver.onUpdatePageReport, false);
BrowserUI.init();
@ -144,7 +144,8 @@ var Browser = {
} catch (e) {}
if (whereURI) {
this.currentBrowser.loadURI(whereURI, null, null, false);
var self = this;
setTimeout(function() { self.currentBrowser.loadURI(whereURI, null, null, false); }, 0);
}
}
},
@ -208,26 +209,15 @@ var Browser = {
case "DOMTitleChanged":
this._titleChanged(aEvent);
break;
case "overpan":
// Open the sidebar controls if we get a right side overpan
if (aEvent.detail == 2)
document.getElementById("browser-controls").collapsed = false;
// Close the sidebar controls if we get a left side overpan
else if (aEvent.detail == 1)
document.getElementById("browser-controls").collapsed = true;
break;
}
},
supportsCommand : function(cmd) {
var isSupported = false;
switch (cmd) {
case "cmd_menu":
case "cmd_fullscreen":
case "cmd_addons":
case "cmd_downloads":
case "cmd_newTab":
case "cmd_closeTab":
isSupported = true;
break;
default:
@ -243,13 +233,8 @@ var Browser = {
doCommand : function(cmd) {
var browser = this.content.browser;
var controls = document.getElementById("browser-controls");
switch (cmd) {
case "cmd_menu":
this.content.tabListVisible = !this.content.tabListVisible;
controls.collapsed = !controls.collapsed;
break;
case "cmd_fullscreen":
window.fullScreen = !window.fullScreen;
break;
@ -281,11 +266,6 @@ var Browser = {
case "cmd_downloads":
Cc["@mozilla.org/download-manager-ui;1"].getService(Ci.nsIDownloadManagerUI).show(window);
break;
case "cmd_newTab":
this.newTab();
break;
case "cmd_closeTab":
this.content.removeTab(this.content.browser);
}
},
@ -293,11 +273,6 @@ var Browser = {
return document.getElementById("notifications");
},
newTab: function() {
this.content.newTab(true);
BrowserUI._showMode(PANELMODE_EDIT);
},
findState: FINDSTATE_FIND,
openFind: function(aState) {
this.findState = aState;

View File

@ -74,6 +74,7 @@
<command id="cmd_search" label="&search.label;" oncommand="CommandUpdater.doCommand(this.id);"/>
<command id="cmd_go" label="&go.label;" oncommand="CommandUpdater.doCommand(this.id);"/>
<!-- tabs -->
<command id="cmd_newTab" label="&newtab.label;" oncommand="CommandUpdater.doCommand(this.id);"/>
<command id="cmd_closeTab" label="&closetab.label;" oncommand="CommandUpdater.doCommand(this.id);"/>
@ -99,14 +100,13 @@
<command id="cmd_delete" label="&delete.label;" oncommand="CommandUpdater.doCommand(this.id);"/>
<command id="cmd_selectAll" label="&selectAll.label;" oncommand="CommandUpdater.doCommand(this.id);"/>
<!-- find -->
<command id="cmd_find" oncommand="Browser.openFind(FINDSTATE_FIND);"/>
<command id="cmd_findAgain" oncommand="Browser.openFind(FINDSTATE_FIND_AGAIN);"/>
<command id="cmd_findPrevious" oncommand="Browser.openFind(FINDSTATE_FIND_PREVIOUS);"/>
</commandset>
<keyset id="mainKeyset">
<key id="key_menu" keycode="T" modifiers="accel" command="cmd_newTab"/>
<!-- basic navigation -->
<key id="key_back" keycode="VK_LEFT" command="cmd_back" modifiers="control"/>
<key id="key_forward" keycode="VK_RIGHT" command="cmd_forward" modifiers="control"/>
@ -124,6 +124,11 @@
<key id="key_addons" key="E" command="cmd_addons" modifiers="control"/>
<key id="key_downloads" key="J" command="cmd_downloads" modifiers="control"/>
<!-- tabs -->
<key id="key_newTab" keycode="T" modifiers="accel" command="cmd_newTab"/>
<key id="key_closeTab" keycode="W" modifiers="accel" command="cmd_closeTab"/>
<!-- find -->
<key id="key_find" key="&findOnCmd.commandkey;" command="cmd_find" modifiers="accel"/>
<key id="key_findAgain" key="&findAgainCmd.commandkey;" command="cmd_findAgain" modifiers="accel"/>
<key id="key_findPrevious" key="&findAgainCmd.commandkey;" command="cmd_findPrevious" modifiers="accel,shift"/>
@ -168,8 +173,28 @@
</panel>
</popupset>
<toolbox id="toolbox-main">
<toolbar id="toolbar-main">
<stack id="browser-container" flex="1" style="overflow: hidden;">
<vbox id="browser">
<notificationbox id="notifications" flex="1">
<deckbrowser id="content" autocompletepopup="popup_autocomplete_content" flex="1"
onnewtab="CommandUpdater.doCommand('cmd_newTab');"/>
</notificationbox>
</vbox>
<vbox id="browser-controls" style="-moz-stack-sizing: ignore; width: 80px;" top="60" left="0">
<toolbarbutton id="tool-back" class="browser-control-button" command="cmd_back"/>
<toolbarbutton id="tool-forward" class="browser-control-button" command="cmd_forward"/>
<toolbarbutton id="tool-star" class="browser-control-button" command="cmd_star"/>
<toolbarbutton id="tool-bookmarks" class="browser-control-button" command="cmd_bookmarks"/>
<toolbarbutton id="tool-actions" class="browser-control-button" command="cmd_actions"/>
</vbox>
<vbox id="tab-list-container" style="-moz-stack-sizing: ignore;" top="60" left="0">
<richlistbox id="tab-list" onselect="BrowserUI.selectTab(this.selectedItem);"/>
<button id="newtab-button" label="+" command="cmd_newTab"/>
</vbox>
<toolbar id="toolbar-main" style="-moz-stack-sizing: ignore; height: 60px;" top="0" left="0">
<hbox id="urlbar-container" flex="1">
<box id="identity-box"
onclick="getIdentityHandler().handleIdentityButtonEvent(event);"
@ -199,36 +224,14 @@
<toolbarbutton id="tool-go" class="urlbar-icon-button" command="cmd_go"/>
</hbox>
</toolbar>
</toolbox>
<stack flex="1">
<hbox id="browser-container" flex="1">
<vbox id="browser" flex="1">
<notificationbox id="notifications" flex="1">
<deckbrowser id="content" autocompletepopup="popup_autocomplete_content" flex="1"
onnewtab="Browser.newTab()"/>
</notificationbox>
</vbox>
<vbox id="browser-controls" collapsed="true">
<toolbarbutton id="tool-back" class="browser-control-button" command="cmd_back"/>
<toolbarbutton id="tool-forward" class="browser-control-button" command="cmd_forward"/>
<toolbarbutton id="tool-star" class="browser-control-button" command="cmd_star"/>
<toolbarbutton id="tool-bookmarks" class="browser-control-button" command="cmd_bookmarks"/>
<toolbarbutton id="tool-actions" class="browser-control-button" command="cmd_actions"/>
</vbox>
</hbox>
<vbox id="urllist-container" flex="1" hidden="true">
<vbox id="urllist-container" hidden="true" style="-moz-stack-sizing: ignore;" top="60" left="0">
<hbox id="urllist-items-container" flex="1">
<richlistbox id="urllist-items" flex="1"/>
</hbox>
<separator class="thin"/>
<hbox id="urllist-search">
<image class="tool-search"/>
</hbox>
</vbox>
<vbox id="bookmark-container" flex="1" hidden="true">
<vbox id="bookmark-container" hidden="true" style="-moz-stack-sizing: ignore;" top="60" left="0">
<vbox id="bookmark-form">
<hbox align="start">
<image id="bookmark-image" src="chrome://browser/skin/images/starred48.png"/>

View File

@ -9,11 +9,6 @@
<binding id="deckbrowser">
<content>
<xul:vbox class="tab-list-container" collapsed="true">
<xul:richlistbox anonid="tab-list" class="tab-list"
onselect="this.parentNode.parentNode.selectTab(this.selectedItem)"/>
<xul:button class="newtab-button" label="+" xbl:inherits="oncommand=onnewtab"/>
</xul:vbox>
<xul:deck flex="1" selectedIndex="0">
<xul:stack anonid="cstack" flex="1" style="overflow: hidden;">
<html:canvas anonid="ccanvas"
@ -88,14 +83,9 @@
</getter>
</property>
<property name="tabList" readonly="true">
<getter>
return document.getAnonymousElementByAttribute(this, "anonid", "tab-list");
</getter>
</property>
<property name="tabListVisible" onget="return !this.tabList.parentNode.collapsed"
onset="this.tabList.parentNode.collapsed = !val; return val;"/>
<field name="tabList">
null
</field>
<field name="progressListenerCreator"/>
@ -373,7 +363,7 @@
for (var e = 0; e < elements.length; e++) {
var element = elements[e];
var id;
if (element.id)
if (element.id)
id = "#" + element.id;
else if (element.name)
id = "$" + element.name;
@ -640,6 +630,18 @@
]]></getter>
</property>
<property name="scrollX" readonly="true">
<getter><![CDATA[
return this.dragData.pageX - this.dragData.dragX / this._zoomLevel;
]]></getter>
</property>
<property name="scrollY" readonly="true">
<getter><![CDATA[
return this.dragData.pageY - this.dragData.dragY / this._zoomLevel;
]]></getter>
</property>
<field name="_fireOverpan">
0
</field>
@ -720,14 +722,19 @@
<parameter name="aDx"/>
<parameter name="aDy"/>
<body><![CDATA[
// constrain offsets to the actual scrollWidth/scrollHeight
var [x, y] = this._constrainPanCoords(aDx, aDy);
// Fire the panning event
var event = document.createEvent("UIEvents");
event.initUIEvent("pan", true, true, window, 0);
if (this.dispatchEvent(event)) {
// Constrain offsets to the actual scrollWidth/scrollHeight
var [x, y] = this._constrainPanCoords(aDx, aDy);
// Canvas needs to move up for content to scroll down
this.dragData.dragX = -x;
this.dragData.dragY = -y;
// Canvas needs to move up for content to scroll down
this.dragData.dragX = -x;
this.dragData.dragY = -y;
this._updateCanvasPosition();
this._updateCanvasPosition();
}
]]></body>
</method>

View File

@ -16,7 +16,7 @@
<!ENTITY bookmarks.tooltip "View bookmarks">
<!ENTITY newtab.label "New Tab">
<!ENTITY closetab.label "Close Tab">
<!ENTITY closetab.label "Close Tab">
<!ENTITY cut.label "Cut">
<!ENTITY copy.label "Copy">

View File

@ -248,11 +248,11 @@ toolbarbutton.browser-control-button {
/* tab list */
.tab-list-container {
#tab-list-container {
background-color: rgb(123,125,123);
}
.tab-list {
#tab-list {
-moz-appearance: none;
margin: 0;
padding: 4px;
@ -271,10 +271,9 @@ richlistitem[type="documenttab"][selected="true"] {
border: 1px solid white !important;
}
.newtab-button {
#newtab-button {
-moz-appearance: none;
background-color: rgba(207,207,207,0.9);
font-size: 24pt;
}
/* autocomplete */
@ -297,13 +296,13 @@ richlistitem[type="documenttab"][selected="true"] {
width: 16px;
height: 16px;
}
.ac-result-type-tag {
list-style-image: url("chrome://browser/skin/images/tag.png");
width: 16px;
height: 16px;
}
.ac-comment {
font-size: 1.15em;
}