diff options
| author | Remi Collet <fedora@famillecollet.com> | 2011-06-12 19:39:34 +0200 | 
|---|---|---|
| committer | Remi Collet <fedora@famillecollet.com> | 2011-06-12 19:39:34 +0200 | 
| commit | db2a7f177d150f0e71b519757ef90071117a3e02 (patch) | |
| tree | 6aa7f1b17ee749cfe5cff084572340065a39b1b6 | |
| parent | 9f9463ed77b97764ae253275b1f9f968dbb9d1d1 (diff) | |
work on bluegriffon 1.1.1, some issue with langpacks...
| -rw-r--r-- | bluegriffon-mozilla.patch | 528 | 
1 files changed, 528 insertions, 0 deletions
diff --git a/bluegriffon-mozilla.patch b/bluegriffon-mozilla.patch new file mode 100644 index 0000000..b527ff5 --- /dev/null +++ b/bluegriffon-mozilla.patch @@ -0,0 +1,528 @@ +diff -up mozilla-2.0/browser/app/profile/firefox.js.blue mozilla-2.0/browser/app/profile/firefox.js +--- mozilla-2.0/browser/app/profile/firefox.js.blue	2011-04-14 07:28:21.000000000 +0200 ++++ mozilla-2.0/browser/app/profile/firefox.js	2011-06-12 17:13:35.389007262 +0200 +@@ -206,6 +206,7 @@ pref("extensions.getMoreThemesURL", "htt + pref("extensions.dss.enabled", false);          // Dynamic Skin Switching                                                + pref("extensions.dss.switchPending", false);    // Non-dynamic switch pending after next +                                                 // restart. ++pref("extensions.closeOnEscape", false); // allow the escape key to close the add-ons manager if it is standalone +  + pref("extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.name", "chrome://browser/locale/browser.properties"); + pref("extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.description", "chrome://browser/locale/browser.properties"); +diff -up mozilla-2.0/caps/src/nsScriptSecurityManager.cpp.blue mozilla-2.0/caps/src/nsScriptSecurityManager.cpp +--- mozilla-2.0/caps/src/nsScriptSecurityManager.cpp.blue	2011-04-14 07:28:22.000000000 +0200 ++++ mozilla-2.0/caps/src/nsScriptSecurityManager.cpp	2011-06-12 17:13:35.390007266 +0200 +@@ -1546,6 +1546,7 @@ nsScriptSecurityManager::CheckLoadURIWit +                              &hasFlags); +     NS_ENSURE_SUCCESS(rv, rv); +     if (hasFlags) { ++        return NS_OK; +         // resource: and chrome: are equivalent, securitywise +         // That's bogus!!  Fix this.  But watch out for +         // the view-source stylesheet? +diff -up mozilla-2.0/content/base/public/nsIDocumentEncoder.idl.blue mozilla-2.0/content/base/public/nsIDocumentEncoder.idl +--- mozilla-2.0/content/base/public/nsIDocumentEncoder.idl.blue	2011-04-14 07:28:22.000000000 +0200 ++++ mozilla-2.0/content/base/public/nsIDocumentEncoder.idl	2011-06-12 17:13:35.391007270 +0200 +@@ -237,6 +237,11 @@ interface nsIDocumentEncoder : nsISuppor +   const unsigned long OutputFormatDelSp  = (1 << 20); +   +   /** ++   * Output all non-ascii characters as numeric entities ++   */ ++  const unsigned long OutputEncodeCharacterEntities = (1 << 21); ++ ++  /** +    * Initialize with a pointer to the document and the mime type. +    * @param aDocument Document to encode. +    * @param aMimeType MimeType to use. May also be set by SetMimeType. +diff -up mozilla-2.0/content/base/src/nsCopySupport.cpp.blue mozilla-2.0/content/base/src/nsCopySupport.cpp +--- mozilla-2.0/content/base/src/nsCopySupport.cpp.blue	2011-04-14 07:28:22.000000000 +0200 ++++ mozilla-2.0/content/base/src/nsCopySupport.cpp	2011-06-12 17:13:35.392007274 +0200 +@@ -436,7 +436,7 @@ nsresult nsCopySupport::IsPlainTextConte +   // copy it properly (all the copy code for non-plaintext assumes using HTML +   // serializers and parsers is OK, and those mess up XHTML). +   nsCOMPtr<nsIHTMLDocument> htmlDoc = do_QueryInterface(aDoc); +-  if (!(htmlDoc && aDoc->IsHTML())) ++  if (!htmlDoc) +     *aIsPlainTextContext = PR_TRUE; +  +   return NS_OK; +diff -up mozilla-2.0/content/base/src/nsDocumentEncoder.cpp.blue mozilla-2.0/content/base/src/nsDocumentEncoder.cpp +--- mozilla-2.0/content/base/src/nsDocumentEncoder.cpp.blue	2011-04-14 07:28:22.000000000 +0200 ++++ mozilla-2.0/content/base/src/nsDocumentEncoder.cpp	2011-06-12 17:13:35.392007274 +0200 +@@ -1333,7 +1333,7 @@ nsHTMLCopyEncoder::SetSelection(nsISelec +    +   // also consider ourselves in a text widget if we can't find an html document +   nsCOMPtr<nsIHTMLDocument> htmlDoc = do_QueryInterface(mDocument); +-  if (!(htmlDoc && mDocument->IsHTML())) ++  if (!htmlDoc) +     mIsTextWidget = PR_TRUE; +    +   // normalize selection if we are not in a widget +diff -up mozilla-2.0/content/base/src/nsHTMLContentSerializer.cpp.blue mozilla-2.0/content/base/src/nsHTMLContentSerializer.cpp +--- mozilla-2.0/content/base/src/nsHTMLContentSerializer.cpp.blue	2011-04-14 07:28:22.000000000 +0200 ++++ mozilla-2.0/content/base/src/nsHTMLContentSerializer.cpp	2011-06-12 17:13:35.393007277 +0200 +@@ -250,14 +250,15 @@ nsHTMLContentSerializer::AppendElementSt +  +   PRBool lineBreakBeforeOpen = LineBreakBeforeOpen(content->GetNameSpaceID(), name); +  +-  if ((mDoFormat || forceFormat) && !mPreLevel && !mDoRaw) { ++  if (((mDoFormat || forceFormat) && !mPreLevel) || mDoRaw) { +     if (mColPos && lineBreakBeforeOpen) { +       AppendNewLineToString(aStr); ++      mMayIgnoreLineBreakSequence = PR_FALSE; +     } +     else { +       MaybeAddNewlineForRootNode(aStr); +     } +-    if (!mColPos) { ++    if (!mColPos && !mDoRaw) { +       AppendIndentation(aStr); +     } +     else if (mAddSpace) { +@@ -513,7 +514,8 @@ nsHTMLContentSerializer::AppendAndTransl +   PRBool nonBasicEntities = +     !!(mFlags & (nsIDocumentEncoder::OutputEncodeLatin1Entities | +                  nsIDocumentEncoder::OutputEncodeHTMLEntities   | +-                 nsIDocumentEncoder::OutputEncodeW3CEntities)); ++                 nsIDocumentEncoder::OutputEncodeW3CEntities    | ++                 nsIDocumentEncoder::OutputEncodeCharacterEntities)); +  +   if (!nonBasicEntities && +       (mFlags & (nsIDocumentEncoder::OutputEncodeBasicEntities))) { +@@ -569,7 +571,13 @@ nsHTMLContentSerializer::AppendAndTransl +       // needs to be replaced +       for (; c < fragmentEnd; c++, advanceLength++) { +         PRUnichar val = *c; +-        if (val <= kValNBSP && entityTable[val]) { ++        if ((val == kValNBSP || val > 127) && ++            (mFlags & nsIDocumentEncoder::OutputEncodeCharacterEntities)) { ++          nsAutoString entityValue(PRUnichar('#')); ++          entityValue.AppendInt(val); ++          entityText = ToNewCString(entityValue); ++		break; ++        } else if (val <= kValNBSP && entityTable[val]) { +           fullConstEntityText = entityTable[val]; +           break; +         } else if (val > 127 && +diff -up mozilla-2.0/content/base/src/nsXHTMLContentSerializer.cpp.blue mozilla-2.0/content/base/src/nsXHTMLContentSerializer.cpp +--- mozilla-2.0/content/base/src/nsXHTMLContentSerializer.cpp.blue	2011-04-14 07:28:22.000000000 +0200 ++++ mozilla-2.0/content/base/src/nsXHTMLContentSerializer.cpp	2011-06-12 17:13:35.395007284 +0200 +@@ -761,14 +761,23 @@ nsXHTMLContentSerializer::LineBreakBefor +     return mAddSpace; +   } +  +-  if (aName == nsGkAtoms::title || ++  if (// aName == nsGkAtoms::title || +       aName == nsGkAtoms::meta  || +-      aName == nsGkAtoms::link  || +-      aName == nsGkAtoms::style || ++      //aName == nsGkAtoms::link  || ++      //aName == nsGkAtoms::style || +       aName == nsGkAtoms::select || +       aName == nsGkAtoms::option || +       aName == nsGkAtoms::script || +-      aName == nsGkAtoms::html) { ++      aName == nsGkAtoms::html || ++      aName == nsGkAtoms::head || ++      //aName == nsGkAtoms::body || ++      aName == nsGkAtoms::table || ++      aName == nsGkAtoms::caption || ++      aName == nsGkAtoms::tbody || ++      aName == nsGkAtoms::thead || ++      aName == nsGkAtoms::tfoot || ++      aName == nsGkAtoms::tr || ++      aName == nsGkAtoms::td) { +     return PR_TRUE; +   } +   else { +@@ -795,7 +804,7 @@ nsXHTMLContentSerializer::LineBreakAfter +  +   if ((aName == nsGkAtoms::html) || +       (aName == nsGkAtoms::head) || +-      (aName == nsGkAtoms::body) || ++      //(aName == nsGkAtoms::body) || +       (aName == nsGkAtoms::ul) || +       (aName == nsGkAtoms::ol) || +       (aName == nsGkAtoms::dl) || +@@ -832,7 +841,10 @@ nsXHTMLContentSerializer::LineBreakBefor +       (aName == nsGkAtoms::dl) || +       (aName == nsGkAtoms::select) || +       (aName == nsGkAtoms::table) || +-      (aName == nsGkAtoms::tbody)) { ++      (aName == nsGkAtoms::tbody) || ++      (aName == nsGkAtoms::thead) || ++      (aName == nsGkAtoms::tfoot) || ++      (aName == nsGkAtoms::tr)) { +     return PR_TRUE; +   } +   return PR_FALSE; +@@ -897,6 +909,8 @@ nsXHTMLContentSerializer::MaybeEnterInPr +       name == nsGkAtoms::noframes +       ) { +     mPreLevel++; ++    if (name != nsGkAtoms::pre) ++      ++mDisableEntityEncoding; +   } + } +  +@@ -915,6 +929,8 @@ nsXHTMLContentSerializer::MaybeLeaveFrom +       name == nsGkAtoms::noframes +     ) { +     --mPreLevel; ++    if (name != nsGkAtoms::pre) ++      --mDisableEntityEncoding; +   } + } +  +@@ -1034,3 +1050,4 @@ nsXHTMLContentSerializer::HasNoChildren( +  +   return PR_TRUE; + } ++ +diff -up mozilla-2.0/content/base/src/nsXMLContentSerializer.cpp.blue mozilla-2.0/content/base/src/nsXMLContentSerializer.cpp +--- mozilla-2.0/content/base/src/nsXMLContentSerializer.cpp.blue	2011-04-14 07:28:22.000000000 +0200 ++++ mozilla-2.0/content/base/src/nsXMLContentSerializer.cpp	2011-06-12 17:13:35.396007288 +0200 +@@ -61,6 +61,7 @@ + #include "prprf.h" + #include "nsUnicharUtils.h" + #include "nsCRT.h" ++#include "nsIParserService.h" + #include "nsContentUtils.h" + #include "nsAttrName.h" + #include "nsILineBreaker.h" +@@ -649,7 +650,25 @@ nsXMLContentSerializer::SerializeAttr(co +   PRBool rawAppend = mDoRaw && aDoEscapeEntities; +   nsAString& attrString = (rawAppend) ? aStr : attrString_; +  +-  attrString.Append(PRUnichar(' ')); ++  if (mColPos + 1 >= mMaxColumn) { ++    if (mPreLevel > 0 || mDoRaw) { ++      AppendToStringConvertLF(mLineBreak, aStr); ++    } ++    else if (mDoFormat) { ++      AppendToStringFormatedWrapped(mLineBreak, aStr); ++      AppendIndentation(aStr); ++    } ++    else if (mDoWrap) { ++      AppendToStringWrapped(mLineBreak, aStr); ++      AppendIndentation(aStr); ++    } ++    else { ++      AppendToStringConvertLF(mLineBreak, aStr); ++    } ++  } ++  else ++    attrString.Append(PRUnichar(' ')); ++ +   if (!aPrefix.IsEmpty()) { +     attrString.Append(aPrefix); +     attrString.Append(PRUnichar(':')); +@@ -723,6 +742,8 @@ nsXMLContentSerializer::SerializeAttr(co +     attrString.Append(sValue); +     attrString.Append(cDelimiter); +   } ++  AppendToStringConvertLF(attrString, aStr); ++  /* XXX +   if (mPreLevel > 0 || mDoRaw) { +     AppendToStringConvertLF(attrString, aStr); +   } +@@ -735,6 +756,7 @@ nsXMLContentSerializer::SerializeAttr(co +   else { +     AppendToStringConvertLF(attrString, aStr); +   } ++  */ + } +  + PRUint32  +@@ -939,7 +961,7 @@ nsXMLContentSerializer::AppendElementSta +   nsIAtom *name = content->Tag(); +   PRBool lineBreakBeforeOpen = LineBreakBeforeOpen(content->GetNameSpaceID(), name); +  +-  if ((mDoFormat || forceFormat) && !mPreLevel && !mDoRaw) { ++  if (((mDoFormat || forceFormat) && !mPreLevel) || mDoRaw) { +     if (mColPos && lineBreakBeforeOpen) { +       AppendNewLineToString(aStr); +     } +@@ -1186,6 +1208,21 @@ nsXMLContentSerializer::AppendToString(c +     return; +   } +   mColPos += aStr.Length(); ++  nsASingleFragmentString::const_char_iterator pos, end, sequenceStart; ++ ++  aStr.BeginReading(pos); ++  aStr.EndReading(end); ++  PRBool foundOtherThanCR = PR_FALSE; ++  while (!foundOtherThanCR && pos < end) { ++    if (*pos != '\n' && *pos != '\r') { ++      foundOtherThanCR = PR_TRUE; ++    } ++    pos++; ++  } ++ ++  if (!foundOtherThanCR) { ++    mMayIgnoreLineBreakSequence = PR_TRUE; ++  } +   aOutputStr.Append(aStr); + } +  +@@ -1296,6 +1333,10 @@ nsXMLContentSerializer::MaybeLeaveFromPr + void + nsXMLContentSerializer::AppendNewLineToString(nsAString& aStr) + { ++  if (!mPreLevel && mMayIgnoreLineBreakSequence) { ++    mMayIgnoreLineBreakSequence = PR_FALSE; ++    return; ++  } +   AppendToString(mLineBreak, aStr); +   mMayIgnoreLineBreakSequence = PR_TRUE; +   mColPos = 0; +@@ -1336,7 +1377,39 @@ nsXMLContentSerializer::DecrIndentation( + PRBool + nsXMLContentSerializer::LineBreakBeforeOpen(PRInt32 aNamespaceID, nsIAtom* aName) + { +-  return mAddSpace; ++    if (aNamespaceID != kNameSpaceID_XHTML) { ++      return mAddSpace; ++    } ++ ++    if (aName == nsGkAtoms::title || ++        aName == nsGkAtoms::meta  || ++        aName == nsGkAtoms::link  || ++        aName == nsGkAtoms::style || ++        aName == nsGkAtoms::select || ++        aName == nsGkAtoms::option || ++        aName == nsGkAtoms::script || ++        aName == nsGkAtoms::html || ++        aName == nsGkAtoms::table || ++        aName == nsGkAtoms::caption || ++        aName == nsGkAtoms::tbody || ++        aName == nsGkAtoms::thead || ++        aName == nsGkAtoms::tfoot || ++        aName == nsGkAtoms::tr || ++        aName == nsGkAtoms::td) { ++      return PR_TRUE; ++    } ++    else { ++      nsIParserService* parserService = nsContentUtils::GetParserService(); ++ ++      if (parserService) { ++        PRBool res; ++        parserService-> ++          IsBlock(parserService->HTMLCaseSensitiveAtomTagToId(aName), res); ++        return res; ++      } ++    } ++ ++    return mAddSpace; + } +  + PRBool  +@@ -1348,7 +1421,39 @@ nsXMLContentSerializer::LineBreakAfterOp + PRBool  + nsXMLContentSerializer::LineBreakBeforeClose(PRInt32 aNamespaceID, nsIAtom* aName) + { +-  return mAddSpace; ++    if (aNamespaceID != kNameSpaceID_XHTML) { ++      return mAddSpace; ++    } ++ ++    if (aName == nsGkAtoms::title || ++        aName == nsGkAtoms::meta  || ++        aName == nsGkAtoms::link  || ++        aName == nsGkAtoms::style || ++        aName == nsGkAtoms::select || ++        aName == nsGkAtoms::option || ++        aName == nsGkAtoms::script || ++        aName == nsGkAtoms::html || ++        aName == nsGkAtoms::table || ++        aName == nsGkAtoms::caption || ++        aName == nsGkAtoms::tbody || ++        aName == nsGkAtoms::thead || ++        aName == nsGkAtoms::tfoot || ++        aName == nsGkAtoms::tr || ++        aName == nsGkAtoms::td) { ++      return PR_TRUE; ++    } ++    else { ++      nsIParserService* parserService = nsContentUtils::GetParserService(); ++ ++      if (parserService) { ++        PRBool res; ++        parserService-> ++          IsBlock(parserService->HTMLCaseSensitiveAtomTagToId(aName), res); ++        return res; ++      } ++    } ++ ++    return mAddSpace; + } +  + PRBool  +@@ -1464,6 +1569,7 @@ nsXMLContentSerializer::AppendFormatedWr +       // Since we only saw linebreaks, but no spaces or tabs, +       // let's write a linebreak now. +       AppendNewLineToString(aOutputStr); ++      mMayIgnoreLineBreakSequence = PR_TRUE; +     } +   } + } +diff -up mozilla-2.0/editor/libeditor/html/nsHTMLDataTransfer.cpp.blue mozilla-2.0/editor/libeditor/html/nsHTMLDataTransfer.cpp +--- mozilla-2.0/editor/libeditor/html/nsHTMLDataTransfer.cpp.blue	2011-04-14 07:28:27.000000000 +0200 ++++ mozilla-2.0/editor/libeditor/html/nsHTMLDataTransfer.cpp	2011-06-12 17:13:35.397007292 +0200 +@@ -1380,13 +1380,43 @@ NS_IMETHODIMP nsHTMLEditor::InsertFromTr +         textDataObj->GetData(text); +         NS_ASSERTION(text.Length() <= (len/2), "Invalid length!"); +         stuffToPaste.Assign(text.get(), len / 2); ++ ++        // Find where the <body> tag starts. ++        nsReadingIterator<PRUnichar> beginbody; ++        nsReadingIterator<PRUnichar> endbody; ++        stuffToPaste.BeginReading(beginbody); ++        stuffToPaste.EndReading(endbody); ++        PRBool foundbody = CaseInsensitiveFindInReadable(NS_LITERAL_STRING("<body"), ++                                                         beginbody, endbody); ++        nsAutoString realStuffToPaste; ++        if (foundbody) { ++          nsReadingIterator<PRUnichar> endstartbody; ++          stuffToPaste.EndReading(endstartbody); ++          PRBool foundstartbody = CaseInsensitiveFindInReadable(NS_LITERAL_STRING(">"), ++                                                                endbody, endstartbody); ++          if (!foundstartbody) ++            return NS_ERROR_FAILURE; ++ ++          nsReadingIterator<PRUnichar> beginclosebody; ++          nsReadingIterator<PRUnichar> endclosebody; ++          stuffToPaste.BeginReading(beginclosebody); ++          stuffToPaste.EndReading(endclosebody); ++ ++          // Find the index before "</body>" ++          PRBool foundclosehead = CaseInsensitiveFindInReadable( ++                   NS_LITERAL_STRING("</body>"), beginclosebody, endclosebody); ++          realStuffToPaste.Assign(Substring(endstartbody, beginclosebody)); ++        } ++        else ++          realStuffToPaste.Assign(stuffToPaste); +         nsAutoEditBatch beginBatching(this); +-        rv = DoInsertHTMLWithContext(stuffToPaste, ++        rv = DoInsertHTMLWithContext(realStuffToPaste, +                                      aContextStr, aInfoStr, flavor, +                                      aSourceDoc, +                                      aDestinationNode, aDestOffset, +                                      aDoDeleteSelection, +-                                     isSafe); ++                                     //isSafe); ++                                     true); +       } +     } +     else if (0 == nsCRT::strcmp(bestFlavor, kUnicodeMime) || +diff -up mozilla-2.0/editor/libeditor/html/nsHTMLEditRules.cpp.blue mozilla-2.0/editor/libeditor/html/nsHTMLEditRules.cpp +--- mozilla-2.0/editor/libeditor/html/nsHTMLEditRules.cpp.blue	2011-04-14 07:28:27.000000000 +0200 ++++ mozilla-2.0/editor/libeditor/html/nsHTMLEditRules.cpp	2011-06-12 17:13:35.399007300 +0200 +@@ -1450,39 +1450,8 @@ nsHTMLEditRules::WillInsertText(PRInt32  +     // it is to search for both tabs and newlines. +     if (isPRE || IsPlaintextEditor()) +     { +-      while (unicodeBuf && (pos != -1) && (pos < (PRInt32)(*inString).Length())) +-      { +-        PRInt32 oldPos = pos; +-        PRInt32 subStrLen; +-        pos = tString.FindChar(nsCRT::LF, oldPos); +- +-        if (pos != -1)  +-        { +-          subStrLen = pos - oldPos; +-          // if first char is newline, then use just it +-          if (subStrLen == 0) +-            subStrLen = 1; +-        } +-        else +-        { +-          subStrLen = tString.Length() - oldPos; +-          pos = tString.Length(); +-        } +- +-        nsDependentSubstring subStr(tString, oldPos, subStrLen); +-         +-        // is it a return? +-        if (subStr.Equals(newlineStr)) +-        { +-          res = mHTMLEditor->CreateBRImpl(address_of(curNode), &curOffset, address_of(unused), nsIEditor::eNone); +-          pos++; +-        } +-        else +-        { +-          res = mHTMLEditor->InsertTextImpl(subStr, address_of(curNode), &curOffset, doc); +-        } +-        NS_ENSURE_SUCCESS(res, res); +-      } ++      res = mHTMLEditor->InsertTextImpl(tString, address_of(curNode), &curOffset, doc); ++      NS_ENSURE_SUCCESS(res, res); +     } +     else +     { +diff -up mozilla-2.0/toolkit/mozapps/extensions/content/extensions.js.blue mozilla-2.0/toolkit/mozapps/extensions/content/extensions.js +--- mozilla-2.0/toolkit/mozapps/extensions/content/extensions.js.blue	2011-04-14 07:28:48.000000000 +0200 ++++ mozilla-2.0/toolkit/mozapps/extensions/content/extensions.js	2011-06-12 17:24:19.838174163 +0200 +@@ -55,6 +55,7 @@ const PREF_CHECK_UPDATE_SECURITY = "exte + const PREF_AUTOUPDATE_DEFAULT = "extensions.update.autoUpdateDefault"; + const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled"; + const PREF_GETADDONS_CACHE_ID_ENABLED = "extensions.%ID%.getAddons.cache.enabled"; ++const PREF_CLOSE_ADDONS_MANAGER_ON_ESCAPE = "extensions.closeOnEscape"; +  + const BRANCH_REGEXP = /^([^\.]+\.[0-9]+[a-z]*).*/gi; +  +@@ -105,6 +106,18 @@ __defineGetter__("gIsInitializing", func +  + function initialize() { +   document.removeEventListener("load", initialize, true); ++ ++ // should we allow the window to close when the user hits the ESC key? ++ let closeOnEscape = false; // default for Firefox 4+ ++ try { ++   closeOnEscape = Services.prefs.getBoolPref(PREF_CLOSE_ADDONS_MANAGER_ON_ESCAPE); ++ } catch(e) { } ++ if (!closeOnEscape) { ++   let escapeKeyElt = document.getElementById("escapeKey"); ++   if (escapeKeyElt) ++     escapeKeyElt.setAttribute("disabled", "true"); ++ } ++ +   gCategories.initialize(); +   gHeader.initialize(); +   gViewController.initialize(); +@@ -2288,7 +2301,7 @@ var gListView = { +  +     for (let i = 0; i < this._listBox.itemCount; i++) { +       let item = this._listBox.childNodes[i]; +-      if (item[prop] == aObj) { ++      if (prop in item && item[prop] == aObj) { +         this._listBox.removeChild(item); +         this.showEmptyNotice(this._listBox.itemCount == 0); +         return; +diff -up mozilla-2.0/toolkit/mozapps/extensions/content/extensions.xul.blue mozilla-2.0/toolkit/mozapps/extensions/content/extensions.xul +--- mozilla-2.0/toolkit/mozapps/extensions/content/extensions.xul.blue	2011-04-14 07:28:48.000000000 +0200 ++++ mozilla-2.0/toolkit/mozapps/extensions/content/extensions.xul	2011-06-12 17:13:35.402007310 +0200 +@@ -65,6 +65,10 @@ +   <script type="application/javascript" +           src="chrome://global/content/contentAreaUtils.js"/> +  ++  <keyset> ++    <key id="escapeKey" keycode="VK_ESCAPE" oncommand="window.close()"/> ++  </keyset> ++ +   <popupset> +     <!-- menu for an addon item --> +     <menupopup id="addonitem-popup"> +diff -up mozilla-2.0/widget/src/gtk2/nsWindow.cpp.blue mozilla-2.0/widget/src/gtk2/nsWindow.cpp +--- mozilla-2.0/widget/src/gtk2/nsWindow.cpp.blue	2011-06-12 17:13:35.314006981 +0200 ++++ mozilla-2.0/widget/src/gtk2/nsWindow.cpp	2011-06-12 17:13:35.404007318 +0200 +@@ -3937,6 +3937,8 @@ nsWindow::Create(nsIWidget        *aPare +                 gdk_window_add_filter(mShell->window, +                                       popup_take_focus_filter, NULL);  + #endif ++                // XXX BlueGriffon ugly hack to work around bug 662770 ++                gtk_window_set_modal(GTK_WINDOW(mShell), TRUE); +             } +  +             GdkWindowTypeHint gtkTypeHint;  | 
