File: nonbrowser-mac.js

package info (click to toggle)
thunderbird 1%3A68.10.0-1~deb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 2,754,812 kB
  • sloc: cpp: 5,411,679; javascript: 4,161,772; ansic: 2,639,702; python: 763,064; java: 346,606; xml: 266,623; asm: 265,884; sh: 117,270; lisp: 41,340; makefile: 23,560; perl: 18,042; objc: 5,277; yacc: 1,778; ada: 1,681; pascal: 1,673; lex: 1,417; cs: 879; exp: 527; awk: 495; php: 436; ruby: 221; sed: 69; csh: 27
file content (145 lines) | stat: -rw-r--r-- 4,198 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/* -*- 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/. */

/* eslint-env mozilla/browser-window */

let delayedStartupTimeoutId = null;

function OpenBrowserWindowFromDockMenu(options) {
  let win = OpenBrowserWindow(options);
  win.addEventListener(
    "load",
    function() {
      let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"].getService(
        Ci.nsIMacDockSupport
      );
      dockSupport.activateApplication(true);
    },
    { once: true }
  );

  return win;
}

function nonBrowserWindowStartup() {
  // Disable inappropriate commands / submenus
  var disabledItems = [
    "Browser:SavePage",
    "Browser:SendLink",
    "cmd_pageSetup",
    "cmd_print",
    "cmd_find",
    "cmd_findAgain",
    "viewToolbarsMenu",
    "viewSidebarMenuMenu",
    "Browser:Reload",
    "viewFullZoomMenu",
    "pageStyleMenu",
    "charsetMenu",
    "View:PageSource",
    "View:FullScreen",
    "viewHistorySidebar",
    "Browser:AddBookmarkAs",
    "Browser:BookmarkAllTabs",
    "View:PageInfo",
    "History:UndoCloseTab",
  ];
  var element;

  for (let disabledItem of disabledItems) {
    element = document.getElementById(disabledItem);
    if (element) {
      element.setAttribute("disabled", "true");
    }
  }

  // Show menus that are only visible in non-browser windows
  let shownItems = ["menu_openLocation"];
  for (let shownItem of shownItems) {
    element = document.getElementById(shownItem);
    if (element) {
      element.removeAttribute("hidden");
    }
  }

  // If no windows are active (i.e. we're the hidden window), disable the close, minimize
  // and zoom menu commands as well
  if (window.location.href == "chrome://browser/content/hiddenWindow.xul") {
    var hiddenWindowDisabledItems = [
      "cmd_close",
      "minimizeWindow",
      "zoomWindow",
    ];
    for (let hiddenWindowDisabledItem of hiddenWindowDisabledItems) {
      element = document.getElementById(hiddenWindowDisabledItem);
      if (element) {
        element.setAttribute("disabled", "true");
      }
    }

    // also hide the window-list separator
    element = document.getElementById("sep-window-list");
    element.setAttribute("hidden", "true");

    // Setup the dock menu.
    let dockMenuElement = document.getElementById("menu_mac_dockmenu");
    if (dockMenuElement != null) {
      let nativeMenu = Cc[
        "@mozilla.org/widget/standalonenativemenu;1"
      ].createInstance(Ci.nsIStandaloneNativeMenu);

      try {
        nativeMenu.init(dockMenuElement);

        let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"].getService(
          Ci.nsIMacDockSupport
        );
        dockSupport.dockMenu = nativeMenu;
      } catch (e) {}
    }
  }

  if (PrivateBrowsingUtils.permanentPrivateBrowsing) {
    document.getElementById("macDockMenuNewWindow").hidden = true;
  }
  if (!PrivateBrowsingUtils.enabled) {
    document.getElementById("macDockMenuNewPrivateWindow").hidden = true;
  }

  delayedStartupTimeoutId = setTimeout(nonBrowserWindowDelayedStartup, 0);
}

function nonBrowserWindowDelayedStartup() {
  delayedStartupTimeoutId = null;

  // initialise the offline listener
  BrowserOffline.init();

  // initialize the private browsing UI
  gPrivateBrowsingUI.init();
}

function nonBrowserWindowShutdown() {
  // If this is the hidden window being closed, release our reference to
  // the dock menu element to prevent leaks on shutdown
  if (window.location.href == "chrome://browser/content/hiddenWindow.xul") {
    let dockSupport = Cc["@mozilla.org/widget/macdocksupport;1"].getService(
      Ci.nsIMacDockSupport
    );
    dockSupport.dockMenu = null;
  }

  // If nonBrowserWindowDelayedStartup hasn't run yet, we have no work to do -
  // just cancel the pending timeout and return;
  if (delayedStartupTimeoutId) {
    clearTimeout(delayedStartupTimeoutId);
    return;
  }

  BrowserOffline.uninit();
}

addEventListener("load", nonBrowserWindowStartup, false);
addEventListener("unload", nonBrowserWindowShutdown, false);