mozilla-kde.patch
branchfirefox66
changeset 1089 eca1c1f2fe50
parent 1085 87f893cf45b9
child 1093 3942c205588b
equal deleted inserted replaced
1087:5fab52cd743d 1089:eca1c1f2fe50
     1 # HG changeset patch
     1 # HG changeset patch
     2 # Parent  ff3da33eabc1d8760ec41a87afbaf44ded300ede
     2 # Parent  f55e33a10c2a23625826ef6f8dbe18d5a455d29e
     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
    19  #include "plstr.h"
    19  #include "plstr.h"
    20  #include "prlink.h"
    20  #include "prlink.h"
    21 +#include "nsKDEUtils.h"
    21 +#include "nsKDEUtils.h"
    22  
    22  
    23  #ifdef MOZ_MEMORY
    23  #ifdef MOZ_MEMORY
    24  #include "mozmemory.h"
    24  #  include "mozmemory.h"
    25  #endif
    25  #endif
    26  
    26  
    27  #ifdef XP_WIN
    27  #ifdef XP_WIN
    28  #include "windows.h"
    28  #  include "windows.h"
    29  #endif
    29  #endif
    30 @@ -4466,25 +4467,37 @@ float MOZ_MAYBE_UNUSED GetPref<float>(co
    30 @@ -4467,25 +4468,37 @@ float MOZ_MAYBE_UNUSED GetPref<float>(co
    31    // application pref files for backwards compatibility.
    31    // application pref files for backwards compatibility.
    32    static const char* specialFiles[] = {
    32    static const char* specialFiles[] = {
    33  #if defined(XP_MACOSX)
    33  #if defined(XP_MACOSX)
    34      "macprefs.js"
    34      "macprefs.js"
    35  #elif defined(XP_WIN)
    35  #elif defined(XP_WIN)
    36      "winpref.js"
    36      "winpref.js"
    37  #elif defined(XP_UNIX)
    37  #elif defined(XP_UNIX)
    38      "unix.js"
    38      "unix.js"
    39 +    , "" // placeholder for KDE  (empty is otherwise harmless)
    39 +    , "" // placeholder for KDE  (empty is otherwise harmless)
    40  #if defined(_AIX)
    40  #  if defined(_AIX)
    41      ,
    41      ,
    42      "aix.js"
    42      "aix.js"
    43  #endif
    43  #  endif
    44  #elif defined(XP_BEOS)
    44  #elif defined(XP_BEOS)
    45      "beos.js"
    45      "beos.js"
    46  #endif
    46  #endif
    47    };
    47    };
    48  
    48  
    63      NS_WARNING("Error parsing application default preferences.");
    63      NS_WARNING("Error parsing application default preferences.");
    64    }
    64    }
    65  
    65  
    66    // Load jar:$app/omni.jar!/defaults/preferences/*.js
    66    // Load jar:$app/omni.jar!/defaults/preferences/*.js
    67    // or jar:$gre/omni.jar!/defaults/preferences/*.js.
    67    // or jar:$gre/omni.jar!/defaults/preferences/*.js.
    68 @@ -4532,17 +4545,17 @@ float MOZ_MAYBE_UNUSED GetPref<float>(co
    68 @@ -4533,17 +4546,17 @@ float MOZ_MAYBE_UNUSED GetPref<float>(co
    69        }
    69        }
    70  
    70  
    71        nsCOMPtr<nsIFile> path = do_QueryInterface(elem);
    71        nsCOMPtr<nsIFile> path = do_QueryInterface(elem);
    72        if (!path) {
    72        if (!path) {
    73          continue;
    73          continue;
   169  with Files('**'):
   169  with Files('**'):
   170      BUG_COMPONENT = ('Toolkit', 'Downloads API')
   170      BUG_COMPONENT = ('Toolkit', 'Downloads API')
   171 diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
   171 diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
   172 --- a/toolkit/content/jar.mn
   172 --- a/toolkit/content/jar.mn
   173 +++ b/toolkit/content/jar.mn
   173 +++ b/toolkit/content/jar.mn
   174 @@ -67,16 +67,18 @@ toolkit.jar:
   174 @@ -65,16 +65,18 @@ toolkit.jar:
       
   175     content/global/bindings/button.xml          (widgets/button.xml)
   175     content/global/bindings/calendar.js         (widgets/calendar.js)
   176     content/global/bindings/calendar.js         (widgets/calendar.js)
   176     content/global/bindings/checkbox.xml        (widgets/checkbox.xml)
   177     content/global/bindings/checkbox.xml        (widgets/checkbox.xml)
   177     content/global/bindings/datekeeper.js       (widgets/datekeeper.js)
   178     content/global/bindings/datekeeper.js       (widgets/datekeeper.js)
   178     content/global/bindings/datepicker.js       (widgets/datepicker.js)
   179     content/global/bindings/datepicker.js       (widgets/datepicker.js)
   179     content/global/bindings/datetimepopup.xml   (widgets/datetimepopup.xml)
       
   180     content/global/bindings/datetimebox.xml     (widgets/datetimebox.xml)
   180     content/global/bindings/datetimebox.xml     (widgets/datetimebox.xml)
   181     content/global/bindings/datetimebox.css     (widgets/datetimebox.css)
   181     content/global/bindings/datetimebox.css     (widgets/datetimebox.css)
   182  *  content/global/bindings/dialog.xml          (widgets/dialog.xml)
   182  *  content/global/bindings/dialog.xml          (widgets/dialog.xml)
   183 +*  content/global/bindings/dialog-kde.xml      (widgets/dialog-kde.xml)
   183 +*  content/global/bindings/dialog-kde.xml      (widgets/dialog-kde.xml)
   184 +% override chrome://global/content/bindings/dialog.xml chrome://global/content/bindings/dialog-kde.xml desktop=kde
   184 +% override chrome://global/content/bindings/dialog.xml chrome://global/content/bindings/dialog-kde.xml desktop=kde
   185     content/global/bindings/general.xml         (widgets/general.xml)
   185     content/global/bindings/general.xml         (widgets/general.xml)
   186     content/global/bindings/menu.xml            (widgets/menu.xml)
   186     content/global/bindings/menu.xml            (widgets/menu.xml)
   187     content/global/bindings/menulist.xml        (widgets/menulist.xml)
   187     content/global/bindings/menulist.xml        (widgets/menulist.xml)
   188     content/global/bindings/notification.xml    (widgets/notification.xml)
   188     content/global/bindings/notification.xml    (widgets/notification.xml)
   189     content/global/bindings/numberbox.xml       (widgets/numberbox.xml)
       
   190     content/global/bindings/popup.xml           (widgets/popup.xml)
   189     content/global/bindings/popup.xml           (widgets/popup.xml)
   191     content/global/bindings/radio.xml           (widgets/radio.xml)
   190     content/global/bindings/radio.xml           (widgets/radio.xml)
   192     content/global/bindings/richlistbox.xml     (widgets/richlistbox.xml)
   191     content/global/bindings/richlistbox.xml     (widgets/richlistbox.xml)
       
   192     content/global/bindings/scrollbox.xml       (widgets/scrollbox.xml)
   193 diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
   193 diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
   194 new file mode 100644
   194 new file mode 100644
   195 --- /dev/null
   195 --- /dev/null
   196 +++ b/toolkit/content/widgets/dialog-kde.xml
   196 +++ b/toolkit/content/widgets/dialog-kde.xml
   197 @@ -0,0 +1,477 @@
   197 @@ -0,0 +1,507 @@
   198 +<?xml version="1.0"?>
   198 +<?xml version="1.0"?>
   199 +<!-- This Source Code Form is subject to the terms of the Mozilla Public
   199 +<!-- This Source Code Form is subject to the terms of the Mozilla Public
   200 +   - License, v. 2.0. If a copy of the MPL was not distributed with this
   200 +   - License, v. 2.0. If a copy of the MPL was not distributed with this
   201 +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
   201 +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
   202 +
   202 +
   227 +        <xul:spacer anonid="spacer" flex="1"/>
   227 +        <xul:spacer anonid="spacer" flex="1"/>
   228 +        <xul:button dlgtype="cancel" class="dialog-button"/>
   228 +        <xul:button dlgtype="cancel" class="dialog-button"/>
   229 +        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
   229 +        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
   230 +#elif XP_UNIX
   230 +#elif XP_UNIX
   231 +                >
   231 +                >
   232 +	<xul:button dlgtype="help" class="dialog-button" hidden="true"/>
   232 +        <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
   233 +        <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
   233 +        <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
   234 +        <xul:spacer anonid="spacer" flex="1"/>
   234 +        <xul:spacer anonid="spacer" flex="1"/>
   235 +        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
   235 +        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
   236 +        <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
   236 +        <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
   237 +        <xul:button dlgtype="cancel" class="dialog-button"/>
   237 +        <xul:button dlgtype="cancel" class="dialog-button"/>
   264 +      <field name="_closeHandler">(function(event) {
   264 +      <field name="_closeHandler">(function(event) {
   265 +        if (!document.documentElement.cancelDialog())
   265 +        if (!document.documentElement.cancelDialog())
   266 +          event.preventDefault();
   266 +          event.preventDefault();
   267 +      })</field>
   267 +      })</field>
   268 +
   268 +
       
   269 +      <!-- Gets populated by elements that are passed to document.l10n.setAttributes
       
   270 +           to localize the dialog buttons. Needed to properly size the dialog after
       
   271 +           the asynchronous translation. -->
       
   272 +      <field name="_l10nButtons">[]</field>
       
   273 +
   269 +      <property name="buttons"
   274 +      <property name="buttons"
   270 +                onget="return this.getAttribute('buttons');"
   275 +                onget="return this.getAttribute('buttons');"
   271 +                onset="this._configureButtons(val); return val;"/>
   276 +                onset="this._configureButtons(val); return val;"/>
   272 +
   277 +
   273 +      <property name="defaultButton">
   278 +      <property name="defaultButton">
   363 +      <constructor>
   368 +      <constructor>
   364 +      <![CDATA[
   369 +      <![CDATA[
   365 +        this._configureButtons(this.buttons);
   370 +        this._configureButtons(this.buttons);
   366 +
   371 +
   367 +        // listen for when window is closed via native close buttons
   372 +        // listen for when window is closed via native close buttons
   368 +        window.addEventListener("close", this._closeHandler);
   373 +        window.addEventListener("close", this);
   369 +
   374 +
   370 +        // for things that we need to initialize after onload fires
   375 +        // for things that we need to initialize after onload fires
   371 +        window.addEventListener("load", this.postLoadInit);
   376 +        window.addEventListener("load", this);
   372 +
   377 +
   373 +        window.moveToAlertPosition = this.moveToAlertPosition;
   378 +        window.moveToAlertPosition = this.moveToAlertPosition;
   374 +        window.centerWindowOnScreen = this.centerWindowOnScreen;
   379 +        window.centerWindowOnScreen = this.centerWindowOnScreen;
   375 +      ]]>
   380 +      ]]>
   376 +      </constructor>
   381 +      </constructor>
       
   382 +
       
   383 +      <method name="handleEvent">
       
   384 +        <parameter name="aEvent"/>
       
   385 +        <body><![CDATA[
       
   386 +          switch (aEvent.type) {
       
   387 +            case "close": {
       
   388 +              this._closeHandler(aEvent);
       
   389 +              break;
       
   390 +            }
       
   391 +            case "load": {
       
   392 +              this.postLoadInit(aEvent);
       
   393 +              break;
       
   394 +            }
       
   395 +          }
       
   396 +        ]]></body>
       
   397 +      </method>
   377 +
   398 +
   378 +      <method name="postLoadInit">
   399 +      <method name="postLoadInit">
   379 +        <parameter name="aEvent"/>
   400 +        <parameter name="aEvent"/>
   380 +        <body>
   401 +        <body>
   381 +        <![CDATA[
   402 +        <![CDATA[
   420 +            } catch (e) { }
   441 +            } catch (e) { }
   421 +          }
   442 +          }
   422 +
   443 +
   423 +          // Give focus after onload completes, see bug 103197.
   444 +          // Give focus after onload completes, see bug 103197.
   424 +          setTimeout(focusInit, 0);
   445 +          setTimeout(focusInit, 0);
       
   446 +
       
   447 +          if (this._l10nButtons.length) {
       
   448 +            document.l10n.translateElements(this._l10nButtons).then(() => {
       
   449 +              window.sizeToContent();
       
   450 +            });
       
   451 +          }
   425 +        ]]>
   452 +        ]]>
   426 +        </body>
   453 +        </body>
   427 +      </method>
   454 +      </method>
   428 +
   455 +
   429 +      <method name="openHelp">
   456 +      <method name="openHelp">
   488 +              // dialog attributes override the default labels in dialog.properties
   515 +              // dialog attributes override the default labels in dialog.properties
   489 +              if (this.hasAttribute("buttonlabel" + dlgtype)) {
   516 +              if (this.hasAttribute("buttonlabel" + dlgtype)) {
   490 +                button.setAttribute("label", this.getAttribute("buttonlabel" + dlgtype));
   517 +                button.setAttribute("label", this.getAttribute("buttonlabel" + dlgtype));
   491 +                if (this.hasAttribute("buttonaccesskey" + dlgtype))
   518 +                if (this.hasAttribute("buttonaccesskey" + dlgtype))
   492 +                  button.setAttribute("accesskey", this.getAttribute("buttonaccesskey" + dlgtype));
   519 +                  button.setAttribute("accesskey", this.getAttribute("buttonaccesskey" + dlgtype));
       
   520 +              } else if (this.hasAttribute("buttonid" + dlgtype)) {
       
   521 +                document.l10n.setAttributes(button, this.getAttribute("buttonid" + dlgtype));
       
   522 +                this._l10nButtons.push(button);
   493 +              } else if (dlgtype != "extra1" && dlgtype != "extra2") {
   523 +              } else if (dlgtype != "extra1" && dlgtype != "extra2") {
   494 +                button.setAttribute("label", this.mStrBundle.GetStringFromName("button-" + dlgtype));
   524 +                button.setAttribute("label", this.mStrBundle.GetStringFromName("button-" + dlgtype));
   495 +                var accessKey = this.mStrBundle.GetStringFromName("accesskey-" + dlgtype);
   525 +                var accessKey = this.mStrBundle.GetStringFromName("accesskey-" + dlgtype);
   496 +                if (accessKey)
   526 +                if (accessKey)
   497 +                  button.setAttribute("accesskey", accessKey);
   527 +                  button.setAttribute("accesskey", accessKey);
   498 +              } else if (this.hasAttribute("buttonid" + dlgtype)) {
       
   499 +                document.l10n.setAttributes(button, this.getAttribute("buttonid" + dlgtype));
       
   500 +              }
   528 +              }
   501 +            }
   529 +            }
   502 +            // allow specifying alternate icons in the dialog header
   530 +            // allow specifying alternate icons in the dialog header
   503 +            if (!button.hasAttribute("icon")) {
   531 +            if (!button.hasAttribute("icon")) {
   504 +              // if there's an icon specified, use that
   532 +              // if there's an icon specified, use that
   662 +      <handler event="keypress" key="." modifiers="meta" phase="capturing" action="this.cancelDialog();"/>
   690 +      <handler event="keypress" key="." modifiers="meta" phase="capturing" action="this.cancelDialog();"/>
   663 +#else
   691 +#else
   664 +      <handler event="focus" phase="capturing">
   692 +      <handler event="focus" phase="capturing">
   665 +        var btn = this.getButton(this.defaultButton);
   693 +        var btn = this.getButton(this.defaultButton);
   666 +        if (btn)
   694 +        if (btn)
   667 +          btn.setAttribute("default", event.originalTarget == btn || !(event.originalTarget instanceof Ci.nsIDOMXULButtonElement));
   695 +          btn.setAttribute("default", event.originalTarget == btn ||
       
   696 +                           !(event.originalTarget.localName == "button" ||
       
   697 +                             event.originalTarget.localName == "toolbarbutton"));
   668 +      </handler>
   698 +      </handler>
   669 +#endif
   699 +#endif
   670 +    </handlers>
   700 +    </handlers>
   671 +
   701 +
   672 +  </binding>
   702 +  </binding>
   673 +
   703 +
   674 +</bindings>
   704 +</bindings>
   675 diff --git a/toolkit/mozapps/downloads/nsHelperAppDlg.js b/toolkit/mozapps/downloads/nsHelperAppDlg.js
   705 diff --git a/toolkit/mozapps/downloads/nsHelperAppDlg.js b/toolkit/mozapps/downloads/nsHelperAppDlg.js
   676 --- a/toolkit/mozapps/downloads/nsHelperAppDlg.js
   706 --- a/toolkit/mozapps/downloads/nsHelperAppDlg.js
   677 +++ b/toolkit/mozapps/downloads/nsHelperAppDlg.js
   707 +++ b/toolkit/mozapps/downloads/nsHelperAppDlg.js
   678 @@ -1030,30 +1030,60 @@ nsUnknownContentTypeDialog.prototype = {
   708 @@ -1033,30 +1033,60 @@ nsUnknownContentTypeDialog.prototype = {
   679  
   709  
   680        if (params.handlerApp &&
   710        if (params.handlerApp &&
   681            params.handlerApp.executable &&
   711            params.handlerApp.executable &&
   682            params.handlerApp.executable.isFile()) {
   712            params.handlerApp.executable.isFile()) {
   683          // Remember the file they chose to run.
   713          // Remember the file they chose to run.
   846 +}
   876 +}
   847 +
   877 +
   848 diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
   878 diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
   849 --- a/toolkit/xre/moz.build
   879 --- a/toolkit/xre/moz.build
   850 +++ b/toolkit/xre/moz.build
   880 +++ b/toolkit/xre/moz.build
   851 @@ -73,17 +73,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co
   881 @@ -81,17 +81,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'co
   852          '../components/printingui',
   882          '../components/printingui',
   853      ]
   883      ]
   854  elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'uikit':
   884  elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'uikit':
   855      UNIFIED_SOURCES += [
   885      UNIFIED_SOURCES += [
   856          'nsNativeAppSupportDefault.cpp',
   886          'nsNativeAppSupportDefault.cpp',
  1279  #include "nsIHandlerService.h"
  1309  #include "nsIHandlerService.h"
  1280  #include "nsIMIMEInfo.h"
  1310  #include "nsIMIMEInfo.h"
  1281  #include "ContentHandlerService.h"
  1311  #include "ContentHandlerService.h"
  1282  #include "nsStringEnumerator.h"
  1312  #include "nsStringEnumerator.h"
  1283  #ifdef MOZ_WIDGET_GTK
  1313  #ifdef MOZ_WIDGET_GTK
  1284 -#include "unix/nsGNOMERegistry.h"
  1314 -#  include "unix/nsGNOMERegistry.h"
  1285 +#include "unix/nsCommonRegistry.h"
  1315 +#  include "unix/nsCommonRegistry.h"
  1286  #endif
  1316  #endif
  1287  
  1317  
  1288  using mozilla::dom::ContentHandlerService;
  1318  using mozilla::dom::ContentHandlerService;
  1289  using mozilla::dom::HandlerApp;
  1319  using mozilla::dom::HandlerApp;
  1290  using mozilla::dom::HandlerInfo;
  1320  using mozilla::dom::HandlerInfo;
  1589  #include "nsIGIOService.h"
  1619  #include "nsIGIOService.h"
  1590  #include "nsNetCID.h"
  1620  #include "nsNetCID.h"
  1591  #include "nsIIOService.h"
  1621  #include "nsIIOService.h"
  1592  #include "nsAutoPtr.h"
  1622  #include "nsAutoPtr.h"
  1593  #ifdef MOZ_ENABLE_DBUS
  1623  #ifdef MOZ_ENABLE_DBUS
  1594  #include "nsDBusHandlerApp.h"
  1624  #  include "nsDBusHandlerApp.h"
  1595  #endif
  1625  #endif
  1596 +#if defined(XP_UNIX) && !defined(XP_MACOSX)
  1626 +#if defined(XP_UNIX) && !defined(XP_MACOSX)
  1597 +#include "nsKDEUtils.h"
  1627 +#include "nsKDEUtils.h"
  1598 +#endif
  1628 +#endif
  1599  
  1629  
  1676  #include <sys/stat.h>
  1706  #include <sys/stat.h>
  1677  
  1707  
  1678  #include "nsOSHelperAppService.h"
  1708  #include "nsOSHelperAppService.h"
  1679  #include "nsMIMEInfoUnix.h"
  1709  #include "nsMIMEInfoUnix.h"
  1680  #ifdef MOZ_WIDGET_GTK
  1710  #ifdef MOZ_WIDGET_GTK
  1681 -#include "nsGNOMERegistry.h"
  1711 -#  include "nsGNOMERegistry.h"
  1682 +#include "nsCommonRegistry.h"
  1712 +#  include "nsCommonRegistry.h"
  1683  #endif
  1713  #endif
  1684  #include "nsISupports.h"
  1714  #include "nsISupports.h"
  1685  #include "nsString.h"
  1715  #include "nsString.h"
  1686  #include "nsReadableUtils.h"
  1716  #include "nsReadableUtils.h"
  1687  #include "nsUnicharUtils.h"
  1717  #include "nsUnicharUtils.h"
  1688  #include "nsIURL.h"
  1718  #include "nsIURL.h"
  1689  #include "nsIFileStreams.h"
  1719  #include "nsIFileStreams.h"
  1690  #include "nsILineInputStream.h"
  1720  #include "nsILineInputStream.h"
  1691 @@ -1031,17 +1031,17 @@ nsresult nsOSHelperAppService::GetHandle
  1721 @@ -1025,17 +1025,17 @@ nsresult nsOSHelperAppService::GetHandle
  1692  
  1722  
  1693  nsresult nsOSHelperAppService::OSProtocolHandlerExists(
  1723  nsresult nsOSHelperAppService::OSProtocolHandlerExists(
  1694      const char* aProtocolScheme, bool* aHandlerExists) {
  1724      const char* aProtocolScheme, bool* aHandlerExists) {
  1695    nsresult rv = NS_OK;
  1725    nsresult rv = NS_OK;
  1696  
  1726  
  1705    } else {
  1735    } else {
  1706      *aHandlerExists = false;
  1736      *aHandlerExists = false;
  1707      nsCOMPtr<nsIHandlerService> handlerSvc =
  1737      nsCOMPtr<nsIHandlerService> handlerSvc =
  1708          do_GetService(NS_HANDLERSERVICE_CONTRACTID, &rv);
  1738          do_GetService(NS_HANDLERSERVICE_CONTRACTID, &rv);
  1709      if (NS_SUCCEEDED(rv) && handlerSvc) {
  1739      if (NS_SUCCEEDED(rv) && handlerSvc) {
  1710 @@ -1051,17 +1051,17 @@ nsresult nsOSHelperAppService::OSProtoco
  1740 @@ -1045,17 +1045,17 @@ nsresult nsOSHelperAppService::OSProtoco
  1711    }
  1741    }
  1712  
  1742  
  1713    return rv;
  1743    return rv;
  1714  }
  1744  }
  1715  
  1745  
  1724  #endif
  1754  #endif
  1725  }
  1755  }
  1726  
  1756  
  1727  nsresult nsOSHelperAppService::GetFileTokenForPath(
  1757  nsresult nsOSHelperAppService::GetFileTokenForPath(
  1728      const char16_t* platformAppPath, nsIFile** aFile) {
  1758      const char16_t* platformAppPath, nsIFile** aFile) {
  1729 @@ -1142,17 +1142,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
  1759 @@ -1136,17 +1136,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
  1730    nsresult rv =
  1760    nsresult rv =
  1731        LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
  1761        LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
  1732                                 minorType, mime_types_description, true);
  1762                                 minorType, mime_types_description, true);
  1733  
  1763  
  1734    if (NS_FAILED(rv) || majorType.IsEmpty()) {
  1764    if (NS_FAILED(rv) || majorType.IsEmpty()) {
  1743      }
  1773      }
  1744  #endif
  1774  #endif
  1745  
  1775  
  1746      rv = LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
  1776      rv = LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
  1747                                    minorType, mime_types_description, false);
  1777                                    minorType, mime_types_description, false);
  1748 @@ -1254,17 +1254,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
  1778 @@ -1248,17 +1248,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
  1749  
  1779  
  1750    // Now look up our extensions
  1780    // Now look up our extensions
  1751    nsAutoString extensions, mime_types_description;
  1781    nsAutoString extensions, mime_types_description;
  1752    LookUpExtensionsAndDescription(majorType, minorType, extensions,
  1782    LookUpExtensionsAndDescription(majorType, minorType, extensions,
  1753                                   mime_types_description);
  1783                                   mime_types_description);
  2199    }
  2229    }
  2200  
  2230  
  2201    nsAutoString osVersion;
  2231    nsAutoString osVersion;
  2202 +  nsAutoString desktop;
  2232 +  nsAutoString desktop;
  2203  #if defined(XP_WIN)
  2233  #if defined(XP_WIN)
  2204  #pragma warning(push)
  2234  #  pragma warning(push)
  2205  #pragma warning(disable : 4996)  // VC12+ deprecates GetVersionEx
  2235  #  pragma warning(disable : 4996)  // VC12+ deprecates GetVersionEx
  2206    OSVERSIONINFO info = {sizeof(OSVERSIONINFO)};
  2236    OSVERSIONINFO info = {sizeof(OSVERSIONINFO)};
  2207    if (GetVersionEx(&info)) {
  2237    if (GetVersionEx(&info)) {
  2208      nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", info.dwMajorVersion,
  2238      nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", info.dwMajorVersion,
  2209                                info.dwMinorVersion);
  2239                                info.dwMinorVersion);
  2210    }
  2240    }
  2211 +  desktop = NS_LITERAL_STRING("win");
  2241 +  desktop = NS_LITERAL_STRING("win");
  2212  #pragma warning(pop)
  2242  #  pragma warning(pop)
  2213  #elif defined(MOZ_WIDGET_COCOA)
  2243  #elif defined(MOZ_WIDGET_COCOA)
  2214    SInt32 majorVersion = nsCocoaFeatures::OSXVersionMajor();
  2244    SInt32 majorVersion = nsCocoaFeatures::OSXVersionMajor();
  2215    SInt32 minorVersion = nsCocoaFeatures::OSXVersionMinor();
  2245    SInt32 minorVersion = nsCocoaFeatures::OSXVersionMinor();
  2216    nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", majorVersion, minorVersion);
  2246    nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", majorVersion, minorVersion);
  2217 +  desktop = NS_LITERAL_STRING("macosx");
  2247 +  desktop = NS_LITERAL_STRING("macosx");
  2308  #include "nsSimpleEnumerator.h"
  2338  #include "nsSimpleEnumerator.h"
  2309  #include "private/pprio.h"
  2339  #include "private/pprio.h"
  2310  #include "prlink.h"
  2340  #include "prlink.h"
  2311  
  2341  
  2312  #ifdef MOZ_WIDGET_GTK
  2342  #ifdef MOZ_WIDGET_GTK
  2313  #include "nsIGIOService.h"
  2343  #  include "nsIGIOService.h"
  2314 +#include "nsKDEUtils.h"
  2344 +#  include "nsKDEUtils.h"
  2315  #endif
  2345  #endif
  2316  
  2346  
  2317  #ifdef MOZ_WIDGET_COCOA
  2347  #ifdef MOZ_WIDGET_COCOA
  2318  #include <Carbon/Carbon.h>
  2348  #  include <Carbon/Carbon.h>
  2319  #include "CocoaFileUtils.h"
  2349  #  include "CocoaFileUtils.h"
  2320  #include "prmem.h"
  2350  #  include "prmem.h"
  2321  #include "plbase64.h"
  2351  #  include "plbase64.h"
  2322  
  2352  
  2323 @@ -1902,62 +1903,77 @@ nsLocalFile::SetPersistentDescriptor(con
  2353 @@ -1902,62 +1903,77 @@ nsLocalFile::SetPersistentDescriptor(con
  2324  
  2354  
  2325  NS_IMETHODIMP
  2355  NS_IMETHODIMP
  2326  nsLocalFile::Reveal() {
  2356  nsLocalFile::Reveal() {