forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			95 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
 | |
|  * 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/. */
 | |
| 
 | |
| var TabsInTitlebar = {
 | |
|   init() {
 | |
|     this._readPref();
 | |
|     Services.prefs.addObserver(this._prefName, this);
 | |
| 
 | |
|     this._initialized = true;
 | |
|     this._update();
 | |
|   },
 | |
| 
 | |
|   allowedBy(condition, allow) {
 | |
|     if (allow) {
 | |
|       if (condition in this._disallowed) {
 | |
|         delete this._disallowed[condition];
 | |
|         this._update();
 | |
|       }
 | |
|     } else if (!(condition in this._disallowed)) {
 | |
|       this._disallowed[condition] = null;
 | |
|       this._update();
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   get systemSupported() {
 | |
|     let isSupported = false;
 | |
|     switch (AppConstants.MOZ_WIDGET_TOOLKIT) {
 | |
|       case "windows":
 | |
|       case "cocoa":
 | |
|         isSupported = true;
 | |
|         break;
 | |
|       case "gtk":
 | |
|         isSupported = window.matchMedia("(-moz-gtk-csd-available)").matches;
 | |
|         break;
 | |
|     }
 | |
|     delete this.systemSupported;
 | |
|     return (this.systemSupported = isSupported);
 | |
|   },
 | |
| 
 | |
|   get enabled() {
 | |
|     return document.documentElement.getAttribute("tabsintitlebar") == "true";
 | |
|   },
 | |
| 
 | |
|   observe(subject, topic, data) {
 | |
|     if (topic == "nsPref:changed") {
 | |
|       this._readPref();
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   _initialized: false,
 | |
|   _disallowed: {},
 | |
|   _prefName: "browser.tabs.drawInTitlebar",
 | |
| 
 | |
|   _readPref() {
 | |
|     let hiddenTitlebar = Services.prefs.getBoolPref(
 | |
|       "browser.tabs.drawInTitlebar",
 | |
|       window.matchMedia("(-moz-gtk-csd-hide-titlebar-by-default)").matches
 | |
|     );
 | |
|     this.allowedBy("pref", hiddenTitlebar);
 | |
|   },
 | |
| 
 | |
|   _update() {
 | |
|     if (!this._initialized) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     let allowed =
 | |
|       this.systemSupported &&
 | |
|       !window.fullScreen &&
 | |
|       !Object.keys(this._disallowed).length;
 | |
|     if (allowed) {
 | |
|       document.documentElement.setAttribute("tabsintitlebar", "true");
 | |
|       if (AppConstants.platform == "macosx") {
 | |
|         document.documentElement.setAttribute("chromemargin", "0,-1,-1,-1");
 | |
|         document.documentElement.removeAttribute("drawtitle");
 | |
|       } else {
 | |
|         document.documentElement.setAttribute("chromemargin", "0,2,2,2");
 | |
|       }
 | |
|     } else {
 | |
|       document.documentElement.removeAttribute("tabsintitlebar");
 | |
|       document.documentElement.removeAttribute("chromemargin");
 | |
|       if (AppConstants.platform == "macosx") {
 | |
|         document.documentElement.setAttribute("drawtitle", "true");
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     ToolbarIconColor.inferFromText("tabsintitlebar", allowed);
 | |
|   },
 | |
| 
 | |
|   uninit() {
 | |
|     Services.prefs.removeObserver(this._prefName, this);
 | |
|   },
 | |
| };
 | 
