Bug 1365912 - Add a pref for enabling compact and touch mode. r=dao
MozReview-Commit-ID: 1hmTdl0zSKB
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -227,16 +227,20 @@ pref("general.skins.selectedSkin", "clas
pref("general.smoothScroll", true);
#ifdef UNIX_BUT_NOT_MAC
pref("general.autoScroll", false);
#else
pref("general.autoScroll", true);
#endif
+// UI density of the browser chrome. This mostly affects toolbarbutton
+// and urlbar spacing. The possible values are 0=normal, 1=compact, 2=touch.
+pref("browser.uidensity", 0);
+
// At startup, check if we're the default browser and prompt user if not.
pref("browser.shell.checkDefaultBrowser", true);
pref("browser.shell.shortcutFavicons",true);
pref("browser.shell.mostRecentDateSetAsDefault", "");
pref("browser.shell.skipDefaultBrowserCheckOnFirstRun", true);
pref("browser.shell.didSkipDefaultBrowserCheckOnFirstRun", false);
pref("browser.shell.defaultBrowserCheckCount", 0);
pref("browser.defaultbrowser.notificationbar", false);
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1309,16 +1309,19 @@ var gBrowserInit = {
SidebarUI.init();
// Certain kinds of automigration rely on this notification to complete
// their tasks BEFORE the browser window is shown. SessionStore uses it to
// restore tabs into windows AFTER important parts like gMultiProcessBrowser
// have been initialized.
Services.obs.notifyObservers(window, "browser-window-before-show");
+ gUIDensity.update();
+ gPrefService.addObserver(gUIDensity.prefDomain, gUIDensity);
+
let isResistFingerprintingEnabled = gPrefService.getBoolPref("privacy.resistFingerprinting");
// Set a sane starting width/height for all resolutions on new profiles.
if (isResistFingerprintingEnabled) {
// When the fingerprinting resistance is enabled, making sure that we don't
// have a maximum window to interfere with generating rounded window dimensions.
document.documentElement.setAttribute("sizemode", "normal");
} else if (!document.documentElement.hasAttribute("width")) {
@@ -1761,16 +1764,18 @@ var gBrowserInit = {
FullScreen.uninit();
gSync.uninit();
gExtensionsNotifications.uninit();
Services.obs.removeObserver(gPluginHandler.NPAPIPluginCrashed, "plugin-crashed");
+ gPrefService.removeObserver(gUIDensity.prefDomain, gUIDensity);
+
try {
gBrowser.removeProgressListener(window.XULBrowserWindow);
gBrowser.removeTabsProgressListener(window.TabsProgressListener);
} catch (ex) {
}
PlacesToolbarHelper.uninit();
@@ -5405,16 +5410,41 @@ var gTabletModePageCounter = {
}
},
};
function displaySecurityInfo() {
BrowserPageInfo(null, "securityTab");
}
+// Updates the UI density (for touch and compact mode) based on the uidensity pref.
+var gUIDensity = {
+ prefDomain: "browser.uidensity",
+ observe(aSubject, aTopic, aPrefName) {
+ if (aTopic != "nsPref:changed" || aPrefName != this.prefDomain)
+ return;
+
+ this.update();
+ },
+
+ update() {
+ let doc = document.documentElement;
+ switch (gPrefService.getIntPref(this.prefDomain)) {
+ case 1:
+ doc.setAttribute("uidensity", "compact");
+ break;
+ case 2:
+ doc.setAttribute("uidensity", "touch");
+ break;
+ default:
+ doc.removeAttribute("uidensity");
+ break;
+ }
+ },
+};
var gHomeButton = {
prefDomain: "browser.startup.homepage",
observe(aSubject, aTopic, aPrefName) {
if (aTopic != "nsPref:changed" || aPrefName != this.prefDomain)
return;
this.updateTooltip();