mozilla-kde.patch
changeset 955 55662cbdb950
parent 952 8094e6bba260
child 956 5353413a2411
equal deleted inserted replaced
954:0100ca6f6eed 955:55662cbdb950
     1 # HG changeset patch
     1 # HG changeset patch
     2 # Parent  420c86af3acf187f3f0e4d2fd061eb6221bb654c
     2 # Parent  f8957db53f2d7122b59ce5ddb2a2c7bff8bf1862
     3 Description: Add KDE integration to Firefox (toolkit parts)
     3 Description: Add KDE integration to Firefox (toolkit parts)
     4 Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
     4 Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
     5 Author: Lubos Lunak <lunak@suse.com>
     5 Author: Lubos Lunak <lunak@suse.com>
     6 Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751
     6 Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751
     7      https://bugzilla.novell.com/show_bug.cgi?id=170055
     7      https://bugzilla.novell.com/show_bug.cgi?id=170055
   324 +   content/global/gmp-sources/widevinecdm.json (gmp-sources/widevinecdm.json)
   324 +   content/global/gmp-sources/widevinecdm.json (gmp-sources/widevinecdm.json)
   325 diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
   325 diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
   326 new file mode 100644
   326 new file mode 100644
   327 --- /dev/null
   327 --- /dev/null
   328 +++ b/toolkit/content/widgets/dialog-kde.xml
   328 +++ b/toolkit/content/widgets/dialog-kde.xml
   329 @@ -0,0 +1,457 @@
   329 @@ -0,0 +1,455 @@
   330 +<?xml version="1.0"?>
   330 +<?xml version="1.0"?>
   331 +<!-- This Source Code Form is subject to the terms of the Mozilla Public
   331 +<!-- This Source Code Form is subject to the terms of the Mozilla Public
   332 +   - License, v. 2.0. If a copy of the MPL was not distributed with this
   332 +   - License, v. 2.0. If a copy of the MPL was not distributed with this
   333 +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
   333 +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
   334 +
   334 +
   469 +      </method>
   469 +      </method>
   470 +
   470 +
   471 +      <method name="centerWindowOnScreen">
   471 +      <method name="centerWindowOnScreen">
   472 +        <body>
   472 +        <body>
   473 +        <![CDATA[
   473 +        <![CDATA[
   474 +          var xOffset = screen.availWidth/2 - window.outerWidth/2;
   474 +          var xOffset = screen.availWidth / 2 - window.outerWidth / 2;
   475 +          var yOffset = screen.availHeight/2 - window.outerHeight/2;
   475 +          var yOffset = screen.availHeight / 2 - window.outerHeight / 2;
   476 +
   476 +
   477 +          xOffset = xOffset > 0 ? xOffset : 0;
   477 +          xOffset = xOffset > 0 ? xOffset : 0;
   478 +          yOffset = yOffset > 0 ? yOffset : 0;
   478 +          yOffset = yOffset > 0 ? yOffset : 0;
   479 +          window.moveTo(xOffset, yOffset);
   479 +          window.moveTo(xOffset, yOffset);
   480 +        ]]>
   480 +        ]]>
   484 +      <constructor>
   484 +      <constructor>
   485 +      <![CDATA[
   485 +      <![CDATA[
   486 +        this._configureButtons(this.buttons);
   486 +        this._configureButtons(this.buttons);
   487 +
   487 +
   488 +        // listen for when window is closed via native close buttons
   488 +        // listen for when window is closed via native close buttons
   489 +        window.addEventListener("close", this._closeHandler, false);
   489 +        window.addEventListener("close", this._closeHandler);
   490 +
   490 +
   491 +        // for things that we need to initialize after onload fires
   491 +        // for things that we need to initialize after onload fires
   492 +        window.addEventListener("load", this.postLoadInit, false);
   492 +        window.addEventListener("load", this.postLoadInit);
   493 +
   493 +
   494 +        window.moveToAlertPosition = this.moveToAlertPosition;
   494 +        window.moveToAlertPosition = this.moveToAlertPosition;
   495 +        window.centerWindowOnScreen = this.centerWindowOnScreen;
   495 +        window.centerWindowOnScreen = this.centerWindowOnScreen;
   496 +      ]]>
   496 +      ]]>
   497 +      </constructor>
   497 +      </constructor>
   522 +                  if (focusedElt.hasAttribute("dlgtype")) {
   522 +                  if (focusedElt.hasAttribute("dlgtype")) {
   523 +                    // We don't want to focus on anonymous OK, Cancel, etc. buttons,
   523 +                    // We don't want to focus on anonymous OK, Cancel, etc. buttons,
   524 +                    // so return focus to the tab itself
   524 +                    // so return focus to the tab itself
   525 +                    initialFocusedElt.focus();
   525 +                    initialFocusedElt.focus();
   526 +                  }
   526 +                  }
   527 +                }
   527 +                } else if (!/Mac/.test(navigator.platform) &&
   528 +                else if (!/Mac/.test(navigator.platform) &&
   528 +                           focusedElt.hasAttribute("dlgtype") && focusedElt != defaultButton) {
   529 +                         focusedElt.hasAttribute("dlgtype") && focusedElt != defaultButton) {
       
   530 +                  defaultButton.focus();
   529 +                  defaultButton.focus();
   531 +                }
   530 +                }
   532 +              }
   531 +              }
   533 +            }
   532 +            }
   534 +
   533 +
   588 +            button.addEventListener("command", this._handleButtonCommand, true);
   587 +            button.addEventListener("command", this._handleButtonCommand, true);
   589 +
   588 +
   590 +            // don't override custom labels with pre-defined labels on explicit buttons
   589 +            // don't override custom labels with pre-defined labels on explicit buttons
   591 +            if (!button.hasAttribute("label")) {
   590 +            if (!button.hasAttribute("label")) {
   592 +              // dialog attributes override the default labels in dialog.properties
   591 +              // dialog attributes override the default labels in dialog.properties
   593 +              if (this.hasAttribute("buttonlabel"+dlgtype)) {
   592 +              if (this.hasAttribute("buttonlabel" + dlgtype)) {
   594 +                button.setAttribute("label", this.getAttribute("buttonlabel"+dlgtype));
   593 +                button.setAttribute("label", this.getAttribute("buttonlabel" + dlgtype));
   595 +                if (this.hasAttribute("buttonaccesskey"+dlgtype))
   594 +                if (this.hasAttribute("buttonaccesskey" + dlgtype))
   596 +                  button.setAttribute("accesskey", this.getAttribute("buttonaccesskey"+dlgtype));
   595 +                  button.setAttribute("accesskey", this.getAttribute("buttonaccesskey" + dlgtype));
   597 +              } else if (dlgtype != "extra1" && dlgtype != "extra2") {
   596 +              } else if (dlgtype != "extra1" && dlgtype != "extra2") {
   598 +                button.setAttribute("label", this.mStrBundle.GetStringFromName("button-"+dlgtype));
   597 +                button.setAttribute("label", this.mStrBundle.GetStringFromName("button-" + dlgtype));
   599 +                var accessKey = this.mStrBundle.GetStringFromName("accesskey-"+dlgtype);
   598 +                var accessKey = this.mStrBundle.GetStringFromName("accesskey-" + dlgtype);
   600 +                if (accessKey)
   599 +                if (accessKey)
   601 +                  button.setAttribute("accesskey", accessKey);
   600 +                  button.setAttribute("accesskey", accessKey);
   602 +              }
   601 +              }
   603 +            }
   602 +            }
   604 +            // allow specifying alternate icons in the dialog header
   603 +            // allow specifying alternate icons in the dialog header
   605 +            if (!button.hasAttribute("icon")) {
   604 +            if (!button.hasAttribute("icon")) {
   606 +              // if there's an icon specified, use that
   605 +              // if there's an icon specified, use that
   607 +              if (this.hasAttribute("buttonicon"+dlgtype))
   606 +              if (this.hasAttribute("buttonicon" + dlgtype))
   608 +                button.setAttribute("icon", this.getAttribute("buttonicon"+dlgtype));
   607 +                button.setAttribute("icon", this.getAttribute("buttonicon" + dlgtype));
   609 +              // otherwise set defaults
   608 +              // otherwise set defaults
   610 +              else
   609 +              else
   611 +                switch (dlgtype) {
   610 +                switch (dlgtype) {
   612 +                  case "accept":
   611 +                  case "accept":
   613 +                    button.setAttribute("icon", "accept");
   612 +                    button.setAttribute("icon", "accept");
   647 +
   646 +
   648 +            // show the spacer on Windows only when the extra2 button is present
   647 +            // show the spacer on Windows only when the extra2 button is present
   649 +            if (/Win/.test(navigator.platform)) {
   648 +            if (/Win/.test(navigator.platform)) {
   650 +              var spacer = document.getAnonymousElementByAttribute(this, "anonid", "spacer");
   649 +              var spacer = document.getAnonymousElementByAttribute(this, "anonid", "spacer");
   651 +              spacer.removeAttribute("hidden");
   650 +              spacer.removeAttribute("hidden");
   652 +              spacer.setAttribute("flex", shown["extra2"]?"1":"0");
   651 +              spacer.setAttribute("flex", shown["extra2"] ? "1" : "0");
   653 +            }
   652 +            }
   654 +          }
   653 +          }
   655 +        ]]>
   654 +        ]]>
   656 +        </body>
   655 +        </body>
   657 +      </method>
   656 +      </method>
   667 +
   666 +
   668 +          var newDefaultButton = this.getButton(aNewDefault);
   667 +          var newDefaultButton = this.getButton(aNewDefault);
   669 +          if (newDefaultButton) {
   668 +          if (newDefaultButton) {
   670 +            this.setAttribute("defaultButton", aNewDefault);
   669 +            this.setAttribute("defaultButton", aNewDefault);
   671 +            newDefaultButton.setAttribute("default", "true");
   670 +            newDefaultButton.setAttribute("default", "true");
   672 +          }
   671 +          } else {
   673 +          else {
       
   674 +            this.setAttribute("defaultButton", "none");
   672 +            this.setAttribute("defaultButton", "none");
   675 +            if (aNewDefault != "none")
   673 +            if (aNewDefault != "none")
   676 +              dump("invalid new default button: " +  aNewDefault + ", assuming: none\n");
   674 +              dump("invalid new default button: " + aNewDefault + ", assuming: none\n");
   677 +          }
   675 +          }
   678 +        ]]>
   676 +        ]]>
   679 +        </body>
   677 +        </body>
   680 +      </method>
   678 +      </method>
   681 +
   679 +
   716 +      <method name="_fireButtonEvent">
   714 +      <method name="_fireButtonEvent">
   717 +        <parameter name="aDlgType"/>
   715 +        <parameter name="aDlgType"/>
   718 +        <body>
   716 +        <body>
   719 +        <![CDATA[
   717 +        <![CDATA[
   720 +          var event = document.createEvent("Events");
   718 +          var event = document.createEvent("Events");
   721 +          event.initEvent("dialog"+aDlgType, true, true);
   719 +          event.initEvent("dialog" + aDlgType, true, true);
   722 +
   720 +
   723 +          // handle dom event handlers
   721 +          // handle dom event handlers
   724 +          var noCancel = this.dispatchEvent(event);
   722 +          var noCancel = this.dispatchEvent(event);
   725 +
   723 +
   726 +          // handle any xml attribute event handlers
   724 +          // handle any xml attribute event handlers
   727 +          var handler = this.getAttribute("ondialog"+aDlgType);
   725 +          var handler = this.getAttribute("ondialog" + aDlgType);
   728 +          if (handler != "") {
   726 +          if (handler != "") {
   729 +            var fn = new Function("event", handler);
   727 +            var fn = new Function("event", handler);
   730 +            var returned = fn(event);
   728 +            var returned = fn(event);
   731 +            if (returned == false)
   729 +            if (returned == false)
   732 +              noCancel = false;
   730 +              noCancel = false;
   786 +</bindings>
   784 +</bindings>
   787 diff --git a/toolkit/content/widgets/preferences-kde.xml b/toolkit/content/widgets/preferences-kde.xml
   785 diff --git a/toolkit/content/widgets/preferences-kde.xml b/toolkit/content/widgets/preferences-kde.xml
   788 new file mode 100644
   786 new file mode 100644
   789 --- /dev/null
   787 --- /dev/null
   790 +++ b/toolkit/content/widgets/preferences-kde.xml
   788 +++ b/toolkit/content/widgets/preferences-kde.xml
   791 @@ -0,0 +1,1411 @@
   789 @@ -0,0 +1,1391 @@
   792 +<?xml version="1.0"?>
   790 +<?xml version="1.0"?>
   793 +
   791 +
   794 +<!DOCTYPE bindings [
   792 +<!DOCTYPE bindings [
   795 +  <!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
   793 +  <!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
   796 +  %preferencesDTD;
   794 +  %preferencesDTD;
   863 +          // Value changed, synthesize an event
   861 +          // Value changed, synthesize an event
   864 +          try {
   862 +          try {
   865 +            var event = document.createEvent("Events");
   863 +            var event = document.createEvent("Events");
   866 +            event.initEvent("change", true, true);
   864 +            event.initEvent("change", true, true);
   867 +            aPreference.dispatchEvent(event);
   865 +            aPreference.dispatchEvent(event);
   868 +          }
   866 +          } catch (e) {
   869 +          catch (e) {
       
   870 +            Components.utils.reportError(e);
   867 +            Components.utils.reportError(e);
   871 +          }
   868 +          }
   872 +        ]]>
   869 +        ]]>
   873 +        </body>
   870 +        </body>
   874 +      </method>
   871 +      </method>
   943 +            }
   940 +            }
   944 +          }
   941 +          }
   945 +
   942 +
   946 +          // Don't use the value setter here, we don't want updateElements to be prematurely fired.
   943 +          // Don't use the value setter here, we don't want updateElements to be prematurely fired.
   947 +          this._value = preference ? preference.value : this.valueFromPreferences;
   944 +          this._value = preference ? preference.value : this.valueFromPreferences;
   948 +        }
   945 +        } else
   949 +        else
       
   950 +          this._value = this.valueFromPreferences;
   946 +          this._value = this.valueFromPreferences;
   951 +        this.preferences._constructAfterChildren();
   947 +        this.preferences._constructAfterChildren();
   952 +      ]]>
   948 +      ]]>
   953 +      </constructor>
   949 +      </constructor>
   954 +      <destructor>
   950 +      <destructor>
   970 +          if (val == this.name)
   966 +          if (val == this.name)
   971 +            return val;
   967 +            return val;
   972 +
   968 +
   973 +          this.preferences.rootBranchInternal
   969 +          this.preferences.rootBranchInternal
   974 +              .removeObserver(this.name, this.preferences);
   970 +              .removeObserver(this.name, this.preferences);
   975 +          this.setAttribute('name', val);
   971 +          this.setAttribute("name", val);
   976 +          this.preferences.rootBranchInternal
   972 +          this.preferences.rootBranchInternal
   977 +              .addObserver(val, this.preferences, false);
   973 +              .addObserver(val, this.preferences, false);
   978 +
   974 +
   979 +          return val;
   975 +          return val;
   980 +        </setter>
   976 +        </setter>
  1145 +                          .getComplexValue(this.name, Components.interfaces.nsILocalFile);
  1141 +                          .getComplexValue(this.name, Components.interfaces.nsILocalFile);
  1146 +              return f;
  1142 +              return f;
  1147 +            default:
  1143 +            default:
  1148 +              this._reportUnknownType();
  1144 +              this._reportUnknownType();
  1149 +            }
  1145 +            }
  1150 +          }
  1146 +          } catch (e) { }
  1151 +          catch (e) { }
       
  1152 +          return null;
  1147 +          return null;
  1153 +        ]]>
  1148 +        ]]>
  1154 +        </getter>
  1149 +        </getter>
  1155 +        <setter>
  1150 +        <setter>
  1156 +        <![CDATA[
  1151 +        <![CDATA[
  1194 +              lf = Components.classes["@mozilla.org/file/local;1"]
  1189 +              lf = Components.classes["@mozilla.org/file/local;1"]
  1195 +                             .createInstance(Components.interfaces.nsILocalFile);
  1190 +                             .createInstance(Components.interfaces.nsILocalFile);
  1196 +              lf.persistentDescriptor = val;
  1191 +              lf.persistentDescriptor = val;
  1197 +              if (!lf.exists())
  1192 +              if (!lf.exists())
  1198 +                lf.initWithPath(val);
  1193 +                lf.initWithPath(val);
  1199 +            }
  1194 +            } else
  1200 +            else
       
  1201 +              lf = val.QueryInterface(Components.interfaces.nsILocalFile);
  1195 +              lf = val.QueryInterface(Components.interfaces.nsILocalFile);
  1202 +            this.preferences.rootBranch
  1196 +            this.preferences.rootBranch
  1203 +                .setComplexValue(this.name, Components.interfaces.nsILocalFile, lf);
  1197 +                .setComplexValue(this.name, Components.interfaces.nsILocalFile, lf);
  1204 +            break;
  1198 +            break;
  1205 +          default:
  1199 +          default:
  1226 +          if (aElement.hasAttribute("onsyncfrompreference")) {
  1220 +          if (aElement.hasAttribute("onsyncfrompreference")) {
  1227 +            // Value changed, synthesize an event
  1221 +            // Value changed, synthesize an event
  1228 +            try {
  1222 +            try {
  1229 +              var event = document.createEvent("Events");
  1223 +              var event = document.createEvent("Events");
  1230 +              event.initEvent("syncfrompreference", true, true);
  1224 +              event.initEvent("syncfrompreference", true, true);
  1231 +              var f = new Function ("event",
  1225 +              var f = new Function("event",
  1232 +                                    aElement.getAttribute("onsyncfrompreference"));
  1226 +                                   aElement.getAttribute("onsyncfrompreference"));
  1233 +              rv = f.call(aElement, event);
  1227 +              rv = f.call(aElement, event);
  1234 +            }
  1228 +            } catch (e) {
  1235 +            catch (e) {
       
  1236 +              Components.utils.reportError(e);
  1229 +              Components.utils.reportError(e);
  1237 +            }
  1230 +            }
  1238 +          }
  1231 +          }
  1239 +          var val = rv;
  1232 +          var val = rv;
  1240 +          if (val === undefined)
  1233 +          if (val === undefined)
  1265 +            // XXXmano Bug 303998: Avoid a caret placement issue if either the
  1258 +            // XXXmano Bug 303998: Avoid a caret placement issue if either the
  1266 +            // preference observer or its setter calls updateElements as a result
  1259 +            // preference observer or its setter calls updateElements as a result
  1267 +            // of the input event handler.
  1260 +            // of the input event handler.
  1268 +            if (aElement.value !== val)
  1261 +            if (aElement.value !== val)
  1269 +              setValue(aElement, "value", val);
  1262 +              setValue(aElement, "value", val);
  1270 +          }
  1263 +          } else
  1271 +          else
       
  1272 +            setValue(aElement, "value", val);
  1264 +            setValue(aElement, "value", val);
  1273 +        ]]>
  1265 +        ]]>
  1274 +        </body>
  1266 +        </body>
  1275 +      </method>
  1267 +      </method>
  1276 +
  1268 +
  1281 +          if (aElement.hasAttribute("onsynctopreference")) {
  1273 +          if (aElement.hasAttribute("onsynctopreference")) {
  1282 +            // Value changed, synthesize an event
  1274 +            // Value changed, synthesize an event
  1283 +            try {
  1275 +            try {
  1284 +              var event = document.createEvent("Events");
  1276 +              var event = document.createEvent("Events");
  1285 +              event.initEvent("synctopreference", true, true);
  1277 +              event.initEvent("synctopreference", true, true);
  1286 +              var f = new Function ("event",
  1278 +              var f = new Function("event",
  1287 +                                    aElement.getAttribute("onsynctopreference"));
  1279 +                                   aElement.getAttribute("onsynctopreference"));
  1288 +              var rv = f.call(aElement, event);
  1280 +              var rv = f.call(aElement, event);
  1289 +              if (rv !== undefined)
  1281 +              if (rv !== undefined)
  1290 +                return rv;
  1282 +                return rv;
  1291 +            }
  1283 +            } catch (e) {
  1292 +            catch (e) {
       
  1293 +              Components.utils.reportError(e);
  1284 +              Components.utils.reportError(e);
  1294 +            }
  1285 +            }
  1295 +          }
  1286 +          }
  1296 +
  1287 +
  1297 +          /**
  1288 +          /**
  1433 +              document.getAnonymousElementByAttribute(this, "anonid", "spacer").hidden = true;
  1424 +              document.getAnonymousElementByAttribute(this, "anonid", "spacer").hidden = true;
  1434 +              // Also, don't fire onDialogAccept on enter
  1425 +              // Also, don't fire onDialogAccept on enter
  1435 +              acceptButton.disabled = true;
  1426 +              acceptButton.disabled = true;
  1436 +            } else {
  1427 +            } else {
  1437 +              // morph the Cancel button into the Close button
  1428 +              // morph the Cancel button into the Close button
  1438 +              cancelButton.setAttribute ("icon", "close");
  1429 +              cancelButton.setAttribute("icon", "close");
  1439 +              cancelButton.label = docElt.getAttribute("closebuttonlabel");
  1430 +              cancelButton.label = docElt.getAttribute("closebuttonlabel");
  1440 +              cancelButton.accesskey = docElt.getAttribute("closebuttonaccesskey");
  1431 +              cancelButton.accesskey = docElt.getAttribute("closebuttonaccesskey");
  1441 +            }
  1432 +            }
  1442 +          }
  1433 +          }
  1443 +        }
  1434 +        }
  1454 +
  1445 +
  1455 +        var paneToLoad;
  1446 +        var paneToLoad;
  1456 +        if ("arguments" in window && window.arguments[0] && document.getElementById(window.arguments[0]) && document.getElementById(window.arguments[0]).nodeName == "prefpane") {
  1447 +        if ("arguments" in window && window.arguments[0] && document.getElementById(window.arguments[0]) && document.getElementById(window.arguments[0]).nodeName == "prefpane") {
  1457 +          paneToLoad = document.getElementById(window.arguments[0]);
  1448 +          paneToLoad = document.getElementById(window.arguments[0]);
  1458 +          this.lastSelected = paneToLoad.id;
  1449 +          this.lastSelected = paneToLoad.id;
  1459 +        }
  1450 +        } else if (lastPane)
  1460 +        else if (lastPane)
       
  1461 +          paneToLoad = lastPane;
  1451 +          paneToLoad = lastPane;
  1462 +        else
  1452 +        else
  1463 +          paneToLoad = panes[0];
  1453 +          paneToLoad = panes[0];
  1464 +
  1454 +
  1465 +        for (var i = 0; i < panes.length; ++i) {
  1455 +        for (var i = 0; i < panes.length; ++i) {
  1552 +          if (!aPaneElement)
  1542 +          if (!aPaneElement)
  1553 +            return;
  1543 +            return;
  1554 +
  1544 +
  1555 +          this._selector.selectedItem = document.getAnonymousElementByAttribute(this, "pane", aPaneElement.id);
  1545 +          this._selector.selectedItem = document.getAnonymousElementByAttribute(this, "pane", aPaneElement.id);
  1556 +          if (!aPaneElement.loaded) {
  1546 +          if (!aPaneElement.loaded) {
  1557 +            let OverlayLoadObserver = function(aPane)
  1547 +            let OverlayLoadObserver = function(aPane) {
  1558 +            {
       
  1559 +              this._pane = aPane;
  1548 +              this._pane = aPane;
  1560 +            }
  1549 +            }
  1561 +            OverlayLoadObserver.prototype = {
  1550 +            OverlayLoadObserver.prototype = {
  1562 +              _outer: this,
  1551 +              _outer: this,
  1563 +              observe: function (aSubject, aTopic, aData)
  1552 +              observe(aSubject, aTopic, aData) {
  1564 +              {
       
  1565 +                this._pane.loaded = true;
  1553 +                this._pane.loaded = true;
  1566 +                this._outer._fireEvent("paneload", this._pane);
  1554 +                this._outer._fireEvent("paneload", this._pane);
  1567 +                this._outer._selectPane(this._pane);
  1555 +                this._outer._selectPane(this._pane);
  1568 +              }
  1556 +              }
  1569 +            };
  1557 +            };
  1570 +
  1558 +
  1571 +            var obs = new OverlayLoadObserver(aPaneElement);
  1559 +            var obs = new OverlayLoadObserver(aPaneElement);
  1572 +            document.loadOverlay(aPaneElement.src, obs);
  1560 +            document.loadOverlay(aPaneElement.src, obs);
  1573 +          }
  1561 +          } else
  1574 +          else
       
  1575 +            this._selectPane(aPaneElement);
  1562 +            this._selectPane(aPaneElement);
  1576 +        ]]>
  1563 +        ]]>
  1577 +        </body>
  1564 +        </body>
  1578 +      </method>
  1565 +      </method>
  1579 +
  1566 +
  1586 +          try {
  1573 +          try {
  1587 +            var event = document.createEvent("Events");
  1574 +            var event = document.createEvent("Events");
  1588 +            event.initEvent(aEventName, true, true);
  1575 +            event.initEvent(aEventName, true, true);
  1589 +            var cancel = !aTarget.dispatchEvent(event);
  1576 +            var cancel = !aTarget.dispatchEvent(event);
  1590 +            if (aTarget.hasAttribute("on" + aEventName)) {
  1577 +            if (aTarget.hasAttribute("on" + aEventName)) {
  1591 +              var fn = new Function ("event", aTarget.getAttribute("on" + aEventName));
  1578 +              var fn = new Function("event", aTarget.getAttribute("on" + aEventName));
  1592 +              var rv = fn.call(aTarget, event);
  1579 +              var rv = fn.call(aTarget, event);
  1593 +              if (rv == false)
  1580 +              if (rv == false)
  1594 +                cancel = true;
  1581 +                cancel = true;
  1595 +            }
  1582 +            }
  1596 +            return !cancel;
  1583 +            return !cancel;
  1597 +          }
  1584 +          } catch (e) {
  1598 +          catch (e) {
       
  1599 +            Components.utils.reportError(e);
  1585 +            Components.utils.reportError(e);
  1600 +          }
  1586 +          }
  1601 +          return false;
  1587 +          return false;
  1602 +        ]]>
  1588 +        ]]>
  1603 +        </body>
  1589 +        </body>
  1647 +
  1633 +
  1648 +                // Only animate if we've switched between prefpanes
  1634 +                // Only animate if we've switched between prefpanes
  1649 +                if (this._shouldAnimate && oldPane.id != aPaneElement.id) {
  1635 +                if (this._shouldAnimate && oldPane.id != aPaneElement.id) {
  1650 +                  aPaneElement.style.opacity = 0.0;
  1636 +                  aPaneElement.style.opacity = 0.0;
  1651 +                  this.animate(oldPane, aPaneElement);
  1637 +                  this.animate(oldPane, aPaneElement);
  1652 +                }
  1638 +                } else if (!this._shouldAnimate && prefpanes.length > 1) {
  1653 +                else if (!this._shouldAnimate && prefpanes.length > 1) {
       
  1654 +                  var targetHeight = parseInt(window.getComputedStyle(this._paneDeckContainer, "").height);
  1639 +                  var targetHeight = parseInt(window.getComputedStyle(this._paneDeckContainer, "").height);
  1655 +                  var verticalPadding = parseInt(window.getComputedStyle(aPaneElement, "").paddingTop);
  1640 +                  var verticalPadding = parseInt(window.getComputedStyle(aPaneElement, "").paddingTop);
  1656 +                  verticalPadding += parseInt(window.getComputedStyle(aPaneElement, "").paddingBottom);
  1641 +                  verticalPadding += parseInt(window.getComputedStyle(aPaneElement, "").paddingBottom);
  1657 +                  if (aPaneElement.contentHeight > targetHeight - verticalPadding) {
  1642 +                  if (aPaneElement.contentHeight > targetHeight - verticalPadding) {
  1658 +                    // To workaround the bottom border of a groupbox from being
  1643 +                    // To workaround the bottom border of a groupbox from being
  1685 +          var psvc = Components.classes["@mozilla.org/preferences-service;1"]
  1670 +          var psvc = Components.classes["@mozilla.org/preferences-service;1"]
  1686 +                               .getService(Components.interfaces.nsIPrefBranch);
  1671 +                               .getService(Components.interfaces.nsIPrefBranch);
  1687 +          var animate = /Mac/.test(navigator.platform);
  1672 +          var animate = /Mac/.test(navigator.platform);
  1688 +          try {
  1673 +          try {
  1689 +            animate = psvc.getBoolPref("browser.preferences.animateFadeIn");
  1674 +            animate = psvc.getBoolPref("browser.preferences.animateFadeIn");
  1690 +          }
  1675 +          } catch (e) { }
  1691 +          catch (e) { }
       
  1692 +          return animate;
  1676 +          return animate;
  1693 +        ]]>
  1677 +        ]]>
  1694 +        </getter>
  1678 +        </getter>
  1695 +      </property>
  1679 +      </property>
  1696 +
  1680 +
  1739 +          if (aTimer == this._animateTimer) {
  1723 +          if (aTimer == this._animateTimer) {
  1740 +            var increment = this._sizeIncrement;
  1724 +            var increment = this._sizeIncrement;
  1741 +            if (increment != 0) {
  1725 +            if (increment != 0) {
  1742 +              window.innerHeight += increment;
  1726 +              window.innerHeight += increment;
  1743 +              this._currentHeight += increment;
  1727 +              this._currentHeight += increment;
  1744 +            }
  1728 +            } else {
  1745 +            else {
       
  1746 +              aTimer.cancel();
  1729 +              aTimer.cancel();
  1747 +              this._setUpFadeTimer();
  1730 +              this._setUpFadeTimer();
  1748 +            }
  1731 +            }
  1749 +          } else if (aTimer == this._fadeTimer) {
  1732 +          } else if (aTimer == this._fadeTimer) {
  1750 +            var elt = document.getElementById(this.lastSelected);
  1733 +            var elt = document.getElementById(this.lastSelected);
  1835 +          var win = aWindowType ? wm.getMostRecentWindow(aWindowType) : null;
  1818 +          var win = aWindowType ? wm.getMostRecentWindow(aWindowType) : null;
  1836 +          if (win) {
  1819 +          if (win) {
  1837 +            if ("initWithParams" in win)
  1820 +            if ("initWithParams" in win)
  1838 +              win.initWithParams(aParams);
  1821 +              win.initWithParams(aParams);
  1839 +            win.focus();
  1822 +            win.focus();
  1840 +          }
  1823 +          } else {
  1841 +          else {
       
  1842 +            var features = "resizable,dialog=no,centerscreen" + (aFeatures != "" ? ("," + aFeatures) : "");
  1824 +            var features = "resizable,dialog=no,centerscreen" + (aFeatures != "" ? ("," + aFeatures) : "");
  1843 +            var parentWindow = (this.instantApply || !window.opener || window.opener.closed) ? window : window.opener;
  1825 +            var parentWindow = (this.instantApply || !window.opener || window.opener.closed) ? window : window.opener;
  1844 +            win = parentWindow.openDialog(aURL, "_blank", features, aParams);
  1826 +            win = parentWindow.openDialog(aURL, "_blank", features, aParams);
  1845 +          }
  1827 +          }
  1846 +          return win;
  1828 +          return win;
  1857 +
  1839 +
  1858 +        var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
  1840 +        var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"]
  1859 +                    .getService(Components.interfaces.nsIScriptSecurityManager);
  1841 +                    .getService(Components.interfaces.nsIScriptSecurityManager);
  1860 +        if (this.type == "child" && window.opener &&
  1842 +        if (this.type == "child" && window.opener &&
  1861 +            secMan.isSystemPrincipal(window.opener.document.nodePrincipal)) {
  1843 +            secMan.isSystemPrincipal(window.opener.document.nodePrincipal)) {
  1862 +          let psvc = Components.classes["@mozilla.org/preferences-service;1"]
       
  1863 +                               .getService(Components.interfaces.nsIPrefBranch);
       
  1864 +          var pdocEl = window.opener.document.documentElement;
  1844 +          var pdocEl = window.opener.document.documentElement;
  1865 +          if (pdocEl.instantApply) {
  1845 +          if (pdocEl.instantApply) {
  1866 +            let panes = this.preferencePanes;
  1846 +            let panes = this.preferencePanes;
  1867 +            for (let i = 0; i < panes.length; ++i)
  1847 +            for (let i = 0; i < panes.length; ++i)
  1868 +              panes[i].writePreferences(true);
  1848 +              panes[i].writePreferences(true);
  1869 +          }
  1849 +          } else {
  1870 +          else {
       
  1871 +            // Clone all the preferences elements from the child document and
  1850 +            // Clone all the preferences elements from the child document and
  1872 +            // insert them into the pane collection of the parent.
  1851 +            // insert them into the pane collection of the parent.
  1873 +            var pdoc = window.opener.document;
  1852 +            var pdoc = window.opener.document;
  1874 +            if (pdoc.documentElement.localName == "prefwindow") {
  1853 +            if (pdoc.documentElement.localName == "prefwindow") {
  1875 +              var currentPane = pdoc.documentElement.currentPane;
  1854 +              var currentPane = pdoc.documentElement.currentPane;
  1908 +                  preference.value = preferences[j].value;
  1887 +                  preference.value = preferences[j].value;
  1909 +                }
  1888 +                }
  1910 +              }
  1889 +              }
  1911 +            }
  1890 +            }
  1912 +          }
  1891 +          }
  1913 +        }
  1892 +        } else {
  1914 +        else {
       
  1915 +          let panes = this.preferencePanes;
  1893 +          let panes = this.preferencePanes;
  1916 +          for (var i = 0; i < panes.length; ++i)
  1894 +          for (var i = 0; i < panes.length; ++i)
  1917 +            panes[i].writePreferences(false);
  1895 +            panes[i].writePreferences(false);
  1918 +
  1896 +
  1919 +          let psvc = Components.classes["@mozilla.org/preferences-service;1"]
  1897 +          let psvc = Components.classes["@mozilla.org/preferences-service;1"]
  2047 +        <![CDATA[
  2025 +        <![CDATA[
  2048 +          var temp = aStartElement;
  2026 +          var temp = aStartElement;
  2049 +          while (temp && temp.nodeType == Node.ELEMENT_NODE &&
  2027 +          while (temp && temp.nodeType == Node.ELEMENT_NODE &&
  2050 +                 !temp.hasAttribute("preference"))
  2028 +                 !temp.hasAttribute("preference"))
  2051 +            temp = temp.parentNode;
  2029 +            temp = temp.parentNode;
  2052 +          return temp.nodeType == Node.ELEMENT_NODE ? temp : aStartElement;
  2030 +          return temp && temp.nodeType == Node.ELEMENT_NODE ?
       
  2031 +                 temp : aStartElement;
  2053 +        ]]>
  2032 +        ]]>
  2054 +        </body>
  2033 +        </body>
  2055 +      </method>
  2034 +      </method>
  2056 +
  2035 +
  2057 +      <property name="DeferredTask" readonly="true">
  2036 +      <property name="DeferredTask" readonly="true">
  2160 +        var elements = this.preferenceElements;
  2139 +        var elements = this.preferenceElements;
  2161 +        for (var i = 0; i < elements.length; ++i) {
  2140 +        for (var i = 0; i < elements.length; ++i) {
  2162 +          try {
  2141 +          try {
  2163 +            var preference = this.preferenceForElement(elements[i]);
  2142 +            var preference = this.preferenceForElement(elements[i]);
  2164 +            preference.setElementValue(elements[i]);
  2143 +            preference.setElementValue(elements[i]);
  2165 +          }
  2144 +          } catch (e) {
  2166 +          catch (e) {
       
  2167 +            dump("*** No preference found for " + elements[i].getAttribute("preference") + "\n");
  2145 +            dump("*** No preference found for " + elements[i].getAttribute("preference") + "\n");
  2168 +          }
  2146 +          }
  2169 +        }
  2147 +        }
  2170 +      ]]>
  2148 +      ]]>
  2171 +      </handler>
  2149 +      </handler>