mozilla-kde.patch
branchfirefox46
changeset 909 c6717354928b
parent 904 6a889427cd4f
child 916 2f9f2e040647
equal deleted inserted replaced
901:eb9ebe3e2e6a 909:c6717354928b
     1 # HG changeset patch
     1 # HG changeset patch
     2 # Parent  d9c9ae52f0338a60d1626d9209248341815e597a
     2 # Parent  61cdc9af8ceaf75083e751e0d6497feddc26f7ba
     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
     8 
     8 
     9 diff --git a/modules/libpref/Makefile.in b/modules/libpref/Makefile.in
       
    10 --- a/modules/libpref/Makefile.in
       
    11 +++ b/modules/libpref/Makefile.in
       
    12 @@ -21,13 +21,15 @@ endif
       
    13  ifdef MOZ_SERVICES_HEALTHREPORT
       
    14  ifneq (android,$(MOZ_WIDGET_TOOLKIT))
       
    15  grepref_files += $(topsrcdir)/services/healthreport/healthreport-prefs.js
       
    16  else
       
    17  grepref_files += $(topsrcdir)/mobile/android/chrome/content/healthreport-prefs.js
       
    18  endif
       
    19  endif
       
    20  
       
    21 +LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/xre
       
    22 +
       
    23  greprefs.js: $(grepref_files)
       
    24  	$(call py_action,preprocessor,$(PREF_PPFLAGS) $(DEFINES) $(ACDEFINES) $(MOZ_DEBUG_DEFINES) $^ -o $@)
       
    25  
       
    26  libs:: greprefs.js
       
    27  	$(INSTALL) $^ $(DIST)/bin/
       
    28 diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
     9 diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
    29 --- a/modules/libpref/Preferences.cpp
    10 --- a/modules/libpref/Preferences.cpp
    30 +++ b/modules/libpref/Preferences.cpp
    11 +++ b/modules/libpref/Preferences.cpp
    31 @@ -30,16 +30,17 @@
    12 @@ -31,16 +31,17 @@
    32  #include "nsIZipReader.h"
    13  #include "nsIZipReader.h"
    33  #include "nsPrefBranch.h"
    14  #include "nsPrefBranch.h"
    34  #include "nsXPIDLString.h"
    15  #include "nsXPIDLString.h"
    35  #include "nsCRT.h"
    16  #include "nsCRT.h"
    36  #include "nsCOMArray.h"
    17  #include "nsCOMArray.h"
    44  
    25  
    45  #include "prefapi.h"
    26  #include "prefapi.h"
    46  #include "prefread.h"
    27  #include "prefread.h"
    47  #include "prefapi_private_data.h"
    28  #include "prefapi_private_data.h"
    48  
    29  
    49 @@ -1148,16 +1149,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char 
    30 @@ -1135,16 +1136,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char 
    50  
    31  
    51  static nsresult pref_LoadPrefsInDirList(const char *listId)
    32  static nsresult pref_LoadPrefsInDirList(const char *listId)
    52  {
    33  {
    53    nsresult rv;
    34    nsresult rv;
    54    nsCOMPtr<nsIProperties> dirSvc(do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID, &rv));
    35    nsCOMPtr<nsIProperties> dirSvc(do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID, &rv));
    79                getter_AddRefs(list));
    60                getter_AddRefs(list));
    80    if (!list)
    61    if (!list)
    81      return NS_OK;
    62      return NS_OK;
    82  
    63  
    83    bool hasMore;
    64    bool hasMore;
    84 @@ -1173,17 +1192,17 @@ static nsresult pref_LoadPrefsInDirList(
    65 @@ -1160,17 +1179,17 @@ static nsresult pref_LoadPrefsInDirList(
    85  
    66  
    86      nsAutoCString leaf;
    67      nsAutoCString leaf;
    87      path->GetNativeLeafName(leaf);
    68      path->GetNativeLeafName(leaf);
    88  
    69  
    89      // Do we care if a file provided by this process fails to load?
    70      // Do we care if a file provided by this process fails to load?
    98  
    79  
    99  static nsresult pref_ReadPrefFromJar(nsZipArchive* jarReader, const char *name)
    80  static nsresult pref_ReadPrefFromJar(nsZipArchive* jarReader, const char *name)
   100  {
    81  {
   101    nsZipItemPtr<char> manifest(jarReader, name, true);
    82    nsZipItemPtr<char> manifest(jarReader, name, true);
   102    NS_ENSURE_TRUE(manifest.Buffer(), NS_ERROR_NOT_AVAILABLE);
    83    NS_ENSURE_TRUE(manifest.Buffer(), NS_ERROR_NOT_AVAILABLE);
   103 @@ -1277,26 +1296,38 @@ static nsresult pref_InitInitialObjects(
    84 @@ -1264,24 +1283,36 @@ static nsresult pref_InitInitialObjects(
   104    /* these pref file names should not be used: we process them after all other application pref files for backwards compatibility */
    85    /* these pref file names should not be used: we process them after all other application pref files for backwards compatibility */
   105    static const char* specialFiles[] = {
    86    static const char* specialFiles[] = {
   106  #if defined(XP_MACOSX)
    87  #if defined(XP_MACOSX)
   107      "macprefs.js"
    88      "macprefs.js"
   108  #elif defined(XP_WIN)
    89  #elif defined(XP_WIN)
   109      "winpref.js"
    90      "winpref.js"
   110  #elif defined(XP_UNIX)
    91  #elif defined(XP_UNIX)
   111      "unix.js"
    92      "unix.js"
   112 +    , "" // placeholder for KDE  (empty is otherwise harmless)
    93 +    , "" // placeholder for KDE  (empty is otherwise harmless)
   113  #if defined(VMS)
    94  #if defined(_AIX)
   114      , "openvms.js"
       
   115  #elif defined(_AIX)
       
   116      , "aix.js"
    95      , "aix.js"
   117  #endif
    96  #endif
   118  #elif defined(XP_BEOS)
    97  #elif defined(XP_BEOS)
   119      "beos.js"
    98      "beos.js"
   120  #endif
    99  #endif
   137  
   116  
   138    // Load jar:$app/omni.jar!/defaults/preferences/*.js
   117    // Load jar:$app/omni.jar!/defaults/preferences/*.js
   139    // or jar:$gre/omni.jar!/defaults/preferences/*.js.
   118    // or jar:$gre/omni.jar!/defaults/preferences/*.js.
   140    RefPtr<nsZipArchive> appJarReader = mozilla::Omnijar::GetReader(mozilla::Omnijar::APP);
   119    RefPtr<nsZipArchive> appJarReader = mozilla::Omnijar::GetReader(mozilla::Omnijar::APP);
   141    // GetReader(mozilla::Omnijar::APP) returns null when $app == $gre, in which
   120    // GetReader(mozilla::Omnijar::APP) returns null when $app == $gre, in which
       
   121 diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
       
   122 --- a/modules/libpref/moz.build
       
   123 +++ b/modules/libpref/moz.build
       
   124 @@ -31,16 +31,20 @@ UNIFIED_SOURCES += [
       
   125      'prefread.cpp',
       
   126  ]
       
   127  
       
   128  # prefapi.cpp cannot be built in unified mode because it uses plarena.h
       
   129  SOURCES += [
       
   130      'prefapi.cpp',
       
   131  ]
       
   132  
       
   133 +LOCAL_INCLUDES += [
       
   134 +    '/toolkit/xre'
       
   135 +]
       
   136 +
       
   137  include('/ipc/chromium/chromium-config.mozbuild')
       
   138  
       
   139  FINAL_LIBRARY = 'xul'
       
   140  
       
   141  DEFINES['OS_ARCH'] = CONFIG['OS_ARCH']
       
   142  DEFINES['MOZ_WIDGET_TOOLKIT'] = CONFIG['MOZ_WIDGET_TOOLKIT']
       
   143  
       
   144  if CONFIG['GNU_CXX']:
   142 diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/chrome/flags.py
   145 diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/chrome/flags.py
   143 --- a/python/mozbuild/mozpack/chrome/flags.py
   146 --- a/python/mozbuild/mozpack/chrome/flags.py
   144 +++ b/python/mozbuild/mozpack/chrome/flags.py
   147 +++ b/python/mozbuild/mozpack/chrome/flags.py
   145 @@ -211,16 +211,17 @@ class Flags(OrderedDict):
   148 @@ -211,16 +211,17 @@ class Flags(OrderedDict):
   146          'contentaccessible': Flag,
   149          'contentaccessible': Flag,
   182          self.base = base
   185          self.base = base
   183          self.flags = Flags(*flags)
   186          self.flags = Flags(*flags)
   184 diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloads/moz.build
   187 diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloads/moz.build
   185 --- a/toolkit/components/downloads/moz.build
   188 --- a/toolkit/components/downloads/moz.build
   186 +++ b/toolkit/components/downloads/moz.build
   189 +++ b/toolkit/components/downloads/moz.build
   187 @@ -65,15 +65,16 @@ if not CONFIG['MOZ_SUITE']:
   190 @@ -64,15 +64,16 @@ if not CONFIG['MOZ_SUITE']:
   188          'nsDownloadManagerUI.js',
   191          'nsDownloadManagerUI.js',
   189          'nsDownloadManagerUI.manifest',
   192          'nsDownloadManagerUI.manifest',
   190      ]
   193      ]
   191  
   194  
   192  FINAL_LIBRARY = 'xul'
   195  FINAL_LIBRARY = 'xul'
   224  
   227  
   225  #ifdef MOZ_WIDGET_ANDROID
   228  #ifdef MOZ_WIDGET_ANDROID
   226  #include "AndroidBridge.h"
   229  #include "AndroidBridge.h"
   227  #endif
   230  #endif
   228  
   231  
   229 @@ -2714,16 +2718,25 @@ nsDownload::SetState(DownloadState aStat
   232 @@ -2719,16 +2723,25 @@ nsDownload::SetState(DownloadState aStat
   230        nsCOMPtr<nsIPrefBranch> pref(do_GetService(NS_PREFSERVICE_CONTRACTID));
   233        nsCOMPtr<nsIPrefBranch> pref(do_GetService(NS_PREFSERVICE_CONTRACTID));
   231  
   234  
   232        // Master pref to control this function.
   235        // Master pref to control this function.
   233        bool showTaskbarAlert = true;
   236        bool showTaskbarAlert = true;
   234        if (pref)
   237        if (pref)
   250  
   253  
   251          int64_t alertIntervalUSec = alertInterval * PR_USEC_PER_MSEC;
   254          int64_t alertIntervalUSec = alertInterval * PR_USEC_PER_MSEC;
   252          int64_t goat = PR_Now() - mStartTime;
   255          int64_t goat = PR_Now() - mStartTime;
   253          showTaskbarAlert = goat > alertIntervalUSec;
   256          showTaskbarAlert = goat > alertIntervalUSec;
   254  
   257  
   255 @@ -2754,16 +2767,17 @@ nsDownload::SetState(DownloadState aStat
   258 @@ -2759,16 +2772,17 @@ nsDownload::SetState(DownloadState aStat
   256                    NS_LITERAL_STRING(DOWNLOAD_MANAGER_ALERT_ICON), title,
   259                    NS_LITERAL_STRING(DOWNLOAD_MANAGER_ALERT_ICON), title,
   257                    message, !removeWhenDone,
   260                    message, !removeWhenDone,
   258                    mPrivate ? NS_LITERAL_STRING("private") : NS_LITERAL_STRING("non-private"),
   261                    mPrivate ? NS_LITERAL_STRING("private") : NS_LITERAL_STRING("non-private"),
   259                    mDownloadManager, EmptyString(), NS_LITERAL_STRING("auto"),
   262                    mDownloadManager, EmptyString(), NS_LITERAL_STRING("auto"),
   260                    EmptyString(), EmptyString(), nullptr, mPrivate);
   263                    EmptyString(), EmptyString(), nullptr, mPrivate);
   271        if (fileURL &&
   274        if (fileURL &&
   272            NS_SUCCEEDED(fileURL->GetFile(getter_AddRefs(file))) &&
   275            NS_SUCCEEDED(fileURL->GetFile(getter_AddRefs(file))) &&
   273 diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
   276 diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
   274 --- a/toolkit/content/jar.mn
   277 --- a/toolkit/content/jar.mn
   275 +++ b/toolkit/content/jar.mn
   278 +++ b/toolkit/content/jar.mn
   276 @@ -64,29 +64,33 @@ toolkit.jar:
   279 @@ -72,29 +72,33 @@ toolkit.jar:
   277     content/global/viewZoomOverlay.js
   280     content/global/viewZoomOverlay.js
   278  *+ content/global/bindings/autocomplete.xml    (widgets/autocomplete.xml)
   281     content/global/bindings/autocomplete.xml    (widgets/autocomplete.xml)
   279     content/global/bindings/browser.xml         (widgets/browser.xml)
   282     content/global/bindings/browser.xml         (widgets/browser.xml)
   280     content/global/bindings/button.xml          (widgets/button.xml)
   283     content/global/bindings/button.xml          (widgets/button.xml)
   281     content/global/bindings/checkbox.xml        (widgets/checkbox.xml)
   284     content/global/bindings/checkbox.xml        (widgets/checkbox.xml)
   282     content/global/bindings/colorpicker.xml     (widgets/colorpicker.xml)
   285     content/global/bindings/colorpicker.xml     (widgets/colorpicker.xml)
   283     content/global/bindings/datetimepicker.xml  (widgets/datetimepicker.xml)
   286     content/global/bindings/datetimepicker.xml  (widgets/datetimepicker.xml)
   284  *+ content/global/bindings/dialog.xml          (widgets/dialog.xml)
   287  *  content/global/bindings/dialog.xml          (widgets/dialog.xml)
   285 +*+ content/global/bindings/dialog-kde.xml      (widgets/dialog-kde.xml)
   288 +*  content/global/bindings/dialog-kde.xml      (widgets/dialog-kde.xml)
   286 +% override chrome://global/content/bindings/dialog.xml chrome://global/content/bindings/dialog-kde.xml desktop=kde
   289 +% override chrome://global/content/bindings/dialog.xml chrome://global/content/bindings/dialog-kde.xml desktop=kde
   287     content/global/bindings/editor.xml          (widgets/editor.xml)
   290     content/global/bindings/editor.xml          (widgets/editor.xml)
   288     content/global/bindings/expander.xml        (widgets/expander.xml)
   291     content/global/bindings/expander.xml        (widgets/expander.xml)
   289  *  content/global/bindings/filefield.xml       (widgets/filefield.xml)
   292     content/global/bindings/filefield.xml       (widgets/filefield.xml)
   290  *+ content/global/bindings/findbar.xml         (widgets/findbar.xml)
   293  *  content/global/bindings/findbar.xml         (widgets/findbar.xml)
   291     content/global/bindings/general.xml         (widgets/general.xml)
   294     content/global/bindings/general.xml         (widgets/general.xml)
   292     content/global/bindings/groupbox.xml        (widgets/groupbox.xml)
   295     content/global/bindings/groupbox.xml        (widgets/groupbox.xml)
   293  *+ content/global/bindings/listbox.xml         (widgets/listbox.xml)
   296     content/global/bindings/listbox.xml         (widgets/listbox.xml)
   294     content/global/bindings/menu.xml            (widgets/menu.xml)
   297     content/global/bindings/menu.xml            (widgets/menu.xml)
   295     content/global/bindings/menulist.xml        (widgets/menulist.xml)
   298     content/global/bindings/menulist.xml        (widgets/menulist.xml)
   296     content/global/bindings/notification.xml    (widgets/notification.xml)
   299     content/global/bindings/notification.xml    (widgets/notification.xml)
   297     content/global/bindings/numberbox.xml       (widgets/numberbox.xml)
   300     content/global/bindings/numberbox.xml       (widgets/numberbox.xml)
   298     content/global/bindings/popup.xml           (widgets/popup.xml)
   301     content/global/bindings/popup.xml           (widgets/popup.xml)
   299  *+ content/global/bindings/preferences.xml     (widgets/preferences.xml)
   302  *  content/global/bindings/preferences.xml     (widgets/preferences.xml)
   300 +*+ content/global/bindings/preferences-kde.xml (widgets/preferences-kde.xml)
   303 +*  content/global/bindings/preferences-kde.xml (widgets/preferences-kde.xml)
   301 +% override chrome://global/content/bindings/preferences.xml chrome://global/content/bindings/preferences-kde.xml desktop=kde
   304 +% override chrome://global/content/bindings/preferences.xml chrome://global/content/bindings/preferences-kde.xml desktop=kde
   302     content/global/bindings/progressmeter.xml   (widgets/progressmeter.xml)
   305     content/global/bindings/progressmeter.xml   (widgets/progressmeter.xml)
   303     content/global/bindings/radio.xml           (widgets/radio.xml)
   306     content/global/bindings/radio.xml           (widgets/radio.xml)
   304     content/global/bindings/remote-browser.xml  (widgets/remote-browser.xml)
   307     content/global/bindings/remote-browser.xml  (widgets/remote-browser.xml)
   305     content/global/bindings/resizer.xml         (widgets/resizer.xml)
   308     content/global/bindings/resizer.xml         (widgets/resizer.xml)
   309     content/global/bindings/scrollbox.xml       (widgets/scrollbox.xml)
   312     content/global/bindings/scrollbox.xml       (widgets/scrollbox.xml)
   310 diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
   313 diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
   311 new file mode 100644
   314 new file mode 100644
   312 --- /dev/null
   315 --- /dev/null
   313 +++ b/toolkit/content/widgets/dialog-kde.xml
   316 +++ b/toolkit/content/widgets/dialog-kde.xml
   314 @@ -0,0 +1,460 @@
   317 @@ -0,0 +1,463 @@
   315 +<?xml version="1.0"?>
   318 +<?xml version="1.0"?>
   316 +<!-- This Source Code Form is subject to the terms of the Mozilla Public
   319 +<!-- This Source Code Form is subject to the terms of the Mozilla Public
   317 +   - License, v. 2.0. If a copy of the MPL was not distributed with this
   320 +   - License, v. 2.0. If a copy of the MPL was not distributed with this
   318 +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
   321 +   - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
   319 +
   322 +
   343 +        <xul:spacer anonid="spacer" flex="1"/>
   346 +        <xul:spacer anonid="spacer" flex="1"/>
   344 +        <xul:button dlgtype="cancel" class="dialog-button"/>
   347 +        <xul:button dlgtype="cancel" class="dialog-button"/>
   345 +        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
   348 +        <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
   346 +#elif XP_UNIX
   349 +#elif XP_UNIX
   347 +                >
   350 +                >
   348 +	<xul:button dlgtype="help" class="dialog-button" hidden="true"/>
   351 +        <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
   349 +	<xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
   352 +	<xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
   350 +	<xul:spacer anonid="spacer" flex="1"/>
   353 +	<xul:spacer anonid="spacer" flex="1"/>
   351 +	<xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
   354 +	<xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
   352 +	<xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
   355 +	<xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
   353 +	<xul:button dlgtype="cancel" class="dialog-button"/>
   356 +	<xul:button dlgtype="cancel" class="dialog-button"/>
   484 +
   487 +
   485 +      <method name="postLoadInit">
   488 +      <method name="postLoadInit">
   486 +        <parameter name="aEvent"/>
   489 +        <parameter name="aEvent"/>
   487 +        <body>
   490 +        <body>
   488 +        <![CDATA[
   491 +        <![CDATA[
       
   492 +          let { AppConstants } =
       
   493 +              Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
       
   494 +
   489 +          function focusInit() {
   495 +          function focusInit() {
   490 +            const dialog = document.documentElement;
   496 +            const dialog = document.documentElement;
   491 +            const defaultButton = dialog.getButton(dialog.defaultButton);
   497 +            const defaultButton = dialog.getButton(dialog.defaultButton);
   492 +            // give focus to the first focusable element in the dialog
   498 +            // give focus to the first focusable element in the dialog
   493 +            if (!document.commandDispatcher.focusedElement) {
   499 +            if (!document.commandDispatcher.focusedElement) {
   509 +                    // We don't want to focus on anonymous OK, Cancel, etc. buttons,
   515 +                    // We don't want to focus on anonymous OK, Cancel, etc. buttons,
   510 +                    // so return focus to the tab itself
   516 +                    // so return focus to the tab itself
   511 +                    initialFocusedElt.focus();
   517 +                    initialFocusedElt.focus();
   512 +                  }
   518 +                  }
   513 +                }
   519 +                }
   514 +#ifndef XP_MACOSX
   520 +                else if (AppConstants.platform != "macosx" &&
   515 +                else if (focusedElt.hasAttribute("dlgtype") && focusedElt != defaultButton) {
   521 +                         focusedElt.hasAttribute("dlgtype") && focusedElt != defaultButton) {
   516 +                  defaultButton.focus();
   522 +                  defaultButton.focus();
   517 +                }
   523 +                }
   518 +#endif
       
   519 +              }
   524 +              }
   520 +            }
   525 +            }
   521 +
   526 +
   522 +            try {
   527 +            try {
   523 +              if (defaultButton)
   528 +              if (defaultButton)
   630 +
   635 +
   631 +            // hide/show the buttons we want
   636 +            // hide/show the buttons we want
   632 +            for (dlgtype in buttons) 
   637 +            for (dlgtype in buttons) 
   633 +              buttons[dlgtype].hidden = !shown[dlgtype];
   638 +              buttons[dlgtype].hidden = !shown[dlgtype];
   634 +
   639 +
   635 +#ifdef XP_WIN
   640 +            let { AppConstants } =
   636 +#           show the spacer on Windows only when the extra2 button is present
   641 +                Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
   637 +            var spacer = document.getAnonymousElementByAttribute(this, "anonid", "spacer");
   642 +            // show the spacer on Windows only when the extra2 button is present
   638 +            spacer.removeAttribute("hidden");
   643 +            if (AppConstants.platform == "win") {
   639 +            spacer.setAttribute("flex", shown["extra2"]?"1":"0");
   644 +              var spacer = document.getAnonymousElementByAttribute(this, "anonid", "spacer");
   640 +#endif
   645 +              spacer.removeAttribute("hidden");
   641 +
   646 +              spacer.setAttribute("flex", shown["extra2"]?"1":"0");
       
   647 +            }
   642 +          }
   648 +          }
   643 +        ]]>
   649 +        ]]>
   644 +        </body>
   650 +        </body>
   645 +      </method>
   651 +      </method>
   646 +
   652 +
   774 +</bindings>
   780 +</bindings>
   775 diff --git a/toolkit/content/widgets/preferences-kde.xml b/toolkit/content/widgets/preferences-kde.xml
   781 diff --git a/toolkit/content/widgets/preferences-kde.xml b/toolkit/content/widgets/preferences-kde.xml
   776 new file mode 100644
   782 new file mode 100644
   777 --- /dev/null
   783 --- /dev/null
   778 +++ b/toolkit/content/widgets/preferences-kde.xml
   784 +++ b/toolkit/content/widgets/preferences-kde.xml
   779 @@ -0,0 +1,1403 @@
   785 @@ -0,0 +1,1406 @@
   780 +<?xml version="1.0"?>
   786 +<?xml version="1.0"?>
   781 +
   787 +
   782 +<!DOCTYPE bindings [
   788 +<!DOCTYPE bindings [
   783 +  <!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
   789 +  <!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
   784 +  %preferencesDTD;
   790 +  %preferencesDTD;
  1408 +          if (this.instantApply) {
  1414 +          if (this.instantApply) {
  1409 +            var docElt = document.documentElement;
  1415 +            var docElt = document.documentElement;
  1410 +            var acceptButton = docElt.getButton("accept");
  1416 +            var acceptButton = docElt.getButton("accept");
  1411 +            acceptButton.hidden = true;
  1417 +            acceptButton.hidden = true;
  1412 +            var cancelButton  = docElt.getButton("cancel");
  1418 +            var cancelButton  = docElt.getButton("cancel");
  1413 +#ifdef XP_MACOSX
  1419 +
  1414 +            // no buttons on Mac except Help
  1420 +            let { AppConstants } =
  1415 +            cancelButton.hidden = true;
  1421 +                Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
  1416 +            // Move Help button to the end
  1422 +            if (AppConstants.platform == "macosx") {
  1417 +            document.getAnonymousElementByAttribute(this, "anonid", "spacer").hidden = true;         
  1423 +              // no buttons on Mac except Help
  1418 +            // Also, don't fire onDialogAccept on enter
  1424 +              cancelButton.hidden = true;
  1419 +            acceptButton.disabled = true;
  1425 +              // Move Help button to the end
  1420 +#else
  1426 +              document.getAnonymousElementByAttribute(this, "anonid", "spacer").hidden = true;         
  1421 +            // morph the Cancel button into the Close button
  1427 +              // Also, don't fire onDialogAccept on enter
  1422 +            cancelButton.setAttribute ("icon", "close");
  1428 +              acceptButton.disabled = true;
  1423 +            cancelButton.label = docElt.getAttribute("closebuttonlabel");
  1429 +            } else {
  1424 +            cancelButton.accesskey = docElt.getAttribute("closebuttonaccesskey");
  1430 +              // morph the Cancel button into the Close button
  1425 +#endif
  1431 +              cancelButton.setAttribute ("icon", "close");
       
  1432 +              cancelButton.label = docElt.getAttribute("closebuttonlabel");
       
  1433 +              cancelButton.accesskey = docElt.getAttribute("closebuttonaccesskey");
       
  1434 +            }
  1426 +          }
  1435 +          }
  1427 +        }
  1436 +        }
  1428 +        this.setAttribute("animated", this._shouldAnimate ? "true" : "false");
  1437 +        this.setAttribute("animated", this._shouldAnimate ? "true" : "false");
  1429 +        var panes = this.preferencePanes;
  1438 +        var panes = this.preferencePanes;
  1430 +
  1439 +
  1590 +      <field name="_initialized">false</field>
  1599 +      <field name="_initialized">false</field>
  1591 +      <method name="_selectPane">
  1600 +      <method name="_selectPane">
  1592 +        <parameter name="aPaneElement"/>
  1601 +        <parameter name="aPaneElement"/>
  1593 +        <body>
  1602 +        <body>
  1594 +        <![CDATA[
  1603 +        <![CDATA[
  1595 +#ifdef XP_MACOSX
  1604 +          let { AppConstants } =
  1596 +          var paneTitle = aPaneElement.label;
  1605 +              Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
  1597 +          if (paneTitle != "")
  1606 +          if (AppConstants.platform == "macosx") {
  1598 +            document.title = paneTitle;
  1607 +            var paneTitle = aPaneElement.label;
  1599 +#endif
  1608 +            if (paneTitle != "")
       
  1609 +              document.title = paneTitle;
       
  1610 +          }
  1600 +          var helpButton = document.documentElement.getButton("help");
  1611 +          var helpButton = document.documentElement.getButton("help");
  1601 +          if (aPaneElement.helpTopic)
  1612 +          if (aPaneElement.helpTopic)
  1602 +            helpButton.hidden = false;
  1613 +            helpButton.hidden = false;
  1603 +          else
  1614 +          else
  1604 +            helpButton.hidden = true;
  1615 +            helpButton.hidden = true;
  1664 +      </method>
  1675 +      </method>
  1665 +      
  1676 +      
  1666 +      <property name="_shouldAnimate">
  1677 +      <property name="_shouldAnimate">
  1667 +        <getter>
  1678 +        <getter>
  1668 +        <![CDATA[
  1679 +        <![CDATA[
       
  1680 +          let { AppConstants } =
       
  1681 +              Components.utils.import("resource://gre/modules/AppConstants.jsm", {});
  1669 +          var psvc = Components.classes["@mozilla.org/preferences-service;1"]
  1682 +          var psvc = Components.classes["@mozilla.org/preferences-service;1"]
  1670 +                               .getService(Components.interfaces.nsIPrefBranch);
  1683 +                               .getService(Components.interfaces.nsIPrefBranch);
  1671 +#ifdef XP_MACOSX
  1684 +          var animate = AppConstants.platform == "macosx";
  1672 +          var animate = true;
       
  1673 +#else
       
  1674 +          var animate = false;
       
  1675 +#endif
       
  1676 +          try {
  1685 +          try {
  1677 +            animate = psvc.getBoolPref("browser.preferences.animateFadeIn");
  1686 +            animate = psvc.getBoolPref("browser.preferences.animateFadeIn");
  1678 +          }
  1687 +          }
  1679 +          catch (e) { }
  1688 +          catch (e) { }
  1680 +          return animate;
  1689 +          return animate;
  2695 +
  2704 +
  2696 +#endif // nsKDEUtils
  2705 +#endif // nsKDEUtils
  2697 diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build
  2706 diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build
  2698 --- a/uriloader/exthandler/moz.build
  2707 --- a/uriloader/exthandler/moz.build
  2699 +++ b/uriloader/exthandler/moz.build
  2708 +++ b/uriloader/exthandler/moz.build
  2700 @@ -72,17 +72,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'ui
  2709 @@ -75,17 +75,19 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'ui
  2701  else:
  2710  else:
  2702      # These files can't be built in unified mode because they redefine LOG.
  2711      # These files can't be built in unified mode because they redefine LOG.
  2703      SOURCES += [
  2712      SOURCES += [
  2704          osdir + '/nsOSHelperAppService.cpp',
  2713          osdir + '/nsOSHelperAppService.cpp',
  2705      ]
  2714      ]
  2715      UNIFIED_SOURCES += [
  2724      UNIFIED_SOURCES += [
  2716          'android/nsAndroidHandlerApp.cpp',
  2725          'android/nsAndroidHandlerApp.cpp',
  2717          'android/nsExternalSharingAppService.cpp',
  2726          'android/nsExternalSharingAppService.cpp',
  2718          'android/nsExternalURLHandlerService.cpp',
  2727          'android/nsExternalURLHandlerService.cpp',
  2719          'android/nsMIMEInfoAndroid.cpp',
  2728          'android/nsMIMEInfoAndroid.cpp',
  2720 @@ -125,16 +127,17 @@ include('/ipc/chromium/chromium-config.m
  2729 @@ -129,16 +131,17 @@ include('/ipc/chromium/chromium-config.m
  2721  
  2730  
  2722  FINAL_LIBRARY = 'xul'
  2731  FINAL_LIBRARY = 'xul'
  2723  
  2732  
  2724  LOCAL_INCLUDES += [
  2733  LOCAL_INCLUDES += [
  2725      '/dom/base',
  2734      '/dom/base',
  3660  
  3669  
  3661 diff --git a/xpcom/components/moz.build b/xpcom/components/moz.build
  3670 diff --git a/xpcom/components/moz.build b/xpcom/components/moz.build
  3662 --- a/xpcom/components/moz.build
  3671 --- a/xpcom/components/moz.build
  3663 +++ b/xpcom/components/moz.build
  3672 +++ b/xpcom/components/moz.build
  3664 @@ -47,12 +47,13 @@ FINAL_LIBRARY = 'xul'
  3673 @@ -47,12 +47,13 @@ FINAL_LIBRARY = 'xul'
  3665  GENERATED_INCLUDES += ['..']
       
  3666  LOCAL_INCLUDES += [
  3674  LOCAL_INCLUDES += [
       
  3675      '!..',
  3667      '../base',
  3676      '../base',
  3668      '../build',
  3677      '../build',
  3669      '../ds',
  3678      '../ds',
  3670      '../reflect/xptinfo',
  3679      '../reflect/xptinfo',
  3671      '/chrome',
  3680      '/chrome',
  3676  if CONFIG['MOZ_WIDGET_GTK']:
  3685  if CONFIG['MOZ_WIDGET_GTK']:
  3677      CXXFLAGS += CONFIG['TK_CFLAGS']
  3686      CXXFLAGS += CONFIG['TK_CFLAGS']
  3678 diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
  3687 diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
  3679 --- a/xpcom/io/nsLocalFileUnix.cpp
  3688 --- a/xpcom/io/nsLocalFileUnix.cpp
  3680 +++ b/xpcom/io/nsLocalFileUnix.cpp
  3689 +++ b/xpcom/io/nsLocalFileUnix.cpp
  3681 @@ -47,16 +47,17 @@
  3690 @@ -44,16 +44,17 @@
  3682  #include "prproces.h"
  3691  #include "prproces.h"
  3683  #include "nsIDirectoryEnumerator.h"
  3692  #include "nsIDirectoryEnumerator.h"
  3684  #include "nsISimpleEnumerator.h"
  3693  #include "nsISimpleEnumerator.h"
  3685  #include "private/pprio.h"
  3694  #include "private/pprio.h"
  3686  #include "prlink.h"
  3695  #include "prlink.h"
  3694  #include <Carbon/Carbon.h>
  3703  #include <Carbon/Carbon.h>
  3695  #include "CocoaFileUtils.h"
  3704  #include "CocoaFileUtils.h"
  3696  #include "prmem.h"
  3705  #include "prmem.h"
  3697  #include "plbase64.h"
  3706  #include "plbase64.h"
  3698  
  3707  
  3699 @@ -1963,42 +1964,52 @@ nsLocalFile::SetPersistentDescriptor(con
  3708 @@ -1948,42 +1949,52 @@ nsLocalFile::SetPersistentDescriptor(con
  3700    return InitWithNativePath(aPersistentDescriptor);
  3709    return InitWithNativePath(aPersistentDescriptor);
  3701  #endif
  3710  #endif
  3702  }
  3711  }
  3703  
  3712  
  3704  NS_IMETHODIMP
  3713  NS_IMETHODIMP
  3753      nsresult rv = CocoaFileUtils::RevealFileInFinder(url);
  3762      nsresult rv = CocoaFileUtils::RevealFileInFinder(url);
  3754      ::CFRelease(url);
  3763      ::CFRelease(url);
  3755      return rv;
  3764      return rv;
  3756    }
  3765    }
  3757    return NS_ERROR_FAILURE;
  3766    return NS_ERROR_FAILURE;
  3758 @@ -2006,16 +2017,22 @@ nsLocalFile::Reveal()
  3767 @@ -1991,16 +2002,22 @@ nsLocalFile::Reveal()
  3759    return NS_ERROR_FAILURE;
  3768    return NS_ERROR_FAILURE;
  3760  #endif
  3769  #endif
  3761  }
  3770  }
  3762  
  3771  
  3763  NS_IMETHODIMP
  3772  NS_IMETHODIMP