--- thunderbird-10.0.2+build1.orig/comm-release-10.0.2+build1-source.tar.bz2.cdbs-config_list +++ thunderbird-10.0.2+build1/comm-release-10.0.2+build1-source.tar.bz2.cdbs-config_list @@ -0,0 +1,211 @@ +mozilla/l10n/zh-TW/toolkit/chrome/global/config.properties +mozilla/l10n/zh-TW/toolkit/chrome/global/config.dtd +mozilla/l10n/zh-CN/toolkit/chrome/global/config.properties +mozilla/l10n/zh-CN/toolkit/chrome/global/config.dtd +mozilla/l10n/vi/toolkit/chrome/global/config.properties +mozilla/l10n/vi/toolkit/chrome/global/config.dtd +mozilla/l10n/uk/toolkit/chrome/global/config.properties +mozilla/l10n/uk/toolkit/chrome/global/config.dtd +mozilla/l10n/tr/toolkit/chrome/global/config.properties +mozilla/l10n/tr/toolkit/chrome/global/config.dtd +mozilla/l10n/ta-LK/toolkit/chrome/global/config.properties +mozilla/l10n/ta-LK/toolkit/chrome/global/config.dtd +mozilla/l10n/sv-SE/toolkit/chrome/global/config.properties +mozilla/l10n/sv-SE/toolkit/chrome/global/config.dtd +mozilla/l10n/sr/toolkit/chrome/global/config.properties +mozilla/l10n/sr/toolkit/chrome/global/config.dtd +mozilla/l10n/sq/toolkit/chrome/global/config.properties +mozilla/l10n/sq/toolkit/chrome/global/config.dtd +mozilla/l10n/sl/toolkit/chrome/global/config.properties +mozilla/l10n/sl/toolkit/chrome/global/config.dtd +mozilla/l10n/sk/toolkit/chrome/global/config.properties +mozilla/l10n/sk/toolkit/chrome/global/config.dtd +mozilla/l10n/si/toolkit/chrome/global/config.properties +mozilla/l10n/si/toolkit/chrome/global/config.dtd +mozilla/l10n/ru/toolkit/chrome/global/config.properties +mozilla/l10n/ru/toolkit/chrome/global/config.dtd +mozilla/l10n/ro/toolkit/chrome/global/config.properties +mozilla/l10n/ro/toolkit/chrome/global/config.dtd +mozilla/l10n/rm/toolkit/chrome/global/config.properties +mozilla/l10n/rm/toolkit/chrome/global/config.dtd +mozilla/l10n/pt-PT/toolkit/chrome/global/config.properties +mozilla/l10n/pt-PT/toolkit/chrome/global/config.dtd +mozilla/l10n/pt-BR/toolkit/chrome/global/config.properties +mozilla/l10n/pt-BR/toolkit/chrome/global/config.dtd +mozilla/l10n/pl/toolkit/chrome/global/config.properties +mozilla/l10n/pl/toolkit/chrome/global/config.dtd +mozilla/l10n/pa-IN/toolkit/chrome/global/config.properties +mozilla/l10n/pa-IN/toolkit/chrome/global/config.dtd +mozilla/l10n/nn-NO/toolkit/chrome/global/config.properties +mozilla/l10n/nn-NO/toolkit/chrome/global/config.dtd +mozilla/l10n/nl/toolkit/chrome/global/config.properties +mozilla/l10n/nl/toolkit/chrome/global/config.dtd +mozilla/l10n/nb-NO/toolkit/chrome/global/config.dtd +mozilla/l10n/nb-NO/toolkit/chrome/global/config.properties +mozilla/l10n/lt/toolkit/chrome/global/config.properties +mozilla/l10n/lt/toolkit/chrome/global/config.dtd +mozilla/l10n/ko/toolkit/chrome/global/config.properties +mozilla/l10n/ko/toolkit/chrome/global/config.dtd +mozilla/l10n/ja-JP-mac/toolkit/chrome/global/config.properties +mozilla/l10n/ja-JP-mac/toolkit/chrome/global/config.dtd +mozilla/l10n/ja/toolkit/chrome/global/config.properties +mozilla/l10n/ja/toolkit/chrome/global/config.dtd +mozilla/l10n/it/toolkit/chrome/global/config.properties +mozilla/l10n/it/toolkit/chrome/global/config.dtd +mozilla/l10n/is/toolkit/chrome/global/config.properties +mozilla/l10n/is/toolkit/chrome/global/config.dtd +mozilla/l10n/id/toolkit/chrome/global/config.properties +mozilla/l10n/id/toolkit/chrome/global/config.dtd +mozilla/l10n/hu/toolkit/chrome/global/config.properties +mozilla/l10n/hu/toolkit/chrome/global/config.dtd +mozilla/l10n/he/toolkit/chrome/global/config.properties +mozilla/l10n/he/toolkit/chrome/global/config.dtd +mozilla/l10n/gl/toolkit/chrome/global/config.properties +mozilla/l10n/gl/toolkit/chrome/global/config.dtd +mozilla/l10n/gd/toolkit/chrome/global/config.properties +mozilla/l10n/gd/toolkit/chrome/global/config.dtd +mozilla/l10n/ga-IE/toolkit/chrome/global/config.properties +mozilla/l10n/ga-IE/toolkit/chrome/global/config.dtd +mozilla/l10n/fy-NL/toolkit/chrome/global/config.properties +mozilla/l10n/fy-NL/toolkit/chrome/global/config.dtd +mozilla/l10n/fr/toolkit/chrome/global/config.properties +mozilla/l10n/fr/toolkit/chrome/global/config.dtd +mozilla/l10n/fi/toolkit/chrome/global/config.properties +mozilla/l10n/fi/toolkit/chrome/global/config.dtd +mozilla/l10n/eu/toolkit/chrome/global/config.properties +mozilla/l10n/eu/toolkit/chrome/global/config.dtd +mozilla/l10n/et/toolkit/chrome/global/config.properties +mozilla/l10n/et/toolkit/chrome/global/config.dtd +mozilla/l10n/es-ES/toolkit/chrome/global/config.properties +mozilla/l10n/es-ES/toolkit/chrome/global/config.dtd +mozilla/l10n/es-AR/toolkit/chrome/global/config.properties +mozilla/l10n/es-AR/toolkit/chrome/global/config.dtd +mozilla/l10n/en-GB/toolkit/chrome/global/config.properties +mozilla/l10n/en-GB/toolkit/chrome/global/config.dtd +mozilla/l10n/el/toolkit/chrome/global/config.properties +mozilla/l10n/el/toolkit/chrome/global/config.dtd +mozilla/l10n/de/toolkit/chrome/global/config.properties +mozilla/l10n/de/toolkit/chrome/global/config.dtd +mozilla/l10n/da/toolkit/chrome/global/config.properties +mozilla/l10n/da/toolkit/chrome/global/config.dtd +mozilla/l10n/cs/toolkit/chrome/global/config.properties +mozilla/l10n/cs/toolkit/chrome/global/config.dtd +mozilla/l10n/ca/toolkit/chrome/global/config.properties +mozilla/l10n/ca/toolkit/chrome/global/config.dtd +mozilla/l10n/br/toolkit/chrome/global/config.properties +mozilla/l10n/br/toolkit/chrome/global/config.dtd +mozilla/l10n/bn-BD/toolkit/chrome/global/config.properties +mozilla/l10n/bn-BD/toolkit/chrome/global/config.dtd +mozilla/l10n/bg/toolkit/chrome/global/config.properties +mozilla/l10n/bg/toolkit/chrome/global/config.dtd +mozilla/l10n/be/toolkit/chrome/global/config.properties +mozilla/l10n/be/toolkit/chrome/global/config.dtd +mozilla/l10n/ast/toolkit/chrome/global/config.properties +mozilla/l10n/ast/toolkit/chrome/global/config.dtd +mozilla/l10n/ar/toolkit/chrome/global/config.properties +mozilla/l10n/ar/toolkit/chrome/global/config.dtd +mozilla/mozilla/tools/leaky/config.h +mozilla/mozilla/tools/jprof/stub/config.h +mozilla/mozilla/toolkit/themes/winstripe/global/config.css +mozilla/mozilla/toolkit/themes/pinstripe/global/config.css +mozilla/mozilla/toolkit/locales/en-US/chrome/global/config.properties +mozilla/mozilla/toolkit/locales/en-US/chrome/global/config.dtd +mozilla/mozilla/toolkit/crashreporter/google-breakpad/src/config.h.in +mozilla/mozilla/toolkit/crashreporter/google-breakpad/autotools/config.sub +mozilla/mozilla/toolkit/crashreporter/google-breakpad/autotools/config.guess +mozilla/mozilla/toolkit/components/viewconfig/content/config.xul +mozilla/mozilla/toolkit/components/viewconfig/content/config.js +mozilla/mozilla/testing/tps/config/config.json.in +mozilla/mozilla/security/nss/tests/pkcs11/netscape/trivial/config.h.in +mozilla/mozilla/security/nss/tests/pkcs11/netscape/suites/security/ssl/config.mk +mozilla/mozilla/security/nss/tests/pkcs11/netscape/suites/security/pkcs11/config.mk +mozilla/mozilla/security/nss/tests/pkcs11/netscape/suites/security/config.mk +mozilla/mozilla/security/nss/tests/pkcs11/netscape/suites/config.mk +mozilla/mozilla/security/nss/lib/zlib/config.mk +mozilla/mozilla/security/nss/lib/util/config.mk +mozilla/mozilla/security/nss/lib/sysinit/config.mk +mozilla/mozilla/security/nss/lib/ssl/config.mk +mozilla/mozilla/security/nss/lib/sqlite/config.mk +mozilla/mozilla/security/nss/lib/softoken/legacydb/config.mk +mozilla/mozilla/security/nss/lib/softoken/config.mk +mozilla/mozilla/security/nss/lib/smime/config.mk +mozilla/mozilla/security/nss/lib/pki/config.mk +mozilla/mozilla/security/nss/lib/pkcs7/config.mk +mozilla/mozilla/security/nss/lib/pkcs12/config.mk +mozilla/mozilla/security/nss/lib/pk11wrap/config.mk +mozilla/mozilla/security/nss/lib/nss/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix_pl_nss/system/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix_pl_nss/pki/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix_pl_nss/module/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix_pl_nss/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix/util/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix/top/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix/store/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix/results/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix/params/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix/crlsel/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix/checker/config.mk +mozilla/mozilla/security/nss/lib/libpkix/pkix/certsel/config.mk +mozilla/mozilla/security/nss/lib/libpkix/include/config.mk +mozilla/mozilla/security/nss/lib/libpkix/config.mk +mozilla/mozilla/security/nss/lib/jar/config.mk +mozilla/mozilla/security/nss/lib/freebl/config.mk +mozilla/mozilla/security/nss/lib/dev/config.mk +mozilla/mozilla/security/nss/lib/cryptohi/config.mk +mozilla/mozilla/security/nss/lib/crmf/config.mk +mozilla/mozilla/security/nss/lib/ckfw/nssmkey/config.mk +mozilla/mozilla/security/nss/lib/ckfw/dbm/config.mk +mozilla/mozilla/security/nss/lib/ckfw/config.mk +mozilla/mozilla/security/nss/lib/ckfw/capi/config.mk +mozilla/mozilla/security/nss/lib/ckfw/builtins/config.mk +mozilla/mozilla/security/nss/lib/certhigh/config.mk +mozilla/mozilla/security/nss/lib/certdb/config.mk +mozilla/mozilla/security/nss/lib/base/config.mk +mozilla/mozilla/security/nss/cmd/libpkix/testutil/config.mk +mozilla/mozilla/security/nss/cmd/libpkix/config.mk +mozilla/mozilla/security/nss/cmd/lib/config.mk +mozilla/mozilla/security/nss/cmd/crmftest/config.mk +mozilla/mozilla/security/nss/cmd/crmf-cgi/config.mk +mozilla/mozilla/security/dbm/src/config.mk +mozilla/mozilla/security/dbm/config/config.mk +mozilla/mozilla/security/coreconf/config.mk +mozilla/mozilla/nsprpub/config/config.mk +mozilla/mozilla/nsprpub/build/autoconf/config.sub +mozilla/mozilla/nsprpub/build/autoconf/config.guess +mozilla/mozilla/modules/freetype2/builds/unix/config.sub +mozilla/mozilla/modules/freetype2/builds/unix/config.guess +mozilla/mozilla/mobile/themes/core/config.css +mozilla/mozilla/mobile/locales/en-US/chrome/config.dtd +mozilla/mozilla/mobile/chrome/content/config.xul +mozilla/mozilla/mobile/chrome/content/config.js +mozilla/mozilla/media/libvpx/vpx_ports/config.h +mozilla/mozilla/media/libtheora/lib/config.h +mozilla/mozilla/js/src/tracevis/config.py +mozilla/mozilla/js/src/ctypes/libffi/config.sub +mozilla/mozilla/js/src/ctypes/libffi/config.guess +mozilla/mozilla/js/src/config/config.mk +mozilla/mozilla/js/src/build/autoconf/config.sub +mozilla/mozilla/js/src/build/autoconf/config.guess +mozilla/mozilla/ipc/chromium/src/third_party/libevent/mac/config.h +mozilla/mozilla/ipc/chromium/src/third_party/libevent/linux/config.h +mozilla/mozilla/ipc/chromium/src/third_party/libevent/config.sub +mozilla/mozilla/ipc/chromium/src/third_party/libevent/config.h.in +mozilla/mozilla/ipc/chromium/src/third_party/libevent/config.guess +mozilla/mozilla/extensions/irc/xul/content/config.xul +mozilla/mozilla/extensions/irc/xul/content/config.js +mozilla/mozilla/extensions/irc/xul/content/config.css +mozilla/mozilla/extensions/irc/xul/content/ceip/config.xul +mozilla/mozilla/extensions/irc/xul/content/ceip/config.js +mozilla/mozilla/extensions/irc/locales/en-US/chrome/config.dtd +mozilla/mozilla/config/config.mk +mozilla/mozilla/build/autoconf/config.sub +mozilla/mozilla/build/autoconf/config.guess +mozilla/suite/themes/modern/global/config.css +mozilla/mail/test/mozmill/newmailaccount/html/config.xml +mozilla/ldap/sdks/c-sdk/config/config.mk +mozilla/ldap/sdks/c-sdk/config/autoconf/config.sub +mozilla/ldap/sdks/c-sdk/config/autoconf/config.guess +mozilla/config/config.mk +mozilla/calendar/libical/config.h +mozilla/build/autoconf/config.guess --- thunderbird-10.0.2+build1.orig/debian/control.langpacks.unavail +++ thunderbird-10.0.2+build1/debian/control.langpacks.unavail @@ -0,0 +1,9 @@ + +Package: @MOZ_APP_NAME@-locale-@LANGCODE@ +Architecture: all +Depends: ${misc:Depends} +Description: Transitional package for unavailable language + This language is unavailable for the current version of Thunderbird + . + This is an empty transitional package to ensure a clean upgrade + process. You can safely remove this package after installation. --- thunderbird-10.0.2+build1.orig/debian/thunderbird.sgml +++ thunderbird-10.0.2+build1/debian/thunderbird.sgml @@ -0,0 +1,129 @@ + manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + + Alexander"> + Sack"> + + September 28, 2003"> + + 1"> + asac@jwsdot.com"> + + THUNDERBIRD"> + + + Debian"> + MPL"> + "> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2003 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + thunderbird - Mail User Agent (MUA) and newsgroup/RSS + client for X11 derived from the Mozilla suite. + + + + thunderbird + + + + + + DESCRIPTION + + Thunderbird provides IMAP/POP support, a built-in RSS reader, + support for HTML mail, powerful quick search, saved search + folders, advanced message filtering, junk mail controls, + message grouping, labels, return receipts, smart address book + LDAP address completion, import tools, and the ability to + manage multiple identities in email and newsgroup accounts. + Thunderbird provides enterprise and government grade security + such as S/MIME, digital signing, message encryption, and support + for certificates and security devices. + + + + OPTIONS + + + + + + + If no profile is given to the -P option, the profile + manager will pop-up. You will be allowed to create or + select a profile. Thunderbird then launches with the + selected profile. + + + + + + SEE ALSO + +The Thunderbird Homepage: +http://www.mozilla.org/projects/thunderbird/ + +The Debian Thunderbird FAQ: +http://www.jwsdot.com/debian/faq.html + + +
+ + + + --- thunderbird-10.0.2+build1.orig/debian/syspref.js +++ thunderbird-10.0.2+build1/debian/syspref.js @@ -0,0 +1,4 @@ +// This file can be used to configure global preferences for Firefox +// Example: Homepage +//pref("browser.startup.homepage", "http://www.weebls-stuff.com/wab/"); + --- thunderbird-10.0.2+build1.orig/debian/thunderbird.desktop.in +++ thunderbird-10.0.2+build1/debian/thunderbird.desktop.in @@ -0,0 +1,267 @@ +[Desktop Entry] +Encoding=UTF-8 +%%ifdef MOZ_OFFICIAL_BRANDING +Name=Thunderbird Mail +Name[ast]=Veceru de corréu Thunderbird +Name[ca]=Client de correu Thunderbird +Name[cs]=Poštovní klient Thunderbird +Name[da]=Mozilla Thunderbird - e-post/nyhedsgruppe +Name[de]=Thunderbird-E-Mail und -Nachrichten +Name[es]=Cliente de correo Thunderbird +Name[fi]=Thunderbird-sähköposti +Name[fr]=Messagerie Thunderbird +Name[gl]=Cliente de correo Thunderbird +Name[he]=Mozilla Thunderbird דוא״ל/חדשות +Name[hr]=Mozilla Thunderbird e-pošta/novosti +Name[hu]=Thunderbird levelezőkliens +Name[it]=Email Mozilla Thunderbird +Name[ko]=Mozilla Thunderbird +Name[nl]=Mozilla Thunderbird e-mail/nieuws +Name[pl]=Klient poczty Thunderbird +Name[pt_BR]=Cliente de E-mail Thunderbird +Name[ru]=Почтовый клиент Thunderbird +Name[sk]=Thunderbird - poštový klient a novin +Name[sv]=E-postklienten Thunderbird +Name[ug]=Mozilla Thunderbird ئېلخەت/خەۋەر +Name[zh_CN]=Thunderbird 邮件/新闻 +Name[zh_TW]=Thunderbird 郵件 +Comment=Send and receive mail with Thunderbird +Comment[ast]=Lleer y escribir corréu electrónicu +Comment[ca]=Llegiu i escriviu correu +Comment[cs]=Čtení a psaní pošty +Comment[da]=Skriv/læs e-post/nyhedsgruppe med Mozilla Thunderbird +Comment[de]=E-Mails und Nachrichten mit Thunderbird lesen und schreiben +Comment[es]=Lea y escriba correos y noticias con Thunderbird +Comment[fi]=Lue ja kirjoita sähköposteja +Comment[fr]=Lire et écrire des courriels +Comment[gl]=Lea e escriba correo electrónico +Comment[he]=קריאה/כתיבה של דוא״ל/חדשות באמצעות Mozilla Thunderbird +Comment[hr]=Čitajte/šaljite e-poštu s Thunderbird +Comment[hu]=Levelek írása és olvasása a Thunderbirddel +Comment[it]=Per leggere e scrivere email +Comment[ja]=メールの読み書き +Comment[ko]=Mozilla Thunderbird 메일/뉴스 읽기 및 쓰기 클라이언트 +Comment[nl]=E-mail/nieuws lezen en schrijven met Mozilla Thunderbird +Comment[pl]=Czytanie i wysyłanie e-maili +Comment[pt_BR]=Ler e escrever suas mensagens +Comment[ru]=Читайте и пишите письма +Comment[sk]=Čítajte a píšte poštu, čítajte novinky pomocou programu Mozilla Thunderbird +Comment[sv]=Läs och skriv e-post +Comment[ug]=ئېلخەت ۋە خەۋەرلەرنى Mozilla Thunderbird دا كۆرۈش ۋە يېزىش +Comment[zh_CN]=阅读邮件或新闻 +Comment[zh_TW]=以 Mozilla Thunderbird 讀寫郵件或新聞 +%%else +Name=@MOZ_DISPLAY_NAME@ Mail +Name[ast]=Veceru de corréu @MOZ_DISPLAY_NAME@ +Name[ca]=Client de correu @MOZ_DISPLAY_NAME@ +Name[cs]=Poštovní klient @MOZ_DISPLAY_NAME@ +Name[da]=@MOZ_DISPLAY_NAME@ - e-post/nyhedsgruppe +Name[de]=@MOZ_DISPLAY_NAME@-E-Mail und -Nachrichten +Name[es]=Cliente de correo @MOZ_DISPLAY_NAME@ +Name[fi]=@MOZ_DISPLAY_NAME@-sähköposti +Name[fr]=Messagerie @MOZ_DISPLAY_NAME@ +Name[gl]=Cliente de correo @MOZ_DISPLAY_NAME@ +Name[he]=@MOZ_DISPLAY_NAME@ דוא״ל/חדשות +Name[hr]=@MOZ_DISPLAY_NAME@ e-pošta/novosti +Name[hu]=@MOZ_DISPLAY_NAME@ levelezőkliens +Name[it]=Email @MOZ_DISPLAY_NAME@ +Name[ko]=@MOZ_DISPLAY_NAME@ +Name[nl]=@MOZ_DISPLAY_NAME@ e-mail/nieuws +Name[pl]=Klient poczty @MOZ_DISPLAY_NAME@ +Name[pt_BR]=Cliente de E-mail @MOZ_DISPLAY_NAME@ +Name[ru]=Почтовый клиент @MOZ_DISPLAY_NAME@ +Name[sk]=@MOZ_DISPLAY_NAME@ - poštový klient a novin +Name[sv]=E-postklienten @MOZ_DISPLAY_NAME@ +Name[ug]=@MOZ_DISPLAY_NAME@ ئېلخەت/خەۋەر +Name[zh_CN]=@MOZ_DISPLAY_NAME@ 邮件/新闻 +Name[zh_TW]=@MOZ_DISPLAY_NAME@ 郵件 +Comment=Send and receive mail with @MOZ_DISPLAY_NAME@ +Comment[ast]=Lleer y escribir corréu electrónicu +Comment[ca]=Llegiu i escriviu correu +Comment[cs]=Čtení a psaní pošty +Comment[da]=Skriv/læs e-post/nyhedsgruppe med @MOZ_DISPLAY_NAME@ +Comment[de]=E-Mails und Nachrichten mit @MOZ_DISPLAY_NAME@ lesen und schreiben +Comment[es]=Lea y escriba correos y noticias con @MOZ_DISPLAY_NAME@ +Comment[fi]=Lue ja kirjoita sähköposteja +Comment[fr]=Lire et écrire des courriels +Comment[gl]=Lea e escriba correo electrónico +Comment[he]=קריאה/כתיבה של דוא״ל/חדשות באמצעות @MOZ_DISPLAY_NAME@ +Comment[hr]=Čitajte/šaljite e-poštu s @MOZ_DISPLAY_NAME@ +Comment[hu]=Levelek írása és olvasása a @MOZ_DISPLAY_NAME@del +Comment[it]=Per leggere e scrivere email +Comment[ja]=メールの読み書き +Comment[ko]=@MOZ_DISPLAY_NAME@ 메일/뉴스 읽기 및 쓰기 클라이언트 +Comment[nl]=E-mail/nieuws lezen en schrijven met @MOZ_DISPLAY_NAME@ +Comment[pl]=Czytanie i wysyłanie e-maili +Comment[pt_BR]=Ler e escrever suas mensagens +Comment[ru]=Читайте и пишите письма +Comment[sk]=Čítajte a píšte poštu, čítajte novinky pomocou programu @MOZ_DISPLAY_NAME@ +Comment[sv]=Läs och skriv e-post +Comment[ug]=ئېلخەت ۋە خەۋەرلەرنى @MOZ_DISPLAY_NAME@ دا كۆرۈش ۋە يېزىش +Comment[zh_CN]=阅读邮件或新闻 +Comment[zh_TW]=以 @MOZ_DISPLAY_NAME@ 讀寫郵件或新聞 +%%endif +GenericName=Mail Client +Exec=@MOZ_APP_NAME@ %u +Terminal=false +X-MultipleArgs=false +Type=Application +Icon=@MOZ_APP_NAME@ +Categories=Application;Network;Email; +MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;x-scheme-handler/mailto; +StartupWMClass=@MOZ_DISPLAY_NAME@ +StartupNotify=true +GenericName[ast]=Client de correu +GenericName[ca]=Client de correu +GenericName[da]=E-postklient +GenericName[de]=E-Mail-Anwendung +GenericName[es]=Cliente de correo +GenericName[fi]=Sähköpostiohjelma +GenericName[fr]=Client de messagerie +GenericName[gl]=Cliente de correo electrónico +GenericName[he]=לקוח דוא״ל +GenericName[hr]=Klijent e-pošte +GenericName[hu]=Levelezőkliens +GenericName[it]=Client email +GenericName[ko]=메일 클라이언트 +GenericName[nl]=E-mailprogramma +GenericName[ru]=Почтовый клиент +GenericName[sk]=Poštový klie +GenericName[ug]=ئېلخەت دېتالى +GenericName[zh_CN]=邮件新闻客户端 +GenericName[zh_TW]=郵件用戶端 +%%ifdef MOZ_ENABLE_UNITY_INTEGRATION +X-Ayatana-Desktop-Shortcuts=Compose;Contacts + +[Compose Shortcut Group] +Name=Compose New Message +Name[af]=Skryf 'n nuwe boodskap +Name[ar]=حرر رسالة جديدة +Name[ast]=Redactar un mensaxe nuevu +Name[be]=Напісаць ліст +Name[bg]=Ново писмо +Name[bn]=নতুন বার্তা লিখুন +Name[br]=Sevel ur gemennadenn nevez +Name[bs]=Napiši novu poruku +Name[ca]=Redacta un missatge nou +Name[cs]=Napsat novou zprávu +Name[cy]=Cyfansoddi Neges Newydd +Name[da]=Skriv en ny besked +Name[de]=Neue Nachricht erstellen +Name[el]=Σύνταξη νέου μηνύματος +Name[eo]=Redakti novan mesaĝon +Name[es]=Redactar un mensaje nuevo +Name[et]=Koosta uus sõnum +Name[eu]=Mezu Berria Idatzi +Name[fi]=Luo uusi viesti +Name[fr]=Rédiger un nouveau courriel +Name[gd]=Co-chuir Teachdaireachd Ùr +Name[gl]=Redactar unha nova mensaxe +Name[he]=חיבור הודעה חדשה +Name[hi]=नया संदेश लिखें +Name[hr]=Nova poruka +Name[hu]=Új üzenet írása +Name[hy]=Նամակ գրել +Name[id]=Buat Pesan Baru +Name[is]=Skrifa nýtt bréf +Name[it]=Componi nuovo messaggio +Name[ja]=新しいメッセージの作成 +Name[kk]=Жаңа хат жазу +Name[kn]=ಹೊಸ ಸಂದೇಶವನ್ನು ಸಂಯೋಜಿಸು +Name[ko]=새 메시지 쓰기 +Name[ku]=Peyameke nû biafirînê +Name[lt]=Rašyti naują laišką +Name[lv]=Sacerēt jaunu vēstuli +Name[mk]=Состави нова порака +Name[ml]=പുതിയ സന്ദേശം രചിക്കുക +Name[mr]=नवीन संदेश लिहा. +Name[nb]=Skriv en ny melding +Name[nl]=Nieuw bericht opstellen +Name[nn]=Skriv ei ny melding +Name[pl]=Utwórz nową wiadomość +Name[pt]=Criar nova mensagem +Name[pt_BR]=Compor nova mensagem +Name[ro]=Compune un mesaj nou +Name[ru]=Написать письмо +Name[si]=නව පණිවිඩයක් අරඹන්න +Name[sk]=Napísať novú správu +Name[sl]=Sestavi novo sporočilo +Name[sq]=Krijo Mesazh të Ri +Name[sr]=Састави нову поруку +Name[sv]=Skriv nytt meddelande +Name[ta]=புதிய செய்தியை உருவாக்கு +Name[te]=కొత్త సందేశాన్ని రచించు +Name[th]=สร้างข้อความใหม่ +Name[tr]=Yeni İleti Oluştur +Name[uk]=Написати нове повідомлення +Name[zh_CN]=撰写新消息 +Name[zh_TW]=撰寫新郵件 +Exec=@MOZ_APP_NAME@ -compose +TargetEnvironment=Messaging Menu;Unity + +[Contacts Shortcut Group] +Name=Contacts +Name[af]=Kontakte +Name[ar]=المتراسلين +Name[ast]=Contautos +Name[be]=Кантакты +Name[bg]=Контакти +Name[bn]=পরিচিতি সমূহ +Name[br]=Darempredoù +Name[bs]=Kontakti +Name[ca]=Contactes +Name[cs]=Kontakty +Name[cy]=Cysylltiadau +Name[da]=Kontakter +Name[de]=Kontakte +Name[el]=Επαφές +Name[eo]=Kontaktoj +Name[es]=Contactos +Name[et]=Kontaktid +Name[eu]=Kontaktuak +Name[fi]=Yhteystiedot +Name[fr]=Carnet d'adresses +Name[gd]=Buntanasan +Name[gl]=Contactos +Name[he]=אנשי קשר +Name[hi]=संपर्क +Name[hr]=Kontakti +Name[hu]=Névjegyek +Name[hy]=Կապորդներ +Name[id]=Kontak +Name[is]=Tengiliðir +Name[it]=Contatti +Name[ja]=連絡先 +Name[kk]=Байланыс жазулары +Name[kn]=ಸಂಪರ್ಕಗಳು +Name[ko]=연락처 +Name[ku]=Tekilî +Name[lt]=Kontaktai +Name[lv]=Kontakti +Name[mk]=Контакти +Name[ml]=വിലാസങ്ങള്‍ +Name[mr]=संपर्क +Name[nb]=Kontakter +Name[nl]=Contacten +Name[nn]=Kontaktar +Name[pl]=Kontakty +Name[pt]=Contactos +Name[pt_BR]=Contatos +Name[ro]=Contacte +Name[ru]=Контакты +Name[si]=සබඳතා +Name[sk]=Kontakty +Name[sl]=Stiki +Name[sq]=Kontaktet +Name[sr]=Контакти +Name[sv]=Kontakter +Name[ta]=தொடர்புகள் +Name[te]=పరిచయాలు +Name[th]=รายชื่อติดต่อ +Name[tr]=Kişiler +Name[uk]=Контакти +Name[zh_CN]=联系人 +Name[zh_TW]=連絡人 +Exec=@MOZ_APP_NAME@ -addressbook +TargetEnvironment=Messaging Menu;Unity +%%endif --- thunderbird-10.0.2+build1.orig/debian/thunderbird-globalmenu.dirs.in +++ thunderbird-10.0.2+build1/debian/thunderbird-globalmenu.dirs.in @@ -0,0 +1,3 @@ +%%ifdef MOZ_ENABLE_GLOBALMENU +@MOZ_PREFIX@/lib/@MOZ_APP_NAME@-addons/extensions/globalmenu@ubuntu.com +%%endif --- thunderbird-10.0.2+build1.orig/debian/thunderbird.preinst.in +++ thunderbird-10.0.2+build1/debian/thunderbird.preinst.in @@ -0,0 +1,27 @@ +#!/bin/sh + +set -e + +APP_NAME=@MOZ_APP_NAME@ + +# Prepare to move a conffile without triggering a dpkg question +prepare_mv_conffile() { + local PKGNAME="$1" + local CONFFILE="$2" + + [ -e "$CONFFILE" ] || return 0 + + local md5sum="$(md5sum $CONFFILE | sed -e 's/ .*//')" + local old_md5sum="$(dpkg-query -W -f='${Conffiles}' $PKGNAME | \ + sed -n -e "\' $CONFFILE ' { s/ obsolete$//; s/.* //; p }")" + #' + if [ "$md5sum" = "$old_md5sum" ]; then + mv -f "$CONFFILE" "$CONFFILE.dpkg-remove" + fi +} + +if [ "$1" = "install" ] || [ "$1" = "upgrade" ] ; then + prepare_mv_conffile "${APP_NAME}" "/etc/${APP_NAME}/pref/thunderbird.js" +fi + +#DEBHELPER# --- thunderbird-10.0.2+build1.orig/debian/thunderbird-mozsymbols.install.in +++ thunderbird-10.0.2+build1/debian/thunderbird-mozsymbols.install.in @@ -0,0 +1,3 @@ +%%ifdef MOZ_ENABLE_BREAKPAD +@MOZ_DISTDIR@/*symbols.zip @MOZ_LIBDIR@ +%%endif --- thunderbird-10.0.2+build1.orig/debian/thunderbird-dev.install.in +++ thunderbird-10.0.2+build1/debian/thunderbird-dev.install.in @@ -0,0 +1,10 @@ +debian/tmp@MOZ_INCDIR@/ +debian/tmp@MOZ_IDLDIR@/ + +debian/tmp@MOZ_SDKDIR@/sdk/lib/*.a +debian/tmp@MOZ_SDKDIR@/*.h +debian/tmp@MOZ_SDKDIR@/bin +debian/tmp@MOZ_SDKDIR@/idl +debian/tmp@MOZ_SDKDIR@/include +debian/tmp@MOZ_SDKDIR@/lib +debian/tmp@MOZ_SDKDIR@/sdk/bin/ --- thunderbird-10.0.2+build1.orig/debian/thunderbird.links.in +++ thunderbird-10.0.2+build1/debian/thunderbird.links.in @@ -0,0 +1,7 @@ +@MOZ_PREFIX@/lib/@MOZ_APP_NAME@-addons/extensions @MOZ_LIBDIR@/extensions +@MOZ_PREFIX@/lib/@MOZ_APP_NAME@-addons/plugins @MOZ_LIBDIR@/plugins +@MOZ_SYSTEM_DICTDIR@ @MOZ_LIBDIR@/dictionaries +/usr/share/hyphen @MOZ_LIBDIR@/hyphenation +@MOZ_LIBDIR@/thunderbird.sh /usr/bin/@MOZ_APP_NAME@ +@MOZ_LIBDIR@/chrome/icons/default/default256.png /usr/share/pixmaps/@MOZ_APP_NAME@.png +/etc/@MOZ_APP_NAME@/syspref.js @MOZ_LIBDIR@/defaults/pref/syspref.js --- thunderbird-10.0.2+build1.orig/debian/compat +++ thunderbird-10.0.2+build1/debian/compat @@ -0,0 +1 @@ +5 --- thunderbird-10.0.2+build1.orig/debian/control +++ thunderbird-10.0.2+build1/debian/control @@ -0,0 +1,653 @@ +Source: thunderbird +Section: web +Priority: optional +Maintainer: Ubuntu Mozilla Team +Vcs-Bzr: https://code.launchpad.net/~mozillateam/thunderbird/thunderbird.head +Build-Depends: cdbs (>= 0.4.27), + debhelper (>= 5), + m4, + autotools-dev, + autoconf2.13, + quilt, + zip, + libx11-dev, + libxt-dev, + libxext-dev, + libgtk2.0-dev (>= 2.10), + libglib2.0-dev, + libpango1.0-dev (>= 1.14.0), + libidl-dev (>= 0.8.0), + libfontconfig1-dev, + libgconf2-dev (>= 1.2.1), + libgnomeui-dev (>= 2.2.0), + libstartup-notification0-dev, + libasound2-dev, + libcurl4-openssl-dev, + libdbus-glib-1-dev (>= 0.60), + lsb-release, + libiw-dev, + mesa-common-dev, + libnotify-dev, + libxrender-dev, + libfreetype6-dev (>= 2.0.1), + libgnomevfs2-dev (>= 1:2.0), + yasm (>= 1.1), + imagemagick, + libdbusmenu-gtk-dev, + docbook-to-man, + libkrb5-dev, + unzip +Standards-Version: 3.9.1 + +Package: thunderbird +Architecture: any +Depends: fontconfig, + psmisc, + debianutils (>= 1.16), + ${shlibs:Depends}, + ${misc:Depends} +Recommends: myspell-en-us | hunspell-dictionary | myspell-dictionary, + thunderbird-globalmenu +Suggests: thunderbird-gnome-support (= ${binary:Version}), + latex-xft-fonts, + libthai0 +Replaces: mozilla-thunderbird, + thunderbird-gnome-support (<= 3.0.4+nobinonly-0ubuntu3) +Conflicts: mozilla-thunderbird +Breaks: thunderbird-gnome-support (<= 3.0.4+nobinonly-0ubuntu3) +Provides: mail-reader +Section: mail +Description: Email, RSS and newsgroup client with integrated spam filter + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + +Package: thunderbird-gnome-support +Architecture: any +Section: gnome +Depends: ${shlibs:Depends}, + thunderbird (= ${binary:Version}), + ${misc:Depends}, + ${unity:Depends} +Description: Email, RSS and newsgroup client - GNOME support + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + . + This package depends on the GNOME libraries which allow Thunderbird to take + advantage of technologies such as GConf, GIO and libnotify + +Package: thunderbird-dev +Architecture: any +Section: devel +Depends: thunderbird (= ${binary:Version}), + ${misc:Depends}, + ${shlibs:Depends}, + ${nss:Depends}, + ${nspr:Depends}, + ${cairo:Depends} +Description: Email, RSS and newsgroup client - development files + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + . + This package contains the headers and SDK for building plugins and extensions + with Thunderbird + +Package: thunderbird-dbg +Architecture: any +Section: debug +Priority: extra +Depends: thunderbird, + ${shlibs:Depends}, + ${misc:Depends} +Description: Email, RSS and newsgroup client - debug symbols + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + . + This package contains the debugging symbols for Thunderbird + +Package: thunderbird-mozsymbols +Architecture: amd64 i386 armel +Section: debug +Priority: extra +Depends: ${shlibs:Depends}, + ${misc:Depends} +Description: Email, RSS and newsgroup client - Breakpad symbols + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + . + This package contains the Firefox symbols in a format expected by Mozilla's + Breakpad. Eventually this package should go away and the symbol upload be + implemented in soyuz (or other builders that build this package) + +Package: thunderbird-globalmenu +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + thunderbird (= ${binary:Version}) +Description: Unity appmenu integration for Thunderbird + This package provides an extension which adds support for the Unity + appmenu to Thunderbird + +# Transitional packages below here + +Package: thunderbird-gnome-support-dbg +Architecture: any +Depends: thunderbird-gnome-support, thunderbird-dbg, ${misc:Depends} +Description: Email, RSS and newsgroup client - transitional package + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-bn-bd +Architecture: all +Depends: thunderbird-locale-bn, ${misc:Depends} +Description: Transitional Bengali language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-en-gb +Architecture: all +Depends: thunderbird-locale-en, ${misc:Depends} +Description: Transitional English language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-en-us +Architecture: all +Depends: thunderbird-locale-en, ${misc:Depends} +Description: Transitional English language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-es-ar +Architecture: all +Depends: thunderbird-locale-es, ${misc:Depends} +Description: Transitional Spanish language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-es-es +Architecture: all +Depends: thunderbird-locale-es, ${misc:Depends} +Description: Transitional Spanish language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-fy-nl +Architecture: all +Depends: thunderbird-locale-fy, ${misc:Depends} +Description: Transitional Western Frisian language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-ga-ie +Architecture: all +Depends: thunderbird-locale-ga, ${misc:Depends} +Description: Transitional Irish language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-nb-no +Architecture: all +Depends: thunderbird-locale-nb, ${misc:Depends} +Description: Transitional Norwegian language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-nn-no +Architecture: all +Depends: thunderbird-locale-nn, ${misc:Depends} +Description: Transitional Norwegian language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-pa-in +Architecture: all +Depends: thunderbird-locale-pa, ${misc:Depends} +Description: Transitional Punjabi language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-pt-br +Architecture: all +Depends: thunderbird-locale-pt, ${misc:Depends} +Description: Transitional Portugese language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-pt-pt +Architecture: all +Depends: thunderbird-locale-pt, ${misc:Depends} +Description: Transitional Portugese language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-sv-se +Architecture: all +Depends: thunderbird-locale-sv, ${misc:Depends} +Description: Transitional Swedish language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-ta-lk +Architecture: all +Depends: thunderbird-locale-ta, ${misc:Depends} +Description: Transitional Tamil language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-zh-cn +Architecture: all +Depends: thunderbird-locale-zh-hans, ${misc:Depends} +Description: Transitional Simplified Chinese language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-zh-tw +Architecture: all +Depends: thunderbird-locale-zh-hant, ${misc:Depends} +Description: Transitional Traditional Chinese language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +# Language packs below here + +Package: thunderbird-locale-af +Architecture: all +Depends: ${misc:Depends} +Description: Transitional package for unavailable language + This language is unavailable for the current version of Thunderbird + . + This is an empty transitional package to ensure a clean upgrade + process. You can safely remove this package after installation. + +Package: thunderbird-locale-ar +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Arabic language pack for Thunderbird + This package contains Arabic translations and search plugins + for Thunderbird + +Package: thunderbird-locale-ast +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Asturian language pack for Thunderbird + This package contains Asturian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-be +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Belarusian language pack for Thunderbird + This package contains Belarusian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-bg +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Bulgarian language pack for Thunderbird + This package contains Bulgarian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-bn +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Bengali language pack for Thunderbird + This package contains Bengali translations and search plugins + for Thunderbird + +Package: thunderbird-locale-br +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Breton language pack for Thunderbird + This package contains Breton translations and search plugins + for Thunderbird + +Package: thunderbird-locale-ca +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Catalan; Valencian language pack for Thunderbird + This package contains Catalan; Valencian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-cs +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Czech language pack for Thunderbird + This package contains Czech translations and search plugins + for Thunderbird + +Package: thunderbird-locale-da +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Danish language pack for Thunderbird + This package contains Danish translations and search plugins + for Thunderbird + +Package: thunderbird-locale-de +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: German language pack for Thunderbird + This package contains German translations and search plugins + for Thunderbird + +Package: thunderbird-locale-el +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Greek language pack for Thunderbird + This package contains Greek translations and search plugins + for Thunderbird + +Package: thunderbird-locale-en +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: English language pack for Thunderbird + This package contains English translations and search plugins + for Thunderbird + +Package: thunderbird-locale-es +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Spanish; Castilian language pack for Thunderbird + This package contains Spanish; Castilian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-et +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Estonian language pack for Thunderbird + This package contains Estonian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-eu +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Basque language pack for Thunderbird + This package contains Basque translations and search plugins + for Thunderbird + +Package: thunderbird-locale-fi +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Finnish language pack for Thunderbird + This package contains Finnish translations and search plugins + for Thunderbird + +Package: thunderbird-locale-fr +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: French language pack for Thunderbird + This package contains French translations and search plugins + for Thunderbird + +Package: thunderbird-locale-fy +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Western Frisian language pack for Thunderbird + This package contains Western Frisian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-ga +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Irish language pack for Thunderbird + This package contains Irish translations and search plugins + for Thunderbird + +Package: thunderbird-locale-gd +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Gaelic; Scottish Gaelic language pack for Thunderbird + This package contains Gaelic; Scottish Gaelic translations and search plugins + for Thunderbird + +Package: thunderbird-locale-gl +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Galician language pack for Thunderbird + This package contains Galician translations and search plugins + for Thunderbird + +Package: thunderbird-locale-he +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Hebrew language pack for Thunderbird + This package contains Hebrew translations and search plugins + for Thunderbird + +Package: thunderbird-locale-hu +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Hungarian language pack for Thunderbird + This package contains Hungarian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-id +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Indonesian language pack for Thunderbird + This package contains Indonesian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-is +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Icelandic language pack for Thunderbird + This package contains Icelandic translations and search plugins + for Thunderbird + +Package: thunderbird-locale-it +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Italian language pack for Thunderbird + This package contains Italian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-ja +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Japanese language pack for Thunderbird + This package contains Japanese translations and search plugins + for Thunderbird + +Package: thunderbird-locale-ka +Architecture: all +Depends: ${misc:Depends} +Description: Transitional package for unavailable language + This language is unavailable for the current version of Thunderbird + . + This is an empty transitional package to ensure a clean upgrade + process. You can safely remove this package after installation. + +Package: thunderbird-locale-ko +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Korean language pack for Thunderbird + This package contains Korean translations and search plugins + for Thunderbird + +Package: thunderbird-locale-lt +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Lithuanian language pack for Thunderbird + This package contains Lithuanian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-mk +Architecture: all +Depends: ${misc:Depends} +Description: Transitional package for unavailable language + This language is unavailable for the current version of Thunderbird + . + This is an empty transitional package to ensure a clean upgrade + process. You can safely remove this package after installation. + +Package: thunderbird-locale-nb +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Bokmål, Norwegian; Norwegian Bokmål language pack for Thunderbird + This package contains Bokmål, Norwegian; Norwegian Bokmål translations and search plugins + for Thunderbird + +Package: thunderbird-locale-nl +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Dutch; Flemish language pack for Thunderbird + This package contains Dutch; Flemish translations and search plugins + for Thunderbird + +Package: thunderbird-locale-nn +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Norwegian Nynorsk; Nynorsk, Norwegian language pack for Thunderbird + This package contains Norwegian Nynorsk; Nynorsk, Norwegian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-pa +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Panjabi; Punjabi language pack for Thunderbird + This package contains Panjabi; Punjabi translations and search plugins + for Thunderbird + +Package: thunderbird-locale-pl +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Polish language pack for Thunderbird + This package contains Polish translations and search plugins + for Thunderbird + +Package: thunderbird-locale-pt +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Portuguese language pack for Thunderbird + This package contains Portuguese translations and search plugins + for Thunderbird + +Package: thunderbird-locale-rm +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Romansh language pack for Thunderbird + This package contains Romansh translations and search plugins + for Thunderbird + +Package: thunderbird-locale-ro +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Romanian language pack for Thunderbird + This package contains Romanian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-ru +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Russian language pack for Thunderbird + This package contains Russian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-si +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Sinhala; Sinhalese language pack for Thunderbird + This package contains Sinhala; Sinhalese translations and search plugins + for Thunderbird + +Package: thunderbird-locale-sk +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Slovak language pack for Thunderbird + This package contains Slovak translations and search plugins + for Thunderbird + +Package: thunderbird-locale-sl +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Slovenian language pack for Thunderbird + This package contains Slovenian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-sq +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Albanian language pack for Thunderbird + This package contains Albanian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-sr +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Serbian language pack for Thunderbird + This package contains Serbian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-sv +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Swedish language pack for Thunderbird + This package contains Swedish translations and search plugins + for Thunderbird + +Package: thunderbird-locale-ta +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Tamil language pack for Thunderbird + This package contains Tamil translations and search plugins + for Thunderbird + +Package: thunderbird-locale-tr +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Turkish language pack for Thunderbird + This package contains Turkish translations and search plugins + for Thunderbird + +Package: thunderbird-locale-uk +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Ukrainian language pack for Thunderbird + This package contains Ukrainian translations and search plugins + for Thunderbird + +Package: thunderbird-locale-vi +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Vietnamese language pack for Thunderbird + This package contains Vietnamese translations and search plugins + for Thunderbird + +Package: thunderbird-locale-zh-hans +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Simplified Chinese language pack for Thunderbird + This package contains Simplified Chinese translations and search plugins + for Thunderbird + +Package: thunderbird-locale-zh-hant +Architecture: all +Depends: thunderbird, ${misc:Depends} +Description: Traditional Chinese language pack for Thunderbird + This package contains Traditional Chinese translations and search plugins + for Thunderbird --- thunderbird-10.0.2+build1.orig/debian/thunderbird.postrm.in +++ thunderbird-10.0.2+build1/debian/thunderbird.postrm.in @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e + +APP_NAME=@MOZ_APP_NAME@ + +abort_mv_conffile() { + local CONFFILE="$1" + + if [ -e "$CONFFILE.dpkg-remove" ]; then + echo "Reinstalling $CONFFILE that was moved away" + mv "$CONFFILE.dpkg-remove" "$CONFFILE" + fi +} + +if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] ; then + abort_mv_conffile "/etc/${APP_NAME}/pref/thunderbird.js" +fi + +#DEBHELPER# --- thunderbird-10.0.2+build1.orig/debian/control.langpacks +++ thunderbird-10.0.2+build1/debian/control.langpacks @@ -0,0 +1,7 @@ + +Package: @MOZ_APP_NAME@-locale-@LANGCODE@ +Architecture: all +Depends: @MOZ_APP_NAME@, ${misc:Depends} +Description: @LANG@ language pack for Thunderbird + This package contains @LANG@ translations and search plugins + for Thunderbird --- thunderbird-10.0.2+build1.orig/debian/thunderbird.postinst.in +++ thunderbird-10.0.2+build1/debian/thunderbird.postinst.in @@ -0,0 +1,25 @@ +#!/bin/sh + +set -e + +MOZ_APP_NAME=@MOZ_APP_NAME@ + +# Move a conffile without triggering a dpkg question +finish_mv_conffile() { + local OLDCONFFILE="$1" + local NEWCONFFILE="$2" + + rm -f $OLDCONFFILE.dpkg-remove + + [ -e "$OLDCONFFILE" ] || return 0 + + echo "Preserving user changes to $NEWCONFFILE (renamed from $OLDCONFFILE)..." + mv -f "$NEWCONFFILE" "$NEWCONFFILE.dpkg-new" + mv -f "$OLDCONFFILE" "$NEWCONFFILE" +} + +if [ "$1" = "configure" ] ; then + finish_mv_conffile "/etc/${MOZ_APP_NAME}/pref/thunderbird.js" "/etc/${MOZ_APP_NAME}/syspref.js" +fi + +#DEBHELPER# --- thunderbird-10.0.2+build1.orig/debian/thunderbird.xml.in +++ thunderbird-10.0.2+build1/debian/thunderbird.xml.in @@ -0,0 +1,13 @@ + + + + + + @MOZ_DISPLAY_NAME@ + @MOZ_APP_NAME@ + @MOZ_APP_NAME@ %s + @MOZ_APP_NAME@ + false + + + --- thunderbird-10.0.2+build1.orig/debian/thunderbird.dirs.in +++ thunderbird-10.0.2+build1/debian/thunderbird.dirs.in @@ -0,0 +1,7 @@ +@MOZ_PREFIX@/lib/@MOZ_APP_NAME@-addons/extensions +@MOZ_PREFIX@/lib/@MOZ_APP_NAME@-addons/plugins +%%ifdef MOZ_ENABLE_UNITY_INTEGRATION +@MOZ_PREFIX@/share/indicators/messages/applications +%%endif +/etc/apport/blacklist.d +/etc/apport/native-origins.d --- thunderbird-10.0.2+build1.orig/debian/changelog +++ thunderbird-10.0.2+build1/debian/changelog @@ -0,0 +1,5219 @@ +thunderbird (10.0.2+build1-0ubuntu0.11.10.1) oneiric-security; urgency=low + + * New upstream stable release (THUNDERBIRD_10_0_2_BUILD1) + - see LP: #933382 for USN information + + -- Micah Gersten Thu, 16 Feb 2012 04:42:00 -0600 + +thunderbird (10.0.1+build1-0ubuntu0.11.10.1) oneiric-security; urgency=low + + * New upstream stable release (THUNDERBIRD_10_0_1_BUILD1) + - see LP: #929964 for USN information + + -- Micah Gersten Thu, 09 Feb 2012 22:23:46 -0600 + +thunderbird (10.0+build1-0ubuntu0.11.10.1) oneiric-security; urgency=low + + * New upstream stable release (THUNDERBIRD_10_0_BUILD1) + - see LP: #923372 for USN information + + [ Chris Coulson ] + * Disable more hanging IPC xpcshell tests + - update debian/build/testsuite.mk + * Improve the maintainer script magic for moving the system pref file when + upgrading from Thunderbird 3.1 on oneiric and newer. Also drop the hooks + to remove conffiles that never even existed + - update debian/thunderbird.postinst.in + - add debian/thunderbird.postrm.in + - update debian/thunderbird.preinst.in + - update debian/rules + * Drop patches fixed upstream + - remove debian/patches/theme-refresh-messenger-tree-header-graphics.patch + - remove debian/patches/theme-refresh-message-header-buttons.patch + - update debian/patches/series + * Refresh patches: + - update debian/patches/theme-refresh-messenger-toolbar-icons.patch + * Update after landing of bmo: #701875 - Rename omni.jar to omni.ja + - update debian/thunderbird.install.in + * Update shipped locales (addition of Asturian and Serbian) + - refresh debian/config/locales.all + - refresh debian/config/locales.shipped + - refresh debian/control + * Backport changes to allow per-release/per-arch patches + - add debian/build/enable-dist-patches.pl + - update debian/rules + * Fix LP: #908508 - Add patch from upstream to fix powerpc build failure. + Only apply this patch on powerpc to avoid compromising the quality of + the architectures that we care about + - add debian/patches/fix-build-failure-without-yarr-jit2.patch + - update debian/patches/series + * Also make the previous powerpc build fix apply on ppc only + - update debian/patches/series + + [ Micah Gersten ] + * Drop patch after upstream landing of (bmo: 690432) aka Logging.h passes a + string directly to printf + - drop debian/patches/printf-fix.patch + - update debian/patches/series + + -- Chris Coulson Sun, 29 Jan 2012 15:24:26 +0000 + +thunderbird (9.0+build2-0ubuntu0.11.10.1) oneiric-security; urgency=low + + * New upstream stable release (THUNDERBIRD_9_0_BUILD2) + - see LP: #909599 for USN information + + [ Chris Coulson ] + * Update globalmenu-extension to 2.0.2 + * Update eds integration to 0.3.9 + * Don't unconditionally overwrite SourcePackage when reporting bugs with + the nightly apport hook + - update debian/apport/source_thunderbird.py.in + * Set "Channel = Unavailable" if channel-prefs.js doesn't contain a + channel name + - update debian/apport/source_thunderbird.py.in + * Ensure that create-tarball can handle there not being a locale blacklist + - update debian/build/create-tarball.py + * Use makedirs to create the local cache directory + - update debian/build-create-tarball.py + * Drop patches fixed upstream: + - remove debian/patches/only-add-ENABLE_JIT-to-CXXFLAGS-if-jit-is-enabled.patch + - update debian/patches/series + * Refresh patches + - update debian/patches/theme-resfresh-addressbook-toolbar-icons.patch + * Drop xpt.py and xpidl from $LIBDIR. xpidl is gone, and xpt.py isn't included + there in the upstream SDK + - update debian/thunderbird-dev.links.in + * Fix LP: #901838 - Ugly busy pointer, due to libxcursor no longer matching + the cursor bitmap to a nice themed pointer + - add debian/patches/fix-cursor-handling.patch + - update debian/patches/series + + [ Micah Gersten ] + * Add patch from upstream to fix PowerPC FTBFS (bmo: 703534) aka + Build failure on platforms without YARR JIT + - add debian/patches/fix-build-failure-without-yarr-jit.patch + - update debian/patches/series + + -- Chris Coulson Thu, 29 Dec 2011 01:55:08 -0600 + +thunderbird (8.0+build1-0ubuntu0.11.10.1) oneiric-security; urgency=low + + * New upstream stable release v8.0 (THUNDERBIRD_8_0_BUILD1) + + * Update messagingmenu-extension to 0.8.3 + - This version backs out the change made in 7.0.1+build1+nobinonly-0ubuntu2 + that didn't fix LP#850229 + * Don't disable our bundled addons on upgrade + - update debian/vendor.js + * Move custom scripts to debian/build + - move debian/get-xpi-id.py to debian/build/get-xpi-id.py + - move debian/refresh-supported-locales.pl to + debian/build/refresh-supported-locales.pl + - move debian/extract-file.py to debian/build/extract-file.py + - move debian/testsuite.mk to debian/build + - update debian/rules + * Shrink the default mozconfig right down so that we use mostly upstream + defaults, rather than overriding them with our own options. It is still + possible to override them though. We also drop the pkg-config checks in + debian/rules which allowed a fallback build configuration when dependencies + aren't satisfied. Really, the build should just fail here rather than + continuing in some undesirable fallback mode + - update debian/thunderbird-dev.links.in + - update debian/mozconfig.in + - update debian/control.in + - update debian/rules + * Refresh build-depends, as this hasn't been done for a while: + - Drop patchutils, libxft-dev, libxinerama-dev, libgnome2-dev, sharutils + and bzip2. These don't appear to be needed + - Drop liborbit2-dev - only appears to be required if there is no libidl + - Add libglib2.0-dev, libext-dev, libfontconfig1-dev and libpango1.0-dev, + as the configure script checks for these directly + - Add minimum versions to libgconf2-dev, libgnomevfs2-dev, yasm and + libgnomeui-dev + - Specify minimum versions for libnspr4-dev, libcairo2-dev, libsqlite3-dev + and libnss3-dev when using system versions of those libs + * Introduce a branch config file (debian/config/branch.mk) which holds + settings which shouldn't be merged between branches (eg, whether + the crash reporter should be enabled) + - add debian/config/branch.mk + - update debian/rules + * Move debian/locales.* to debian/config + - move debian/locales.shipped => debian/config/locales.shipped + - move debian/locales.unavail => debian/config/locales.unavail + - update debian/rules + - update debian/build/refresh-supported-locales.pl + * Move debian/mozconfig.in to debian/config + * Touch debian/control.in during clean to force a refresh of debian/control, + so we can check if it is out-of-date and fail if it is + - update debian/rules + * Refresh patches: + - update debian/patches/ctypes-callback-reentry-fix.patch + - update debian/patches/theme-refresh-compose-toolbar-icons.patch + - update debian/patches/theme-refresh-message-header-buttons.patch + * Drop the mozilla-devscripts dependency. We were only using this for creating + tarballs anyway. Instead, implement our own get-orig-source target, which + also fixes some problems we were having + - update debian/control.in + - remove debian/moz-rev.sh + - update debian/rules + - remove debian/mozclient/mozclient.mk + - remove debian/mozclient/thunderbird.conf + - update debian/config/branch.mk + - add debian/build/create-source + - add debian/build/get-orig-source.mk + - remove debian/mozclient/thunderbird-remove.binonly.sh + * Dropped patches fixed upstream: + - remove debian/patches/theme-refresh-toolbar-and-tab-colours.patch + - remove debian/patches/theme-refresh-smaller-resize-grips-1.patch + - remove debian/patches/theme-refresh-smaller-resize-grips-2.patch + - remove debian/patches/build-fix-for-no-ENABLE_YARR_JIT.patch + - remove debian/patches/compile-pldhash-as-C++.patch + * Lots of workflow improvements for dealing with language packs: + - update debian/rules + - add debian/build/extract-file.py + - add debian/build/dump-langpack-control-entries.pl + - update debian/build/refresh-supported-locales.pl + - add debian/config/locales.all + - update debian/config/locales.shipped + - remove debian/config/locales.unavailable + - update debian/control + - update debian/build/create-tarball.py + * Turn off the one-time addon selection dialog (LP: #888307) + - update debian/vendor.js + + -- Chris Coulson Thu, 10 Nov 2011 20:22:25 +0000 + +thunderbird (7.0.1+build1+nobinonly-0ubuntu2) oneiric-proposed; urgency=low + + * Update eds extension to 0.3.8 (r96) + - Fix LP: #872639 - "Cannot open book: Could not create DesktopcouchSession + object". Don't display errors from evolution-data-server for now, as + the alert dialog is modal and makes Thunderbird unusable. The error + messages aren't useful either. Note, this doesn't fix the actual bug + with desktopcouch + - Fix LP: #863150 - Endless loop with password prompt + - Fix a shutdown crash + * Update messagingmenu-extension to 0.8.2 + - Should hopefully fix LP: #850229 by clearing the count if unread items + are deleted from a folder + + -- Chris Coulson Fri, 28 Oct 2011 16:01:23 +0100 + +thunderbird (7.0.1+build1+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream stable release (THUNDERBIRD_7_0_1_BUILD1) + - Fixes LP: #861664 + + -- Chris Coulson Thu, 29 Sep 2011 16:50:36 +0100 + +thunderbird (7.0+build1+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream stable release (THUNDERBIRD_7_0_BUILD1) + + * Pass --enable-update-channel to configure on beta/aurora. Although we don't + use the updater, this information does appear in crash reports, which is + useful. We also use it in the Apport hook, and it will be used to enable + testpilot on aurora/beta when it exists in the future + - update debian/rules + - update debian/config/mozconfig.in + - update debian/thunderbird.install.in + - update debian/apport/thunderbird.py.in + + -- Chris Coulson Sat, 24 Sep 2011 23:44:10 +0100 + +thunderbird (7.0~b3+build1+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream release from the beta channel (THUNDERBIRD_7_0b3_BUILD1) + + * Don't error out whilst creating the source package if mozilla-devscripts + or cdbs aren't installed. This enables us to create source packages + on machines which don't have these available + - update debian/rules + - update debian/mozclient/thunderbird.mk + * Refresh shipped locales to add Bulgarian + - refresh debian/locales.shipped and debian/locales.unavailable + - refresh debian/control + + -- Chris Coulson Sat, 17 Sep 2011 16:14:02 +0100 + +thunderbird (7.0~b2+build2+nobinonly1-0ubuntu2) oneiric; urgency=low + + * Update globalmenu-extension to 2.0.1 + - Fixes broken labels in the Edit menu + - Fixes radio item siblings not always being correctly unchecked + * Update messagingmenu-extension to 0.8 + - Fix a bug in inbox-only mode where we displayed non-inbox folders when + clearing inbox-indicators + - Add support for libunity6 ABI + - Provide a utility module for loading libraries and binding symbols + - Hide the internal implementation details from other chrome code + - Fix some small memory leaks + - Only destroy the IndicateServer on shutdown rather than when toggling + the pref to disable the indicator, as recreating it seems to result in + weird crashes. When disabling the indicator, just hide it (which doesn't + work in any case) + - Hide the prefs if the required libraries aren't installed + - Fallback gracefully if the required libraries aren't installed + - Trap all exceptions during initialization. Throwing exceptions in to a + document load handler is bad, as it can prevent the entire UI from loading + * Fix broken icon URI for the reply button in the message header (LP: #844606) + - update debian/patches/theme-refresh-message-header-buttons.patch + + -- Chris Coulson Thu, 15 Sep 2011 00:30:12 +0100 + +thunderbird (7.0~b2+build2+nobinonly1-0ubuntu1) oneiric; urgency=low + + * Reupload with the correct tarball this time... + + -- Chris Coulson Tue, 06 Sep 2011 01:18:53 +0100 + +thunderbird (7.0~b2+build2+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream release from the beta channel (THUNDERBIRD_7_0b2_BUILD2) + - LP: #837557 and LP: #838322 + + * Update globalmenu-extension to 2.0 + - Only update a menu in realtime if it's parent is opening. For all other + times, just invalidate the menu. Avoids spamming dbus everytime + something changes in the menu + - When removing a menuitem from its parent, check that the index is + in-bounds. Should fix a frequent crash on startup, although it doesn't + explain how it gets in to that state in the first place + - Add the ability to turn on debugging without building Firefox with + debugging on + * Add upstream patch to only add ENABLE_JIT=1 to CXXFLAGS if any of trace/ + method/yarr jit is enabled. Fixes a build failure on PPC + - add debian/patches/only-add-ENABLE_JIT-to-CXXFLAGS-if-jit-is-enabled.patch + - update debian/patches/series + * Add upstream patch to fix build failure with ENABLE_YARR_JIT=0 + - add debian/patches/build-fix-for-no-ENABLE_YARR_JIT.patch + - update debian/patches/series + * Add upstream patch to work around a linker bug + - add debian/patches/compile-pldhash-as-C++.patch + - update debian/patches/series + * Don't pass an empty --mozilla-repo= argument to client.py when creating + the source tarball without a local cache, as it totally breaks. This is + why we've got rid of all this in nightly and aurora, so we can avoid + such bandaids in the first place + - update debian/mozclient/thunderbird.conf + * Messagingmenu fixes: + - Use the libunity5 ABI (LP: #839154) + - Don't use QueryInterface on objects where we can't guarantee they + implement a particular interface (LP: #826447) + * Make sure that thunderbird-gnome-support actually depends on libunity5 + - update debian/rules + * Update eds extension to r84 from 0.3 branch + - fixes a shutdown crash + * Use the latest eds libs for the contacts integration + + -- Chris Coulson Tue, 06 Sep 2011 00:19:41 +0100 + +thunderbird (7.0~b1+build1+nobinonly-0ubuntu4) oneiric; urgency=low + + * Really fix LP: #833591 this time, in a way which is simpler and + also guaranteed to catch all errors + + -- Chris Coulson Sun, 28 Aug 2011 13:47:22 +0100 + +thunderbird (7.0~b1+build1+nobinonly-0ubuntu3) oneiric; urgency=low + + * Fix LP: #833591 - ensure that the xpt typelibs are generated correctly + at build. Also make sure that any failures in future are fatal, so we + don't create a broken binary + - update debian/rules + - update debian/eds/build.sh + - update debian/eds/config_build.sh + + -- Chris Coulson Fri, 26 Aug 2011 14:30:57 +0100 + +thunderbird (7.0~b1+build1+nobinonly-0ubuntu2) oneiric; urgency=low + + * Fix some broken chrome URI's that were resulting in icons missing + from the compose window + - update debian/patches/theme-refresh-compose-toolbar-icons.patch + + -- Chris Coulson Thu, 25 Aug 2011 02:30:37 +0100 + +thunderbird (7.0~b1+build1+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream release from the beta channel (THUNDERBIRD_7_0b1_BUILD1) + + * Make sure we actually install the crashreporter and apport blacklist file + for branches which use Breakpad + - update debian/thunderbird.install.in + * Drop the Mail/News reference in the desktop file - just set the name to + "Thunderbird Mail". This needs translating for other locales though + - update debian/thunderbird.desktop.in + * Drop patches fixed upstream: + - remove debian/patches/addressbook-de-rdf.patch + - remove debian/patches/expose-nsIAbCard-to-script.patch + - remove debian/patches/addressbook-extensibility.patch + - remove debian/patches/fix-sdk-bin-install.patch + - remove debian/patches/cairo-lcd-filter.patch + - update debian/patches/series + * Look in the correct location for the staged langpack xpi's. They moved + from dist/install to dist/linux-$(DEB_HOST_GNU_CPU) + - update debian/rules + * Ensure we use DEB_BUILD_* and DEB_HOST_* consistently so that cross- + compiling works + - update debian/rules + - update debian/mozconfig.in + - update debian/thunderbird-dev.install.in + * Simplify thunderbird-dev.install a bit by installing everything in + /usr/include/ + - update debian/thunderbird-dev.install.in + * Use $(MOZ_DISTDIR) rather than $(MOZ_OBJDIR)/dist in debian/rules. + - update debian/rules + * Fix jsreftest failures by setting the correct timezone and locale + - update debian/testsuite.mk + * Add ${misc:Depends} dependency to transitional language packs + - update debian/control.langpacks.unavail + * Disable elfhack permanently. It doesn't give us any of the performance + wins that the official mozilla.org builds get, due to -Wl,-z,relro + - update debian/rules + - update debian/mozconfig.in + * Fix "format not a string literal and no format arguments" error + - add debian/patches/printf-fix.patch + - update debian/patches/series + * Refresh shipped locales for beta + - refresh debian/locales.shipped and debian/locales.unavailable + - refresh debian/control + * Add an Apport hook + - add debian/apport/thunderbird.py.in + - update debian/thunderbird.install.in + - update debian/rules + - update debian/thunderbird.dirs.in + - rename debian/apport/thunderbird.in => debian/apport/blacklist.in + - add debian/apport/native-origins.in + * Theme refresh: + - add debian/patches/theme-refresh-toolbar-and-tab-colours.patch + - add debian/patches/theme-refresh-smaller-resize-grips-1.patch + - add debian/patches/theme-refresh-smaller-resize-grips-2.patch + - add debian/patches/theme-refresh-messenger-toolbar-icons.patch + - add debian/patches/theme-refresh-message-header-buttons.patch + - add debian/patches/theme-refresh-messenger-tree-header-graphics.patch + - add debian/patches/theme-resfresh-addressbook-toolbar-icons.patch + - add debian/patches/theme-refresh-compose-toolbar-icons.patch + - update debian/patches/series + + -- Chris Coulson Thu, 25 Aug 2011 00:17:59 +0100 + +thunderbird (6.0~b3+build1+nobinonly-0ubuntu2) oneiric; urgency=low + + * Update globalmenu-extension to 1.9.2 + - fixes a regression which causes the menu to not build and potentially + crash when encountering non-menuitem nodes, due to an uninitialized value + + -- Chris Coulson Tue, 09 Aug 2011 23:51:50 +0100 + +thunderbird (6.0~b3+build1+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream release from the beta channel (THUNDERBIRD_6_0b3_BUILD1) + + * Update globalmenu-extension to 1.9.1 + - Drop Firefox 4 and 5 compatibility + - Drop the uIGlobalMenuLoader interface, as it never served any purpose + - Rework how we synchronize attributes to menuitems from their + corresponding command nodes + - Don't synchronize attributes from command nodes associated with menus + - Rework how we handle document insertion/removals. Rather than keeping + our dbusmenu structure in sync at all times, and routing the events + to the correct node in the tree, we just mark the menu as invalid and + rebuild it from scratch next time it opens. This should reduce problems + like LP: #821391 + - Honour the collapsed attribute. This solves a problem with multiple + seprators appearing adjacent to each other in the greasemonkey menu + - Store all booleans as PRPackedBool rather than PRBool + - Add error checking around uGlobalMenuDocListener + - Make uGlobalMenuDummy more robust, and use it as a fallback if the + real menuitem fails to initialize. This should help reduce problems + like LP: #831391 + - If a menu fails to build correctly, mark it invalid and stop processing + document events on it (which should avoid the crash in LP: #831391) + - Invalidate a menu if we fail to insert/remove a node whilst processing + a document event (which should help avoid the crash in LP: #831391) + - Make uGlobalMenu::CanOpen() respect the collapsed attribute + - Allow more than one menu node to register as a listener for any DOM + node. In the case of command nodes, these may be shared across multiple + menu nodes, with each one interested in receiving events. Previously, we + just erased the first listener if a second menu node tried to register + (discovered after adding error checking around uGlobalMenuDocListener) + * Update messagingmenu-extension to r66 + - add an inbox-only mode + * Refresh shipped locales for new release + * Ship the eds contacts integration extension, based on r80 + - add debian/eds/* + - update debian/rules + - update debian/thunderbird.desktop.in + - update debian/thunderbird.dirs.in + - update debian/thunderbird.install.in + - update debian/control + * Move the Unity depends to thunderbird-gnome-support, and make sure we only + add them for oneiric builds + - update debian/control + - update debian/rules + + -- Chris Coulson Tue, 09 Aug 2011 19:28:44 +0100 + +thunderbird (6.0~b2+build1+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream release from the beta channel (THUNDERBIRD_6_0b2_BUILD1) + + * Drop patches fixed upstream: + - remove debian/patches/change-opt-back-to-Os.patch + - update debian/patches/series + * Refresh shipped locales + - refresh debian/locales.shipped and debian/locales.unavailable + - refresh debian/control + * Update messagingmenu-extension to r64 + + -- Chris Coulson Mon, 01 Aug 2011 10:09:46 +0100 + +thunderbird (6.0~b1+build1+nobinonly-0ubuntu2) oneiric; urgency=low + + * Revert an upstream change which switched the default optimization from + -Os to -O3. The intention is that -O3 will be used for PGO builds and -Os + used for non-PGO builds. -O3 increases the package size by over 3MB + - add debian/patches/change-opt-back-to-Os.patch + - update debian/patches/series + * Update globalmenu-extension to 1.8 + - Update for imgILoader changes in Firefox 8 + - Fix LP: #810489 - Inconsistent behaviour if extension is enabled + after turning off the menubar, which will affect Lucid -> P upgrades + once Lucid has a newer Firefox. document.loadOverlay() triggers a reload + of localstore.rdf, which overwrites our changes to the UI to hide + the Firefox button and bookmark button. Restore them when this happens + - Fix LP: #800733 - Quick Filter Bar checkbox in Thunderbird menu is + not marked as checked. On menuitems with command nodes, ensure we update + the state on the correct node + - Ensure we disconnect all signal handlers when a menu is destroyed. + Should fix a SIGSEGV in uGlobalMenu::OnClose() + * Enable nsIAbCard to be used from JS - required for the EDS contacts + integration work + - add debian/patches/expose-nsIAbCard-to-script.patch + - update debian/patches/series + * Add translations for the messaging menu launcher entries + - update debian/thunderbird.desktop.in + * Update desktop file translations + - update debian/thunderbird-trunk.desktop.in + * Update messagingmenu-extension to r64 + + -- Chris Coulson Tue, 26 Jul 2011 19:47:57 +0100 + +thunderbird (6.0~b1+build1+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream release from the beta channel (THUNDERBIRD_6_0b1_BUILD1) + + * Switch to beta + - update debian/rules + - update debian/mozclient/thunderbird.conf + * Update messagingmenu-extension to r58 + - Fixes a bug which causes an exception to be thrown in the default + install, preventing it from working correctly + * Drop the profile migrator, as it doesn't really make any sense with the new + release cycle. Instead, just copy the thunderbird profile (if it exists) to + thunderbird-trunk (if it doesn't exist) + - remove debian/migrator/xulapp-profilemigrator + - update debian/thunderbird.sh.in + - update debian/thunderbird.install.in + - update debian/rules + - update debian/control.in + * Drop patches fixed upstream: + - remove debian/patches/fix-nsGIOService.patch + - remove debian/patches/add-uri-handler-methods-to-nsIGIOService.patch + - remove debian/patches/default-uri-handler-check-use-gio.patch + - remove debian/patches/powerpc-build-fix.patch + - remove debian/patches/update-assembler-excl-arch-list.patch + - remove debian/patches/default-mailer-check-use-gio.patch + - remove debian/patches/stack-overflow-fix.patch + - update debian/patches/series + * xpt_link and xpt_dump have been replaced by xpt.py + - update debian/thunderbird-dev.install.in + - update debian/thunderbird-dev.links.in + * Refresh patches + - update debian/patches/stack-overflow-fix.patch + * Fix LP: #807805 - invalid language packs created because get-xpi-id.py + exits with "xml.parsers.expat.ExpatError: XML or text declaration not at + start of entity" exception when the install.rdf starts with empty lines + - update debian/get-xpi-id.py + * Backport patch from aurora to de-RDF the addressbook. Required to support + the eds contacts integration + - add debian/patches/addressbook-de-rdf.patch + - update debian/patches/series + * Apply patch from b.m.o to fix issues with reentering ctypes function + callbacks, needed for the eds integration + - add debian/patches/ctypes-callback-reentry-fix.patch + - update debian/patches/series + * Backport patch from aurora to make the addressbook more extendable. + Required for the eds contacts integration + - add debian/patches/addressbook-extensibility.patch + - update debian/patches/series + * Refresh shipped locales for the current beta + - refresh debian/locales.shipped and debian/locales.unavail + - refresh debian/control + + -- Chris Coulson Wed, 20 Jul 2011 11:13:49 +0100 + +thunderbird (5.0+build1+nobinonly-0ubuntu5) oneiric; urgency=low + + * Update messagingmenu-extension to r56 + - Improve the overflow handling when we reach 6 indicator entries in + the menu, by adding priorities to particular mail folders. Inbox + folders get the highest priority, and folders with messages we consider + to be interesting also get an elevated priority + - Add support for showing the new-mail count in the Unity launcher + - Handle the X-Priority header in mail messages to request attention + for any messages with a high priority. We also cancel any attempt + to request attention for messages with a low priority + - Fix the ordering of shortcut entries in the messaging menu to match + the order of those in the desktop file + * Fix LP: #806041 - Thunderbird crashes due to stack overflow. Cherry-pick + patch from aurora + - add debian/patches/stack-overflow-fix.patch + - update debian/patches/series + + -- Chris Coulson Fri, 08 Jul 2011 22:50:26 +0100 + +thunderbird (5.0+build1+nobinonly-0ubuntu4) oneiric; urgency=low + + * Update globalmenu-extension to 1.7 + - Fixes LP: #797680 - "thunderbird -addressbook" and "thunderbird -compose" + open a window without putting the menu in the panel, because the menu + loader is started from the chrome overlay in the main window. Add the + loader to the profile-after-change category instead + - Fixes LP: #779905 - menubar sometimes appears inside the window rather + than the panel, due to a startup race + * Apply some changes to the messagingmenu-extension: + - Ignore new messages in archive folders + - Don't request attention for messages which aren't starred and aren't + addressed directly to the recipient + - Always show messaging indicator shortcuts, even when we have a desktop + file which has them + + -- Chris Coulson Fri, 01 Jul 2011 18:01:04 +0100 + +thunderbird (5.0+build1+nobinonly-0ubuntu3) oneiric; urgency=low + + * Oops, fix the stupid copy/paste error in the desktop file + - update debian/thunderbird.desktop.in + + -- Chris Coulson Fri, 01 Jul 2011 00:04:28 +0100 + +thunderbird (5.0+build1+nobinonly-0ubuntu2) oneiric; urgency=low + + * Ship the messagingmenu extension (0.7.2) + - add debian/messagingmenu/* + - update debian/rules + - update debian/control{.in} + - update debian/thunderbird.dirs.in + * Add static launcher items to the messaging menu and quicklist items to the + Unity launcher + - update debian/thunderbird.desktop.in + - update debian/rules + + -- Chris Coulson Thu, 30 Jun 2011 18:16:13 +0100 + +thunderbird (5.0+build1+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream stable release from the miramar channel (THUNDERBIRD_5_0_BUILD1) + + -- Chris Coulson Mon, 27 Jun 2011 15:36:27 +0100 + +thunderbird (5.0~b2+build1+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream release from the miramar channel (THUNDERBIRD_5_0b2_BUILD1) + + * Add transitional ta-lk language pack to pull in thunderbird-locale-ta + - update debian/control.in + - refresh debian/control + * Add Bulgarian to locales.unavailable so we get a transitional language + pack + - update debian/locales.unavailable + - refresh debian/control + * Set a Vcs-Bzr URL + - update debian/control.in + - refresh debian/control + * Refresh shipped locales from latest tarball + - refresh debian/locales.shipped and debian/locales.unavailable + - refresh debian/control + + -- Chris Coulson Wed, 22 Jun 2011 21:58:39 +0100 + +thunderbird (5.0~b1+build2+nobinonly-0ubuntu1) oneiric; urgency=low + + * New upstream release from the miramar channel (THUNDERBIRD_5_0b1_BUILD2) + - Fixes LP: #766022 + + * Switch to comm-miramar + - update debain/mozclient/thunderbird.conf + * Update globalmenu-extension to 1.6 + * Align packaging with firefox: + - rename debian/apport/blacklist => debian/apport/thunderbird.in + - rename debian/control => debian/control.in + - rename debian/thunderbird-dev.install => + debian/thunderbird-dev.install.in + - rename debian/thunderbird-gnome-support.install => + debian/thunderbird-gnome-support.install.in + - rename debian/thunderbird.desktop => debian/thunderbird.desktop.in + - rename debian/thunderbird.install => debian/thunderbird.install.in + - rename debian/thunderbird.manpages => debian/thunderbird.manpages.in + - update debian/apport/thunderbird.in + - update debian/control.in + - update debian/rules + - update debian/thunderbird.sh.in + - update debian/thunderbird.xml.in + - update debian/thunderbird-dev.install.in + - update debian/thunderbird-gnome-support.install + - update debian/thunderbird.desktop.in + - update debian/thunderbird.install.in + - update debian/thunderbird.manpages + - added debian/thunderbird-dev.links.in + - added debian/thunderbird-globalmenu.dirs.in + - added debian/thunderbird-mozsymbols.install.in + - added debian/thunderbird.dirs.in + - added debian/thunderbird.links.in + - added debian/thunderbird.lintian-overrides.in + * Build language packs directly from the thunderbird source + + Include compare-locales FIREFOX_5_0b1_BUILD1 from + http://hg.mozilla.org/build/compare-locales. It's needed for merging + en-US strings with incomplete locales + + Pull l10n data in to tarball from bzr + - update debian/mozclient/thunderbird.conf + + Configure build for creating language packs by configuring with + "--with-l10n-base=" + - update debian/mozconfig.in + + Store the list of locales to ship, and provide a way of automatically + generating that list and the control file entries from the upstream + source. Also provide a way to blacklist languages. We map languages + to package names using langpack-o-matic (and also get descriptions + from there too) + - update debian/rules + - add debian/locales.shipped + - add debian/control.langpacks + - add debian/control.langpacks.unavail + - update debian/control + - add debian/locales.unavailable + - add debian/refresh-supported-locales.pl + + Add common-build-indep hook to build the translation xpi's + - update debian/rules + + Add common-binary-post-install-indep to install the xpi's in to the correct + debian packages + - update debian/rules + - add debian/get-xpi-id.py + + When rebuilding debian/control in the clean target, fail the build + if the control file was out-of-date. This ensures that we don't + accidentally drop language packs, and forces me to maintain an + up-to-date control file in bzr + - update debian/rules + * Rewrite the launcher script to not wrap around the upstream start + scripts, but start the Thunderbird binary directly. The upstream start + scripts contain a lot of complexity for dealing with things that we don't + need to worry about, and are quite slow. Also, add in the hooks for the + new profile migrator + - update debian/thunderbird.sh.in + * Replace the old profile migrator. The previous one relied on hard-coded + values and fragile shell script that isn't really scalable enough + now that stable Ubuntu releases see new major Thunderbird versions. The + new profile migrator doesn't require any hard-coded values, and should + be lower maintenance + - add debian/migrator/xulapp-profilemigrator + - remove debian/migrator/main.c + - update debian/rules + - update debian/thunderbird.sh.in + - update debian/control.in + * Build with "make -f client.mk" and using a mozconfig, rather than the + autoconf/configure/make steps used previously. The client.mk contains the + sequencing for doing PGO builds + - add debian/mozconfig.in + - update debian/rules + * Add cairo LCD filter patch from Firefox + - add debian/patches/cairo-lcd-filter.patch + - update debian/patches/series + * Refreshed patches: + - update debian/patches/fix-sdk-bin-install.patch + - update debian/patches/no-dynamic-nss-softokn.patch + - update debian/patches/unity-globalmenu-build-support.patch + * Provide a single global pref file rather than adding a global pref + folder for random applications to drop files in to. This means we + can drop an additional distro patch + - remove debian/patches/add_syspref_dir.patch + - update debian/patches/series + - rename debian/thunderbird.js => debian/syspref.js + - update debian/syspref.js + - update debian/thunderbird.install.in + - update debian/thunderbird.postinst.in + - update debian/thunderbird.preinst.in + * Support running the Mozilla test suite at build time. Currently, we run + the following targets: check, jstestbrowser, xpcshell-tests, reftest, + crashtest and mochitest. Not enabled yet + - add debian/testsuite.mk + - update debian/rules + * Don't touch $LIBDIR/.autoreg on install or removal. This has no effect + with the components registration changes in Gecko >= 2.0 + - update debian/thunderbird.postinst.in + - remove debian/thunderbird.prerm.in + * Fix LP: #709216 - Clicking on a link doesn't open the page. Use + GIO for external URI handling now + - add debian/patches/default-uri-handler-check-use-gio.patch + - add debian/patches/fix-nsGIOService.patch + - add debian/patches/add-uri-handler-methods-to-nsIGIOService.patch + - update debian/patches/series + * Use GIO for the default mailer check + - add debian/patches/default-mailer-check-use-gio.patch + - update debian/patches/series + * Backport patch from mozilla-central to fix powerpc build failure + - add debian/patches/powerpc-build-fix.patch + - update debian/patches/series + * Fix build on PPC64 + - add debian/patches/update-assembler-excl-arch-list.patch + - update debian/patches/series + * Ensure that the files in /etc/thunderbird/profile are cleaned up on + upgrade + - update debian/thunderbird.preinst.in + * Drop unneeded patches: + - drop debian/patches/bz420391_attXXXX_fix_unix_installer.patch (only + seemed to be needed for static builds) + - remove bz532198_lp488354_ns_invokebyindex_not_thumb2_safe.patch + (fixed upstream) + - remove debian/patches/bz591331_att469858_breakpad_allow_ptrace.patch + (fixed upstream) + - remove debian/patches/bzXXX_ftbfs_static_with_system_hunspell.patch + (not doing static builds now) + - remove debian/patches/bzXXX_linker_flag_ordering.patch (not doing + static builds now) + - remove debian/patches/fix_installdir.patch (not sure what it was + needed for) + - remove debian/patches/fix_sdk_install_mimecrypt.patch (fixed upstream) + - remove debian/patches/lp682742_arm_it_instruction.patch (fixed + upstream) + - remove debian/patches/lp_710648_arm_it_instruction_breakpad.patch + (fixed upstream) + - remove debian/patches/use-MOZ_APP_LAUNCHER-for-launcher-exec.patch + (fixed upstream) + - update debian/patches/series + * Fix LP: #767115 - use a high-res icon for the launcher + - update debian/thunderbird.links.in + + -- Chris Coulson Thu, 02 Jun 2011 22:57:32 +0100 + +thunderbird (3.1.10+build1+nobinonly-0ubuntu0.11.04.1) natty-security; urgency=low + + * New upstream release v3.1.10 (THUNDERBIRD_3_1_10_BUILD1) + - see USN-1122-2 + + * Fix LP: #767966 - globalmenu extension pollutes main window javascript + scope + - update globalmenu-extension to 1.0.3 + + -- Chris Coulson Sun, 24 Apr 2011 03:21:04 -0500 + +thunderbird (3.1.9+nobinonly-0ubuntu4) natty; urgency=low + + * Fix LP: #766151 - popuphiding and popuphidden events aren't dispatched + when a menu is closed + - update globalmenu-extension to 1.0.2 + + -- Chris Coulson Tue, 19 Apr 2011 17:18:34 +0100 + +thunderbird (3.1.9+nobinonly-0ubuntu3) natty; urgency=low + + * Update globalmenu-extension code to 1.0 + - Fix LP: #755701 - When iterating over each label, check if the current + character equals the access key (to set a flag indicating we've already + seen it) *before* we mangle the label, rather than after it. + This fixes an issue where we never set the flag, and subsequently see + the mnemonics repeated multiple times in labels + - Also remove the hack we had to add placeholder entries to empty menus + so that we could get an about-to-show signal (now that LP: #619811 + is fixed) + + -- Chris Coulson Mon, 11 Apr 2011 01:15:49 +0100 + +thunderbird (3.1.9+nobinonly-0ubuntu2) natty; urgency=low + + * Update globalmenu-extension code to 0.7 + - Fixes LP: #749440 - Interaction with CuteButtons extension makes + Thunderbird abort with icons in menus. Work around this by ignoring + icons greater than 100x100 to avoid DoS'ing unity and dbus-daemon with + lots of icon data + - Fixes LP: #734837 - Some menu items are not displayed. Some menuitems + inherit a label from their command content node rather than having a + label attribute on the menuitem content node. Make sure we use the + right label in this case + - Make the Alt key show the menubar in the panel + - Drop the hacks we had to workaround the lack of menu closed signals from + Unity. We no longer synthesize our own menu closed events, but use the + proper event from dbusmenu. + - In addition to this, we split the work done during menu opening in to + 2 phases - the first phase triggered off "about-to-show" and the second + phase triggered off "opened". In the future, we should be able to delay + the menu opening with the about-to-show handler, which is where we + do all the work to update the menu + + * Fix LP: #719919 - no option for Thunderbird as default mail client + - update debian/thunderbird.desktop + * Disable the default mail client check. This seemed to always be the + intent, but the wrong preference was being set. We correctly set + mail.shell.checkDefaultClient to false now. This check doesn't work in + Natty and isn't going to work unless I get time to backport gio support + to 3.1 + - update debian/thunderbird.js + + -- Chris Coulson Thu, 07 Apr 2011 00:08:36 +0100 + +thunderbird (3.1.9+nobinonly-0ubuntu1) natty; urgency=low + + * New upstream release v3.1.9 (THUNDERBIRD_3_1_9_RELEASE) + + [ Micah Gersten ] + * Drop symlink fix in postinst since we have a new directory path + - update debian/thunderbird.postinst.in + + [ Chris Coulson ] + * Update globalmenu-extension code to 0.6 + + -- Micah Gersten Sun, 06 Mar 2011 23:40:55 -0600 + +thunderbird (3.1.8+build3+nobinonly-0ubuntu1) natty; urgency=low + + * New upstream release v3.1.8 build 3 (THUNDERBIRD_3_1_8_BUILD3) + + -- Micah Gersten Wed, 23 Feb 2011 01:31:08 -0600 + +thunderbird (3.1.8+build2+nobinonly-0ubuntu3) natty; urgency=low + + * Fix LP: #715310 - thunderbird failed to configure + - update debian/thunderbird.postinst.in + + -- Chris Coulson Tue, 08 Feb 2011 19:59:12 +0000 + +thunderbird (3.1.8+build2+nobinonly-0ubuntu2) natty; urgency=low + + * Handle the folder -> symlink transition for the system-wide extensions + folder. dpkg doesn't do this for us automatically on upgrade + - update debian/thunderbird.postinst.in + + -- Chris Coulson Tue, 08 Feb 2011 14:16:38 +0000 + +thunderbird (3.1.8+build2+nobinonly-0ubuntu1) natty; urgency=low + + * New upstream release v3.1.8 build 2 (THUNDERBIRD_3_1_8_BUILD2) + * Update globalmenu code to 0.5.2 + + -- Chris Coulson Tue, 08 Feb 2011 13:45:30 +0000 + +thunderbird (3.1.8+build1+nobinonly-0ubuntu6) natty; urgency=low + + * Land the Unity appmenu extension work. We're building it from the + Thunderbird source tree rather than it's own source package, + for a few reasons (although it does ship in its own binary): + + It is guaranteed to run with the same ABI it builds with + + We need separate builds for Firefox and Thunderbird, so it + makes sense this way + + We get automatic Breakpad integration + - add debian/globalmenu/* containing the extension code, without its + build system + - update debian/control + - update debian/rules + - add debian/patches/unity_globalmenu_support.patch for the autoconf + and system-headers bits + - update debian/patches/series + + -- Chris Coulson Tue, 08 Feb 2011 02:30:37 +0000 + +thunderbird (3.1.8+build1+nobinonly-0ubuntu5) natty; urgency=low + + * Fix broken symlinks in the SDK that prevent anything from building + against it + - update debian/rules + + -- Chris Coulson Fri, 04 Feb 2011 15:25:56 +0000 + +thunderbird (3.1.8+build1+nobinonly-0ubuntu4) natty; urgency=low + + * Provide a system folder for installing Thunderbird-specific extensions + in, like we already have for Firefox + - update debian/thunderbird.install + - update debian/rules + + -- Chris Coulson Fri, 04 Feb 2011 01:38:20 +0000 + +thunderbird (3.1.8+build1+nobinonly-0ubuntu3) natty; urgency=low + + * Fix LP: #710648 - armel FTBFS in Breakpad code, thanks to Jani Monoses + for the patch + - add debian/patches/lp_710648_arm_it_instruction_breakpad.patch + - update debian/patches/series + + -- Chris Coulson Mon, 31 Jan 2011 23:17:55 +0000 + +thunderbird (3.1.8+build1+nobinonly-0ubuntu2) natty; urgency=low + + * Add missing curl build-dep, needed for the crashreporter + - update debian/control + + -- Chris Coulson Fri, 28 Jan 2011 18:21:18 +0000 + +thunderbird (3.1.8+build1+nobinonly-0ubuntu1) natty; urgency=low + + * New upstream release v3.1.8 (THUNDERBIRD_3_1_8_BUILD1) + + * Refresh patches after landing of bmo: 506601 aka Transition LDAP SDKs + to Mercurial (from cvs) + - update debian/patches/no_dynamic_nss_softokn.patch + * Switch on Breakpad: + - add new thunderbird-mozsymbols package for the debug symbols + + update debian/control + + update debian/rules + - add patch to allow Breakpad to work on ptrace hardened kernels: + + add debian/patches/bz591331_att469858_breakpad_allow_ptrace.patch + + update debian/patches/series + - blacklist Thunderbird in apport + + add debian/apport/blacklist + + update debian/rules + + -- Chris Coulson Fri, 28 Jan 2011 16:31:12 +0000 + +thunderbird (3.1.7+build3+nobinonly-0ubuntu3) natty; urgency=low + + * debian/control: Drop unnecessary libhal-dev build dependency. The code + does not use hal anywhere. + + -- Martin Pitt Thu, 27 Jan 2011 10:58:35 +0100 + +thunderbird (3.1.7+build3+nobinonly-0ubuntu2) natty; urgency=low + + * Fix ARM FTBFS by adding an explicit IT instruction in the Thumb2 assembly + code. (LP: #682742) + - add debian/patches/lp682742_arm_it_instruction.patch + - update debian/patches/series + * Clean up a few generated files in clean target + - update debian/rules + + -- Jani Monoses Fri, 10 Dec 2010 00:22:11 -0600 + +thunderbird (3.1.7+build3+nobinonly-0ubuntu1) natty; urgency=low + + * New upstream release v3.1.7 build 3 (THUNDERBIRD_3_1_7_BUILD3) + + -- Micah Gersten Wed, 08 Dec 2010 01:58:22 -0600 + +thunderbird (3.1.7+build2+nobinonly-0ubuntu1) natty; urgency=low + + * New upstream release v3.1.7 (THUNDERBIRD_3_1_7_BUILD2) + + * Drop libpixman linking patch after landing upstream + - drop debian/patches/bz615526_att493959_explicitly_link_libpixman.patch + - update debian/patches/series + + -- Micah Gersten Mon, 06 Dec 2010 04:46:49 -0600 + +thunderbird (3.1.7+build1+nobinonly-0ubuntu2) natty; urgency=low + + * Pass -lpixman-1 to the linker, by disabling an unnecessary check + in configure + - add debian/patches/bz615526_att493959_explicitly_link_libpixman.patch + - update debian/patches/series + * When linking thunderbird-bin, prepend the static archives to LIBS + rather than appending them to EXTRA_LIBS, which comes after LIBS when + calling the linker. The static archives mostly depend on things in LIBS, + so this fixes builds with --as-needed (LP: #682748) + - add debian/patches/bzXXX_linker_flag_ordering.patch + - update debian/patches/series + + -- Chris Coulson Tue, 30 Nov 2010 21:28:42 +0000 + +thunderbird (3.1.7+build1+nobinonly-0ubuntu1) natty; urgency=low + + * New upstream release v3.1.7 (THUNDERBIRD_3_1_7_BUILD1) + + * fix LP: #351322 - Make GNOME menu entry for Thunderbird consistent with + Firefox, Evolution + - update debian/thunderbird.desktop + * Drop patch after upstream landing of (bmo: 551152) aka Symlinked components + break everything + - drop debian/patches/lp518422.patch + - update debian/patches/series + * Drop patch to allow building with system NSPR less than 4.8.6 since the + minimum NSPR is now 4.8.6 + - drop debian/patches/fix_build_w_nspr_less_than_486.patch + - update debian/patches/series + + -- Micah Gersten Sun, 03 Oct 2010 21:33:10 -0500 + +thunderbird (3.1.6+build1+nobinonly-0ubuntu0.10.10.1) maverick-security; urgency=low + + * New upstream release v3.1.6 (THUNDERBIRD_3_1_6_BUILD1) + - see USN-1011-2 + + -- Chris Coulson Wed, 27 Oct 2010 08:51:00 -0400 + +thunderbird (3.1.5+build1+nobinonly-0ubuntu0.10.10.1) maverick-security; urgency=low + + * New upstream release v3.1.5 (THUNDERBIRD_3_1_5_BUILD1) + - see USN-998-1 + + * Bump minimum system NSPR to 4.8.6 after landing of (bmo: 567620) aka + Bump minimum required version for system NSPR to 4.8.6 + - update debian/rules + * Bump minimum system NSS to 3.12.8 after landing of (bmo: 600104) aka + Bump minimum required version for system NSS to 3.12.8 + - update debian/rules + + -- Micah Gersten Sun, 03 Oct 2010 21:33:10 -0500 + +thunderbird (3.1.4+build2+nobinonly-0ubuntu3) maverick; urgency=low + + * Fix LP: #630281 - After upgrade keyboard "mail" shortcut does not work. + Set the default client launcher to MOZ_APP_LAUNCHER rather than the + executable in our volatile install directory. Define MOZ_APP_LAUNCHER + in the launcher shell script + - add bz593948_att474767_lp630281_moz_app_launcher_for_default_client.patch + - update debian/patches/series + - update debian/thunderbird.sh.in + + -- Chris Coulson Tue, 21 Sep 2010 21:05:31 +0100 + +thunderbird (3.1.4+build2+nobinonly-0ubuntu2) maverick; urgency=low + + * Add translations for the .desktop file; Thanks to David Planella for + coordinating and the translators for their contributions. + - update debian/thunderbird.desktop + + Croatian + + Galician + + Uyghur + * Add GenericName for select .desktop translations + - update debian/thunderbird.desktop + + Catalan + + German + + Russian + + -- Micah Gersten Thu, 16 Sep 2010 11:25:47 -0500 + +thunderbird (3.1.4+build2+nobinonly-0ubuntu1) maverick; urgency=low + + * New upstream release v3.1.4 (THUNDERBIRD_3_1_4_BUILD2) + + [ Micah Gersten ] + * fix LP: #630902 - Thunderbird's .desktop file does not contain slovak + translation; Thanks to Pavol Klačanský for the translations + - update debian/thunderbird.desktop + + [ Chris Coulson ] + * Fix LP: #637434 - components.list is not installed + - update debian/thunderbird.install + * De-fuzz patches + - update debian/patches/add_syspref_dir.patch + + -- Chris Coulson Wed, 15 Sep 2010 20:49:25 +0100 + +thunderbird (3.1.3+build1+nobinonly-0ubuntu1) maverick; urgency=low + + * New upstream release v3.1.3 (THUNDERBIRD_3_1_3_BUILD1) + + * Add patch to allow building with system NSPR less than 4.8.6 + - add debian/patches/fix_build_w_nspr_less_than_486.patch + - update debian/series + + -- Micah Gersten Thu, 02 Sep 2010 11:05:12 -0500 + +thunderbird (3.1.2+nobinonly-0ubuntu1) maverick; urgency=low + + * New upstream release v3.1.2 (THUNDERBIRD_3_1_2_RELEASE) (LP: #598935) + - fix LP: #594280 - Thunderbird startup-notification bug + - fix LP: #386356 - E-mails can be moved to non-existant folders + + * fix LP: #614190 - Add Traditional and Simplified Chinese translations to + desktop file; Thanks to Cheng-Chia Tseng for Traditional Chinese and + Aron Xu for Simplified Chinese + - update debian/thunderbird.desktop + * fix LP: #610867 - Missing French GenericName translations in .desktop file + - update debian/thunderbird.desktop + * Add build depends on libnotify-dev, libiw-dev, mesa-common-dev since + xulrunner-1.9.2 based apps require them + - update debian/control + * Update mozclient to reference comm-1.9.2 branch + - update debian/rules + - update debian/mozclient/thunderbird.conf + * Make all .install files install from thunderbird-3* dir + - update debian/*.install + * Refresh patches + - update debian/patches/fix_install_sdk_bin.patch + - update debian/patches/fix_installdir.patch + * Update thunderbird.install for 3.1.x files + - update debian/thunderbird.install + * Add patch so Thunderbird doesn't esxperience LP 518422; Thanks to + Alexander Sack for the original patch + - update debian/patches/series + - add debian/patches/lp518422.patch + * Update profile migrator from 3.0 to 3.1 and include beta 3.1 participation + - update debian/migrator/main.c + - update debian/thunderbird.sh.in + * Drop Thunderbird 2 migration code in the shell wrapper since there's no + migration path in Maverick + - update debian/thunderbird.sh.in + + -- Micah Gersten Fri, 20 Aug 2010 09:36:36 -0500 + +thunderbird (3.0.6+build2+nobinonly-0ubuntu1) maverick; urgency=low + + * New upstream release v3.0.6 (THUNDERBIRD_3_0_6_BUILD2) + - see USN-958-1 + + [ Chris Coulson ] + * Fix LP: #600217 - StartupWMClass value in thunderbird.desktop file is + not correct + - update debian/thunderbird.desktop + + [ Micah Gersten ] + * Fix LP: #590452 - Thunderbird needs change for dictionary transition; + Use hunspell dictionaries for Maverick and later + - update debian/rules + * Fix LP: #569762 - Thunderbird's .desktop file does not contain russian + translation; Thanks to Igor Zubarev for the translation + - update debian/thunderbird.desktop + * Fix LP: #563535 - thunderbird -g fails due to invoking "$LIBDIR/$META_NAME" + instead of "$LIBDIR/$META_NAME"-bin + - update debian/thunderbird.sh.in + * Fix LP: #411691 - many Exception... "update.locale file doesn't exist" in + console + - update debian/rules + + -- Micah Gersten Tue, 13 Jul 2010 08:59:50 -0500 + +thunderbird (3.0.5+build2+nobinonly-0ubuntu1) maverick; urgency=low + + * New upstream release v3.0.5 (THUNDERBIRD_3_0_5_BUILD2) + - see USN-943-1 + - fix LP: #556829 - thunderbird-bin crashed with SIGSEGV in + nsQueryInterface::operator() + - fix LP: #571296 - Thunderbird 3 "Message Pane" always visible + + [ Micah Gersten ] + * Drop patch after upstream landing of (bmo: 544481) aka + Build fails on Ubuntu Lucid Lynx using 'dash' shell + - drop debian/patches/fix-build-glitch.patch + - update debian/patches/series + + -- Micah Gersten Wed, 26 May 2010 12:28:42 -0500 + +thunderbird (3.0.4+nobinonly-0ubuntu4) lucid; urgency=low + + [ Micah Gersten ] + * fix LP: #509248 - Thunderbird 3 Shows only English dictionary in Spell + menu; Don't install Thunderbird dictionaries; Link Thunderbird dictionaries + folder to system dictionaries; Create symlink in postinst if dictionaries + dir is empty + - update debian/thunderbird.postinst.in + - update debian/thunderbird.install + - update debian/rules + + [ Chris Coulson ] + * Fix LP: #543060 - gnome integration should work even without -gnome-support. + Move the gnome components to the main thunderbird package whilst using + thunderbird-gnome-support to pull in the gnome dependencies: + - update debian/rules + - remove debian/thunderbird-gnome-support.postinst.in + - remove debian/thunderbird-gnome-support.prerm.in + - add replaces/breaks to thunderbird on previous versions of + thunderbird-gnome-supportm to ensure the upgrade works + + -- Chris Coulson Tue, 20 Apr 2010 16:18:24 +0100 + +thunderbird (3.0.4+nobinonly-0ubuntu3) lucid; urgency=high + + * fix LP: #563893 - Thunderbird will not launch do to a recursive symlink; + Test if old profile directory is a symlink before migration + - update debian/thunderbird.sh.in + * Add NEWS file regarding problem with last version + - add debian/thunderbird.NEWS + + -- Micah Gersten Thu, 15 Apr 2010 12:19:31 -0500 + +thunderbird (3.0.4+nobinonly-0ubuntu2) lucid; urgency=low + + * fix LP: #558620 - Thunderbird moves profile folder to .thunderbird.upstream; + Add symlink from old profile directory to new profile directory + - update debian/thunderbird.sh.in + * fix LP: #199003 - thunderbird-gnome-support provides gnome-www-browser; + drop Provides for thunderbird-gnome-support package + - update debian/control + * fix LP: #563059 - NS_InvokeByIndex in xptcinvoke_arm.cpp is not Thumb-2 + safe for Thunderbird in Lucid + - update debian/patches/series + - add debian/patches/bz532198_lp488354_ns_invokebyindex_not_thumb2_safe.patch + + -- Micah Gersten Wed, 14 Apr 2010 10:42:43 -0500 + +thunderbird (3.0.4+nobinonly-0ubuntu1) lucid; urgency=low + + * New upstream release v3.0.4 (THUNDERBIRD_3_0_4_RELEASE) + + [ Micah Gersten ] + * fix LP: #539375 - Thunderbird is not listed Ubuntu Software Center's "Mail" + section; Add Email to Categories in .desktop file + - update debian/thunderbird.desktop + * Bump minimum system NSS to 3.12.6 after upstream landing of (bmo: 545755) + aka Update Mozilla stable branches to NSS 3.12.6 and minimal support for + RFC 5746 + - update debian/rules + + [ Ricardo Perez Lopez ] + * fix LP: #543590 - Thunderbird .desktop file lacks of Spanish translations + - update debian/thunderbird.desktop + + [ Gabor Kelemen ] + * fix LP: #331794 - No Hungarian entry in the .desktop file + - update debian/thunderbird.desktop + + -- Micah Gersten Fri, 02 Apr 2010 00:00:41 -0500 + +thunderbird (3.0.3+nobinonly-0ubuntu2) lucid; urgency=low + + * fix LP: #526290 - Thunderbird 3 hyperlinks broken; installing + the thunderbird-gnome-support package does not trigger component + re-registration. This caused users that install thunderbird-gnome-support + after first run without gnome integration until they upgrade/reinstall + thunderbird main package. We fix this by adding a postinst.in/prerm.in + for the -gnome-support package that touches $PKGLIBDIR/.autoreg to trigger + component reregistration on next start. + - add debian/thunderbird-gnome-support.postinst.in + - add debian/thunderbird-gnome-support.prerm.in + - update debian/rules + * fix LP: #527138 - enigmail is uninstallable in lucid, needs update to 1.0 - blocked + by missing tbird sdk; add missing SDK and headers to thunderbird-dev package; + this allows extensions with native components like enigmail and traybiff to build. + To fix this we add INSTALL_SDK=1 to DEB_MAKE_EXTRA_ARGS in rules and add the + appropriate paths to a fresh thunderbird-dev.install package. + - update debian/rules + - add debian/thunderbird-dev.install + * fix SDK packaging for system-nspr/nss; we install links for nspr-config and + /usr/include/nspr (and nss-config and /usr/include/nss) to the tbird sdk if + system nspr/nss is used + - update debian/rules + * fix build failures on hardy-jaunty; DEB_MAKE_EXTRA_ARGS doesnt exist in the + cdbs versions available there; using DEB_MAKE_ENVVARS is supposed to work + everywhere; hence we use that to set INSTALL_SDK + - update debian/rules + * the sdk binaries (xpt_* and xpidl) seems to get not installed for applications + != xulrunner; we work around by patching toolkits packager.mk to install them + into "installdir" + - add debian/patches/fix_install_sdk_bin.patch + - update debian/patches/series + * mailnews does not install enough mime headers for enigmail when using + INSTALL_SDK=1; we add nsStreamConverter.h, mimecryp.h and mimemoz2.h to + EXPORT. + - add debian/patches/fix_sdk_install_mimecrypt.patch + - update debian/patches/series + * install xpidl and xpt_link/xpt_dump to pkglibdir of thunderbird-dev package + - update debian/thunderbird-dev.install + + -- Alexander Sack Mon, 22 Mar 2010 23:51:02 +0100 + +thunderbird (3.0.3+nobinonly-0ubuntu1) lucid; urgency=low + + * New upstream release v3.0.3 (THUNDERBIRD_3_0_3_RELEASE) + + * fix LP: #458148 - Thunderbird and Sunbird claim to be able to open PNG, + JPEG and GIF files + - update debian/thunderbird.desktop + * fix failure in build due to unrecognized line-end-escapes in Makefile + (Thanks kees for the original patch) + - add debian/patches/fix-build-glitch.patch + - update debian/patches/series + + -- Micah Gersten Mon, 08 Mar 2010 08:28:50 -0600 + +thunderbird (3.0.1+nobinonly-0ubuntu1) lucid; urgency=low + + * New upstream release v3.0.1 (THUNDERBIRD_3_0_1_RELEASE) + - fix LP: #257483 - thunderbird-bin crashed with Badwindow Error + - fix LP: #499603 - thunderbird-bin crashed with SIGSEGV when trying to + Edit as New + + * Fix FTBFS on Sparc by disabling jit (LP: #523627) + - update debian/rules + * Drop cairo FTBFS patch after upstream landing + - drop debian/patches/bz466250_att349521_fix_ftbfs_with_cairo_fb.patch + - update debian/series + + -- Micah Gersten Sun, 21 Feb 2010 12:15:33 -0600 + +thunderbird (3.0+nobinonly-0ubuntu1) lucid; urgency=low + + * New Upstream Release 3.0 (THUNDERBIRD_3_0_RELEASE) + - LP: #50902 - Thunderbird displays useless dialog + - LP: #52667 - Thunderbird doesn't support RFC-2369 + - LP: #49033 - Doesn't recognize upper case extension (.JPG) + - LP: #56465 - Per folder column widths + - LP: #68456 - CTRL-Shift-K bound to 2 functions + - LP: #79337 - Typo in Server Information for Add Account Wizard + - LP: #1084 - No scroll on full headers list + - LP: #62071 - Middle click on scrollbar pastes instead of jumping + - LP: #119358 - Weak default authentication mode + - LP: #120672 - No option to empty junk folder with right click + - LP: #96566 - movemail doesn't work with default privs + - LP: #122529 - Non-Thunderbird IMAP folders not visible to Thunderbird + - LP: #241276 - Not able to paste image into thunderbird compose window + - LP: #244635 - scrollboxes scroll to offset 0 when resized + - LP: #259387 - "Edit Message as New" broken for eml messages + - LP: #120281 - Editing a message from the drafts folder leaves line breaks + - LP: #115484 - Dialogue boxes too large for 1024x768 resolution + - LP: #320034 - Mail with self referencing headers breaks threading + - LP: #160794 - shortcuts different in windows and linux + - LP: #280987 - thunderbird keeps asking a password when working off-line + - LP: #369150 - Thunderbird splits email addresses with non-ascii characters + and a comma in From: field + - LP: #135066 - Thunderbird doesn't use Ubuntu icon theme + - LP: #297301 - after authentication error the password is forgotten + - LP: #487541 - thunderbird-bin crashed with SIGSEGV (AFS filesystem) + - LP: #485224 - Thunderbird saves double attachment file name endings on + FAT32 and NTFS + - LP: #482496 - When using SCIM ANTHY, autosaving fails, and then get asked + about sending in UTF-8 + + [ Fabien Tassin ] + * Add build-depends on autoconf2.13, autotolls-dev, mozilla-devscripts + libglib2.0-dev (>= 2.12), libstartup-notification0-dev, libbz2-dev, + libpixman-1-dev, libdbus-1-dev (>= 1.0.0), libdbus-glib-1-dev (>= 0.60), + libhal-dev (>= 0.5.8), libasound2-dev, libreadline5-dev | libreadline-dev, + libkrb5-dev + * Update build-depends minimums for libx11-dev (>= 2:1.0), + libgtk2.0-dev (>= 2.12), zlib1g-dev (>= 1:1.2.3), libpng12-dev (>= 1.2.0), + libjpeg62-dev (>= 6b), libcairo2-dev (>= 0.5.8), libgnome2-dev (>= 2.16), + libgnomevfs2-dev (>= 1:2.16), libgnomeui-dev (>= 2.16), + libnss3-dev (>= 3.12.0~1.9b3) + * Bump standards version to 3.8.0 + * Replace ${Source-Version} by ${binary:Version} in control file + - update debian/control + * Bump requirement for system nspr to >= 4.8 since Mozilla bug 492464 landed + * Bump requirement for system nss to >= 3.12.3 since Mozilla bug 485052 landed + * Use in-source hunspell when hunspell 1.2 is not available + * Add conditionnal support for --with-libxul-sdk controlled by + $(USE_SYSTEM_XUL) + - update debian/rules + * Add postinst/prerm scripts to maintain .autoreg + - update debian/rules + - add debian/thunderbird.postinst.in + - add debian/thunderbird.prerm.in + * Add thunderbird to the list of Preferred Applications in Gnome + - add debian/thunderbird.xml + - update debian/thunderbird-gnome-support.install + * Target the 'default' branch instead of tip + - add debian/moz-rev.sh + - update debian/mozclient/thunderbird.conf + * Import the mozclient project files from mozilla-devscripts + - add debian/mozclient/thunderbird.mk + - add debian/mozclient/thunderbird.conf + - add debian/mozclient/thunderbird-remove.binonly.sh + - update debian/rules + * Import compare.mk from mozilla-devscripts and fix it for embedded tarballs + for which the depth of dist/bin could vary + - add debian/mozclient/compare.mk + - update debian/mozclient/thunderbird-3.0.mk + - update debian/rules + * Drop mozilla-thunderbird, mozilla-thunderbird-dev packages + - update debian/control + * Add new doc files + - add debian/MPL + - add debian/docs + * Fix FTBFS with cairo 1.8.4 that is built with directfb, + triggering some new code, even when directfb was not wanted/detected + in configure + - add debian/patches/bz466250_att349521_fix_ftbfs_with_cairo_fb.patch + - update debian/patches/series + * Drop Thunderbird 2 Patches: + - drop debian/patches/18_arm_xpcom_unused_attribute.dpatch + - drop debian/patches/38_arm_xpcom_optim.dpatch + - drop debian/patches/412610_attachment_309958.patch + - drop debian/patches/82_prefs.dpatch + - drop debian/patches/autoconf-regen + - drop debian/patches/bz280419_att_267284-readonly-download.patch + - drop debian/patches/bz322806_arm-vfp-2538:3f78d5e894bc.patch + - drop debian/patches/bz335810-pango-cursor-up-down-fix + - drop debian/patches/bz339782_cvs_xptcinvoke_arm_backport_1.13.patch + - drop debian/patches/bz344818_att264996_detect_xrender + - drop debian/patches/bzXXX_ftbfs_fontconfig.patch + - drop debian/patches/force-no-pragma-visibility-for-gcc-4.2_4.3 + - drop debian/patches/ftbfs_gcc44_elif.patch + - drop debian/patches/gnome-mime-handling + - drop debian/patches/hunspell-support + - drop debian/patches/lp345189_absolute_font_sizing.patch + - drop debian/patches/mailnews_mime_export + - drop debian/patches/main-fsh + - drop debian/patches/moz-user-dir-for-xre-profiles + - drop debian/patches/reply-to-list-support + - drop debian/patches/ship_movemail_rdf + - drop debian/patches/syspref-folder-support + - drop debian/patches/system-cairo-fix + - drop debian/patches/ubuntu-printing-patch + * Add Thunderbird 3 Patches: + - add debian/patches/bz420391_attXXXX_fix_unix_installer.patch + - add debian/patches/bzXXX_ftbfs_static_with_system_hunspell.patch + - add debian/patches/fix_installdir.patch + - add debian/patches/no_dynamic_nss_softokn.patch + + [ Alexander Sack ] + * add -dbg packages: thunderbird-3.0-dbg thunderbird-3.0-gnome-support-dbg + - update debian/control + + [ Micah Gersten ] + * Add ${misc:Depends} on thunderbird, thunderbird-gnome-support, and + thunderbird-dev + - update debian/control + * Bump minimum system cairo to 1.8.8 + - update debian/rules + * Add migrator/wrapper from Firefox to import settings from daily builds + - update debian/rules + - add debian/migrator/main.c + - add debian/thunderbird.sh.in + * Add system prefs patch from xulrunner-1.9.1 + - update debian/patches/series + - add debian/patches/add_syspref_dir.patch + + -- Micah Gersten Sun, 14 Feb 2010 21:04:09 -0600 + +thunderbird (2.0.0.23+build1+nobinonly-0ubuntu1) karmic; urgency=low + + * security/stability update 2.0.0.23 (USN-817-1) + * adjust patches to changed codebase + - update debian/patches/autoconf-regen + + -- Alexander Sack Mon, 17 Aug 2009 16:36:51 +0200 + +thunderbird (2.0.0.22+build1+nobinonly-0ubuntu3) karmic; urgency=low + + * drop gcc-4.3 armel dependency in karmic (LP: #401165) + - update debian/control + - update debian/rules + + -- Alexander Sack Tue, 04 Aug 2009 16:41:14 +0200 + +thunderbird (2.0.0.22+build1+nobinonly-0ubuntu2) karmic; urgency=low + + [ Loic Minier ] + * fix LP: #385325 - crash in JS due to usage of wrong floating point number format; + thanks Michael Casadevall for the research and locating the fix; patch created from + hg rev 2538:3f78d5e894bc aka bmo #322806 + - add debian/patches/bz322806_arm-vfp-2538:3f78d5e894bc + - update debian/patches/series + + [ Michael Casadevall ] + * fix LP: #385325 - stack corruption issues on ARM EABI by cherry picking + patch from 1.9 branch. + - add debian/patches/bz339782_cvs_xptcinvoke_arm_backport_1.13.patch + - update debian/patches/series + * fix build failures on armel by changing default compiler on ARM to gcc-4.3 + and adding armel specific build depend accordingly + - update debian/rules + - update debian/control + + -- Alexander Sack Fri, 10 Jul 2009 16:18:46 +0200 + +thunderbird (2.0.0.22+build1+nobinonly-0ubuntu1.nspr474) karmic; urgency=low + + * security/stability update 2.0.0.22 (USN-782-1) + * add patch to fix ftbfs with gcc 4.4 (s/elif/else/) + - add debian/patches/ftbfs_gcc44_elif.patch + - update debian/patches/series + * fix LP: #345189 - thunderbird 2 treats pixel sized system fonts as + if they were point sized, which causes for to HUGE fonts + - add debian/patches/lp345189_absolute_font_sizing.patch + - update debian/patches/series + * fix LP: #137221 - thunderbird-gnome-support package required for + gnome capabilities; the gnome parts were always loadable modules and + fail to load gracefully if depends cannot be fulfilled anyway; in turn + we ship gnome components in the main thunderbird package and apply a bit + magic in debian/rules to strip the gnome related dependencies from it; + on top of this thunderbird-gnome-support becomes an empty package which gets + all the dependencies for convenience; the purpose of new gnome-support is + hence to install all required depends; in order to add the required depends + to the gnome-support package we introduce a new substvar "shlibs:GnomeShlibs" + and refer to it in control + - remove debian/thunderbird-gnome-support.install + - update debian/rules + - update debian/control + * the change for LP: #137221 moves files from thunderbird-gnome-support to + thunderbird package; adding Replaces to thunderbird package accordingly + - update debian/control + * fix LP: #145716 - panel launcher breaks on upgrade; we provide a + compatibility link for the old mozilla-thunderbird binary + - update debian/thunderbird.links + * drop not used control.in from debian/ dir + - remove debian/control.in + * pick up latest nspr (>= 4.7.4) to potentially fix armel build (LP: #385325) + - update debian/control + + -- Alexander Sack Tue, 16 Jun 2009 14:02:03 +0200 + +thunderbird (2.0.0.21+nobinonly-0ubuntu1) jaunty; urgency=low + + * security/stability update 2.0.0.21 (USN-741-1) + + -- Alexander Sack Wed, 18 Mar 2009 16:41:35 +0100 + +thunderbird (2.0.0.19+nobinonly-0ubuntu1) jaunty; urgency=low + + * security/stability update 2.0.0.19 (USN-701-1) + * fix LP: #301626 - thunderbird disables FORTIFY; we add patch required + to enable fortify and drop CPPFLAGS that disabled it accordingly + - add debian/patches/412610_attachment_309958.patch + - update debian/patches/series + - update debian/rules + + -- Alexander Sack Sat, 03 Jan 2009 20:36:12 +0100 + +thunderbird (2.0.0.18+nobinonly-0ubuntu1) jaunty; urgency=low + + * security/stability update 2.0.0.18 (USN-668-1) + * fix LP: #302388: add arm(el) xpcom patches from icedove package + - add debian/patches/18_arm_xpcom_unused_attribute.dpatch + - add debian/patches/38_arm_xpcom_optim.dpatch + - update debian/patches/series + * rerun autoconf2.13 to adjust configure patch + - update debian/patches/autoconf-regen + + [ Saïvann Carignan ] + * Fix LP: #194970, LP: #190688 - desktop-file-validate warnings: among others + we update Icon field to not use a file extension + - update debian/thunderbird.desktop + + -- Alexander Sack Wed, 26 Nov 2008 12:18:33 +0100 + +thunderbird (2.0.0.17+nobinonly-0ubuntu1) intrepid; urgency=low + + * RELEASE security/stability update 2.0.0.17 (USN-647-1) + + -- Alexander Sack Thu, 25 Sep 2008 15:27:29 +0200 + +thunderbird (2.0.0.16+nobinonly-0ubuntu2) intrepid; urgency=low + + * fix LP: #251602 - crashes in fortify; we use CPPFLAGS=-U_FORTIFY_SOURCE + now. + + -- Alexander Sack Fri, 25 Jul 2008 10:41:52 +0200 + +thunderbird (2.0.0.16+nobinonly-0ubuntu1) intrepid; urgency=low + + * RELEASE security/stability update 2.0.0.16 (USN-629-1) + + * fix LP: #195059 - Thunderbird package description ends with "XXX Todo"; + thanks to Andrew Starr-Bochicchio for drafting this + - update debian/control + + * drop patches applied upstream + - drop debian/patches/bz419350_attachment_306066.patch + - update debian/patches/series + + * adjust patches diverged upstream + - update debian/patches/ubuntu-look-and-feel-report-a-bug-menuitem + + * add explicit -lfontconfig to linker flags used for gfx/ps module + to fix ftbfs in intrepid + - add debian/patches/bzXXX_ftbfs_fontconfig.patch + - update debian/patches/series + + -- Alexander Sack Thu, 24 Jul 2008 15:34:31 +0200 + +thunderbird (2.0.0.14+nobinonly-0ubuntu2) intrepid; urgency=low + + * fix "ftbfs with gcc 4.3 because of include of not shipped iostream.h" + - add debian/patches/bz419350_attachment_306066.patch + - update debian/patches/series + + -- Alexander Sack Fri, 02 May 2008 15:19:13 +0200 + +thunderbird (2.0.0.14+nobinonly-0ubuntu1) intrepid; urgency=low + + * 2.0.0.14 security/stability update (USN-605-1) + * don't force gcc/g++ 4.2 as compiler anymore (4.3 is now in intrepid) + and drop the versioned build-depends accordingly. + - update debian/rules + - update debian/control + * drop patches applied upstream: + - delete debian/patches/bz399589_fix_missing_symbol_with_new_nss.patch + - update debian/patches/series + + -- Alexander Sack Wed, 27 Feb 2008 13:19:09 +0100 + +thunderbird (2.0.0.12+nobinonly-0ubuntu1) hardy; urgency=low + + * USN-582-1 - 2.0.0.12 security/stability update + * update autoconf-regen patch + - update debian/patches/autoconf-regen + + -- Alexander Sack Wed, 27 Feb 2008 13:19:09 +0100 + +thunderbird (2.0.0.9+nobinonly-0ubuntu2) hardy; urgency=low + + * fix missing nss symbol + - add debian/patches/bz399589_fix_missing_symbol_with_new_nss.patch + - update debian/patches/series + * download attachments to /tmp as read-only to prevent data-loss + (LP: #87101) + - add debian/patches/bz280419_att_267284-readonly-download.patch + - update debian/patches/series + + -- Alexander Sack Thu, 14 Feb 2008 21:21:19 +0100 + +thunderbird (2.0.0.9+nobinonly-0ubuntu1) hardy; urgency=low + + * 2.0.0.9 stability update: + * drop keep_version_2006.patch patch as we don't ship a pre-release + build anymore + - delete debian/patches/keep_version_2006.patch + - update debian/patches/series + * Bump Standards-Version to 3.7.3 + - update debian/control + * make Build-Depends more diff friendly + - update debian/control + + [ Fabien Tassin ] + * Ship movemail.rdf (LP: #148942) + - add debian/patches/ship_movemail_rdf + - update debian/patches/series + * Fix typo in french description of the update-notifier file + - update debian/thunderbird-restart-required.update-notifier + * Add XRender detection code in configure + - add debian/patches/bz344818_att264996_detect_xrender + - update debian/patches/autoconf-regen + - update debian/patches/series + * Add a menu file for thunderbird + - add debian/thunderbird.menu + + -- Alexander Sack Sat, 29 Dec 2007 22:20:38 +0100 + +thunderbird (2.0.0.8~pre071022+nobinonly-0ubuntu0.7.10) gutsy-security; urgency=low + + * 2.0.0.8 security/stability update (pre fetched from CVS): + * MFSA 2007-29 aka CVE-2007-5339 (browser), CVE-2007-5340 (javascript) + * MFSA 2007-30 aka CVE-2007-1095 + * MFSA 2007-31 aka CVE-2007-2292 + * MFSA 2007-32 aka CVE-2007-3511, CVE-2006-2894 + * MFSA 2007-33 aka CVE-2007-5334 + * MFSA 2007-34 aka CVE-2007-5337 + * MFSA 2007-35 aka CVE-2007-5338 + * MFSA 2007-36 aka CVE-2007-4841 (windows only) + + Packaging: + * debian/patches/bz389801-theme-crash-with-GtkOptionMenu-indicator_size-and-indicator_spacing.patch: + drop patch - applied upstream + * debian/patches/fix-rss.rdf-install-dir: drop patch - applied upstream. + * debian/patches/keep_version_2006.patch: stick with version info 2.0.0.6 + * debian/patches/autoconf-regen: rerun autoconf2.13 + * debian/patches/series: adapt series file accordingly. + + -- Alexander Sack Mon, 22 Oct 2007 13:00:15 +0200 + +thunderbird (2.0.0.6+nobinonly-0ubuntu1) gutsy; urgency=low + + * repack orig.tar.gz to not contain binary only files found in LP: #121734 + * debian/remove.binonly.sh: debian/remove.binonly.sh import script to + remove binary-only files + + -- Alexander Sack Mon, 08 Oct 2007 18:36:36 +0200 + +thunderbird (2.0.0.6-0ubuntu5) gutsy; urgency=low + + * add Recommends: myspell-en-us | hunspell-dictionary | myspell-dictionary + (LP: #138751). + + -- Alexander Sack Fri, 05 Oct 2007 11:37:57 +0200 + +thunderbird (2.0.0.6-0ubuntu4) gutsy; urgency=low + + * debian/thunderbird.links: install upstream-compatibility links to + system nss3 and nspr4 files (LP: #133171). + + -- Alexander Sack Mon, 24 Sep 2007 10:58:41 +0200 + +thunderbird (2.0.0.6-0ubuntu3) gutsy; urgency=low + + * debian/patches/bz389801-theme-crash-with-GtkOptionMenu-indicator_size-and-indicator_spacing.patch, + series: prefetch latest patch from bugzilla 389801 to theme dependent + top-crash. (LP: #129007) + * debian/thunderbird.desktop: add finish and swedish translations to + .desktop file (LP: #126112). + + -- Alexander Sack Wed, 19 Sep 2007 18:21:22 +0200 + +thunderbird (2.0.0.6-0ubuntu2) gutsy; urgency=low + + * debian/rules, debian/control: use gcc-4.2/g++-4.2 on all architectures + * debian/patches/autoconf-regen: update configure patch to enable + force-no-pragma-visibility-for-gcc-4.2_4.3 patch during build + * debian/patches/force-no-pragma-visibility-for-gcc-4.2_4.3, + debian/patches/series: don't use visibility gcc pragmas; fix build-failure + on gcc 4.2 and 4.3. + + -- Alexander Sack Thu, 30 Aug 2007 13:49:33 +0200 + +thunderbird (2.0.0.6-0ubuntu1) gutsy; urgency=low + + * 2.0.0.5 security/stability update: + * MFSA 2007-27 aka CVE-2007-3845, SA26201, VU#783400, + VU##403150: "Unescaped URIs passed to external programs" + * MFSA 2007-26 aka CVE-2007-3844: "Privilege escalation through + chrome-loaded about:blank windows" + + -- Alexander Sack Thu, 2 Aug 2007 14:54:14 +0200 + +thunderbird (2.0.0.5-0ubuntu1) gutsy; urgency=low + + * 2.0.0.5 security/stability update: + * MFSA 2007-23 aka CVE-2007-3670: Remote code execution by + launching Firefox from Internet Explorer. + * MFSA 2007-18 aka CVE-2007-3670: Crashes with evidence of memory + corruption. + + * debian/thunderbird.desktop: include more desktop file translations. + + -- Alexander Sack Mon, 23 Jul 2007 11:24:27 +0200 + +thunderbird (2.0.0.4-0ubuntu1) gutsy; urgency=low + + * final release upload; build with updated original tarball. + * debian/rules: --disable-freetype2 in an attempt to tackle bad fonts + * debian/patches/82_prefs.dpatch|series: import default font fixes + from xulrunner 1.8.1.4-1 patchset (thanks to Mike Hommey + ) + + -- Alexander Sack Mon, 18 Jun 2007 14:51:58 +0200 + +thunderbird (2.0.0.4~rc1-0ubuntu1) gutsy; urgency=low + + * stability/security upstream release 2.0.0.4 (rc1) + - CVE-2007-2867 aka MFSA 2007-12 (l): Crashes with evidence of memory + corruption (rv:1.8.0.12/1.8.1.4) - layout engine + - CVE-2007-2868 aka MFSA 2007-12 (j): Crashes with evidence of memory + corruption (rv:1.8.0.12/1.8.1.4) - javascript engine + - CVE-2007-1558 aka MFSA 2007-15: Security Vulnerability in APOP + Authentication + * debian/patches/gcc-workaround-visibility-hidden, debian/patches/series: + applied upstream -> dropped visibility workaround patch + * debian/patches/gnome-mime-handling: updated patch for bz273524 in + response to upstream landing of bz373955 + * debian/patches/autoconf-regen: rerun autoconf accordingly + + -- Alexander Sack Thu, 5 Jun 2007 10:54:00 +0200 + +thunderbird (2.0.0.0-0ubuntu3~.mt1) gutsy; urgency=low + + * mozilla team feisty backport build + + -- Alexander Sack Fri, 25 May 2007 11:17:00 +0200 + +thunderbird (2.0.0.0-0ubuntu3) gutsy; urgency=low + + * debian/thunderbird.links: add link to not break security manager + breakage (usr/lib/nss/libnssckbi.so usr/lib/thunderbird/libnssckbi.so) + + -- Alexander Sack Fri, 4 May 2007 00:19:00 +0200 + +thunderbird (2.0.0.0-0ubuntu2) gutsy; urgency=low + + * debian/control[.in]: fix ftbfs because of missing docbook-to-man + Build-Depends. + + -- Alexander Sack Thu, 3 May 2007 18:33:00 +0200 + +thunderbird (2.0.0.0-0ubuntu1) gutsy; urgency=low + + * bump version to 2.0.0.0 in preparation of official upload + * debian/patches/mailnews_mime_export: added patch to export mime headers: + mimecryp.h + mimemoz2.h - needed by enigmail + * debian/patches/series: add patch to quilt series accordingly + * debian/rules: use --with-user-appdir configure option to set MOZ_USER_DIR + * debian/patches/moz-user-dir-for-xre-profiles: fix xre dir provider to + honour MOZ_USER_DIR + * debian/patches/ubuntu-mail-app-xre-name: drop old nsXREAppData tweak to + use .mozilla-thunderbird as profile directory + * debian/patches/syspref-folder-support: add syspref folder support + * debian/patches/reply-to-list-support: port reply-to-list-support to 2.0 + branch + * debian/patches/series: update quilt patch series accordingly + + -- Alexander Sack Mon, 23 Apr 2007 13:15:00 +0200 + +thunderbird (1.99.rc1+2.0-1) feisty; urgency=low + + * branch firefox-trunk package for 2.0 thunderbird package + * debian/control.in, debian/control: add transition packages: + mozilla-thunderbird, mozilla-thunderbird-dev; disable dom-inspector + package as there is nearly no hope that it ever will get maintained + upstream again. + * debian/rules: remove inspector extension from configure; add excludes + to dh_install of thunderbird and thunderbird-dev package: + - + DEB_DH_INSTALL_ARGS_thunderbird := -Xgnome -Ximgicon -Xmozlibthai + DEB_DH_INSTALL_ARGS_thunderbird-dev := -Xnspr -Xnss + + -- Alexander Sack Wed, 18 Apr 2007 13:35:34 +0200 + +firefox-trunk (2.99+2cvs20070328-0ubuntu0) feisty; urgency=low + + * update upstream cvs + + -- Alexander Sack Wed, 28 Mar 2007 11:00:00 +0200 + +firefox-trunk (2.99+1-3.0a.20070201-0ubuntu0) feisty; urgency=low + + * package firefox 3 preview + * rewrite packaging, make use of cdbs with quilt patch + system. + + imported initial patches + + -- Alexander Sack Thu, 22 Feb 2007 09:00:00 +0200 + +firefox (2.0.0.1+1-0ubuntu2) feisty; urgency=low + + * browser/app/Makefile.in: link firefox-bin with + --no-as-needed again. (regression from + 2.0.0.1+1-0ubuntu1) + * browser/components/feeds/src/FeedWriter.js: fix + RSS preview/subscription for flat chrome + (Closes lp#61182) + * debian/rules: set BUILD_OFFICIAL and MOZILLA_OFFICIAL environment + so build gets a proper BUILD_ID (Closes LP#). + + -- Alexander Sack Mon, 19 Feb 2007 12:45:00 +0100 + +firefox (2.0.0.1+1-0ubuntu1) feisty; urgency=low + + * repackage with new upstream mozilla.org and split up patches + into distinct feature patches available at + http://people.ubuntu.com/~asac/firefox-patches/ + * make use of original source tarball as distributed from + ftp.mozilla.org + * debian/rules: use --enable-official-branding to produce + official firefox branding; remove icons in debian/ dir; + add more garbage cleanup + * debian/firefox.links: /usr/share/pixmaps/firefox.png and + usr/share/pixmaps/mozilla-firefox.png now link to + usr/share/firefox/icons/mozicon128.png + * drop FeedWriter.js patch, no rational available. + * xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp, + xpcom/reflect/xptcall/src/md/unix/Makefile.in, + xpcom/reflect/xptcall/src/md/unix/xptcinvoke_mips.cpp, + xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips.s, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_m68k.cpp, + xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_parisc_linux.s, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_parisc_linux.s, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s, + configure.in, config/rules.mk, security/coreconf/Linux.mk: + drop debian architecture patches for + not ubuntu platforms + * debian/control: taking over maintainership + * configure.in: update hidden visibility patch from bugzilla + * configure.in: drop + * Makefile.in: drop explicit export of nss as build system is not + broken anymore + * browser/app/Makefile.in: drop linker tweaks for now. + * browser/app/profile/firefox.js: drop override for homepage + * browser/locales/en-US/chrome/branding/brand.properties: drop further + branding hacks not needed anymore + * browser/components/search/nsSearchService.js: drop not needed + official browser hacks + * prefs-size.diff: removed garbage file from source + + -- Alexander Sack Wed, 15 Feb 2007 23:15:00 +0100 + +firefox (2.0.0.1+0dfsg-0ubuntu2) feisty; urgency=low + + * Build using hunspell instead of myspell. + - debian/control: Build-depend on libhunspell-dev instead of libmyspell-dev. + - config/autoconf.mk.in: Add MOZ_MYSPELL_CFLAGS. + - extensions/spellcheck/myspell/src/Makefile.in: Use MOZ_MYSPELL_CFLAGS. + - extensions/spellcheck/myspell/src/mozMySpell.h: Include hunspell.cxx + instead of myspell.cxx. + - configure.in, configure: Overwrite myspell detection with hunspell. + + -- Matthias Klose Thu, 18 Jan 2007 11:57:14 +0000 + +firefox (2.0.0.1+0dfsg-0ubuntu1) feisty; urgency=low + + * New upstream security update: + - CVE-2006-6507, MFSA 2006-76: XSS using outer window's Function object. + - CVE-2006-6506, MFSA 2006-75: RSS Feed-preview referrer leak. + - CVE-2006-6504, MFSA 2006-73: SVG Processing Remote Code Execution. + - CVE-2006-6503, MFSA 2006-72: XSS by setting img.src to javascript: URI. + - CVE-2006-6502, MFSA 2006-71: LiveConnect crash finalizing JS objects. + - CVE-2006-6501, MFSA 2006-70: Privilege escallation using watch point. + - CVE-2006-6497, CVE-2006-6498, CVE-2006-6499, MFSA 2006-68: Crashes + with evidence of memory corruption. + * debian/rules: use original upstream icons (Closes LP#68180). + * debian/debsearch.src: make feisty the default debsearch target. + * browser/base/content/utilityOverlay.js: change Launchpad translation/help + pages for Feisty. + + -- Kees Cook Thu, 21 Dec 2006 09:51:22 -0800 + +firefox (2.0+0dfsg-0ubuntu3) edgy; urgency=low + + * Patch from upstream CVS to fix RSS preview/subscription, thanks to Mike + Connor and Martin Jürgens (Closes: LP#61182) + + -- Matt Zimmerman Mon, 23 Oct 2006 10:20:25 +0100 + +firefox (2.0+0dfsg-0ubuntu2) edgy; urgency=low + + * uudecode debsearch.gif too. Fixes FTBFS + * Make edgy the default debsearch target. Closes: Malone: #61687 + + -- Tollef Fog Heen Mon, 23 Oct 2006 08:52:11 +0200 + +firefox (2.0+0dfsg-0ubuntu1) edgy; urgency=low + + * Bump version to 2.0 (no upstream changes from rc3) + * browser/components/search/nsSearchService.js + - Set MOZ_OFFICIAL to "official", distributionID to "com.ubuntu" + * debian/branding: new subdirectory with images + * debian/rules: + - build: uudecode and substitute images in source tree, use debian/branding/icon64.png + instead of debian/firefox.png + - clean: restore images in source tree, remove uudecoded versions + + -- Matt Zimmerman Fri, 20 Oct 2006 15:56:42 -0700 + +firefox (1.99+2.0rc3+dfsg-0ubuntu1) edgy; urgency=low + + * New upstream version 2.0rc3, UVF exception approved by Matt Zimmerman. + * configure: Fix bashism to let the gcc visibility=hidden bug detection + work. + * configure{,.in}: Change MOZ_APP_DISPLAYNAME from 'BonEcho' to 'Firefox' to + make UserAgent string work with web sites which evaluate it. + * browser/base/content/utilityOverlay.js: Open the Launchpad + translation/help pages for Edgy, not Dapper. + * For the sake of automatic vulnerability tracking: All 1.5.0.x and earlier + vulnerabilities were fixed in the 2.0 branch as well: + CVE-2005-0752 CVE-2005-1531 CVE-2005-1532 CVE-2005-2114 CVE-2006-0749 + CVE-2006-1731 CVE-2006-1732 CVE-2006-1733 CVE-2006-1734 CVE-2006-1735 + CVE-2006-1736 CVE-2006-1737 CVE-2006-1738 CVE-2006-1739 CVE-2006-1740 + CVE-2006-1741 CVE-2006-1742 CVE-2006-1790 CVE-2006-2775 CVE-2006-2776 + CVE-2006-2777 CVE-2006-2778 CVE-2006-2779 CVE-2006-2780 CVE-2006-2782 + CVE-2006-2783 CVE-2006-2784 CVE-2006-2785 CVE-2006-2786 CVE-2006-2787 + CVE-2006-2788 CVE-2006-3113 CVE-2006-3677 CVE-2006-3801 CVE-2006-3802 + CVE-2006-3803 CVE-2006-3805 CVE-2006-3806 CVE-2006-3807 CVE-2006-3808 + CVE-2006-3809 CVE-2006-3810 CVE-2006-3811 CVE-2006-3812 CVE-2006-4253 + CVE-2006-4340 CVE-2006-4565 CVE-2006-4566 CVE-2006-4567 CVE-2006-4568 + CVE-2006-4569 CVE-2006-4571 + + -- Martin Pitt Thu, 19 Oct 2006 09:28:15 +0200 + +firefox (1.99+2.0rc2+dfsg-0ubuntu3) edgy; urgency=low + + * debian/firefox-runner: Disable Pango if a Sinhala locale is present. LP + 66270. + + -- Colin Watson Sun, 15 Oct 2006 20:29:26 +0100 + +firefox (1.99+2.0rc2+dfsg-0ubuntu2) edgy; urgency=low + + * Delete /usr/lib/firefox/components/compreg.dat in the postinst. + This is a partial workaround for LP 30791. + + -- Ian Jackson Thu, 12 Oct 2006 12:19:11 +0100 + +firefox (1.99+2.0rc2+dfsg-0ubuntu1) edgy; urgency=low + + * New upstream version 2.0rc2. + * Fix/workaround for epiphany GtkSocket lifetype crash: + apply patch id=241087 from Mozilla Bugzilla #241535 to fix LP #63814. + * Change application name to `Firefox', as requested by mdz. + Files changed: + - browser/locales/en-US/chrome/branding/brand.dtd + - browser/locales/en-US/chrome/branding/brand.properties; + New values: + - brandShortName and brandFullName: `Bon Echo' => `Firefox' + - vendorShortName: `Mozilla' => `Ubuntu' + * Make preferences dialogue fit again (bah!). + + -- Ian Jackson Tue, 10 Oct 2006 18:49:32 +0100 + +firefox (1.99+2.0b2+dfsg-1ubuntu3) edgy; urgency=low + + * Remove /usr/lib/mozilla-thunderbird from the LD_LIBRARY_PATH + if we find it there. Workaround for LP 57923. + * Remove pocket name (eg `-security') from distribution identifier in + the browser user agent string. LP 55289. + + -- Ian Jackson Tue, 3 Oct 2006 19:01:34 +0100 + +firefox (1.99+2.0b2+dfsg-1ubuntu2) edgy; urgency=low + + * Ship xpidl et al, in firefox-dev. Relates to Debian #362190. + Fixes Malone #61160. + + -- Ian Jackson Thu, 21 Sep 2006 16:33:50 +0100 + +firefox (1.99+2.0b2+dfsg-1ubuntu1) edgy; urgency=low + + * Merged from Debian unstable; new upstream version. + * Remaining differences between + Debian and Ubuntu in no particular order: + - Build libnspr and libnss and corresponding -dev packages from this + source package. Plus changes to make these libs build nicely. + - Various changes to preferences, default bookmarks and search engines. + - Support for `Get Help Online' and `Translate This Application'. + - Size changes for various dialogue boxes to make the contents fit. + - Downloads go to separate `Desktop' folder by default. + - Fix some underquoted m4 arguments. + - Minor changes in directories, symlinks and debian/control + to cope with Ubuntu and Debian's different histories. + - disable File / Import (wizard is nonfunctional). + Malone #28563, Debian #350599, Mozilla Bugzilla 117844. + - Change `Latest Headlines' to `Latest BBC Headlines' to properly + disclose the source up front, and use a corresponding RSS URL. + - Default for FIREFOX_DSP is none. + - Pango support is enabled only if an installed locale seems to need + it. + - Note in README.Debian about how to run xpcshell. + - Disable xprint. + - No build dependency on libxp-dev; build-depend on zip instead. + - Various icon changes. + - Some currently-unused directory merging code in firefox.preinst. + - Less detail in the user agent string. + - Belt-and-braces removal for some cruft left over by some versions of + the Mozilla build system. + - Better firefox.menu entry (says `Firefox Web Browser'). + - Build dynamically linked, since in Ubuntu embedders use firefox. + - EbmedWindow::GetVisibility bugfix, Malone 40320, upstream 312998. + - Pass FC_ANY_METRICS to Fontconfig where appropriate. + - Extensive Thai language patch. + - Print in serif by default even though default display is sans. + - Some fixes to the (upstream-unused) nss makefiles. + - Strip PostScript/ from printer names. + - Better message about updates of read-only extension. + - Include pointer to the Gecko Runtime (GRE registration). + - Prevent websites from disabling context menus. + All of these changes are fully documented in the changelog below. + Please see those changelog entries for full details. Much historical + information about changes either taken up by Debian or upstream, or + dropped by us, is retained in this changelog. + + -- Ian Jackson Wed, 13 Sep 2006 16:40:06 +0100 + +firefox (1.99+2.0b2+dfsg-1) experimental; urgency=low + + * New upstream beta release. + + * extensions/inspector/build/src/Makefile.in, + extensions/inspector/build/src/inspector.pkg, + extensions/inspector/build/src/nsInspectorModule.cpp: Removed, the problem + was lying in debian/rules. /me goes hiding under a rock. + * layout/inspector/public/Makefile.in: Reverted previous changes. + * debian/rules: Don't exclude inspector files when dh_installing the firefox + package. We need the inspector.xpt file from the components directory. The + files for the dom-inspector package are already excluded from the + firefox.install file anyway. + * debian/firefox-dom-inspector.install, + debian/firefox-dom-inspector.links: Simplified. + * debian/control: + + Turn firefox-dom-inspector into an arch: all package, since the binary + component has been merged into the firefox binary. + + Adjust dependencies for binNMU safety. + * xpcom/reflect/xptcall/src/md/unix/Makefile.in, configure.in, configure: + Use ${host_cpu} instead of uname -m so that firefox can safely build on + s390x with a s390 target, and on amd64 with an x86 target. + * uriloader/exthandler/unix/nsGNOMERegistry.cpp, + uriloader/exthandler/unix/nsGNOMERegistry.h, + uriloader/exthandler/unix/nsOSHelperAppService.cpp, + uriloader/exthandler/unix/nsMIMEInfoUnix.cpp, + uriloader/exthandler/unix/nsMIMEInfoUnix.h: Adapted patch from bz#273524 to + make helper applications with parameters work. (Closes: #355511) + * debian/copyright: Adjusted with updated information for firefox 2.0, which + is now properly tri-licensed \o/. (Closes: #330295) + * debian/rules: Install the MPL file taken from the upstream LICENSE file. + + -- Mike Hommey Fri, 1 Sep 2006 08:36:26 +0200 + +firefox (1.5.dfsg+1.5.0.6-3) unstable; urgency=low + + * browser/app/Makefile.in: Workaround to force link the xpcom library to + the firefox binary despite -Wl,--as-needed in the LDFLAGS. + (Closes: #378667) + * debian/firefox.install: Don't install xpt_link, xpt_dump, xpidl, + xpicleanup, xpcshell nor regxpcom. They are of no use to firefox users and + are provided with xulrunner anyway. (Closes: #362190) + + -- Mike Hommey Sun, 20 Aug 2006 19:49:25 +0200 + +firefox (1.5.dfsg+1.5.0.6-2) unstable; urgency=low + + * debian/firefox.desktop: + - Polish translation from Ian Jackson by way of an Ubuntu user. + (Closes: #382079) + - Patch from Ian Jackson to stop claiming dav:// URLs when firefox + doesn't understand them. (Closes: #382080) + * editor/libeditor/text/nsPlaintextEditor.cpp: Apply patch from + bz#271815 to fix OverTheSpot mode used by many Asian language input + modules. (Closes: #379935) + + -- Eric Dorland Tue, 15 Aug 2006 00:09:55 -0400 + +firefox (1.5.dfsg+1.5.0.6-1) unstable; urgency=low + + * New upstream release. + + -- Eric Dorland Thu, 3 Aug 2006 13:17:45 -0400 + +firefox (1.5.dfsg+1.5.0.5-1) unstable; urgency=high + + [ Eric Dorland ] + * New upstream release. Urgency high because it fixes MFSA 2006-44 to + MFSA 2006-56 excluiding MFSA-2006-49. (Closes: #380463) + + [ Mike Hommey ] + * debian/firefox.prerm: Remove /usr/lib/firefox/.autoreg instead of + /var/lib/firefox/.autoreg. + * browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in: + Removed very old and now useless changes. + * xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_alpha.cpp: Removed + useless new line that showed up in the diff.gz. + + -- Eric Dorland Sun, 30 Jul 2006 17:08:38 -0400 + +firefox (1.99+2.0b1+dfsg-1) experimental; urgency=low + + * New upstream beta targetted at experimental: + - Much better search plugins handling. They can be added and removed at + will, and even better, system-wise search plugins can be ignored at the + profile level. (Closes: #352195, #320957, #296425, #308005) + * browser/components/shell/src/Makefile.in: Correctly install the + setDefaultBrowser component. + * config/rules.mk: Don't install extensions in the chrome. + * debian/firefox.links: Link /usr/lib/firefox/dictionaries to + /usr/share/myspell/dicts. + * config/autoconf.mk.in, configure, configure.in: Add the + --enable-system-myspell argument to configure to use the system myspell + library. + * extensions/spellcheck/myspell/src/Makefile.in: Use the system myspell + library when asked to. + * debian/rules: + - Add --enable-system-myspell to configure call. + - Do shlibsign libfreebl's (there can be several depending on the arch). + * debian/control: Add libmyspell-dev to build dependencies. + * browser/components/microsummaries/src/Makefile.in, config/Makefile.in: + Add rules so that make clean cleans everything. + * allmakefiles.sh: Removed references to nonexisting Makefiles in + extensions/xmlextras/base. + * configure, configure.in: Apply patches from bz#334866, bz#319012 and + bz#335949 + fixups to workaround gcc visibility hidden bugs, especially + #331460 (an instance of which is actually still present in C++, + see gcc#26905). + * extensions/inspector/build/src/Makefile.in, + extensions/inspector/build/src/inspector.pkg, + extensions/inspector/build/src/nsInspectorModule.cpp: Added missing files + for the DOM Inspector component. + * extensions/inspector/build/src/Makefile.in, + layout/inspector/public/Makefile.in: Adapted so that the DOM Inspector + component would build correctly and the xpt would be installed in + the extensions directory. + * extensions/reporter/Makefile.in: Install missing reporter's preference. + + -- Mike Hommey Fri, 21 Jul 2006 07:05:25 +0200 + +firefox (1.5.dfsg+1.5.0.4-3) unstable; urgency=low + + [ Eric Dorland ] + * debian/control: + - Fix silly typo of binutils. (Closes: #378582) + - Standards-Version to 3.7.2.1. + + [ Mike Hommey ] + * debian/rules: + - Use a specific LD_LIBRARY_PATH at link time so that we don't need to + link against indirect dependencies. (Closes: #378378) + - Run shlibsign after the files are stripped so that it is accurate and + FIPS mode can correctly work. + - Removed old commented out OPTFLAGS that were kept in case gcc 4.0 did + no better than gcc 3.x. + - Removed old exported variables that are useless nowadays. + - Removed dh_strip call in binary-indep. Who wants to strip + arch-independant files ;) + * debian/presubj: Added notes about plugins and crash reports. + * security/manager/Makefile.in, security/nss/cmd/shlibsign/Makefile: + Don't build nor install the .chk files but still build shlibsign. + * debian/firefox.install: Don't install .chk files since we generate them + after dh_strip. + * security/nss/cmd/shlibsign/manifest.mn: Don't build in shlibsign/mangle. + It doesn't build anyway. + + -- Eric Dorland Wed, 19 Jul 2006 23:56:22 -0400 + +firefox (1.5.dfsg+1.5.0.4-2) unstable; urgency=low + + [ Eric Dorland ] + * netwerk/base/public/security-prefs.js: Disable SSLv2 by default. I + thought the weak cipher warning took care of this. (Closes: #371153) + * debian/firefox-runner: Simplify the dsp autodetection and add aoss to + the roster. (Closes: #372848) + * firefox-restart-required.update-notifier, firefox.postinst, + firefox.install: Add update-notifier to indicate that firefox needs to + be restarted on upgrade. Based on Ian Jackson's patch, but reworked a + little. Also with a bad French translation. Translators, assemble! + (Closes: #365865) + * config/rules.mk, debian/control: Apply patch from Thiemo Seufer to + remove mips -xgot hack and build depend on the appropriate binutils on + mips and mipsel. (Closes: #374372) + * debian/presubj, debian/README.Debian: Add a bit more information about + disabling Pango, which often seems to be the source of problems. + * debian/firefox-runner: + - Print out MOZ_NO_REMOTE in verbose mode. + - Fix some unreachable logic, Thanks Daniel Jacobowitz. + + [ Mike Hommey ] + * debian/rules: + - Fix for Gecko date extraction from client.mk. + - Disabled strict aliasing from optimized builds. + - Added -Wl,--as-needed to the LDFLAGS, so that we don't get indirect + libraries linked. + * config/static-config.mk: Add MOZ_XFT_LIBS to STATIC_EXTRA_LIBS. It used to + get linked as a side effect of linking to indirect libraries, but should + be linked directly since Xft symbols are used. + * debian/firefox-restart-required.update-notifier: Fixed the french + translation. ;) + * content/html/content/src/nsGenericHTMLElement.cpp, + content/html/content/src/nsHTMLInputElement.cpp, + dom/src/base/nsGlobalWindow.cpp: Fixed crasher and potential crashers. + Reported bz#343953. + + -- Eric Dorland Sun, 9 Jul 2006 02:37:28 -0400 + +firefox (1.5.dfsg+1.5.0.4-1) unstable; urgency=low + + * The "Post-DebConf Hangover" release. + + [ Eric Dorland ] + * New upstream release. Fixes various security issues. MFSA 2006-31 to + MFSA 2006-43, excluding MFSA 2006-40. + * debian/control: + - Standards-Version to 3.7.2.0. + - Set priority of -dbg to extra and Section to devel. + * gfx/src/gtk/nsFontMetricsPango.cpp, + intl/lwbrk/src/nsJISx4501LineBreaker.cpp, + intl/unicharutil/util/nsUnicharUtils.h, + intl/unicharutil/util/nsUnicharUtils.cpp, + layout/generic/nsTextFrame.cpp: Patch from Jurij Smakov (from + bz#161826) to fix alignment issues on sparc64. (Closes: #354725) + + [ Mike Hommey ] + * Applied distclean patch from xulrunner (in + debian/patches/01_distclean.dpatch), except for the javaxpcom stuff we + don't build anyway. + * browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}, + config/static-rules.mk: More cleaning for firefox. + * nsprpub/configure: Apply change to nsprpub/configure.in. + (Closes: #350616) + * gfx/src/gtk/nsFontMetricsPango.cpp: Some more changes so that it + actually builds without errors, and use PR_Malloc and PR_Free instead + of malloc and free. + + -- Eric Dorland Fri, 2 Jun 2006 12:13:18 -0400 + +firefox (1.5.dfsg+1.5.0.3-2) unstable; urgency=low + + * debian/firefox.desktop: Add spanish translation, just in time for + DebConf 6! Thanks Ian Jackson. (Closes: #365870) + * debian/firefox-runner: Actually apply the patch from Morita Sho in + #364566. I'm a moron. (Closes: #365956, #365960) + * debian/control: Standards-Version to 3.7.1.0. Go policy team! + + -- Eric Dorland Thu, 4 May 2006 01:38:18 -0400 + +firefox (1.5.dfsg+1.5.0.3-1) unstable; urgency=critical + + * The "secure enough for ya!" release. + * New upstream release. Contains security fixes, hence severity + critical. + - Fixes CVE-2006-1993 aka MFSA 2006-30. (Closes: #364810) + + [ Mike Hommey ] + * security/manager/Makefile.in, debian/firefox.install: Build and + install the .chk file again. That will make the FIPS mode work again. + * debian/control: Bumped Standards-Version to 3.7.0.0. No changes. + * debian/rules: Fix the navigator.ProductSub value for dumb scripts. + Closes: #364640, #365099. We now use the date of the client.mk file, + which is likely to be the closest value to the release date, instead of + useless build date. + Add the debian version after the firefox version string. + * debian/rules: Use dpkg-architecture to find out the host and build that + we want to pass to the configure script. (Closes: #365738) + + [ Eric Dorland ] + * debian/firefox-runner: + - Quote the APPLICATION_ID variable to handle profiles with a space + in the name. Inspired by Morita Sho's patch. (Closes: #364566) + - echo MOZ_DISABLE_PANGO on verbose. + * debian/rules: It's baaaackkk. Reenable xprint. + + -- Eric Dorland Wed, 3 May 2006 00:32:49 -0400 + +firefox (1.5.dfsg+1.5.0.3-0ubuntu3) dapper; urgency=low + + * Thai-related crash fix (Malone 45395): + - nsCopySupport.cpp, nsCopySupport::HTMLCopy: + do not crash if htmlConverter->Convert fails. + - nsHTMLFormatConverter.cpp, nsHTMLFormatConverter::Convert: + properly report failure if dataStr.IsEmpty. + - nsJISx4501LineBreaker.cpp: fix printf(stderr -> fprintf. + * Add Polish translation for firefox.desktop (Malone 45447). + Thanks to contribution from Tomasz Dominikowski. + * Do not attempt to merge /usr/lib/mozilla-firefox and /usr/lib/firefox + and make the former a link to the latter; this is unfortunately + error-prone and makes more problems than it solves. + Fixes Malone 44487; regresses the plugins directory confusion bug. + * Include MFSA and CVE numbers in changelog entry for 1.5.dfsg-1. + + -- Ian Jackson Tue, 23 May 2006 17:45:30 +0100 + +firefox (1.5.dfsg+1.5.0.3-0ubuntu2) dapper; urgency=low + + * Fix memory leak in large clipboard handling. Malone 41093. + Mozilla Bugzilla 289897; applied attachments 218749, 218753. + * Provide symlink /usr/lib/mozilla-firefox -> /usr/lib/firefox + (and shuffle stuff across if both directories exist). + * Remove update-notifier `restart required' on removal so that if you + remove firefox you're no longer asked to restart it. Malone 36739. + * Increase size of prefs window explicitly. Malone 43528. + * Suppress the error if /var/lib/locales/supported.d/* can't be read + (probably because it doesn't exist). If you get EIO or EACCES or some + such then having pango mysteriously disabled will be the least of your + worries. Malone 44016. + * Really use firefox_1.5.dfsg+1.5.0.3.orig.tar.gz from Debian. + + -- Ian Jackson Fri, 12 May 2006 19:20:30 +0100 + +firefox (1.5.dfsg+1.5.0.3-0ubuntu1) dapper; urgency=low + + * New upstream version, 1.5.0.3, security/stability fix from upstream: + MFSA 2006-30, CVE-2006-1993: Deleted + object reference when designMode="on" + This package is based on Debian's firefox_1.5.dfsg+1.5.0.3.orig.tar.gz + but has none of the corresponding Debian changes. + + -- Ian Jackson Wed, 10 May 2006 12:13:30 +0100 + +firefox (1.5.dfsg+1.5.0.2-3) unstable; urgency=low + + * debian/rules, debian/control: Build the -dbg package again. + * debian/firefox.1: Fix some incorrect references to mozilla. Thanks + Loïc Minier. (Closes: #364101) + * debian/firefox-runner: Patch from Mikhail Gusarov to be able to use + Network Audio Server's dsp wrapper. (Closes: #363124) + * debian/firefox.install: Fix screwed up path to firefox.xpm. (Closes: + #364359) + * debian/README.Debian: Document that firefox doesn't allow connections + on certain ports. Thanks W. Borgert. (Closes: #362785) + + -- Eric Dorland Sun, 23 Apr 2006 22:41:15 -0400 + +firefox (1.5.dfsg+1.5.0.2-2) unstable; urgency=critical + + * The "ftp-master's aren't my friends today" release. + * debian/rules, debian/control: Don't build the -dbg package for now, to + get around NEW queue processing. + + -- Eric Dorland Thu, 20 Apr 2006 22:33:18 -0400 + +firefox (1.5.dfsg+1.5.0.2-1) unstable; urgency=critical + + [ Eric Dorland ] + * New upstream release. Contains security fixes, hence severity + critical. + - Fixes the following vulnerabilites (Thanks Alexander Sack for + compiling the list): CVE-2006-1724, CVE-2006-0884, + CVE-2006-1730, CVE-2006-1729, CVE-2006-1728, CVE-2006-1727, + CVE-2006-1045, CVE-2006-0748, CVE-2006-1726, CVE-2006-1725, + CVE-2005-2353. (Closes: #362656) + * debian/firefox-runner: Patch from Paul Collins to fix some lingering + ProfileManager launch issues. (Closes: #356250) + * browser/components/preferences/privacy.xul, + browser/locales/en-US/chrome/browser/preferences/preferences.dtd: + Patch from Ian Jackson to make the preferences window bigger for + people with high rez displays. His changelog entry reads: + * Make Preferences window not chop off various elements: + - specify a width of 50em instead of 42em + - do not specify a height + - add another to the bottom of privacy.xul's prefpane. + I have no idea why this is necessary :-(. + Malone 36985. + * configure.in, configure: Small typo in configure.in that wasn't + setting TARGET_XPCOM_ABI properly and breaking binary extensions on + some arches. (Closes: #359228) + + [ Mike Hommey ] + * debian/rules: Disable elf-dynstr-gc, which is pretty useless nowadays. + * security/coreconf/rules.mk: Fix perl code that got broken by newer make. + Taken from bz#325148. + * browser/app/Makefile.in: Apply patch from bz#314927 to install default.xpm + in the correct place. + * debian/rules, debian/firefox.dirs, debian/firefox.install: Updated to fit + this change. + * security/coreconf/rules.mk: Force use of the -g flag in the CFLAGS. + + -- Eric Dorland Sun, 16 Apr 2006 18:40:02 -0400 + +firefox (1.5.dfsg+1.5.0.2-0ubuntu2) dapper; urgency=low + + * Increase sizes of various dialogue boxes so that all of the contents + fit. Malone 26225, 36985, and probably others. + * Set MOZ_DISABLE_PANGO=1 to disable pango, unless some locale is + selected as supported which would need pango for rendering; the + default can be overridden by setting MOZ_DISABLE_PANGO to 0 or 1. + Malone 32561 (workaround). + * Use update-notifier to request a firefox restart. Malone 36739. + * Added Spanish translation to firefox.desktop. + Malone 39972. Thanks to Rocco Stanzione for the patch. + * Add a couple of missing trailing newlines. + Malone 39972 again. Thanks Rocco Stanzione for the report. + * EbmedWindow::GetVisibility bugfix, Malone 40320, upstream 312998, + thanks to chpe for the patch and discussion. + * Add FC_ANY_METRICS set to FcTrue to all patterns that are going to be + used for finding (rather than enumerating) fonts. Malone 42559. + + -- Ian Jackson Tue, 2 May 2006 18:59:32 +0100 + +firefox (1.5.dfsg+1.5.0.2-0ubuntu1) dapper; urgency=low + + * New upstream version, 1.5.0.2. + Described as `stability and security fixes' by upstream but many + changes are included and producing a complete list is infeasible :-(. + Fixes are known to be included for: + - MFSA 2006-29, CVE-2006-1725: Spoofing with translucent windows + - MFSA 2006-28, CVE-2006-1726: Security check of + js_ValueToFunctionObject() can be circumvented + - MFSA 2006-27, CVE-2006-0748: Table Rebuilding Code Execution + Vulnerability + - MFSA 2006-25, CVE-2006-1727: Privilege escalation through Print Preview + - MFSA 2006-24, CVE-2006-1728: Privilege escalation using + crypto.generateCRMFRequest + - MFSA 2006-23, CVE-2006-1729: File stealing by changing input type + - MFSA 2006-22, CVE-2006-1730: CSS Letter-Spacing Heap Overflow + Vulnerability + - MFSA 2006-20, CVE-2006-1529, CVE-2006-1530, CVE-2006-1531, + CVE-2006-1723, CVE-2006-1724: Crashes with evidence of memory + corruption. + This package is based on Debian's firefox_1.5.dfsg+1.5.0.2.orig.tar.gz + but has none of the corresponding Debian changes. + + -- Ian Jackson Wed, 26 Apr 2006 16:53:22 +0100 + +firefox (1.5.dfsg+1.5.0.1-5) unstable; urgency=low + + [ Mike Hommey ] + * debian/rules: + - Add -g to the build flags when building with DEB_BUILD_OPTIONS=nostrip. + If we ask for nostrip, we want the debugging + symbols, right? ;) + - Changed the way we identificate ourselves in vendor.js. + * layout/build/Makefile.in, layout/build/nsLayoutModule.cpp: Remove useless + useragent setter at startup so that general.useragent.product and + general.useragent.productSub set in our vendor.js preference file work at + startup time. + * security/coreconf/Linux.mk: + - Patch from Martin Michlmayr for mips64 builds. + - Don't use x86 as CPU_ARCH when building on an unsupported architecture. + * security/manager/Makefile.in, security/nss/lib/ckfw/builtins/Makefile, + security/nss/lib/manifest.mn: Don't build the stuff we don't need, and + dynamically link libnssckbi to both libplc4 and libplds4 instead of + linking statically. + * debian/firefox.postinst, debian/firefox.prerm, + debian/firefox-gnome-support.postinst, debian/firefox-gnome-support.prerm: + Touch a .autoreg file at configure time, or removal of gnome-support and + remove it with the package. This will trigger autoregistration of the + components if the compreg.dat and xpti.dat files are older than the + .autoreg file. We used to remove compatibility.ini for that reason, but + stopped doing that because firefox was supposed to do that correctly, + which actually only correctly works on new upstream versions, not new + debian revisions, or installation of gnome-support. + * xpfe/components/killAll/Makefile.in: Correctly install the killAll + component. + + [ Eric Dorland ] + * debian/control: + - Set Section of firefox-gnome-support and + mozilla-firefox-gnome-support to gnome. + - Standards-Version to 3.6.2.2. + - debhelper build-dep to >= 5.0. + - Add firefox-dbg package. + * debian/compat: Set to 5. + * debian/rules: + - Remove silly CVS tarball cleanup target. + - Add arch-independant debhelper calls, and make other debhelper + calls arch-dependent. + - Add --dbg-package=firefox-dbg to dh_strip call. + - Always build with the -g flag. (Based on a change Mike made) + - Patch from Andreas Jochens to use -mminimal-toc when building on + ppc64. (Closes: #361035) + - Use --disable-strip, --disable-strip-libs in configure parameters. + Thanks Ian Jackson. + - Use .upstream instead of .orig to make it more clear and not + confuse the clean target. Thanks Ian Jackson. (Closes: #362186) + - Disable xprint support for now, while the Xorg 7 transition sorts + itself out. Should be reenabled next release. + * debian/firefox.xpm: Add more Debian compliant menu icon. + * debian/firefox.install, debian/rules: Install new Debian compliant + icon. + * debian/firefox.desktop: Add StartupNotify=true for pretty waiting + cursor. Thanks Sven Arvidsson. (Closes: #361527) + * debian/firefox-dom-inspector.preinst, + debian/firefox-dom-inspector.links, + debian/firefox-dom-inspector.install: Install non-architecture + specific bits of the inspector into /usr/share/firefox. + * debian/firefoxrc: Disable the dsp wrapper by default. esddsp is just + too buggy to allow this to continue. May reenable later if they clean + up their act. Leaving the bugs open for now. + * debian/firefox.NEWS: + - Document the dsp wrapper changes. + - Remove old mozilla-firefox entries. + * debian/firefox.1: Fix typo of firefox, thanks Andrew Rendle. (Closes: + #362413) + * debian/firefox.install: We don't get .chk files anymore for some + reason. + + -- Eric Dorland Fri, 14 Apr 2006 15:52:41 -0400 + +firefox (1.5.dfsg+1.5.0.1-4) unstable; urgency=low + + [ Mike Hommey ] + * debian/firefox-runner, debian/firefox.1: Patch from Ian Jackson to + make -P, -CreateProfile and -ProfileManager options correctly work + again, and improve the manual page. (Closes: #356250) + * debian/firefox.desktop: + - Fix trivial syntax problems. (Closes: #356263) + - Added Japanese and Korean translations. + * debian/firefox.dirs: Removed remainings of the time when we had a file + in /usr/sbin. (Closes: #356268) + * debian/firefox-gnome-support.prerm, + debian/firefox-gnome-support.postinst: Removed bashisms. (Closes: + #349946) + * debian/README.Debian: + - Replaced the bug reporting information by an invitation to read + /usr/share/bug/firefox/presubj. (Closes: #356269) + - Changed the heading to "Firefox for Debian". + + [ Eric Dorland ] + * debian/firefox-gnome-support.postinst, + debian/firefox-gnome-support.prerm: Add forgotten #DEBHELPER# token. + + -- Eric Dorland Sun, 12 Mar 2006 21:34:14 -0500 + +firefox (1.5.dfsg+1.5.0.1-3) unstable; urgency=low + + [ Eric Dorland ] + * debian/control: Use strict dependencies for the transition packages, + no reason a transition package should be upgraded before the real + package. + * debian/README.Debian: Fix all references to + /etc/mozilla-firefox/mozilla-firefoxrc. (Closes: #351956) + * debian/firefox.desktop: Patch from Ian Jackson to add more + translations and more inline with the GNOME HIG. (Closes: #351807) + * widget/src/gtk2/nsWindow.cpp: Apply new ignore extended mouse buttons + patch from Peter Colberg (Closes: #351972) + * debian/firefox.1: Lower case first letter of -ContentLocale. + * debian/firefox.1, debian/firefox-runner: Add -no-remote switch to turn + on MOZ_NO_REMOTE. Use it for profile related commands as + well. (Closes: #351717, #344849) + * wikipedia.gif.uu, wikipedia.src, rules, firefox.install: Patch from + Ian Jackson to add wikipedia search engine. (Closes: #354107) + + [ Mike Hommey ] + * modules/libpref/src/init/all.js: Set default fonts for all languages to + serif, sans-serif and monospace. It might solve a lot of fonts problems. + * config/config.mk, config/make-jars.pl, configure.in, + security/nss/lib/fortcrypt/swfort/pkcs11/config.mk, + extensions/inspector/Makefile.in: Allow building without zip when + building flat chrome. + * configure: Ran autoconf accordingly to changes in configure.in. + * debian/control: Removed build dependency on zip. + * debian/rules: Build flat chrome. + * debian/firefox.install: Changed wildcards accordingly. + * config/rules.mk: + + Don't build chromelist.txt files. + + Fixed "jar" build so that inspector files don't get duplicated in the + extension directory. + + -- Eric Dorland Sun, 26 Feb 2006 11:45:15 -0500 + +firefox (1.5.dfsg+1.5.0.1-2) unstable; urgency=low + + [ Mike Hommey ] + * debian/firefox-runner: export MOZ_DISABLE_PANGO. (Closes: #351959) + * debian/README.Debian: changed reference to the rc file in /etc. + (Closes: #351956) + + [ Eric Dorland ] + * debian/firefox.preinst: Fix {}'s bashism. Thanks Jeff King. (Closes: + #351811) + * modules/libpref/src/init/all.js: Make print.postscript.print_command + space-safe. Thanks Ian Jackson. (Closes: #351809) + * debian/firefox-runner: Don't completely override + $MOZ_PLUGIN_PATH. Thanks Ian Jackson. (Closes: #351806) + + -- Eric Dorland Thu, 9 Feb 2006 01:23:35 -0500 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu12) dapper; urgency=low + + * Sponsored upload for Theppitak Karoonboonyanan + * Updated Thai word breaking patch: + - load `libthai.so.0' instead of `libthai.so'. + - print debug message only when DEBUG is defined. + - debian/control: Suggests libthai0 + + -- Michael Vogt Thu, 13 Apr 2006 13:25:14 +0200 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu11) dapper; urgency=low + + * Fix silly lack of [ ] quoting in AC_DEFUN use. + Malone 36659, Mozilla bugzilla 298457. + * Make Preferences window not chop off various elements: + - specify a width of 50em instead of 42em + - do not specify a height + - add another to the bottom of privacy.xul's prefpane. + I have no idea why this is necessary :-(. + Malone 36985. + * Fix broken UTF-8 in .desktop file (again). Malone 37779. + * Document how to use xpcshell in README.Debian. Malone 35333. + * Clarify updateReadOnlyMessage to refer to `system package manager' + which will help the misunderstanding in Malone 31284. + + -- Ian Jackson Wed, 12 Apr 2006 17:18:52 +0100 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu10) dapper; urgency=low + + * Generate `firefox-dbg' package with debugging symbols. + This involves changing debian/compat to 5, which should be safe. + * Fix Norwegian translation in firefox.desktop. (Malone 30603.) + * Fix trivial syntax problems in firefox.desktop. (Malone 33567.) + * Remove x-directory/webdav x-directory/webdav-prefer-directory + from MimeType list in desktop file. (Malone 35928.) + * Use `about.png.upstream' instead of `about.png.orig' is the saved + original version for the branding; *.orig tends to get clobbered. + + -- Ian Jackson Fri, 24 Mar 2006 18:49:46 +0000 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu9) dapper; urgency=low + + * added thai linebreaking support (thanks to Theppitak Karoonboonyanan) + + -- Michael Vogt Tue, 14 Mar 2006 15:16:52 +0000 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu8) dapper; urgency=low + + * debian/rules: + - renamed the idl directory to match the .pc name, + replace mozilla-firefox by firefox for firefox-config too + + -- Sebastien Bacher Mon, 13 Mar 2006 15:12:43 +0100 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu7) dapper; urgency=low + + * Pointing the .pc files to /usr/include/firefox is not enough, + better install the headers there too. + + -- Matthias Klose Sat, 11 Mar 2006 17:41:24 +0000 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu6) dapper; urgency=low + + * Replace Ubuntu Bugzilla bookmark with Launchpad's `Request + support with Ubuntu' ticket creation page. (Malone 28896.) + * Reinstate `Translate This Application' in Help menu, despite the fact + that Launchpad doesn't do this yet - you just get a page saying there + are no translations for Firefox. mdz assures us that this will be + done some time during dapper's service life. + * Make -P, -CreateProfile and -ProfileManager imply sensible + values for -a, and document -a in firefox(1). (Malone 31746.) + * Fix md5sum mismatch which causes spurious conffile prompt on + bookmarks.html. + * Set browser.startup.homepage_override.mstone to ignore, + to avoid the silly thing where the first time after the upgrade, + firefox looks like it has lost your home page because it is so keen to + tell you about the release notes. (Malone 33895.) + * Change `Latest Headlines' to `Latest BBC Headlines' to properly + disclose the source up front, and use a corresponding RSS URL. + * Revert the `you have chosen to open' dialogue, as discussed on + ubuntu-devel. + * Fix firefox-*.pc files to contain correct references to libs and + includes, just like the mozilla-*.pc files. (Malone 34200.) + + -- Ian Jackson Thu, 9 Mar 2006 19:56:58 +0000 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu5) dapper; urgency=low + + * Disable `Translate This Application' and don't try to have `Get Help + Online' translated because we don't know how to translate firefox: + https://launchpad.net/products/rosetta/+spec/rosetta-firefox-support + + -- Ian Jackson Fri, 24 Feb 2006 14:49:23 +0000 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu4) dapper; urgency=low + + * Disable (by default) the `you have chosen to open' dialogue box; + instead, we just take the default (which is to open with the + application from the Gnome MIME database). This behaviour is + controlled by browser.helperApps.defaultNoAsk.openFile. + + Bookmark, search and translation reference regression fixes: + * Restore `Translate This Application' and `Get Help Online' + * Add Ubuntu and Free Software links back to bookmarks + + Bookmark, search and translation references improvements: + * Add Wikipedia to search box. + * Remove `Quick searches' from bookmarks (these just replicate + entries from the search box, and are broken anyway). + + * Get rid of README.Ubuntu - the contents are now no longer relevant. + + -- Ian Jackson Thu, 23 Feb 2006 14:44:42 +0000 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu3) dapper; urgency=low + + * Move /usr/lib/libxpcom*.so etc. back to /usr/lib/firefox; avoids + clashes with other packages (eg mozilla). + * Add rpath setting for /usr/lib/firefox to all .pc files in + firefox-dev. This is suboptimal, but at least it allows programs + which use firefox-dev at compile-time to find firefox's .so's. + * Take some redundant and perhaps privacy-leaking information out + of the default User-Agent (Malone 30677). + + -- Ian Jackson Fri, 10 Feb 2006 17:42:12 +0000 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu2) dapper; urgency=low + + * Fix stupid FTBFS on default.xpm introduced in last upload. + * Retrospectively insert CVE numbers into 1ubuntu1 changelog entry. + + -- Ian Jackson Thu, 9 Feb 2006 12:45:15 +0000 + +firefox (1.5.dfsg+1.5.0.1-1ubuntu1) dapper; urgency=low + + Changes since 1.5.dfsg-4ubuntu6: + * New upstream version (1.5.0.1) - security and stability fixes, + allegedly. (About 7000 lines of diff, so not reviewed for Ubuntu.) + Security fixes included: + - CVE-2006-0292, CVE-2006-0293, MFSA 2006-01: JavaScript garbage-collection + hazards + - CVE-2006-0294, MFSA 2006-02: Changing position:relative to static + corrupts memory + - CVE-2005-4134, MFSA 2006-03: Long document title causes startup denial of + Service + - CVE-2006-0295, MFSA 2006-04: Memory corruption via QueryInterface on + Location, Navigator objects + - CVE-2006-0296, MFSA 2006-05: Localstore.rdf XML injection through + XULDocument.persist() + - CVE-2006-0297, MFSA 2006-06: Integer overflows in E4X, SVG and Canvas + - CVE-2006-0298, MFSA 2006-07: Read beyond buffer while parsing XML + - CVE-2006-0299, MFSA 2006-08: "AnyName" entrainment and access control + hazard + * Fix Norwegian translation in .desktop file. (Malone #30603.) + * mkdir /usr/include/mozilla in firefox-dev.preinst to avoid + maintainer script sometimes preventing installation. + * Move the shlibs needed for gtkmozembed to /usr/lib (avoids + need for rpath and nonsense in firefox-gtkmozembed.pc). + * Work around new GNU make braindamage by adding seddery to + security/coreconf/rules.mk. + + Expected-permanent differences between Ubuntu and Debian: + * Build nspr and nss for use by all other programs in the distribution + (Packages: libnspr-dev, libnss-dev, libnspr4, libnss3. Fairly main + changes to parts of the build system.) This is so that mozilla + can be in Ubuntu universe. + * Disable xprint. (xprint is not used in Ubuntu.) + * Slightly different arrangements do with with transitional arrangements + related to package renaming from mozilla-firefox-*. + * Removed transitional packages mozilla-firefox-dom-inspector and + mozilla-firefox-gnome-support (not needed in Ubuntu). + * Build firefox-dev; applications which embed a browser in Ubuntu + generally embed Firefox rather than mozilla. This also means that we + build firefox with dynamic linking so that embedders and load ff. + * Debian package search replaced by Ubuntu package search (and defaults + to searching only in dapper, not all releases). + * Changes to various icons (and their installation paths). + * Strip CUPS/ from the front of displayed printer names, since + all printing in Ubuntu is done via CUPS. + + Other differences remaining between Ubuntu and Debian: + * debian/rules clean removes various junk left over by the mozilla build + system. (Debian #350616.) + * Exclude libssl3.so from dpkg_shlibdeps as this triggers a bug in + fakeroot on amd64 in Ubuntu. + * Set FIREFOX_DSP=none by default. Will sometimes break sound from eg + Flash. See https://launchpad.net/malone/bugs/29760 for rationale. + (Debian maintainers notified but no bug filed.) + * Append our plugin path to any previous value of MOZ_PLUGIN_PATH. + (Malone 29412. Debian #351806) + * firefox.desktop file has more translations and consistently calls the + application `Firefox Web Browser' (for better UI in the menus - this + change is also in firefox.menu). Debian #351807. + * Default printing command doesn't break if printer name contains + spaces (actually a preference, in all.js). (Debian #351809, + Mozilla Bugzilla #326245). + * security/coreconf/rules.mk adjusted with awful seddery to cope with + GNU make change to POSIXly interpretation of backslash line-joining. + See http://lists.debian.org/debian-devel/2005/12/msg00988.html. + Mozilla Bugzilla #325148. + * security/coreconf/ruleset.mk has a set -e added. + * Use GNOME mime database instead of mailcap. Patch imported from Red + Hat; see debian/gnome-mime-handling.diff. + * Change various preferences: + - Ubuntu-specific default homepage + - Ubuntu-specific release notes + - default homepage can be locale-specific + - middlebutton paste disabled + - do not load a special home page on first start after an upgrade + - disable File / Import (wizard is nonfunctional). + Malone #28563, Debian #350599, Mozilla Bugzilla 117844. + - save files to Desktop by default + - README.Ubuntu file (still rather full of junk) + - Prevent websites disabling the right-button context menu. + - Default font for display is sans, but: + - Default CSS for printing uses a serif font. + + -- Ian Jackson Tue, 7 Feb 2006 17:14:17 +0000 + +firefox (1.5.dfsg+1.5.0.1-1) unstable; urgency=low + + * The "those Ubuntu guys are great after all" release. + * New upstream release. (Closes: #351442) + + [ Mike Hommey ] + * debian/presubj: Added indications to try to reproduce without extensions + before actually filing a bug, and a hint to the safe mode. + * debian/firefox.install: added the reporter chrome files. (Closes: #344888) + * widget/src/gtk2/nsWindow.cpp: Revert additional stale patch for + extended mouse buttons support. + * debian/firefox.postinst, debian/firefox.prerm: unbashified. + (Closes: #349946) + * debian/control, debian/firefox-gnome-support.postinst, + debian/firefox-gnome-support.prerm: Let the firefox-gnome-support + package provide gnome-www-browser and handle a gnome-www-browser + alternative. Thanks Loïc Minier. (Closes: #350788) + * debian/firefox-runner: Enable Pango support by default. The + MOZ_ENABLE_PANGO environment variable is now useless. (Closes: #338716) + * debian/README.Debian: Change the paragraph about Pango to hint about + the MOZ_DISABLE_PANGO variable. + + [ Eric Dorland ] + * content/events/src/nsEventStateManager.cpp, + modules/libpref/src/init/all.js, widget/public/nsGUIEvent.h: Apply + patch from Ian Jackson to revert a stale patch for multiple mouse + button support that was fixed in a different way in 1.5 + (Closes: #348375) + * debian/firefox.preinst: Check md5sum's of old conffiles before cp'ing + them on upgrade. This won't stop all unnecessary conffile prompting in + all situations (especially from really old versions), but should + definitely should work for upgrading from testing or stable. (Closes: + #345112) + * debian/firefox.install: + - Remove run-mozilla.sh. (Closes: #348902) + - Reorganize things a bit. + - Move profile into /etc/firefox here, instead of in the rules file. + * debian/firefox.install, debian/firefox.preinst, debian/firefox.links, + debian/firefox.dirs, debian/rules: Move chrome, defaults, greprefs + into /usr/share/firefox for more FHS goodnesss. + * debian/firefox.1: Document -new-tab and -new-window options, and + remove deprecated -remote option. (Closes: #348699) + * debian/firefox-runner: Apply patch to properly URL escape local + files. Thanks Morita Sho. (Closes: #348451) + * browser/app/profile/firefox.js: + - Reallow 40-bit ciphers, since now firefox warns people who + use them. (Closes: #349624) + - Enable bidi UI elements for our bi-directional friends. + (Closes: #348069) + * debian/rules: Remove glob pattern from dh_install invocation. Thanks + Ian Jackson. (Closes: #350571) + * browser/base/content/aboutDialog.xul: Fix spurious scrollbar in the + about dialog box. Thanks Ian Jackson. (Closes: #350608) + * js/src/fdlibm/fdlibm.h: Patch to fix little endianess of + mipsel. Thanks Ian Jackson and Thiemo Seufer. (Closes: #350621) + * browser/base/content/search.xml: Patch from Ian Jackson to remove + misleading Clear option from search box context menu. (Closes: #350611) + * debian/watch: Fix regex to actually find the upstream tarballs. + * modules/libpref/src/init/all.js: Cope better with printers with spaces + in the name. Thanks Ian Jackson. + * toolkit/components/passwordmgr/base/nsPasswordManager.cpp: Take patch + from bz#235336 as suggested by Ian Jackson to allow password manager + to work with sites that only have a password field, no username. + + -- Eric Dorland Mon, 6 Feb 2006 23:10:29 -0500 + +firefox (1.5.dfsg-4) unstable; urgency=low + + [ Eric Dorland ] + * debian/control, debian/rules: + - Remove Kerberos options, it is now loaded dynamically. + - Use /usr/share/firefox now for finding default.xpm. + * debian/firefox.install, debian/firefox.links, debian/firefox.preinst: + Start moving some clearly non-arch specific things + (/usr/lib/firefox/searchplugins, /usr/lib/firefox/icons, + /usr/lib/firefox/res) out of /usr/lib/firefox and into + /usr/share/firefox to make things more FHS friendly. Can't believe no + one ever called me on this before. + * toolkit/components/remote/nsGTKRemoteService.cpp, + widget/src/xremoteclient/XRemoteClient.cpp: Apply patch from bz#312154 + to fix remote interface on PPC (and probably other arches). (Closes: + #343913) + * xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_m68k.cpp: Patch from + Zack Weinberg to fix FTBFS on m68k. (Closes: #343687) + * xpcom/reflect/xptcall/src/md/unix/xptcinvoke_arm.cpp: Patch from Antti + P Miettinen to fix small optimization problem with newer gcc's + (Closes: #344846) + + [ Mike Hommey ] + * debian/firefox-runner: Cleaned up now useless variables. + + -- Eric Dorland Tue, 10 Jan 2006 10:11:34 -0500 + +firefox (1.5.dfsg-3) unstable; urgency=low + + * debian/control: + - Need explicit build dependency on gtk >= 2.8. + - Upgrade Standards-Version to 3.6.2.1. No changes. + - Add compatibility packages for mozilla-firefox-dom-inspector + and mozilla-firefox-gnome-support and make all the upgrade packages + Architecture: all. (Closes: #343879, #344379) + * debian/watch: Add watch file. + * debian/about.png.uu: Add uuencoded version of previous about box + graphic. + * debian/rules: uudecode and install the about.png into the right + location. + * debian/firefox-runner: Add MOZ_PLUGIN_PATH to include plugins at the + old location for now. (Closes: #344085, #341682) + * widget/src/gtk2/nsWindow.cpp: Patch from bz#305970 to fix broken + contextual menu on Save File As. (Closes: #344430) + + * config/mkdepend/imakemdep.h, security/nss/lib/pki1/pki1.h: Remove some + patches that are now useless (suggested by Mike Hommey). + * mailnews/extensions/palmsync/palm.html, + browser/themes/pinstripe/browser/browser.css, + gfx/src/mac/nsNativeThemeMac.h, + directory/c-sdk/ldap/docs/draft-ietf-ldapext-ldap-c-api-05.txt, + layout/html/tests/table/bugs/bug123862.html, + layout/html/tests/table/bugs/bug119786.html, + layout/html/tests/table/bugs/bug101759.html, + layout/html/tests/table/bugs/bug14489.html, + layout/html/tests/table/bugs/bug222846.html, + layout/html/tests/block/bugs/155333-1.html, + layout/html/tests/block/bugs/185411-2.html, + layout/html/tests/block/bugs/13599.html, + layout/html/tests/block/bugs/53960.html, + layout/html/tests/block/bugs/155333-2.html, + layout/html/tests/block/bugs/38157-a.html, + layout/html/tests/block/bugs/38157-b.html, + layout/html/tests/block/bugs/46918.html, + layout/html/tests/block/printing/145305-11.html, + layout/html/tests/block/printing/145305-21.html, + layout/html/tests/block/printing/145305-13.html, + layout/html/tests/block/printing/145305-17.html, + layout/html/tests/block/printing/145305-19.html, + layout/html/tests/block/printing/145305-4.html, + layout/html/tests/block/printing/127145-1.html, + layout/html/tests/block/printing/145305-3.html, + layout/html/tests/block/printing/145305-7.html, + layout/html/tests/block/printing/145305-9.html, + layout/html/tests/frameset/core/r3.html, + layout/html/tests/frameset/core/r4.html, + layout/html/tests/frameset/core/blank2.html, + xpinstall/packager/stage_mfcembed.pl, xpinstall/packager/stage_gre.pl, + embedding/qa/testembed/Tests.cpp, + embedding/qa/testembed/nsihttpchanneltests.cpp, + embedding/qa/testembed/BrowserImpl.cpp, + embedding/qa/testembed/Tests.h, embedding/qa/testembed/QaUtils.cpp, + embedding/qa/testembed/resource.h, + embedding/qa/testembed/DomWindow.cpp, + embedding/qa/testembed/QaUtils.h, build/unix/abs2rel.pl, + xpfe/bootstrap/icons/windows/readme.txt, + security/nss/cmd/ssltap/ssltap-manual.html: Fix mess my subversion + repository made of line endings. This should reduce the size of the + diff.gz dramatically. + + -- Eric Dorland Sat, 24 Dec 2005 03:23:02 -0500 + +firefox (1.5.dfsg-2) unstable; urgency=low + + * browser/locales/en-US/chrome/branding/brand.dtd, + browser/locales/en-US/chrome/branding/brand.properties: Change brand + name from Deer Park to Firefox. About box graphic still needs to be + fixed. *grumble* *grumble* (Closes: #343704) + + -- Eric Dorland Sat, 17 Dec 2005 13:45:14 -0500 + +firefox (1.5.dfsg-1) unstable; urgency=low + + * New upstream release. No actual code changes from RC3. Took the + opportunity to completely empty the /other-licenses directory of the + upstream tarball. + * configure, configure.in: Change MOZ_APP_DISPLAYNAME to Firefox, so we + can be called Firefox without using + --enable-official-branding. *grumble* + * config/autoconf.mk.in, gfx/src/gtk/mozilla-decoder.cpp, configure.in: + Apply patch from bz#305185 to fix problems building against gtk+ 2.8. + * debian/control: + - Build-Depend on libfreetype6-dev since we do link + against it directly. + - Add mozilla-firefox package for easy transition. + - Conflict against older mozilla-firefox packages. + * debian/firefox-runner: + - Fix typo. (Closes: #341113) + - Check /usr/lib/mozilla-firefox/plugins for plugins too for the + time being. (Closes: #341682) + * debian/firefox-dom-inspector.preinst: Remove, not needed since the + name change. + * debian/firefox.preinst: + - Remove old upgrade code. + - Move old mozilla-firefox configs into place on install. + * debian/mozilla-firefox.preinst: Move upgrade code in here. Remove + mozilla-firefox alternative. + * debian/mozilla-firefox.postrm: Remove /etc/mozilla-firefox on purge. + + * Some patches missed when merging from Mike Hommey: + * browser/locales/en-US/searchplugins/answers.src: Change updateDays to + 0. + * config/mkdepend/imakemdep.h: Define for amd64. + * configure, configure.in: Visibility patch for recent gcc's. (Closes: + #341766) + * modules/libpref/src/nsPrefService.cpp: Patch to load preferences from + defaults/syspref. + * content/events/src/nsEventStateManager.cpp: Extended mouse events + patch. + * gfx/idl/nsIFreeType2.idl, gfx/src/freetype/nsFreeType.cpp, + gfx/src/freetype/nsFreeType.h, gfx/src/ps/nsFontMetricsPS.h, + gfx/src/x11shared/nsFontFreeType.cpp, + gfx/src/x11shared/nsFontFreeType.h, + layout/svg/renderer/src/libart/nsSVGLibartGlyphMetricsFT.cpp: Patch to + use new freetype API. + + -- Eric Dorland Fri, 16 Dec 2005 11:37:23 -0500 + +firefox (1.4.99+1.5rc3.dfsg-2) unstable; urgency=low + + * The "Grand Renaming" release. Thanks to Mike Hommey for sherperding + the 1.5 series through experimental. Now it's my turn to muck it up. A + transition packages will be in the next release. + * debian/mozilla-firefox*: Rename to firefox*. + * debian/firefox.install, debian/firefox-dom-inspector.install, + debian/firefox-gnome-support.install, debian/firefox-runner, + firefox-xremote-client, firefox.1, firefox.desktop, firefox.dirs, + debian/firefox.js, debian/firefox.links, debian/firefox.manpages, + debian/firefox.menu, debian/firefox.mime, debian/firefox.postinst, + debian/firefox.prerm, debian/firefox.png.uu, debian/README.Debian, + debian/control, debian/rules: Search/Replace mozilla-firefox -> + firefox where appropriate. + * debian/firefox.links: Link old icon name to new. + * debian/README.Debian: Fix path to .mozilla/firefox/rc. (Closes: + #335433) + * config/autoconf.mk.in: Set mozappdir to /usr/lib/firefox. + + -- Eric Dorland Sun, 27 Nov 2005 20:03:02 -0500 + +mozilla-firefox (1.4.99+1.5rc3.dfsg-1) experimental; urgency=low + + * New upstream 1.5 preview release. Release Candidate 3. + * debian/mozilla-firefox-runner: Removed the ping stuff, it's now done by + firefox itself. + + -- Mike Hommey Fri, 18 Nov 2005 07:24:05 +0100 + +mozilla-firefox (1.4.99+1.5rc2.dfsg-1) experimental; urgency=low + + * New upstream 1.5 preview release. Release Candidate 2. + * xpcom/typelib/xpidl/xpidl.c: Fix crash when no file is given on the + command line (Closes: #323639). Also fix the error message about extra + arguments given showing before the crash. + * configure.in, configure: Work around dash's bug #337294 so that we can + build fine when sh is dash (Closes: #211010, #256384). + * debian/mozilla-firefox-runner: + - Removed the code to detect the JVM and set LD_ASSUME_KERNEL=2.2.5 for + b0rked 1.3 JVMs: it's been a long time they've not been ABI compatible. + - Removed setting of MOZILLA_FIVE_HOME. We already have a default one + built-in. + - Removed /usr/lib/mozilla/plugins from EXTENT_LD_LIB_PATH, since we never + get the plugins from there. + - Removed cleanup of the profile. It is correctly done by firefox, now. + + -- Mike Hommey Fri, 11 Nov 2005 08:07:05 +0100 + +mozilla-firefox (1.4.99+1.5rc1.dfsg-1) experimental; urgency=low + + * New upstream 1.5 preview release. Release Candidate 1. + * debian/mozilla-firefox.install: Don't install + /usr/lib/mozilla-firefox/extensions/reporter@mozilla.org, it got moved in + the chrome. + + -- Mike Hommey Tue, 1 Nov 2005 22:01:15 +0100 + +mozilla-firefox (1.4.99+1.5beta2.dfsg-1) experimental; urgency=low + + * build/unix/run-mozilla.sh, netwerk/base/src/nsStandardURL.cpp: + Reverted debian changes: they got applied upstream. + * configure: Applied configure.in changes by hand. + * debian/rules: Disabled both the installer and the updater, we don't need + them. + + -- Mike Hommey Fri, 7 Oct 2005 15:06:05 +0200 + +mozilla-firefox (1.4.99+1.5beta1.dfsg-5) experimental; urgency=low + + * debian/control: Bumped Standards-Version to 3.6.2. + * nsprpub/configure.in: Reverted changed. + * configure.in: Use -fvisibility=hidden in all cases. There is another bug + in gcc that makes it generate position dependent code when using the + system wrappers. + * configure, nsprpub/configure: Applied configure.in changes with + autoconf2.13. + * debian/rules: Put back the /usr/share/pixmaps/mozilla-firefox.xpm file. + + -- Mike Hommey Mon, 3 Oct 2005 18:46:50 +0200 + +mozilla-firefox (1.4.99+1.5beta1.dfsg-4) experimental; urgency=low + + * xpcom/typelib/xpt/src/Makefile.in: Reverted changes. + * configure.in, nsprpub/configure.in: Added a detection of the gcc bug about + visibility for builtins, and use -fvisibility=hidden instead of the system + wrappers in case the bug is found. + * configure, nsprpub/configure: Applied configure.in changes with + autoconf2.13. (Really closes: #329642) + + -- Mike Hommey Tue, 27 Sep 2005 20:16:34 +0200 + +mozilla-firefox (1.4.99+1.5beta1.dfsg-3) experimental; urgency=low + + * Sync with unstable branch. + * xpcom/typelib/xpt/src/Makefile.in: disable visibility stuff for ppc, as a + workaround for FTBFS. (Closes: #329642) + + -- Mike Hommey Mon, 26 Sep 2005 18:35:11 +0200 + +mozilla-firefox (1.0.7-1) unstable; urgency=high + + * New upstream release. Contains fixes for various security issues. + * debian/mozilla-firefox-runner: Remove /usr/lib from + LD_LIBRARY_PATH. (Closes: #321789) + + -- Eric Dorland Thu, 22 Sep 2005 01:23:10 -0400 + +mozilla-firefox (1.4.99+1.5beta1.dfsg-2) experimental; urgency=low + + * debian/rules: enabled support for canvas. + + -- Mike Hommey Tue, 20 Sep 2005 07:56:01 +0200 + +mozilla-firefox (1.4.99+1.5beta1.dfsg-1) experimental; urgency=low + + * Cleaned-up source tarball from trademarked content and CVS directories. + * debian/mozilla-firefox-small.xpm, debian/mozilla-firefox.xpm: Removed. + * debian/mozilla-firefox.dirs, debian/rules: + + Create /usr/lib/mozilla-firefox/chrome/icons/default and move + default.xpm in it. (Closes: #327828) + + Stop using our own xpm icons, upstream provide them, now. + * debian/rules: changed the build system a bit. + * xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_parisc_linux.s, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_parisc_linux.s, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s: Somewhat these + files disappeared. Put them back. (Closes: #328074) + + -- Mike Hommey Tue, 13 Sep 2005 18:25:48 +0200 + +mozilla-firefox (1.4.99+1.5beta1-2) experimental; urgency=critical + + * Sync with unstable branch. + * netwerk/base/src/nsStandardURL.cpp: Apply the patch for the 1.8 branch + from bz#307259 to fix CAN-2005-2871. (Closes: #327452) + * debian/mozilla-firefox-gnome-support.install, debian/rules: Move out + imgicon module in mozilla-firefox-gnome-support. (Closes: #327451) + + -- Mike Hommey Sun, 11 Sep 2005 10:45:34 +0200 + +mozilla-firefox (1.0.6-5) unstable; urgency=critical + + * xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp: Fix for previous + arm fix. Thanks Steve. (Closes: #325535) + * netwerk/base/src/nsStandardURL.cpp: Patch from bz#307259 to fix + CAN-2005-2871, a buffer overflow vulnerability in IDN + processing. (Closes: #327452) + + -- Eric Dorland Sat, 10 Sep 2005 23:03:26 -0400 + +mozilla-firefox (1.4.99+1.5beta1-1) experimental; urgency=low + + * New upstream beta release. + + Find toolbar doesn't show up when in text fields. Closes: #280852. + + Better use of GTK2 themes. The most common case was highlighted menu + item text appearing in white on a white background. Closes: #223696, + #257430, #258181, #266334, #278559, #289326, #297320, #310098. + + Download manager correctly closes. Closes: #259015, #269975. + + Doesn't crash with the http://ln.hixie.ch/resources/style/orange + stylesheet. Closes: #277987. + + Locale extensions can properly be disabled. Closes: #279749 (to check). + + Doesn't crash on + http://einsteinmg.dyndns.org/cgi-bin/remangle.cgi?=0x27b9b660 anymore. + Closes: #294372. + + Downloads don't freeze when a modal window opens. Closes: #211332. + + Use GTK stock images. Closes: #281660. + * Sync with unstable branch changes. + * browser/app/profile/firefox.js, debian/firefox.js: + + Removed outdated extensions.update.autoUpdateEnabled and + extensions.update.autoUpdate; + + Removed general.useragent.locale. + + Allow extensions updates. It works correctly with system-wide installed + ones, now. + * netwerk/protocol/http/src/nsHttpConnectionMgr.cpp, + nsprpub/pr/include/md/_linux.cfg, widget/src/gtk2/mozdrawingarea.c, + widget/src/gtk2/nsDragService.cpp: Reversed changes, since they got + applied upstream. + * xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp: correctly set + __attribute__. Closes: #325535. + * debian/rules: + + set --enable-extensions=default instead of a full list. + We will get the default set of extensions provided by upstream, and + won't need to check if they changed. + + set --enable-pango. + + set --enable-system-cairo. + * debian/control: added build dependency on libgnomeui-dev and libcairo2-dev. + * debian/mozilla-firefox.install, debian/rules: don't install files in + /usr/lib/mozilla-firefox/chrome/icons/ anymore. + * debian/mozilla-firefox-runner: Force MOZ_DISABLE_PANGO to 1 if + MOZ_ENABLE_PANGO is not set. + * debian/README.Debian: + + Removed the note about IDN, it is now enabled by default, with correct + whitelist set. + + Added a note about MOZ_ENABLE_PANGO. + + Changed notes about application update, extensions, and packaged + extensions. + * modules/libpref/src/init/all.js: + + Set general.config.obscure_value to 0, we don't care about the config + file not to be "obscured". + + Set general.config.filename to firefox.cfg. + * debian/firefox.cfg: Create configuration to lock some properties. + * debian/mozilla-firefox.install: Install this firefox.cfg in + /usr/lib/mozilla-firefox + + -- Mike Hommey Fri, 9 Sep 2005 17:40:40 +0200 + +mozilla-firefox (1.0.6-4) unstable; urgency=low + + * xpcom/reflect/xptcall/src/md/unix/xptcinvoke_linux_alpha.cpp, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm.cpp, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_linux_alpha.cpp: Patch + from Steve Langasek to fix unused vs. used gcc attribute on alpha and + arm. (Closes: #325535) + * browser/app/profile/firefox.js: Revert patch to remove the "I'm + feeling lucky" search. Some like it, some hate it, so upstream + behaviour wins. If you still feel strongly about it, make your case + upstream. + * gfx/src/gtk/nsFontMetricsXft.cpp: Apply patch from bz#252033 to work + around a bug in XRender that might be causing #319349. + + -- Eric Dorland Tue, 6 Sep 2005 02:10:07 -0400 + +mozilla-firefox (1.0.99+deerpark-alpha2-2) experimental; urgency=low + + * Sync with unstable branch changes, except the controversial "I'm feeling + lucky" change. I prefer waiting for the controversy to get to a + conclusion. + * debian/rules, debian/control: Remove build dependency on libmng-dev and + the --with-system-mng option to configure, the MNG support has been + removed upstream. + * debian/rules: Explicitely set the svg-renderer as cairo. It will use an + old cairo version bundled with firefox, but there's no other solution for + the moment. We have to wait for upstream 0.9.x and greater support + (hoped for 1.5). + + -- Mike Hommey Sun, 4 Sep 2005 09:01:54 +0200 + +mozilla-firefox (1.0.6-3) unstable; urgency=low + + * debian/rules, nsprpub/pr/include/md/_linux.cfg, + security/coreconf/Linux.mk: Apply patch from Andreas Jochens to allow + ppc64 builds. (Closes: #322617) + * debian/mozilla-firefox.prerm: Move -depth option to find to suppress + warnings. Thanks Mike Hommey. + * debian/presubj: Have bugzilla bug URL point to a page where you can + enter a bug. + * browser/app/profile/firefox.js: removed the "I'm feeling lucky" from + the keyword.URL, so now if you enter search terms in the address bar + you will be presented with search results and not taken to the first + result. Thanks Torok Edwin. (Closes: #321823) + + -- Eric Dorland Mon, 22 Aug 2005 01:20:28 -0400 + +mozilla-firefox (1.0.6-2) unstable; urgency=medium + + * modules/libpr0n/src/imgLoader.cpp, modules/libpr0n/src/imgLoader.h: + Apply ported patch from Serge Belyshev from bz#293307 to fix problem + with gcc-4.0 on amd64. (Closes: #319336) + * debian/rules: Remove silly --enable-freetype configure line. Thanks + Antony Gelberg. (Closes: #319886) + + -- Eric Dorland Sat, 30 Jul 2005 02:11:03 -0400 + +mozilla-firefox (1.0.6-1) unstable; urgency=low + + * New upstream release. (Closes: #318672) + * debian/rules: Remove hack to use gcc 3.4 on amd64, since now we're all + on gcc 4.0. (Closes: #318684) + * debian/control: + - Remove gcc 3.4 build depends on amd64 + - Explicitly build depend on libxinerama-dev. + * gfx/src/gtk/nsScreenGtk.cpp: Patch from Loic Minier to fix + gdk_property_get warnings. + * widget/src/gtk2/mozdrawingarea.c: Patch from Loic Minier to fix + crashes under GTK 2.7. (Closes: #318903) + + -- Eric Dorland Wed, 20 Jul 2005 02:57:44 -0400 + +mozilla-firefox (1.0.99+deerpark-alpha2-1) experimental; urgency=low + + * New upstream alpha release. Be aware that you WILL have troubles with + debian packages for firefox extensions. + * Reverted patches that got incorporated upstream. + * content/events/src/nsEventStateManager.cpp: Some changes to the previous + patch to fit changes in API. + * debian/update-mozilla-firefox-chrome, + debian/update-mozilla-firefox-chrome.8, + debian/mozilla-firefox-dom-inspector.post(inst|rm), + debian/mozilla-firefox-gnome-support.post(inst|rm), + debian/theme/*, debian/inspector/*: Removed. + * debian/mozilla-firefox.postinst: Removed call to + update-mozilla-firefox-chrome. + * debian/mozilla-firefox-dom-inspector.install: Only install files from + /usr/lib/mozilla-firefox/extensions/inspector@mozilla.org + * debian/mozilla-firefox.dirs: Don't create /var/lib/mozilla-firefox/*, + /usr/lib/mozilla-firefox/extensions nor /usr/lib/mozilla-firefox/plugins. + * debian/mozilla-firefox.install: + - Don't install regxpchrome, chrome/pipnss.jar and chrome/help.jar which + don't exist anymore. + - Install manifest files in addition to jar files in chrome. + - Install classic.jar in the normal chrome directory (awaiting EM + modifications so that it can actually go back in the extensions + directory). + - Don't install debian/theme/00classic and debian/theme/Uninstall, + which got removed. + - Get the theme in the correct directory (it's not in + defaults/profile/extensions anymore). + - Install the reporter extension. + - Selectively install subdirectories of /usr/lib/mozilla-firefox/defaults, + since some of them are useless. + - Install the unixprint plugin. + * debian/mozilla-firefox.manpages: Removed manual page for + update-mozilla-firefox-chrome. + * debian/mozilla-firefox.links: Removed all links in + /var/lib/mozilla-firefox/. + * debian/rules: + - Enable freetype in the build, we'll see if deerpark is any better than + 1.0.x. + - Commented out OPTFLAGS set for some architectures. We will see if gcc + 4.0 is doing any better. + - Enabled SVG support. (Closes: #215990) + - Enabled some more extensions to fit extensions provided by upstream. + - Added needed --enable-application=browser to the ./configure call. + - Don't install update-mozilla-firefox-chrome. + - Don't create installed-chrome.txt. + - Don't remove installed-extensions.txt, it doesn't exist anyway. + - Don't move classic theme's install.rdf, it's already at the correct + place. + - Remove unneeded removals of preferences files which are not there + anymore. + * debian/mozilla-firefox.preinst: Clean-up old generated files (those in + /var/lib/mozilla-firefox and + /usr/lib/mozilla-firefox/extensions/*/uninstall/Uninstall. (Note that for + the latter, some packages do provide them, but they were overwritten by + update-mozilla-firefox-chrome. They have actually no use, and it is safe + to remove them. Extensions packages will eventually remove them anyway) + * debian/mozilla-firefox.prerm: Put -depth option of find before -type d. + + -- Mike Hommey Sat, 16 Jul 2005 10:18:40 +0200 + +mozilla-firefox (1.0.5-1) unstable; urgency=high + + * New upstream release, fixes security issues. (Closes: #318061) + * debian/rules: Disable freetype in the build for the time being. This + *might* break printing in some cases. + * gfx/idl/nsIFreeType2.idl, gfx/src/freetype/nsFreeType.cpp, + gfx/src/freetype/nsFreeType.h, gfx/src/ps/nsFontMetricsPS.cpp, + gfx/src/ps/nsFontMetricsPS.h, gfx/src/x11shared/nsFontFreeType.cpp, + gfx/src/x11shared/nsFontFreeType.h, + layout/svg/renderer/src/libart/nsSVGLibartGlyphMetricsFT.cpp: Patch + from bz#234035 to try to get building with the new freetype. (Closes: + #314243) + + -- Eric Dorland Sat, 16 Jul 2005 00:43:54 -0400 + +mozilla-firefox (1.0.4-3) unstable; urgency=low + + * debian/mozilla-firefox.desktop: Add Czech translation from Jan + Outrata. (Closes: #311376) + * xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ipf64.s, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_ipf64.cpp, + xpcom/reflect/xptcall/public/xptcstubsdecl.inc: Revert patch from + David Mosberger for 7+ args on ia64 that was added 1.0.3-2. + * xpcom/reflect/xptcall/src/md/unix/xptcstubs_ipf32.cpp, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ipf32.s, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ipf64.s, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_ipf64.cpp, + xpcom/reflect/xptcall/public/genstubs.pl: Better patch from bz#291378 + which has been accepted upstream for ia64 7+ args fix. + * xpcom/reflect/xptcall/public/xptcstubsdecl.inc: Call genstubs.pl to + regenerate this file. + * dom/src/base/nsGlobalWindow.cpp, + embedding/components/windowwatcher/src/nsWindowWatcher.cpp: Fix + injection spoofing, patch from bz#296850. Fixes CAN-2004-0718. + + -- Eric Dorland Thu, 9 Jun 2005 23:54:41 -0400 + +mozilla-firefox (1.0.4-2) unstable; urgency=critical + + * debian/control: Build-depend on libxft-dev not libxft2-dev to appease + finicky sparc buildd. + + -- Eric Dorland Mon, 16 May 2005 21:17:57 -0400 + +mozilla-firefox (1.0.4-1) unstable; urgency=critical + + * New upstream release. Fixes CAN-2005-1477 and CAN-2005-1476. (Closes: #308620) + * debian/update-mozilla-firefox-chrome.8: Patch from A Costa to fix the + spelling of maintenace. (Closes: #305968) + * debian/mozilla-firefox.desktop: Patch from Steinar H. Gunderson to add + a Norwegian translation. (Closes: #305983) + + -- Eric Dorland Thu, 12 May 2005 22:59:47 -0400 + +mozilla-firefox (1.0.3-2) unstable; urgency=high + + * browser/app/profile/firefox.js: Disable SSLv2 and 40-bit ciphers by + default. + * debian/mozilla-firefox.NEWS: Explain the SSL change. + * extensions/transformiix/source/base/Double.cpp: Patch from David + Mosberger-Tang (fixed up by me) to fix unaligned access on ia64 (and + perhaps other platforms). (Closes: #303518) + * xpcom/reflect/xptcall/public/xptcstubsdecl.inc, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ipf64.s, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_ipf64.cpp: Another patch + from David Mosberger-Tang to fix extension loading on ia64. (Closes: + #303515) + + -- Eric Dorland Thu, 21 Apr 2005 01:25:02 -0400 + +mozilla-firefox (1.0.3-1) unstable; urgency=low + + * New upstream release, fixes various security issues, so urgency high. + * js/src/fdlibm/fdlibm.h: Fix from David Mosberger to define ia64 as + little-endian arch (also added for mipsel). (Closes: #303438) + + -- Eric Dorland Sun, 17 Apr 2005 23:13:01 -0400 + +mozilla-firefox (1.0.2-3) unstable; urgency=high + + * gfx/src/freetype/nsFreeType.cpp, + netwerk/protocol/http/src/nsHttpConnectionMgr.cpp, + security/nss/lib/pki1/oiddata.h, security/nss/lib/pki1/pki1.h, + widget/src/gtk2/nsDragService.cpp: Fixes for gcc-4.0, + bz#289238. (Closes: #301485) + * js/src/jsstr.c: Fix for JS memory access security bug, patch from + bz#288688. (Closes: #302775) + + -- Eric Dorland Wed, 6 Apr 2005 01:36:11 -0400 + +mozilla-firefox (1.0.2-2) unstable; urgency=high + + * Last upload should of been marked urgency=high because of the security + fixes. + * debian/mozilla-firefox.postinst: Fix ridiculous typos. (Closes: + #300685) + * debian/mozilla-firefox-runner: Use pgrep to detect esd and arts + instead. Thanks Craig Small for the advice. (Closes: #302086) + + -- Eric Dorland Fri, 1 Apr 2005 01:18:18 -0500 + +mozilla-firefox (1.0.2-1) unstable; urgency=low + + * New upstream release. Fixes CAN-2005-0399, CAN-2005-0401, + CAN-2005-0402. (Closes: #301243) + * debian/control: Update suggest for xprint rename. (Closes: #300976) + * xpcom/reflect/xptcall/src/md/unix/{Makefile.in, + xptcinvoke_asm_parisc_linux.s, xptcstubs_asm_parisc_linux.s}: Apply + patch from Ivar (Contributed by Randolph Chung) to fix Firefox on + hppa. (Closes: #286038) + + -- Eric Dorland Fri, 25 Mar 2005 02:30:10 -0500 + +mozilla-firefox (1.0.1-3) unstable; urgency=low + + * widget/src/gtk2/nsGtkKeyUtils.cpp: Patch from bz#108170 to fix broken + keymap for Germans. (Closes: #299781) + * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: avoid + crashing when extension's install.rdf is broken. (Closes: #298796) + (MH) + * debian/mozilla-firefox.prerm: Remove + /usr/lib/mozilla-firefox/defaults/profile/extensions/Extensions.rdf on + uninstall. (Closes: #298636) + * debian/mozilla-firefox.postinst: Add little echo to tell people to + restart firefox after upgrades. + * debian/presubj: Add a note there about restarting firefox before + submitting bugs. + * debian/mozilla-firefox-runner: Properly quote $@ expansion. (Closes: + #300195) + * browser/locales/en-US/searchplugins/ + {yahoo.src,google.src,eBay.src,dictionary.src,creativecommons.src, + amazondotcom.src}: Set updateCheckDays to 0, which avoids duplicated + search entries in the menu. (Closes: #299006, #299813) + + -- Eric Dorland Sun, 20 Mar 2005 17:08:12 -0500 + +mozilla-firefox (1.0.1-2) unstable; urgency=high + + * Changes by Mike Hommey: + * Urgency: high due to RC bug fix. + * debian/update-mozilla-firefox-chrome: Re-initialize Extensions.rdf + inside the script instead of relying on mozilla-firefox's default + behaviour, which just fails when defaults/profile/extensions/ \ + Extensions.rdf doesn't exist (and it seems some people like to remove + files in /etc). (Closes: #294175) + + * Changes by Eric Dorland: + * debian/mozilla-firefox.menu: Capitalize "browsers". Thanks Gerfried + Fuchs. + * debian/mozilla-firefox-runner: Fix from Marc Horowitz to fix sound + device detection. (Closes: #297088) + * toolkit/content/widgets/tabbrowser.xml: Apply patch from bz#283063, to + fix a memory leak when closing tabs. (Closes: #296749) + * xpfe/global/resources/content/bindings/browser.xml, + xpfe/global/resources/content/bindings/tabbrowser.xml, + toolkit/content/widgets/browser.xml, + toolkit/content/widgets/tabbrowser.xml: Apply patches from bz#131456 + to fix various tab related memory leaks. (Closes: #280586) + * netwerk/protocol/http/src/nsHttpHandler.cpp: Patch from bz#265536 to + differentiate between AMD64 and i386. (Closes: #282592) + + -- Eric Dorland Sat, 5 Mar 2005 18:46:09 -0500 + +mozilla-firefox (1.0.1-1) unstable; urgency=high + + * New upstream release. (Closes: #296851) + - This release fixes the Secunia window injection bug, + CAN-2004-1156. (Closes: #293664) + + * Changes by Mike Hommey: + * debian/rules: Some clean-up. + * debian/control: Changed my maintainer address. + * debian/README.Debian: Add a note about automatic updates for + extensions. (Closes: #296761) + + * Changes by Eric Dorland: + * browser/app/profile/firefox.js: Remove disable IDN pref, it's the + default now anyway. + + -- Eric Dorland Tue, 1 Mar 2005 02:03:48 -0500 + +mozilla-firefox (1.0+dfsg.1-6) unstable; urgency=high + + * The "And I thought IE had security bugs!" release. + * toolkit/content/widgets/tabbrowser.xml, + xpfe/global/resources/content/bindings/tabbrowser.xml: Fix + "Firetabbing" vulnerability from bugzilla#280056, fixes + CAN-2005-0231. (Closes: #294415) + * modules/plugin/base/src/nsPluginHostImpl.cpp: Fix "Fireflashing" + vulnerability from bugzilla#280664, fixes CAN-2005-0232. (Also Closes: + #294415) + * build/unix/run-mozilla.sh: Patch from Javier Fernández-Sanguino Peña + to fix insecure temp file usage in run-mozilla.sh. (Closes: #294127) + * netwerk/base/src/nsStandardURL.cpp, netwerk/base/src/nsStandardURL.h: + Patch from bugzilla#261934 to make the network.enableIDN preference + work and again. + * browser/app/profile/firefox.js: Disable IDN by default. This doesn't + close #293975, but drops its severity. + * debian/README.Debian: Add warning and describe how to enable IDN. + + -- Eric Dorland Wed, 9 Feb 2005 22:56:17 -0500 + +mozilla-firefox (1.0+dfsg.1-5) unstable; urgency=low + + * debian/mozilla-firefox.desktop: Don't translate "Mozilla Firefox" into + French. + * browser/app/profile/firefox.js: Set mozilla.widget.raise-on-setfocus + to false to prevent unecessary window raising. (Closes: #292049) + * debian/rules: Don't compile statically on mips and mipsel, since it's + broken for now. + + -- Eric Dorland Sun, 6 Feb 2005 15:02:36 -0500 + +mozilla-firefox (1.0+dfsg.1-4) unstable; urgency=low + + * debian/mozilla-firefox.desktop: Add French translations from Jerome + Warnier. I will accept more, but closing this bug. (Closes: #292506) + * debian/README.Debian: Update the Emacs keybindings instructions. + (Closes: #291691) + * debian/mozilla-firefox.1: + - Remove -splash from the manpage, it has never worked. (Closes: + #287088) + - Add units to -height and -width description. (Closes: #285142) + + -- Eric Dorland Wed, 2 Feb 2005 01:42:53 -0500 + +mozilla-firefox (1.0+dfsg.1-3) experimental; urgency=low + + * debian/mozilla-firefox.desktop: Add %u to the exec line so that apps + know it can handle URLs. (Closes: #290132) + * debian/README.Debian: + - Improve button reversal instructions. Thanks Christian Mayrhuber + - Fix reference to ~/.firefox. + * debian/rules: Enable static building. This will build firefox as one + large binary (mostly) and should speed a few things up, especially + program load time. I'd like to hear about any speedup (or slow down) + you exprience. Porters, please build this for your arch to make sure + this doesn't break anything. + + -- Eric Dorland Thu, 20 Jan 2005 01:40:34 -0500 + +mozilla-firefox (1.0+dfsg.1-2) unstable; urgency=medium + + * debian/mozilla-firefox-gnome-support.postrm, + debian/mozilla-firefox-dom-inspector.postrm: Don't die if + update-mozilla-firefox-chrome dies. (Closes: #287355) + + -- Eric Dorland Sun, 9 Jan 2005 23:51:10 -0500 + +mozilla-firefox (1.0+dfsg.1-1) unstable; urgency=low + + * Not a new upstream release. + * other-licenses/branding/firefox, other-licenses/7zstub/firefox: Remove + these from the .orig.tar.gz, since they are not DFSG-free. We're not + using the files anyway, so out they go. (Not sure the 7zstub stuff is + non-free, but it's Windows only so no harm) + * debian/rules: + - Remove explicit low-optimization on alpha, since Falk + Hueffner claims it works. + - Move entire defaults/profile directory into /etc/mozilla-firefox, + rather than just the bookmarks.html. (Closes: #285538) + * debian/mozilla-firefox.links: Link entire defaults/profile now. + * debian/mozilla-firefox.preinst: Add upgrade code to remove old + defaults/profile to make way for new symlink. + * debian/mozilla-firefox.dirs: Just create etc/mozilla-firefox. + + -- Eric Dorland Sun, 19 Dec 2004 01:31:44 -0500 + +mozilla-firefox (1.0-5) unstable; urgency=medium + + * Changes by Mike Hommey: + * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Make the + extensions upgrade work again. (Closes: #282143) + * debian/rules: Better DEB_BUILD_OPTIONS handling, better debugging + build (DEB_BUILD_OPTIONS="nostrip debug") + * toolkit/mozapps/extensions/src/nsExtensionManager.js.in, + toolkit/mozapps/extensions/content/extensions.js: Allow users to + disable globally installed extensions. + + * Changes by Eric Dorland: + * debian/rules: Remove explicit low-optimization on sparc. Apparently + there was an issue for a number of arches that required lower + optimization settings, but it is now resolved. So porters, please + check -O2 on arm, alpha, powerpc and ia64 and let me know if it's + safe. Thanks David S. Miller. (Closes: #284533) + + -- Eric Dorland Tue, 7 Dec 2004 01:06:48 -0500 + +mozilla-firefox (1.0-4) unstable; urgency=medium + + * debian/control: Make mozilla-firefox-gnome-support and xprt-xprintorg + Suggests, no Recommends after a look at policy. (Closes: #282432) + * debian/README.Debian: + - Refer to .mozilla/firefox, not .firefox. + - Explain how to reenable emacs style keybindings. (Closes: #282321) + + -- Eric Dorland Sat, 27 Nov 2004 20:40:10 -0500 + +mozilla-firefox (1.0-3) unstable; urgency=low + + * Changes by Mike Hommey + * The "becoming more and more an iceweasel" release. + * debian/firefox.js: + + Enable firefox's internal locale autodetection. + + Disable default browser question at startup. (Closes: #280752) + * debian/mozilla-firefox-runner: Removed our locale autodetection. + That means now locales installed in user profiles are automatically + used, and that there is no need for /var/lib/mozilla-firefox/locales.d + anymore. + * debian/mozilla-firefox.dirs: Removed creation of + /var/lib/mozilla-firefox/locales.d. + * debian/rules: Removed creation of the locale file in + /var/lib/mozilla-firefox/locales.d. + * debian/presubj: Put some more recent information. + * htmlparser/src/nsParser.cpp: Applied patch from bz#57717 so that empty + html files don't get when viewing source. + * browser/base/content/aboutDialog.css: increase the User Agent element + height as in bz#238137 (but up to MacOSX's height) to show the full User + Agent string. + * xpcom/io/nsAppDirectoryServiceDefs.h, + xpcom/io/nsAppFileLocationProvider.cpp, + xpfe/components/search/src/nsInternetSearchService.cpp: Applied patch from + bz#123315 so that Internet search services in user profiles are supported. + (Closes: #219053) + * debian/mozilla-firefox-runner: + + Remove compatibility.ini only if it is older than + /usr/lib/mozilla-firefox/components.ini. That way, we only rebuild it + after an update-mozilla-firefox-chrome. + + Detect if we're being run through sudo without the -H option, in which + case we force setting of $HOME. (Closes: #218156) + * browser/app/profile/firefox.js: Sync'ed with debian/firefox.js. + * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: + + Removed some error messages that get there because firefox is trying to + write in the /usr/lib/mozilla-firefox directory as a user. They are + useless and lead users to think something is going wrong while it's the + (stupid but) normal way firefox works. + + Avoid creation of directories when attempting to read files, that + throwed uncaught exceptions breaking some stuff in several different + ways when extensions don't follow the new scheme for extensions. + + Avoid copying stuff from + /usr/lib/mozilla-firefox/defaults/profile/extensions/ to + /usr/lib/mozilla-firefox/extensions/, that's the *very* old way of + installing extensions, which, since the old scheme has been thrown away, + won't work anyway, if any extension provides files out there. + + CheckForMismatches: Avoid to disable already disabled global extensions, + and don't propose to upgrade the locked extensions. That fixes a + never-ending loop occuring when running firefox for the first time in a + user account, while some global extensions are expired. + (Closes: #278722, #281537) + * debian/mozilla-firefox.prerm, debian/mozilla-firefox.preinst: Moved + removal of links to /usr/lib/mozilla-firefox/defaults/profile/extensions/ + sitting in /usr/lib/mozilla-firefox/extensions/, if any remaining, from + prerm to preinst. We remove them once and for all, they won't be created + by us anymore. + * debian/update-mozilla-firefox-chrome: + + Removed support for extensions in + /usr/lib/mozilla-firefox/defaults/profile/extensions/. + + Removed some clean-up that had been introduced to help the Extensions + Manager not to die, and which, actually, did not work out quite so well. + Anyways, with the changes this time, the EM is supposed to support much + more problems than ever before (as usual ;) ) so we don't need that + anymore. + + Avoid stupid mv error messages when firefox-bin -register fails (which + is not supposed to happen, but you're never too careful) + * debian/update-mozilla-firefox-chrome, debian/mozilla-firefox.preinst: + Move removal of some very old stuff to preinst, to do it once and for all + instead of doing it every time we run update-mozilla-firefox-chrome. + * netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp: Applied patch from + bz#124561 to get a prompt for username/password in case anonymous login + fails. + * debian/mozilla-firefox-runner: + + Added check for more arguments so that the url in the command line get + detected more accurately. + + When a file name is given on the command line, prepend "file://" and + change spaces into %20. (Closes: #281800) + + * Changes by Eric Dorland + * debian/mozilla-firefox.prerm: Patch from Philipp Weis to fix order of + find arguments. (Closes: #280852) + * debian/mozilla-firefox.desktop: Support new mime type handler in Gnome + 2.8. (Closes: #281274) (MH: I added some more myme-types) + * debian/mozilla-firefox.postinst: Run update-desktop-database if it + exists. + * widget/src/gtk/nsWidget.cpp: We don't use gtk anymore, might as well + revert these patches. Thanks Stephane Despret. + + -- Eric Dorland Thu, 18 Nov 2004 22:16:28 -0500 + +mozilla-firefox (1.0-2) unstable; urgency=low + + * Changes by Mike Hommey + * The "don't do too much on the same day, it's bad for health" release. + * debian/firefox.js: Re-activated the extensions update service, and + removed the update url. + * browser/app/profile/firefox.js: Sync'ed with debian/firefox.js. + * debian/mozilla-firefox-dom-inspector.preinst: Removed old inspector.js + file. + * toolkit/mozapps/extensions/src/nsExtensionManager.js.in, + toolkit/mozapps/extensions/content/extensions.js: Disabled possibility + to update locked extensions and themes. Locked extensions being the + ones installed by the packaging system, they should be updated through + that. + * toolkit/mozapps/update/src/nsUpdateService.js.in: Disabled application + update functionnality. Firefox should be updated through the packaging + system. + * browser/components/prefwindow/content/pref-advanced.xul: Removed the + preferences panel item to activate application update, since it is + totally disabled. + * debian/mozilla-firefox-runner: Remove compatibility.ini instead of + compreg.dat. (Eric: This will cause a rebuild of the compreg.dat) + + * Changes by Eric Dorland: + * debian/mozilla-firefox.NEWS: Fix typos. + * README.Debian: + - Add note about application update being completely disabled. + - Fix path to XUL.mfsal + + -- Eric Dorland Wed, 10 Nov 2004 22:56:22 -0500 + +mozilla-firefox (1.0-1) unstable; urgency=medium + + * New upstream release (Closes: #280449) + + * Changes by Mike Hommey: + * netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp: Apply new patch + #164795 from bz#266835 + some tweaks as previously. This might lead to + encoding problems with the password, but it is supposed to be ASCII + anyway. + * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Reworked the + previous patches so that the Extensions Manager shows extensions that + have been disabled due to version mismatch, and added a workaround so + that components registration works correctly. + * debian/update-mozilla-firefox-chrome: Removed part that is useless due + to last changes in the Extensions Manager. + * Make the inspector a real extension again: + - debian/inspector/00dom-inspector: File for + /var/lib/mozilla-firefox/extensions.d. + - debian/inspector/Uninstall: Uninstall file needed in extension + directory. + - debian/inspector/install.rdf: install.rdf taken from older versions, + and adapted to newer versions, adding registered chrome. + - debian/mozilla-firefox-dom-inspector.dirs: Removed. Everything will + be created by dh_install. + - debian/mozilla-firefox-dom-inspector.install: install + debian/inspector.rdf and most inspector files in the right place in + /usr/lib/mozilla-firefox/extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9} + and /var/lib/mozilla-firefox + * Make the classic theme a real extension, even though it's still in + the main package: + - debian/theme/00classic: File for + /var/lib/mozilla-firefox/extensions.d. + - debian/theme/Uninstall: Uninstall file needed in extension + directory. + - debian/mozilla-firefox.install: Install all files in the right + place in + /usr/lib/mozilla-firefox/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd} + - debian/mozilla-firefox.dirs: Removed creation of + /usr/lib/mozilla-firefox/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome, + it will be done by dh_install. + - browser/app/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf.in: + Added chrome to be registered. + * Removed support for /var/lib/mozilla-firefox/chrome.d: + - debian/mozilla-firefox.dirs: Removed creation of the directory. + - debian/rules: Removed creation of files there, and put the + installed-chrome.txt, excluding inspector and classic theme stuff, + directly in /usr/lib/mozilla-firefox/chrome. + - debian/update-mozilla-firefox-chrome: Removed all + /var/lib/mozilla-firefox/chrome.d related stuff. + - debian/mozilla-firefox.links: Removed installed-chrome.txt link. + - toolkit/mozapps/extensions/src/nsExtensionManager.js.in: disable + extensions that fail to install chrome. + * debian/mozilla-firefox-runner: Remove user profile compreg.dat at + launch time. + * Moved some files in /var/lib/mozilla-firefox: + - debian/mozilla-firefox.links: Add a symlink for Extensions.rdf + and components.ini, from /usr to /var. + - debian/mozilla-firefox.prerm: Don't remove files we don't + provide and remove files at their new locations. + - debian/mozilla-firefox.preinst: Remove + /var/lib/mozilla-firefox/installed-chrome.txt. + - debian/update-mozilla-firefox-chrome: Create links for + Extensions.rdf and components.ini after register call, and remove + components.ini before. + * Clean-up in files generated by update-mozilla-firefox-chrome: + - debian/mozilla-firefox.links: Put all the links generated by + update-mozilla-firefox-chrome into the package. + - debian/mozilla-firefox.prerm: Remove all /var files generated + in the remove target, and changed the way we clean-up + /var/lib/mozilla-firefox. + * debian/mozilla-firefox.install: Removed chromelist.txt. + * Add support for extensions preferences: + - debian/update-mozilla-firefox-chrome: Handle + /usr/lib/mozilla-firefox/defaults.ini file. + - debian/mozilla-firefox.links: Add a symlink to /var for + defaults.ini. + - toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Added + defaults registration in -register command. + - mozilla-firefox-dom-inspector.install: Move inspector.js into + the appropriate extension specific directory. + * Move preferences back into /usr: + - debian/rules: Don't move the prefs into + /etc/mozilla-firefox/pref, and put the vendor thing into /usr + as well, and remove firefox-l10.js file. + - debian/mozilla-firefox.preinst: remove old prefs in /etc and + old symlink /usr/lib/mozilla-firefox/defaults/pref. + - debian/firefox.js: new Debian default preferences file. + - debian/mozilla-firefox.install: install firefox.js in + /etc/mozilla-firefox/pref. + - debian/mozilla-firefox.links: rename + /usr/lib/mozilla-firefox/defaults/pref symlink to + /usr/lib/mozilla-firefox/defaults/syspref. + - toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Added + a hook so that defaults/syspref gets registered in defaults.ini + after all other extensions preferences. + * debian/mozilla-firefox.preinst: only clean-up stuff if we are + upgrading from a version known to still have the files. Added some + more clean-up. + * debian/mozilla-firefox.install: Removed useless init.d. + * modules/libpref/src/init/all.js: Fixed all chrome URLs which refered to + mozilla stuff. + * debian/update-mozilla-firefox-chrome: Remove some more files before running + firefox-bin -register. + + * Changes by Eric Dorland: + * debian/mozilla-firefox.NEWS: Add warning about broken extension and + locale packages with this release. + * debian/mozilla-firefox-runner: Comment out warning about xprint, + xprint isn't necessarily needed for printing since postscript was + reenabled. (Closes: #279858) + + -- Eric Dorland Wed, 10 Nov 2004 00:33:44 -0500 + +mozilla-firefox (0.99+1.0RC1-4) unstable; urgency=low + + * debian/mozilla-firefox-runner: + - Fixed to run properly with dash. (Closes: #279549). + - Fixed indentation. + - Added a basic debugger support. + * debian/mozilla-firefox.1: Added information about debugger options. + * debian/rules: Added a debug option to DEB_BUILD_OPTIONS. If you want to + build a fully gdb'able package, use DEB_BUILD_OPTIONS="noopt nostrip + debug" + * netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp: Apply new patch from + bz#266835. + - Further change this patch to use Append rather than AppendLiteral, + which doesn't seem to exist. (ED) + + -- Mike Hommey Thu, 4 Nov 2004 22:01:51 +0900 + +mozilla-firefox (0.99+1.0RC1-3) unstable; urgency=low + + * netwerk/protocol/ftp/src/nsFtpConnectionThread.cpp: Apply patch from + bz#266835 to fix anonymous user password issue. (Closes: #226784) + * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: (MH) + - Fully apply previous patches, which for some reason left a spurious code + line which made the extensions manager not like expired extensions + anymore. (Closes: #279140) + - Enhanced extensions manager so that the behaviour described in + https://bugzilla.mozilla.org/show_bug.cgi?id=247846#c14 *actually* + works. Extensions packagers are invited to move their chrome files + accordingly, and remove /var/lib/mozilla-firefox/chrome.d files so that + extensions chrome don't get registered when they are forced-disable due + to version mismatch or some other reason. + * debian/mozilla-firefox-runner: + - Fix some thinkos. (MH) + - Fix for loading files from the command line. (Closes: #279018) (MH) + - Removed setting --display from $DISPLAY, let it get it from the + environment, but pass --display if it is set. (Mike, + I'm worried this will screw up some session + managers, let me know what you think, we can revert it) + - Removed FIREFOX_OPEN_IN stuff, so that firefox now obeys to "open + links from other applications in" setting. (Closes: #279073) (MH) + - Enhanced command line parsing, and drop empty arguments. + (Closes: #279138) (MH) + - No need for a find to look for XUL.mfasl, we already have its + location from the path list taken from profiles.ini. (MH) + - Better detection of dsp wrapper, when FIREFOX_DSP=auto. + (Closes: #254611) (MH) + - Correctly open local files even when firefox was not previously + running. (Closes: #279018) (MH) + * debian/mozilla-firefox.1: (MH) + - Removed references to FIREFOX_OPEN_IN. + - Added the -safe-mode option. + * debian/mozilla-firefoxrc: Removed FIREFOX_OPEN_IN. (MH) + + -- Eric Dorland Tue, 2 Nov 2004 00:46:28 -0500 + +mozilla-firefox (0.99+1.0RC1-2) unstable; urgency=medium + + * browser/app/profile/firefox.js: Disable browser update checking by + default. + * debian/mozilla-firefox-runner: Apply patch from Aurelien Jarno to fix + variable name typo. (Closes: #278844) + + -- Eric Dorland Fri, 29 Oct 2004 23:50:59 -0400 + +mozilla-firefox (0.99+1.0RC1-1) unstable; urgency=medium + + * New upstream release. + * layout/xul/base/src/nsImageBoxFrame.{cpp,h}: Remove some conflicts + from a previous patch. + + -- Eric Dorland Thu, 28 Oct 2004 23:33:46 -0400 + +mozilla-firefox (0.10.1+1.0PR-5) unstable; urgency=low + + * debian/rules: (MH) + - Use upstream extensions set. This will eventually get a + correct help menu and fix some yet undiscovered UI issues. + (Closes: #257946) + - Added support for DEB_BUILD_OPTIONS=noopt. + - Changed OPTFLAGS assignment. + - Remove whitespace characters in version number for UserAgent + branding. + - Install mozilla-firefox-runner into /usr/lib/mozilla-firefox/firefox + (Closes: #278477) + * debian/mozilla-firefox.links: (MH) + - Link /usr/bin/firefox and /usr/bin/mozilla-firefox to + /usr/lib/mozilla-firefox/firefox. + - Removed obsolete profile/US links. + * debian/mozilla-firefox.dirs: Create /etc/mozilla/profile instead of + /etc/mozilla/profile/US. (MH) + * toolkit/xre/nsAppRunner.cpp: Fix crash in nsCmdLineService::Initialize + when argc is changed by gtk (when treating gtk specific arguments) + (MH) + * debian/mozilla-firefox-runner (Changes by MH): + - Removed workaround for bug #122990. First, xmlterm is not an activated + extension, and secondly, if it still requires the TERM environment + variable, it is the user's duty to set it to whatever he wants, not + firefox's start script's. + - Removed the ulimit -c setting. First, it is set by default to 0 on a + newly installed debian, and secondly, it is user's choice to set it or + not if he needs to get core files. + - Removed unused shell variables. + - Removed unsetting AUDIODEV variable. If it still crashes, it does belong + to some other code than firefox. The AUDIODEV environment variable is + used nowhere in firefox code: + http://lxr.mozilla.org/aviarybranch/search?string=AUDIODEV + Note that there is a "A crash which occurred when AUDIODEV doesn't + contain "/" was fixed." log message in esound version 0.2.33 changes and + that the bug may have belonged there. + - Replaced ${HOME}/.mozilla-firefoxrc file by a ${HOME}/.mozilla/firefox/rc + file. The former is still supported, though, but will bring a warning + message. If both are present, only the latter is taken into account. + - Changed the way system and user FIREFOX_DSP and FIREFOX_OPEN_IN + variables are handled. First, use system values defined in + /etc/mozilla-firefox/mozilla-firefoxrc, then override with + ${HOME}/.mozilla/firefox/rc and then with runtime environment variables. + - Don't die when DISPLAY is not set. Display can be passed by --display + option, and if not set and needed (some options don't require it), + firefox will complain. + - Some shell code simplifications by using some coreutils. + - Added better command line parsing. + - Added verbosity mode. + - Removed setting of FONTCONFIG_PATH, /usr/lib/mozilla-firefox/res/Xft + doesn't exist + - Factorized localization detection. + * debian/mozilla-firefox.1 (MH): + - Made some clean-up between dashes and hyphens. + - Removed obsolete options and added new ones. + - Added informations about some debian specific stuff. + * debian/update-mozilla-firefox-chrome: Changed the way we move files to + /var/lib/mozilla-firefox. It will avoid creating files with a * in their + name whenever registration failed. (MH) + * debian/README.Debian: Update java instructions, tell them to just use + java-package. + + -- Eric Dorland Thu, 28 Oct 2004 21:30:40 -0400 + +mozilla-firefox (0.10.1+1.0PR-4) unstable; urgency=medium + + * This release mostly courtesy Mike Hommey. + * layout/src/xul/base/src/nsImageBoxFrame.*: Backported patch from + bz#255372. (Closes: #278046) + * toolkit/mozapps/extensions/src/nsExtensionManager.js.in: Force locking + globally installed extensions, that will prevent extensions packages + files to be unexpectedly removed by firefox. + * debian/control: Add Mike Hommey as an Uploader. + * debian/mozilla-firefox.install: Removed content-packs.jar which is + mozilla-browser specific. + * debian/mozilla-firefox.dirs: + - Remove leading /'s. + - Create + /usr/lib/mozilla-firefox/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd} + /chrome directory so that preview is shown in the Themes Manager. Yes, + this is stupid, but it is the way firefox wants it (and it's not even + created by make install, nor in the official binary tarball. It is + only created at run time, but you know what ? under *nix, a normal + user can't create that directory) (Closes: #276404) + * debian/rules: Add a /etc/mozilla-firefox/pref/vendor.js file adding + the debian package version to the UserAgent. (Closes: #268654) + * debian/README.Debian: Update java instructions. I'd love some more + definitive pointers. (Closes: #277983) + + -- Eric Dorland Tue, 26 Oct 2004 00:11:48 -0400 + +mozilla-firefox (0.10.1+1.0PR-3) experimental; urgency=low + + * debian/control: + - Rename the mozilla-firefox-gnome-vfs package + mozilla-firefox-gnome-support since it does more than vfs. No + need for Replaces or anything, since it never actually made it to + the archive. + - Remove strict build dependencies on g++ and binutils, since the + fixed versions have hit sarge. + - Remove hppa build depends, since gcc has also been fixed there. + - Build-depend on libgnome2-dev and libgconf2-dev to build in more + gnome support. + - Have mozilla-firefox recommend it's gnome support. + * debian/rules: + - Remove hppa CC redefinitions. + - Exclude *gnome* not just *gnomevfs*. + - dh_install for gnome-support. + * debian/mozilla-firefox-gnome-vfs.*: Rename to + mozilla-firefox-gnome-support.*. + * debian/mozilla-firefox-gnome-support.install: Grab *gnome*, not just + *gnomevfs*. + + -- Eric Dorland Thu, 21 Oct 2004 23:04:53 -0400 + +mozilla-firefox (0.10.1+1.0PR-2) experimental; urgency=low + + * debian/mozilla-firefox-runner: + - Patch from Sam Morris to handle cleanup of directories with + unusual names. + - Fix return value check, patch from rgselk. (Closes: #269690) + * debian/mozilla-firefox.1: List full path to firefox-bin. (Closes: + #275563) + * debian/rules: + - --with-gssapi=/usr, enable Negotiate extension. (Closes: + #274258) + - Enable gnomevfs support, + * debian/control: + - Build-depend on libkrb5-dev. + - Build-depend on libgnomevfs2-dev. + - New gnomevfs package, based on work by Mike Hommey. (Closes: + #262062) + * debian/mozilla-firefox-gnome-vfs.post{inst,rm}: Added, same as + corresponding files from mozilla-firefox-dom-inspector. + * debian/mozilla-firefox-gnome-vfs.install: Install gnomevfs components. + * browser/app/profile/firefox.js: Set + network.negotiate-auth.trusted-uris to https:// to enable the + negotiate extension over secure links. + * config/rules.mk: Tweak patch from Thiemo Seufer to include svg_doc in + non-optimization. (Closes: #273353) + + -- Eric Dorland Sun, 17 Oct 2004 21:25:08 -0400 + +mozilla-firefox (0.10.1+1.0PR-1) experimental; urgency=critical + + * New upstream release, fixes security issue bz#259708. (Closes: + #274493) + + -- Eric Dorland Sun, 3 Oct 2004 03:32:43 -0400 + +mozilla-firefox (0.10+1.0PR-1) experimental; urgency=low + + * New upstream release. (Closes: #273700, #267003) + * toolkit/mozapps/extensions/src/nsExtensionManager.js.in, + netwerk/dns/src/nsIDNService.cpp, + modules/libpr0n/decoders/bmp/nsBMPDecoder.cpp, + gfx/src/windows/nsImageWin.cpp, gfx/src/shared/gfxImageFrame.cpp, + browser/app/profile/firefox.js: Resolve conflicts between my tree and + upstream. + * browser/app/Makefile.in: Fix $(DESTDIR) variable. + * accessible/src/atk/nsAccessibleWrap.cpp, + accessible/src/atk/nsAccessibleWrap.h: Apply patch from bugzilla for + alpha fix that's more likely to make it into CVS. + * debian/update-mozilla-firefox-chrome: Patch from Mike Hommey to make + update-mozilla-firefox-chrome more verbose on -v. + * debian/rules: + - Remove typeaheadfind for new find toolbar to work. (Mike Hommey) + (Closes: #267170) + - Changes to reflect new upstream files. + * debian/control: + - Remove build-depend on libcairo-dev. + - Build depend on libxt-dev, seems to be necessary now. (Closes: + #274311) + * debian/docs: Removed, as browser/README.html disappeared. (Mike Hommey) + * debian/mozilla-firefox.dirs: + - Changes to reflect new upstream files. + - Removed obsolete libnullplugin.so. + * debian/mozilla-firefox.install: + - Remove .jar's that aren't there anymore. + - Removed obsolete libnullplugin.so. + * debian/mozilla-firefox-dom-inspector.dirs, + debian/mozilla-firefox-dom-inspector.install, debian/rules: Upstream + doesn't consider DOM Inspector as a real extension, and do not provide + the appropriate files to make it appear in the extensions + manager. Removed all the extension related stuff in the package. (Mike + Hommey) + * other-licenses/libart_lgpl: Removed, was for SVG, no longer needed. + * modules/plugin/samples/default/unix/*: Reverted debian specific + changes, we don't want them in the diff since libnullplugin won't get + installed. + + -- Eric Dorland Fri, 1 Oct 2004 18:50:46 -0400 + +mozilla-firefox (0.9.3-6) unstable; urgency=high + + * gfx/src/gtk/fontEncoding.properties: Uncomment symbol fonts. (Closes: + #272927) + * debian/control: Build-depend on binutils (>= 2.15-4) but only on mips + and mipsel. (Closes: #273353) + * configure.in, configure, rules.mk: Patch from Thiemo Seufer to + increase stability and performance on mips. (Closes: #272159) + * debian/mozilla-firefox-runner: Detect failure of ping() + better. (Closes: #267393) + * layout/html/document/src/html.css: Testing fix for xprint problems. + + -- Eric Dorland Mon, 27 Sep 2004 17:07:37 -0400 + +mozilla-firefox (0.9.3-5) unstable; urgency=high + + * debian/update-mozilla-firefox-chrome: Apply another patch form Mike + Hommey to fix a few more issues in the script. (Closes: #271480) + * Fixes to Secunia security bugs, ported from bugzilla: + (Closes: #271888) + - browser/base/content/browser.js, + xpfe/communicator/resources/content/contentAreaDD.js: Fix for + drag and drop exploit, bz#250862. + - caps/include/nsScriptSecurityManager.h, caps/src/caps.properties, + caps/src/nsScriptSecurityManager.cpp: Fix for enablePrivilege + exploit, bz#253942. + - gfx/src/shared/gfxImageFrame.cpp, gfx/src/windows/nsImageWin.cpp, + modules/libpr0n/decoders/bmp/nsBMPDecoder.cpp: Fix for various + overflows in the BMP code, bz#255067. + - netwerk/dns/src/nsIDNService.cpp: Fix for bug in non-ASCII + characters in domain names, bz#256316 + - content/xbl/src/nsXBLPrototypeHandler.cpp: Clipboard injection + fix, bz#257523. + + -- Eric Dorland Thu, 16 Sep 2004 20:06:47 -0400 + +mozilla-firefox (0.9.3-4) unstable; urgency=high + + * Urgency high, go into testing dammit! + * Apply patch from Mike Hommey as -3.1, which wasn't actually + released. See below. (Closes: #271480) + * debian/rules: Patch from Matthew Mueller to fix underquoted + argument. (Closes: #271432) + * debian/control: Build depend on binutils (>= 2.15-3) with fixed mips + support. We still need a fixed gcc. + + -- Eric Dorland Mon, 13 Sep 2004 20:41:27 -0400 + +mozilla-firefox (0.9.3-3.1) unstable; urgency=low + + * debian/rules: removed + /usr/lib/mozilla-firefox/defaults/profile/extensions/installed-extensions.txt + * debian/update-mozilla-firefox-chrome: + + Added a "verbose" mode. + + Added warning messages (only shown in verbose mode) about some + extensions specific issues. This is intended to be useful for extensions + maintainers. + + Check if the installed-extensions.txt file disappears, which tells if the + mozilla-firefox -register went ok. + * debian/update-mozilla-firefox-chrome.8: + + Fixed typos. + + Added reference to the -v option for the verbose mode. + * debian/mozilla-firefox-runner: enhanced the profile directory check. It + didn't work if the path indicated in the profiles.ini was not absolute. + + -- Mike Hommey Mon, 13 Sep 2004 20:31:21 +0900 + +mozilla-firefox (0.9.3-3) unstable; urgency=high + + * Acknowlege NMU from Mike Hommey. He did a fantastic job in porting a + large amount of fixes from upstream CVS. I owe him several large + beverages of his choice. (Closes: #259046, #259836) + * Port all of Mike's changes to my local CVS. + * debian/mozilla-firefox-runner: + - Pass command-line arguments to get_locale so they can actually + be used. (Closes: #240058) + - Apply patch from Mike Hommey to use the profiles.ini to find the + path to the profile to clean XUL.mfasl. (Closes: #267326) + * debian/update-mozilla-firefox-chrome: Patch from Mike Hommey to fix + some bashisms introduced by his NMU. + * xpcom/reflect/xptcall/src/md/unix/Makefile.in, + xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips.s, + xpcom/reflect/xptcall/src/md/unix/xptcinvoke_mips.cpp, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s.m4, + xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s: Patch from + Thiemo Seufer to fix mips. This requires patches to gcc and binutils + to work and fully close #270621. + + -- Eric Dorland Wed, 8 Sep 2004 21:13:35 -0400 + +mozilla-firefox (0.9.3-2.2) unstable; urgency=high + + * The "never edit the diff file unless you're sure nothing will be + missing" release. + * debian/mozilla-firefox.prerm: restore the uncut version. + * debian/control, debian/rules: Use gcc-3.2 to build on hppa, because of + toolchain bug #254549. + + -- Mike Hommey Mon, 23 Aug 2004 19:45:54 +0900 + +mozilla-firefox (0.9.3-2.1) unstable; urgency=high + + * Non Maintainer Upload for RC Fixes. + * Applied changes to toolkit/mozapps/extensions/src/nsExtensionManager.js.in + and toolkit/mozapps/extensions/locale/extensions.properties to solve some + issues with extensions management. (taken from CVS) + * Applied other changes to + toolkit/mozapps/extensions/src/nsExtensionManager.js.in, + toolkit/mozapps/extensions/public/nsIExtensionManager.idl and + mozilla/toolkit/xre/nsAppRunner.cpp to be able to use -register + instead of -list-global-items for extensions/components/chrome + registration through update-mozilla-firefox-chrome, thus not needing + Xvfb anymore (-register option doesn't require a X server). + (taken from CVS) + * Applied some more changes to + toolkit/mozapps/extensions/src/nsExtensionManager.js.in in order to + avoir overlayinfo deletion during extensions registration process. + (taken from CVS) + * Final changes to toolkit/mozapps/extensions/src/nsExtensionManager.js.in + to avoid registering out of date extensions so that firefox doesn't enter + a loop at startup when no profile was found, and to only write in the + installed-extensions-processed.txt file the list of actually installed + extensions. Note that for packaged extensions installing their files + directly into the chrome or components directories, that only means they + won't appear in the Extensions Manager. They will still be available in + the GUI. + * All these fixes improve the Extensions Manager. Closes: #259046. + * accessible/src/atk/nsAccessibleWrap.cpp, + accessible/src/atk/nsAccessibleWrap.h: fixed 32-bit abuse of gobject + (Steve Langasek). Closes: #259836. + * debian/control: Removed dependency upon xvfb. + * debian/update-mozilla-firefox-chrome: + + Removed use of Xvfb. + + Removed creation of a root default profile, but kept the fake home + hack to avoid creation of a .mozilla directory in root's home. + + Changed extensions handling so that the overall process is cleaner. + Extensions packages will have to move extensions {uid} directories + to /usr/lib/mozilla-firefox/extensions/, while the current location + is still supported for compatibility purpose (but is strongly not + recommended). + + Removed use of regxpcom and regchrome, since what they both do is + done by firefox-bin -register. + * debian/rules: force GnomeVFS support to be disabled. (Josselin Mouette) + * debian/README.Debian: + + Added a note about potential problems with packaged "old" extensions. + + Added a note about how to manually disable packaged extensions in user + profile. + + Removed some old notes that don't apply anymore. + * debian/mozilla-firefox-dom-inspector.install, debian/rules: Move + extensions files to /usr/lib/mozilla-firefox/extensions/ instead of + /usr/lib/mozilla-firefox/defaults/profile/extensions/. + * debian/mozilla-firefox.links: Move installed-extensions.txt symlink + from /usr/lib/mozilla-firefox/defaults/profile/extensions/ to + /usr/lib/mozilla-firefox/extensions/. + * debian/mozilla-firefox.prerm: More cleanup on removal of package. + + -- Mike Hommey Sun, 22 Aug 2004 21:43:47 +0900 + +mozilla-firefox (0.9.3-2) unstable; urgency=low + + * xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s.m4: Comment out + NARGSAVE, like I did in 0.9.1-7, should fully fix #262571. + * debian/mozilla-firefox.preinst: Remove brace expansion + bashism. (Closes: #264200) + * debian/control: Depend on debianutils (>= 1.16) since we use mktemp + -d. (Closes: #263958) + * debian/mozilla-firefox-runner: Make -contentLocale COUNTRY, not + lang-COUNTRY. (Closes: #263940) + + -- Eric Dorland Sun, 8 Aug 2004 23:41:02 -0400 + +mozilla-firefox (0.9.3-1) unstable; urgency=low + + * New upstream release. (Closes: #263193) + * debian/update-mozilla-firefox-chrome.8: Add manpage from Mark Suter + for update-mozilla-firefox-chrome.8. (Closes: #263149) + * debian/mozilla-firefox.manpages: Add update-mozilla-firefox-chrome.8. + * debian/control: Add build-deps on gcc-3.4 for amd64. (Closes: #262679) + + -- Eric Dorland Wed, 4 Aug 2004 20:21:22 -0400 + +mozilla-firefox (0.9.1-7) unstable; urgency=low + + * debian/mozilla-firefox-runner: + - Reintroduce check for command-line arguments (I broke this last + release). (Closes: #262692, #262462, #262537, #262588, #262727) + - Allow overriding of -contentLocale and -UILocale. (Closes: + #240058) + * xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips.s: Comment out + NARGSAVE reassignment, it is defined elsewhere. (Closes: #262571) + * debian/rules: Force amd64 to build with gcc 3.4. (Closes: #262679) + + -- Eric Dorland Mon, 2 Aug 2004 10:16:46 -0400 + +mozilla-firefox (0.9.1-6) unstable; urgency=low + + * widget/src/gtk2/keysym2ucs.c: Patch from Eugeniy Meshcheryakov to + allow mozilla firefox to enter a ghe with upturn. (Closes: #261543) + * debian/mozilla-firefox-runner: + - Remove some mail and composer cruft. + - Add warning if DISPLAY is not set. (Closes: #261465) + + -- Eric Dorland Thu, 29 Jul 2004 22:49:59 -0400 + +mozilla-firefox (0.9.1-5) unstable; urgency=low + + * debian/control: Goodbye mozilla-firebird transition package. + * debian/mozilla-firefox-runner: Add -a firefox flag when running + firefox-bin. (Closes: #259237) + * debian/mozilla-firefox.desktop: Add GenericName field. + * debian/update-mozilla-firefox-chrome: Fix quoting problem with + {*}. (Closes: #257243) + * debian/rules: + - Re-enable postscript printing support, since the security + issues turned out to be bogus. (Closes: #257628) + - Disable SVG support, it's still too broken to be usable. + (Closes: #259544) + + -- Eric Dorland Sun, 18 Jul 2004 20:09:14 -0400 + +mozilla-firefox (0.9.1-4) unstable; urgency=low + + * The "Let's try unstable" release. There are still issues, but there + are issues with 0.8 as well, so no more point in waiting. + * debian/update-mozilla-firefox-chrome: + - Copy over empty Extensions.rdf file on update. (Closes: #257243) + - Increase sleep to 15 seconds, hopefully this will work on most + people's machines. + * My apologies to Mike Hommey for mispelling his name in last release. + + -- Eric Dorland Sun, 11 Jul 2004 23:51:24 -0400 + +mozilla-firefox (0.9.1-3) experimental; urgency=low + + * Ok, I was wrong, we're still in experimental. I think we need to fix a + few more issues before getting this in unstable, like #257258, and + make sure the hacky extensions mechanism is more bullet-proof. + * debian/rules: --disable-installer, since we don't use it. + * debian/update-mozilla-firefox-chrome: + - Wait 8 seconds instead of 5 for the hack, might help some + people reporting problems. + - Remove ${LIBDIR}/extensions/{*}. I may move that to + /var/lib/mozilla-firefox eventually, but let's leave it for now. + * debian/mozilla-firefox.png.uu: Make a nicer png icon, based on the + about box graphic. + * debian/mozilla-firefox.preinst: Remove old config files in + /etc/mozilla-firefox/pref. (Closes: #257711, 257557) + * browser/app/profile: firefox.js: Revert change to app.version, + apparently it breaks extensions. (Closes: #257941) + + -- Eric Dorland Wed, 7 Jul 2004 21:26:55 -0400 + +mozilla-firefox (0.9.1-2) experimental; urgency=low + + * The "Mike Homey, lord of the bugs" release. Thanks to Mike for being a + huge help with bug triage. That's right, help with bugs and your name + could have a prestigious place in the changelog. + * I'd like my next release to be to unstable, so let me know about + profile transition bugs, etc. + * debian/control: Build-depend on libcairo1-dev. + * debian/rules: Enable svg support using cairo renderer. (Closes: + #215990) + * debian/mozilla-firefox-xremote-client: Add -a firefox switch to make + the remote client find firefox only. Thanks Jonathan Black. (Closes: + #256967) + * debian/mozilla-firefox.desktop: Make comment Gnome HIG + compliant. (Closes: #257592) + * browser/app/profile/firefox.js: + - app.version = 0.9.1. + - Disable app updates by default. We're debian, we handle updates. + * debian/update-mozilla-firefox-chrome: + - Remove installed-extensions-processed.txt before regenerating. + (Closes: #257243) + - Take some, but not all advice from Alexandru Fomin. Improve Xvfb + and extension registration hacks. + + -- Eric Dorland Sun, 4 Jul 2004 16:58:17 -0400 + +mozilla-firefox (0.9.1-1) experimental; urgency=low + + * New upstream release. + * config/autoconf.mk.in: Alright, /usr/lib/firefox-0.9 was a bad idea, + use /usr/lib/mozilla-firefox. Change all the instances + /usr/lib/firefox-0.9 back to /usr/lib/mozilla-firefox. I feel + silly. (Closes: #256991) + * debian/mozilla-firefox-runner: Actually check for the existence of the + .mozilla/firefox directory before trying to clean it. + * debian/update-mozilla-firefox-runner: + - Call firefox-bin, not firefox you silly goose. + - Use mozilla-firefox tempfile, not mozilla-browser. + - The horrible hackiness continues: For my previous hack to work, + I need to preseed a profile directory in the home directory I + create. Now things should work. (Closes: #256812) + + -- Eric Dorland Thu, 1 Jul 2004 17:16:29 -0400 + +mozilla-firefox (0.9-1) experimental; urgency=low + + * New upstream release. There may be regressions from 0.8. (Closes: + #254522) + * widget/src/gtk/nsGtkMozRemoteHelper.cpp, + widget/src/gtk2/nsGtkMozRemoteHelper.cpp, + widget/src/xremoteclient/XRemoteClient.cpp: Fix previously applied to + fix -remote behaviour undone. Mozilla now includes the program name in + the properties to distinguish between various Mozilla apps. + * xpcom/reflect/xptcall/src/md/unix/Makefile.in: remove extra endif. + * dom/public/idl/core/nsIDOMNSDocument.idl: Reintroduce referrer + attribute that got lost somehow. + * content/events/src/nsEventStateManager.cpp: Fix a strange broken + function call to GetContainer. + + * debian/rules: + - Follow upstream and --enable-single-profile and + --disable-profilesharing. + - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. + - --user-app-dir=.mozilla to jive with new location. + - Remove dom-inspector extension dir from the regular package. + * debian/control: Depend on xvfb for insane hack below. + * debian/mozilla-firefox.install: + - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. + - Remove ipc dir, mozipcd. + - Add init.d, greprefs dirs. + * debian/mozilla-firefox.dirs: + - Add /var/lib/mozilla-firefox/extensions{,.d} + * debian/mozilla-firefox-dom-inspector.dirs: Add + /var/lib/mozilla-firefox/extensions.d. + * debian/mozilla-firefox-dom-inspector.install: + - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. + - Install dom-inspector extension dir. + * debian/mozilla-firefox.links: + - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. + - Link /usr/lib/mozilla-firefox to /usr/lib/firefox-0.9. + - Link installed-extensions.txt to our place in + /var/lib/mozilla-firefox. + * debian/mozilla-firefox-runner: + - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. + - Fix xprintorg typo. (Closes: #255706) + - Search .mozilla/firefox for XUL.mfasl files. + * debian/mozilla-firefox-xremote-client: Replace + /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. + * debian/update-mozilla-firefox-chrome: + - Replace /usr/lib/mozilla-firefox with /usr/lib/firefox-0.9. + - Capture return values from reg* commands on error, stolen + from mozilla source. + - Remove returns from check_running. + - Pull in snippets from /var/lib/mozilla-firefox/extensions.d + to generate installed-extensions.txt for new extensions mechanism. + - An insane hack, but necessary because of upstream: Launch a Xvfb + to run firefox to generate the necessary extension metadata. I've + been told this will not be necessary in the next version. + + -- Eric Dorland Mon, 28 Jun 2004 23:40:59 -0400 + +mozilla-firefox (0.8-12) unstable; urgency=low + + * The "Last Chance Before 0.9" release. + * debian/mozilla-firefox-runner: Fix unescaped \n, thanks Olly + Betts. (Closes: #252436) + * debian/update-mozilla-firefox-chrome: Watch out for empty + LD_LIBRARY_PATH. Thanks George Cristian Birzan. (Closes: #254142) + * debian/README.Debian: Restructure and update a bit. + * debian/presubj: Add bug information from README.Debian for reportbug. + * debian/mozilla-firefox.install: Install the presubj. + + -- Eric Dorland Mon, 14 Jun 2004 19:39:27 -0400 + +mozilla-firefox (0.8-11) unstable; urgency=low + + * Apply amd64 fix from #249211. + * debian/README.Debian: Shamelessly stole the java plugin installation + instructions from the mozilla package. (Closes: #243513) + * nsCommonWidget.cpp, nsCommonWidget.h, nsWindow.cpp: Apply patch (with + some hand massaging) from upstream bugzilla bug #209342 to fix initial + window placement. (Closes: #235209, 241519) + * nsprpub/pr/src/misc/prnetdb.c: Apply patch from Miquel van Smoorenburg + to prevent unless reverse DNS lookups. (Closes: #251978) + * debian/mozilla-firefox-runner: Apply patch from Jasper Spaans to fix + remote xprint printing. (Closes: #252072) + + -- Eric Dorland Tue, 1 Jun 2004 23:12:36 -0400 + +mozilla-firefox (0.8-10) unstable; urgency=low + + * debian/mozilla-firefox.install: Don't install uuencoded file. (Closes: + #251441) + * debian/mozilla-firefox-runner: unset AUDIODEV which can cause + crashes. Thanks Christopher Armstrong. (Closes: #236231) + * update-mozilla-firefox-chrome: Port security fix from #249613 to + handle insecure tempfile creation. + * debian/rules: Following the advice of #247585 I'm disabling postscript + printing. Perhaps this will alleviate some of the other printing + problems. + + -- Eric Dorland Sun, 30 May 2004 01:47:52 -0400 + +mozilla-firefox (0.8-9) unstable; urgency=low + + * debian/control: + - Suggest latex-xft-fonts for MathML fonts. Thanks Michael + JasonSmith. (Closes: #216925) + - Build depend on libx11-dev & libxp-dev instead of xlibs-dev to + reflect new X packages. + * widget/src/gtk2/nsWindow.cpp: Apply patch from Peter Colberg to ignore + unused mouse buttons. (Closes: #244305) + * debian/README.Debian: Document the fact that the loopback interface + has to be up and unfiltered for things to work right. + + -- Eric Dorland Wed, 5 May 2004 23:30:42 -0400 + +mozilla-firefox (0.8-8) unstable; urgency=low + + * security/nss/lib/freebl/unix_rand.c: Remove code that called netstat + to gain so entropy. It's pretty useless on a Linux system. Thanks + Wichert. (Closes: #241200) + * debian/README.Debian: Add note about changing the button order in the + dialog boxes. (Closes: #240261) + * debian/control: Add dummy package for mozilla-firebird to smooth + upgrades. (Closes: #235577) + + -- Eric Dorland Sat, 3 Apr 2004 16:19:34 -0500 + +mozilla-firefox (0.8-7) unstable; urgency=low + + * debian/mozilla-firefox-runner: + - Cleanup XUL.mfasl whenever firefox is run with no + command-line. (Closes: #238717) + - Add patch from Laurent Buffler to add config to allow + new tabs to be opened instead of new windows. (Closes: #239323) + * debian/mozilla-firefoxrc: Put the new FIREFOX_OPEN_IN variable in + there and document it's use. + + -- Eric Dorland Sat, 27 Mar 2004 17:21:51 -0500 + +mozilla-firefox (0.8-6) unstable; urgency=low + + * debian/control: Build-depend on g++-3.3 (>= 3.3.3-4) to work around + broken 3.3.3-3 release. (Closes: #238318, #238241, #238441, #238523, + #238534) + * debian/rules: Install new small-firefox icon. + * debian/mozilla-firefox{.png, .xpm, -small.xpm}: Use the new DFSG-free + icons, the old pretty ones are trademarked and not DSFG-free. I know, + it's stupid. Complain to the Mozilla Foundation, not me. (Closes: + #234869) + + -- Eric Dorland Sun, 21 Mar 2004 22:09:16 -0500 + +mozilla-firefox (0.8-5) unstable; urgency=low + + * Rebuild with g++-3.3 3.3.3-2 to work around broken g++. (Closes: + #238318) + + -- Eric Dorland Wed, 17 Mar 2004 21:38:58 -0500 + +mozilla-firefox (0.8-4) unstable; urgency=low + + * debian/README.Debian: + - Tell people not to remove their ~/.firefox directory. Just move it + out of the way. (Closes: #235594) + - Add notes about the sound dsp. (Closes: #236678) + * debian/mozilla-firefox-runner: + - Don't redirect stderr. (Closes: #236160) + - Add get_locale code from Aurelien Jarno (Closes: #235521) + - Fix dsp auto-detection code. (Closes: #236678) + * debian/rules: Add default locale file. + * debian/mozilla-firefox.dirs: Add locales dir. + + * browser/app/profile/all.js, + content/events/src/nsEventStateManager.cpp, + modules/libpref/src/init/all.js, widget/public/nsGUIEvent.h, + widget/src/gtk/nsWidget.cpp: Reapply extended mouse events patch from + Derek Upham. (Closes: #235385, #230876) + * browser/base/content/browser-sets.inc: Make ESC stop animations + again. (Closes: #235474) + + -- Eric Dorland Tue, 16 Mar 2004 00:31:19 -0500 + +mozilla-firefox (0.8-3) unstable; urgency=low + + * debian/mozilla.firefox.menu: Change the case of + mozilla-Firefox. (Closes: #234982, #234755) + * debian/NEWS.Debian: Move to debian/mozilla-firefox.NEWS so that it + actually gets installed. (Closes: #234700) + * debian/update-mozilla-firefox-chrome: Setup dummy home directory to + capture silly .firefox directory. (Closes: #234855) + * debian/mozilla-firefox.png.uu, debian/mozilla-firefox.xpm: Use the + new, pretty mozilla-firefox icons. (Closes: #234869) + * debian/rules: Install the pretty icon in the right places. + + -- Eric Dorland Thu, 26 Feb 2004 21:10:27 -0500 + +mozilla-firefox (0.8-2) unstable; urgency=low + + * The "what he taketh, he giveth back" release. + * debian/rules: + - Disable the wallet extension, this really closes #222447. + - Remove some more cruft left over from the patch system. + - Reinstall the dom-inspector. + * debian/control: Add the dom-inspector back, now that it is supported + upstream. + * debian/mozilla-firefox-dom-inspector.{install,dirs,postinst,postrm}: + Bring these files back. + * docshell/base/nsWebShell.cpp: Only do keyword lookup on when DNS + entries don't exist. (Closes: #233916, #218033, #211524) + + -- Eric Dorland Mon, 23 Feb 2004 21:48:03 -0500 + +mozilla-firefox (0.8-1) unstable; urgency=low + + * The "Let's Change Our Name Every Other Day" release. + * New upstream release, mozilla-firebird has been renamed to + mozilla-firefox. Let's hope it lasts. (Closes: #231903, #222447) + * debian/mozilla-firebird.*: Renamed to debian/mozilla-firefox.*. + + * debian/README.Debian: Update for firefox, remove blurb about the + inspector. + * debian/NEWS.Debian: Explain how to move your configs over. I may make + this automatic if enough people complain, but I'm loathe to muck + around in pople's home directories. + + * debian/control: + - Rename the package. + - Tweak description to list Firefox's previous aliases. + - Remove conflicts on mozilla-firebird-dom-inspector. + + * debian/rules: + - s/firebird/firefox/g, s/MozillaFirebird/firebird/g. + - Comment out some old inspector code. + - Remove unused patch subsystem. + - Disable gtktest. We don't need no stinking tests. + - Remove disable plaintext editor line, not sure why it's there. + - Disable LDAP support. We don't use it. + - Remove executable bit on *.so files. + - Remove useless preference files. + - Exclude the inspector files. + - Don't remove installed-chrome, we don't install it anymore. + - user-app-dir = .firefox. (Closes: #212301) + - export MOZILLA_OFFICIAL for the build ID. (Closes: #231133) + + * debian/mozilla-firefox-runner: + - s/firebird/firefox/g. + - Remove composer and editor functions. + - Use .firefox directory. + + * debian/mozilla-firefox.install: + - s/firebird/firefox/g, s/MozillaFirebird/firefox/g. + - Don't install timebombgen. + - Install icons directory. + - Don't install installed-chrome.txt, we just remove it anyway. + + * debian/mozilla-firefox.desktop, debian/mozilla-firefox.dirs, + debian/mozilla-firefox.manpages, debian/mozilla-firefox.links, + debian/mozilla-firefox.menu, debian/mozilla-firefox.mime, + debian/mozilla-firefoxrc, debian/mozilla-firefox.postinst, + debian/mozilla-firefox.prerm, debian/update-mozilla-firefox-chrome, + debian/mozilla-firefox.1, debian/mozilla-firefox-xremote-client: + s/firebird/firefox/g, s/MozillaFirebird/firefox/g. + + * debian/mozilla-firefox.links: Link mozilla-firefox.1 to firefox.1. + + * debian/mozilla-firefox.preinst: Remove, at least with the rename I can + erase some of my previous blunders. + + * debian/mozilla-firefox.{png.uu,xpm}: Use the package icon. + + * browser/app/nsBrowserApp.cpp: Change package name to Firefox, so now + the ~/.firefox is used. (Closes: #196550) + + * browser/app/profile/all.js: Merge in autoscroll fixes. + * browser/base/content/browser-sets.inc: Merge in upstream stop button + fix. + * modules/plugin/samples/default/unix/nullplugin.c: Merge in removal of + commented code. + * nsprpub/pr/include/md/_linux.cfg, nsprpub/pr/include/md/_linux.h, + security/coreconf/Linux.mk: Merge in hppa build fixes from upstream. + * config/autoconf.mk.in: Install into /usr/lib/mozilla-firefox now. + * content/base/src/nsDocumentViewer.cpp: Remove redundant stop patch + since it has been merged upstream. + * content/events/src/nsEventStateManager.cpp, + modules/libpref/src/init/all.js, widget/src/gtk/nsWidget.cpp: Revert + back to upstream version. There was a patch here to add support for + extended mouse buttons, but I'm removing it since I don't trust that + it works in the new version correctly. Send me another patch if you + want this functionality back. + * toolkit/components/passwordmgr/base/nsPasswordManager.cpp: Revert this + back to upstream, I'm not sure which patches I applied to this file, + likely something to try and fix the double password prompt. + * widget/src/xremoteclient/XRemoteClient.cpp, + widget/src/xremoteclient/XRemoteClient.h: Revert to upstream version, + I believe it does the right thing now, but the patch I used does not + apppear to have been used. Restore the properties to _FIREFOX_* + though. + * widget/src/gtk/nsGtkMozRemoteHelper.cpp, + widget/src/gtk2/nsGtkMozRemoteHelper.cpp: Change the _FIREBIRD_* to + _FIREFOX_* here as well. + * content/base/src/nsDocument.cpp: Comment out nsDocument::GetDomConfig, + needed to get things to compile. + + -- Eric Dorland Sun, 15 Feb 2004 21:28:45 -0500 + +mozilla-firebird (0.7-7) unstable; urgency=low + + * debian/mozilla-firebird-runner: Open a new window when loading a + regular file. (Closes: #228853) + + -- Eric Dorland Thu, 29 Jan 2004 22:12:30 -0500 + +mozilla-firebird (0.7-6) unstable; urgency=medium + + * The "Indian-giver-christmas" release. + * Urgency medium since we're closing some critical bugs that need to get + in before a freeze. + * Completely remove mozilla-firebird-dom-browser. No one stepped up to + help fix it's brokeness in 0.7 and I don't use it or particularly care + about it. So it is no more. If someone steps up to take responsibility + I might put it back, but otherwise it may RIP. (Closes: #222085) + * debian/mozilla-firebird-runner: Remove XUL.mfasl uncoditionally + now. There is a corner case where this file is corrupted on upgrade + when firebird was running. This is a total hack, and not an elegant + solution, but at least it fixes the problem. (Closes: #224779, + #224323) + * debian/control: Conflict against old mozilla-firebird-dom-inspector + since it doesn't work anymore. + + -- Eric Dorland Thu, 25 Dec 2003 15:54:21 -0500 + +mozilla-firebird (0.7-5) unstable; urgency=low + + * browser/base/content/browser-sets.inc: Patch to make ESC stop actually + work. (Closes: #223382) + * debian/rules: Turn down optimizations on sparc. (Closes: #223760) + + -- Eric Dorland Sun, 14 Dec 2003 23:01:59 -0500 + +mozilla-firebird (0.7-4) unstable; urgency=low + + * The "All of Takuo's hard work really pays off" release. + * toolkit/components/passwordmgr/base/nsPasswordManager.cpp: Patch from + upstream bugzilla (#220214) to fix double password prompt + problem. (Closes: #222696) + * xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s.m4: Stolen + patch from mozilla package to make mozilla-firebird build on + mips. (Closes: #222743) + * content/base/src/nsDocumentViewer.cpp: Port yet another patch to allow + the ESC key to stop animated gifs. (Closes: #223382) + + -- Eric Dorland Mon, 8 Dec 2003 23:59:16 -0500 + +mozilla-firebird (0.7-3) unstable; urgency=low + + * debian/control: Add dependency on psmisc since we use fuser. Thanks + Daniel Schröter. + * widget/src/xremoteclient/XRemoteClient.{cpp,h}: Apply patch from + bugzilla to fix -remote behaviour on modern WMs. Thanks Nikolai + Prokoschenko. (Closes: #197632) + * nsprpub/pr/src/misc/prdtoa.c: Apply fix from mozilla package (#215067) + to fix building on arm. This is a partial fix to #222743. + * debian/patches: Remove these. Put everything in CVS. + + -- Eric Dorland Fri, 5 Dec 2003 20:03:46 -0500 + +mozilla-firebird (0.7-2) unstable; urgency=low + + * Apply excellent patch from Alexander Sack to fix the + issues with mozilla running and firebird not starting. (Closes: + #216264) + * browser/app/profile/all.js: Set the default of "general.autoScroll" to + false because it annoyes me. (Closes: #221661) + + -- Eric Dorland Wed, 19 Nov 2003 20:59:55 -0500 + +mozilla-firebird (0.7-1) unstable; urgency=low + + * New upstream release. (Closes: #216019) + * debian/patches/dom-inspector.diff: Remove, and apply directly into my + CVS. + * debian/patches/pref.diff: Removed, doesn't seem applicable anymore. + * debian/rules: export MOZ_FIREBIRD=1. + * debian/control: + - Change Chimera to Camino. (Closes: #220821) + - Fix typos in descriptions. (Closes: #218202) + - Add build-deps on m4. (Closes: #219681) + + -- Eric Dorland Wed, 12 Nov 2003 23:01:35 -0500 + +mozilla-firebird (0.6.1-8) unstable; urgency=low + + * Apply patch to make forward and back buttons work on mice. (Closes: + #211606) + * debian/rules: Use -O optimization on alpha, so it will build + again. (Closes: #213603) + + -- Eric Dorland Fri, 3 Oct 2003 00:07:44 -0400 + +mozilla-firebird (0.6.1-7) unstable; urgency=low + + * Rebuild with the latest and greatest from unstable. This seems to fix + the problems with bookmarks people were having, at least for me. No + idea why. Please reopen if this doesn't fix it for you. (Closes: + #209339, #211706, #211286, #211146, #212011) + + -- Eric Dorland Mon, 22 Sep 2003 00:00:08 -0400 + +mozilla-firebird (0.6.1-6) unstable; urgency=low + + * Patch from Eric Wong to make plugin requests + less annoying. (Closes: #196609) + * debian/rules: Stop building libart. + * debian/mozilla-firebird.links: Fix path to bookmarks file. (Partial + fix to #211286) + + -- Eric Dorland Wed, 17 Sep 2003 20:22:56 -0400 + +mozilla-firebird (0.6.1-5) unstable; urgency=low + + * The "sorry Chris Gray" release. + * debian/rules: disable SVG. This was causing drag and drop to lock up + X and possibly fixes #208630. (Closes: #209371) + * debian/mozilla-firebird-runner: Remove XUL.mfasl if we have upgraded, + since it can cause problems. (Closes: #200073, #202130, #207351) + + -- Eric Dorland Sat, 13 Sep 2003 20:15:37 -0400 + +mozilla-firebird (0.6.1-4) unstable; urgency=low + + * The "pleasing Chris Gray" release. + * other-licenses/libart_gpl: Add this library for svg. + * debian/rules: + - Enable svg. + - Move bookmarks.html file into /etc. (Closes: #207398) + * debian/mozilla-firebird.links: Add links back to files moved to /etc. + * security/coreconf/Linux2.6.mk: Add this as a copy of Linux2.5.mk to + get mozilla-firebird to build on 2.6. (Closes: #207821) + + -- Eric Dorland Sun, 31 Aug 2003 04:40:30 -0400 + +mozilla-firebird (0.6.1-3) unstable; urgency=low + + * debian/mozilla-firebird.prerm: Remove mozilla alternative on + remove. (Closes: #205310) + * debian/debsearch.{gif.uu,src}: Debian search plugin graciously + contributed by Fergus McKenzie-Kay . + * debian/rules: + - uudecode and clean up debsearch.gif.uu. + - Steal platform specific optimization code from mozilla + package. Thanks Brian Nelson. (Closes: #206309) + * debian/mozilla-firebird.install: Install the above files. + * debian/control: Update Standards-Version to 3.6.1. + + -- Eric Dorland Sun, 24 Aug 2003 19:09:11 -0400 + +mozilla-firebird (0.6.1-2) unstable; urgency=low + + * The "Stop Pestering Me Already!" release. + * debian/control: Only recommend xprt-xprintorg, don't require + it. (Closes: #204176) + + -- Eric Dorland Sun, 10 Aug 2003 20:00:11 -0400 + +mozilla-firebird (0.6.1-1) unstable; urgency=low + + * New upstream release. (Closes: #203518, #201203) + * debian/control: + - Standards-Version to 3.6.0. + - Don't provide www-browser anymore. (Closes: #201035) + - Depend on xprt-xprintorg so printing will work. (Closes: #202418) + * debian/mozilla-firebird.preinst: Remove www-browser alternative. + * debian/mozilla-firebird.postinst: Don't install www-browser alternative. + * debian/mozilla-firebird.prerm: Don't remove www-browser alternative + anymore. + * debian/README.Debian: Added note about configuration breaking on + upgrade. (Closes: #202130) + * debian/patches/classic.diff: Removed. Not sure what it's point was. + * debian/rules: Add --disable-pedantic to the configure options. + + -- Eric Dorland Sun, 3 Aug 2003 14:58:12 -0400 + +mozilla-firebird (0.6-8) unstable; urgency=low + + * debian/patches/alpha-build-fix.diff: Steal patch from mozilla to allow + building on alpha. (Closes: #198638) + * debian/patches/hppa-build-fix.diff: Steal patch from mozilla to allow + building on hppa, clean it up so it applies cleanly. (Closes: #199068) + * debian/mozilla-firebird.png.uu: Added uuencoded nice png icon. + * debian/rules: Add code to decode and clean up the new icon file. + * debian/mozilla-firebird.install: Install new icon. + * debian/mozilla-firebird.desktop: Use the new icon. + + -- Eric Dorland Fri, 27 Jun 2003 23:21:56 -0400 + +mozilla-firebird (0.6-7) unstable; urgency=low + + * debian/mozilla-firebird.1: Stole the mozilla manpage for my own + nefarious purposes. (Closes: #196638) + * debian/mozilla-firebird.postrm: Add slave links to the + mozilla-firebird manpage. (Closes: #197145) + * debian/mozilla-firebird-xremote-client: Set up the environment + properly so it returns correct information. (Closes: #197632) + * debian/mozilla-firebird.xpm: Added icon from + http://iconpacks.mozdev.org/phoenix/iconshots/flame48true.png to have + a nice menu icon. (Closes: #197565) + * Updated the README.Debian with some helpful bug reporting tips. + * debian/rules: Replaced dh_installmanpages with dh_installman. + + -- Eric Dorland Sun, 22 Jun 2003 15:15:37 -0400 + +mozilla-firebird (0.6-6) unstable; urgency=low + + * debian/mozilla-firebird.postinst: Add priority 0 alternative on + mozilla. (Closes: #196444) + * debian/control: Add build-depends on libxrender-dev, libmng-dev, + libpng12-dev, libjpeg62-dev. + * debian/rules: + - Build with system jpeg, mng and png libs. + - Exclude inspector files from mozilla-firebird. + (Closes: #196432, #196509) + + -- Eric Dorland Sat, 7 Jun 2003 15:19:23 -0400 + +mozilla-firebird (0.6-5) unstable; urgency=low + + * The "Mike Hommey is my homey" release. + * Thanks to Mike Hommey for his excellent work on this + version (it's 99% his), which I've shamelessly stolen. + * Added a README.Debian file. + * Added a separate mozilla-firebird-dom-inspector package. + * debian/patches/dom-inspector.diff: + - add DOM Inspector to Tools menu. (note: DOM Inspector is still + not very well integrated with Firebird) + - remove modern skin references. + * debian/patches/xpinstall.diff: remove unneeded chrome registrations + from xpinstall/packager/unix/browser.jst. + * debian/patches/classic.diff: remove + themes/classic/global/win/preview.gif from jar file and modify + preview image reference in rdf file to Preview.png. + * debian/patches/pref.diff: remove preview image constraints in + browser/components/prefwindow/skin/pref.css file to avoid deformation + of preview image in classic theme. + * debian/mozilla-firebird.preinst: added #DEBHELPER#. + * debian/mozilla-firebird.install: + - Don't install the modern.jar and embed-sample.jar files. + - Remove files related to dom-inspector. + * debian/rules: + - enabling xinerama support. + - disabling build of chatzilla and venkman. + - moved /var/lib/mozilla-firebird/chrome.d/99default to + /var/lib/mozilla-firebird/chrome.d/00all + - remove references to embed-sample.jar in + /var/lib/mozilla-firebird/chrome.d/00all + - Add some comments. + - Change == to =, for more strict /bin/sh's. + * debian/control: Build-Depend on libidl-dev (>= 0.8.0) because the + configure script requires at least this version. + * debian/copyright: Make this a real debian copyright file. + + -- Eric Dorland Thu, 5 Jun 2003 01:00:32 -0400 + +mozilla-firebird (0.6-4) unstable; urgency=low + + * debian/rules: Change -O2 to -O for building on powerpc. + * debian/mozilla-firebird.preinst: Delete + /usr/lib/mozilla-firebird/defaults/pref on upgrade to facilitate + transition to prefs in /etc. Thanks to all who reported this. + + -- Eric Dorland Tue, 27 May 2003 21:45:06 -0400 + +mozilla-firebird (0.6-3) unstable; urgency=low + + * First attempt at a debian upload. (Closes: #163270) + * debian/rules: + + Small fix to Mike Hommey's chrome patch. + + Suggestion from Bernhard R. Link to install + /usr/lib/mozilla-firebird/defaults/pref to + /etc/mozilla-firebird/pref + + Add dh_installmime call. + * debian/mozilla-firebird.mime: Install mime type handlers for firebird. + * debian/mozilla-firebird.links: Link + /usr/lib/mozilla-firebird/defaults/pref to /etc/mozilla-firebird/pref + * debian/mozilla-firebird.install: Don't install the inspector.jar. + + -- Eric Dorland Mon, 26 May 2003 00:28:40 -0400 + +mozilla-firebird (0.6-2) unstable; urgency=low + + * debian/rules: + + Add --with-user-appdir=.mozilla-firebird, since it still + defaults to .phoenix. + + Don't use the ${prefix} variable, use /usr, since ${prefix} + doesn't seem to work. + + Use --without-system-nspr. + * debian/mozilla-firebird.install: + + Be picky about what chrome files we install, since there's + quite a few we don't need, and a bunch of empty dirs. + * Excellent patch from Mike Hommey to add a + update-mozilla-firebird-chrome script. + + -- Eric Dorland Sat, 24 May 2003 13:00:44 -0400 + +mozilla-firebird (0.6-1) unstable; urgency=low + + * New upstream release. + * Renamed to mozilla-firebird. + * Changed phoenix to mozilla-firebird where appropriate. + * debian/mozilla-firebird.links: Add link mozilla-firebird to + MozillaFirebird. + * debian/control: + + Standars-Version to 3.5.10.0. + + Build-depend on gtk2 libs now. + + Build-depend on libidl-dev. + + Add Provides x-www-browser. + * debian/rules: + + Enable building with the gtk2 libs. + + Make mozilla-firebird-xremote-client executable in install target. + * debian/mozilla-firebird.desktop: Added gnome menu entry. + * debian/mozilla-firebird.{prerm,postinst}: Add alternatives to + www-browser and x-www-browser. + + -- Eric Dorland Mon, 19 May 2003 20:43:39 -0400 + +phoenix (0.5-4) unstable; urgency=low + + * debian/control: Depend on fontconfig. + * debian/rules: Add source-tarball-from-cvs to build a orig tarball from + a checked out cvs tree. Now I can provide source package. And there + was much rejoicing. + + -- Eric Dorland Fri, 17 Jan 2003 21:06:47 -0500 + +phoenix (0.5-3) unstable; urgency=low + + * debian/phoenix-xremote-client: Added to send remote commands to + phoenix. Just a wrapper that calls phoenix-bin -remote. + * debian/phoenix-runner: + + Use phoenix-xremote-client. + + Replace MOZILLA_DSP with PHOENIX_DSP. + * debian/phoenixrc: phoenix-runner uses this file to determine what dsp + to start. + * debian/phoenix.install: + + Install phoenix-xremote-client, and don't install + mozilla-xremote-client. + + Install phoenixrc. + + -- Eric Dorland Mon, 23 Dec 2002 02:52:21 -0500 + +phoenix (0.5-2) unstable; urgency=low + + * debian/control: + + Add Provides: www-browser. + + Build-depend on libxft2-dev, libnspr-dev. + * debian/rules: + + Use xft and the system nspr. + + Install phoenix-runner. + * debian/phoenix-runner: Stolen from the mozilla package to run phoenix. + + -- Eric Dorland Sat, 21 Dec 2002 02:03:11 -0500 + +phoenix (0.5-1) unstable; urgency=low + + * New upstream release. + * debian/phoenix.install: Fix paths to phoenix libs. + * debian/control: + + Standards-Version to 3.5.8 + + Improve build-deps. + * debian/rules: + + Have configure options here, no more .mozconfig. + + Steal some patch code from Colin. + * debian/patches/mozappdir.diff: Change the mozappdir. + + -- Eric Dorland Mon, 9 Dec 2002 02:43:13 -0500 + +phoenix (0.4-3) unstable; urgency=low + + * debian/phoenix.menu: Add menu entry. + * Rebuild to fix libstdc++ dependency. + * .mozonfig: Disable more tests. + + -- Eric Dorland Wed, 20 Nov 2002 19:13:18 -0500 + +phoenix (0.4-2) unstable; urgency=low + + * debian/control: + + Add build-depends. + + Fix section and description. + * .mozconfig: + + Use system zlib. + + -- Eric Dorland Wed, 13 Nov 2002 19:03:52 -0500 + +phoenix (0.4-1) unstable; urgency=low + + * Initial release. + + -- Eric Dorland Mon, 11 Nov 2002 23:09:41 -0500 --- thunderbird-10.0.2+build1.orig/debian/vendor.js +++ thunderbird-10.0.2+build1/debian/vendor.js @@ -0,0 +1,9 @@ +// Use LANG environment variable to choose locale +pref("intl.locale.matchOS", true); + +// Disable default mailer checking. +pref("mail.shell.checkDefaultMail", false); + +// Don't disable our bundled extensions in the application directory +pref("extensions.autoDisableScopes", 11); +pref("extensions.shownSelectionUI", true); --- thunderbird-10.0.2+build1.orig/debian/MPL +++ thunderbird-10.0.2+build1/debian/MPL @@ -0,0 +1,567 @@ + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (the "License"); you may not use this file except in + compliance with the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ______________________________________. + + The Initial Developer of the Original Code is ________________________. + Portions created by ______________________ are Copyright (C) ______ + _______________________. All Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] + + ---------------------------------------------------------------------- + + AMENDMENTS + + The Netscape Public License Version 1.1 ("NPL") consists of the + Mozilla Public License Version 1.1 with the following Amendments, + including Exhibit A-Netscape Public License. Files identified with + "Exhibit A-Netscape Public License" are governed by the Netscape + Public License Version 1.1. + + Additional Terms applicable to the Netscape Public License. + I. Effect. + These additional terms described in this Netscape Public + License -- Amendments shall apply to the Mozilla Communicator + client code and to all Covered Code under this License. + + II. "Netscape's Branded Code" means Covered Code that Netscape + distributes and/or permits others to distribute under one or more + trademark(s) which are controlled by Netscape but which are not + licensed for use under this License. + + III. Netscape and logo. + This License does not grant any rights to use the trademarks + "Netscape", the "Netscape N and horizon" logo or the "Netscape + lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", + "Smart Browsing" even if such marks are included in the Original + Code or Modifications. + + IV. Inability to Comply Due to Contractual Obligation. + Prior to licensing the Original Code under this License, Netscape + has licensed third party code for use in Netscape's Branded Code. + To the extent that Netscape is limited contractually from making + such third party code available under this License, Netscape may + choose to reintegrate such code into Covered Code without being + required to distribute such code in Source Code form, even if + such code would otherwise be considered "Modifications" under + this License. + + V. Use of Modifications and Covered Code by Initial Developer. + V.1. In General. + The obligations of Section 3 apply to Netscape, except to + the extent specified in this Amendment, Section V.2 and V.3. + + V.2. Other Products. + Netscape may include Covered Code in products other than the + Netscape's Branded Code which are released by Netscape + during the two (2) years following the release date of the + Original Code, without such additional products becoming + subject to the terms of this License, and may license such + additional products on different terms from those contained + in this License. + + V.3. Alternative Licensing. + Netscape may license the Source Code of Netscape's Branded + Code, including Modifications incorporated therein, without + such Netscape Branded Code becoming subject to the terms of + this License, and may license such Netscape Branded Code on + different terms from those contained in this License. + + VI. Litigation. + Notwithstanding the limitations of Section 11 above, the + provisions regarding litigation in Section 11(a), (b) and (c) of + the License shall apply to all disputes relating to this License. + + EXHIBIT A-Netscape Public License. + + "The contents of this file are subject to the Netscape Public + License Version 1.1 (the "License"); you may not use this file + except in compliance with the License. You may obtain a copy of + the License at http://www.mozilla.org/NPL/ + + Software distributed under the License is distributed on an "AS + IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + implied. See the License for the specific language governing + rights and limitations under the License. + + The Original Code is Mozilla Communicator client code, released + March 31, 1998. + + The Initial Developer of the Original Code is Netscape + Communications Corporation. Portions created by Netscape are + Copyright (C) 1998-1999 Netscape Communications Corporation. All + Rights Reserved. + + Contributor(s): ______________________________________. + + Alternatively, the contents of this file may be used under the + terms of the _____ license (the "[___] License"), in which case + the provisions of [______] License are applicable instead of + those above. If you wish to allow use of your version of this + file only under the terms of the [____] License and not to allow + others to use your version of this file under the NPL, indicate + your decision by deleting the provisions above and replace them + with the notice and other provisions required by the [___] + License. If you do not delete the provisions above, a recipient + may use your version of this file under either the NPL or the + [___] License." --- thunderbird-10.0.2+build1.orig/debian/docs +++ thunderbird-10.0.2+build1/debian/docs @@ -0,0 +1 @@ +debian/MPL --- thunderbird-10.0.2+build1.orig/debian/copyright +++ thunderbird-10.0.2+build1/debian/copyright @@ -0,0 +1,647 @@ +This package was debianized by Fabien Tassin on 2008-02-25 + +The package was downloaded from http://ftp.mozilla.org/pub/mozilla.org/thunderbird/ + +EDIT: downloaded from CVS (until 3.0 is released) using the following commands: + debian/rules get-orig-source (you need to install mozilla-devscripts >= 0.05) + +The source tarball is an aggregate of several different works in which the +main one, developed by the Mozilla Project, is thunderbird. + +The contents of the debian directory are licensed like the bulk of +thunderbird, tri-licensed under the GPL/LGPL/MPL. + +Other works include gzip, bzip2, sqlite, libjpeg, libpng, cairo, and others. +Please see the sections following the copyright statements for thunderbird for +these. + +If this file is incomplete, which I'm pretty sure is the case, because it's +difficult not to forget anything in this huge amount of data, please file +a bug or contact me. + +=== thunderbird + +Overall, the thunderbird project is licensed under the terms of the Mozilla +Public License version 1.1 or, at your option, under the terms of the GNU +General Public License version 2 or subsequent, or the terms of the GNU +Lesser General Public License version 2.1 or subsequent. + +On Debian systems, the complete text of the GNU General Public +License can be found in the file `/usr/share/common-licenses/GPL' ; +the complete text of the GNU Lesser General Public License can be +found in the file `/usr/share/common-licenses/LGPL'. + +The complete text of the Mozilla Public License can be found in the MPL file +in the same directory as this file. + +Some of the files are also licensed (single, dual or tri) under the terms of +the Netscape Public License (NPL) which can be found as amendments to the +MPL at the end of the file. Please refer to http://www.mozilla.org/MPL/relicensing-faq.html + +While the Mozilla Project is undergoing a global relicensing so that the +aim is to have a full tree with these tri-license terms, there are at the +moment quite some exceptions as following: + +(Note that I sometimes assumed files not explicitely licensed to be licensed +under the same terms as the files around them and that a lot of the +information has been extracted automatically, thus maybe leaving some doubt. +Again, if you find "bugs", please contact me by email or via the BTS.) + +The following files are not tri-licenced MPL/GPL/LGPL: + +- GPL only: + dom/tests/mochitest/ajax/jquery/dist/jquery.js + dom/tests/mochitest/ajax/jquery/src/jquery/jquery.js + +- MPL and GPL: + embedding/browser/activex/src/install/README.txt + +- MPL and LGPL: + gfx/cairo/cairo/* + +- GPL and LGP: + extensions/pref/system-pref/src/gconf/nsSystemPrefService.cpp + extensions/pref/system-pref/src/gconf/nsSystemPrefService.h + extensions/pref/system-pref/src/nsSystemPref.cpp + extensions/pref/system-pref/src/nsSystemPref.h + extensions/pref/system-pref/src/nsSystemPrefFactory.cpp + extensions/pref/system-pref/src/nsSystemPrefLog.h + netwerk/base/public/nsIIOService2.idl + netwerk/base/public/nsINetworkLinkService.idl + netwerk/streamconv/converters/mozTXTToHTMLConv.cpp + netwerk/streamconv/converters/mozTXTToHTMLConv.h + netwerk/streamconv/public/mozITXTToHTMLConv.idl + toolkit/system/dbus/nsDBusModule.cpp + toolkit/system/dbus/nsDBusService.cpp + toolkit/system/dbus/nsDBusService.h + toolkit/system/dbus/nsNetworkManagerListener.cpp + toolkit/system/dbus/nsNetworkManagerListener.h + +- NPL only (thus MPL): (EDIT: to investigate) + intl/uconv/ucvibm/864i.uf + intl/uconv/ucvibm/cp850.uf + intl/uconv/ucvibm/cp852.uf + intl/uconv/ucvibm/cp855.uf + intl/uconv/ucvibm/cp857.uf + intl/uconv/ucvibm/cp862.uf + intl/uconv/ucvibm/cp864.uf + intl/uconv/ucvmath/mathematica1.uf + intl/uconv/ucvmath/mathematica2.uf + intl/uconv/ucvmath/mathematica3.uf + intl/uconv/ucvmath/mathematica4.uf + intl/uconv/ucvmath/mathematica5.uf + intl/uconv/ucvmath/mtextra.uf + intl/uconv/ucvmath/texcmex-t1.uf + intl/uconv/ucvmath/texcmex-ttf.uf + intl/uconv/ucvmath/texcmmi-t1.uf + intl/uconv/ucvmath/texcmmi-ttf.uf + intl/uconv/ucvmath/texcmr-ttf.uf + intl/uconv/ucvmath/texcmsy-t1.uf + +- Public Domain: + aclocal.m4 + build/autoconf/freetype2.m4 + build/autoconf/gtk.m4 + build/autoconf/nspr.m4 + db/mork/src/morkDeque.cpp + db/mork/src/morkDeque.h + +The file db/mork/src/morkQuickSort.cpp is licensed under the following terms: + + Copyright (c) 1992, 1993 + The Regents of the University of California. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +The following files come from X11R5, without any clear licensing terms: + + build/autoconf/install-sh + directory/c-sdk/config/autoconf/install-sh + nsprpub/build/autoconf/install-sh + +The embedding/qa/mozembed/public/nsIQABrowserUIGlue.idl file and the files +under the embedding/tests directory are licensed under the following terms: + + Copyright (c) 2002 Netscape Communications Corporation and + other contributors + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this Mozilla sample software and associated documentation files + (the "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + +=== sqlite + +The db/sqlite3 directory contains a copy of sqlite with the following +licensing terms: + + The author disclaims copyright to this source code. In place of + a legal notice, here is a blessing: + + May you do good and not evil. + May you find forgiveness for yourself and forgive others. + May you share freely, never taking more than you give. + +=== dbm + +The dbm directory, except the files listed under the thunderbird section, is +licensed under the following terms: + + Copyright (c) 1991, 1993, 1994 + The Regents of the University of California. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + This product includes software developed by the University of + California, Berkeley and its contributors. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +=== myspell + +The extensions/spellcheck/myspell directory is licensed under the following +terms: + + Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada + And Contributors. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + 3. All modifications to the source code must be clearly marked as + such. Binary redistributions based on modified source code + must be clearly marked as modified versions in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + +=== boehm + +The gc/boehm directory, except the files listed under the thunderbird section, +is licensed under the following terms: + + Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers + Copyright (c) 1991-1996 by Xerox Corporation. All rights reserved. + Copyright (c) 1996-1998 by Silicon Graphics. All rights reserved. + + THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED + OR IMPLIED. ANY USE IS AT YOUR OWN RISK. + + Permission is hereby granted to use or copy this program + for any purpose, provided the above notices are retained on all copies. + Permission to modify the code and to distribute modified code is granted, + provided the above notices are retained, and a notice that the code was + modified is included with the above copyright notice. + +=== cairo + +The gfx/cairo/cairo directory is licensed under the following terms: + + Copyright (c) 2003 University of Southern California + Copyright (c) 1999 Tom Tromey + Copyright (c) 2002, 2003 University of Southern California + Copyright (c) 2004 Calum Robinson + Copyright (c) 2004 David Reveman + Copyright (c) 2000, 2002, 2004 Keith Packard + Copyright (c) 2004, 2005 Red Hat, Inc + + Cairo is free software and is available to be redistributed and/or + modified under the terms of either the GNU Lesser General Public + License (LGPL) version 2.1 or the Mozilla Public License (MPL) version + 1.1. + +=== libpixman + +The gfx/cairo/libpixman directory is licensed under the following terms: +(from gfx/cairo/libpixman/COPYING) + + libpixregion + + Copyright 1987, 1998 The Open Group + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation. + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + Except as contained in this notice, the name of The Open Group shall not be + used in advertising or otherwise to promote the sale, use or other dealings + in this Software without prior written authorization from The Open Group. + + + Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose and without fee is hereby granted, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Digital not be + used in advertising or publicity pertaining to distribution of the + software without specific, written prior permission. + + DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + SOFTWARE. + + ---------------------------------------------------------------------- + libic + + Copyright © 2001 Keith Packard + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of Keith Packard not be used in + advertising or publicity pertaining to distribution of the software without + specific, written prior permission. Keith Packard makes no + representations about the suitability of this software for any purpose. It + is provided "as is" without express or implied warranty. + + KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + + ---------------------------------------------------------------------- + slim + + slim is Copyright © 2003 Richard Henderson + + Permission to use, copy, modify, distribute, and sell this software + and its documentation for any purpose is hereby granted without fee, + provided that the above copyright notice appear in all copies and that + both that copyright notice and this permission notice appear in + supporting documentation, and that the name of Richard Henderson not be + used in advertising or publicity pertaining to distribution of the + software without specific, written prior permission. Richard Henderson + makes no representations about the suitability of this software for + any purpose. It is provided "as is" without express or implied + warranty. + + RICHARD HENDERSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL RICHARD HENDERSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + +=== libjpeg + +The jpeg directory, except the files under the thunderbird section, are licensed +under the following terms: + + The authors make NO WARRANTY or representation, either express or implied, + with respect to this software, its quality, accuracy, merchantability, or + fitness for a particular purpose. This software is provided "AS IS", and you, + its user, assume the entire risk as to its quality and accuracy. + + This software is copyright (C) 1991-1998, Thomas G. Lane. + All Rights Reserved except as specified below. + + Permission is hereby granted to use, copy, modify, and distribute this + software (or portions thereof) for any purpose, without fee, subject to these + conditions: + (1) If any part of the source code for this software is distributed, then this + README file must be included, with this copyright and no-warranty notice + unaltered; and any additions, deletions, or changes to the original files + must be clearly indicated in accompanying documentation. + (2) If only executable code is distributed, then the accompanying + documentation must state that "this software is based in part on the work of + the Independent JPEG Group". + (3) Permission for use of this software is granted only if the user accepts + full responsibility for any undesirable consequences; the authors accept + NO LIABILITY for damages of any kind. + + These conditions apply to any software derived from or based on the IJG code, + not just to the unmodified library. If you use our work, you ought to + acknowledge us. + + Permission is NOT granted for the use of any IJG author's name or company name + in advertising or publicity relating to this software or products derived from + it. This software may be referred to only as "the Independent JPEG Group's + software". + + We specifically permit and encourage the use of this software as the basis of + commercial products, provided that all warranty or liability claims are + assumed by the product vendor. + +=== bzip2 + +The modules/libbz2/src directory is licensed under the following terms: +(from modules/libbz2/src/LICENSE) + + This program, "bzip2", the associated library "libbzip2", and all + documentation, are copyright (C) 1996-2005 Julian R Seward. All + rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Julian Seward, Cambridge, UK. + jseward@acm.org + bzip2/libbzip2 version 1.0.3 of 15 February 2005 + +=== libpng + +The directory modules/libimg/png is licensed under the following terms: +(from modules/libimg/png/LICENSE) + + This copy of the libpng notices is provided for your convenience. In case of + any discrepancy between this copy and the notices in the file png.h that is + included in the libpng distribution, the latter shall prevail. + + COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + + If you modify libpng you may insert additional notices immediately following + this sentence. + + libpng version 1.2.6, September 12, 2004, is + Copyright (c) 2004 Glenn Randers-Pehrson, and is + distributed according to the same disclaimer and license as libpng-1.2.5 + with the following individual added to the list of Contributing Authors + + Cosmin Truta + + libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are + Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are + distributed according to the same disclaimer and license as libpng-1.0.6 + with the following individuals added to the list of Contributing Authors + + Simon-Pierre Cadieux + Eric S. Raymond + Gilles Vollant + + and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the + library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is with + the user. + + libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are + Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are + distributed according to the same disclaimer and license as libpng-0.96, + with the following individuals added to the list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + + libpng versions 0.89, June 1996, through 0.96, May 1997, are + Copyright (c) 1996, 1997 Andreas Dilger + Distributed according to the same disclaimer and license as libpng-0.88, + with the following individuals added to the list of Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + + libpng versions 0.5, May 1995, through 0.88, January 1996, are + Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. + + For the purposes of this copyright and license, "Contributing Authors" + is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + + The PNG Reference Library is supplied "AS IS". The Contributing Authors + and Group 42, Inc. disclaim all warranties, expressed or implied, + including, without limitation, the warranties of merchantability and of + fitness for any purpose. The Contributing Authors and Group 42, Inc. + assume no liability for direct, indirect, incidental, special, exemplary, + or consequential damages, which may result from the use of the PNG + Reference Library, even if advised of the possibility of such damage. + + Permission is hereby granted to use, copy, modify, and distribute this + source code, or portions hereof, for any purpose, without fee, subject + to the following restrictions: + + 1. The origin of this source code must not be misrepresented. + + 2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + + 3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + + The Contributing Authors and Group 42, Inc. specifically permit, without + fee, and encourage the use of this source code as a component to + supporting the PNG file format in commercial products. If you use this + source code in a product, acknowledgment is not required but would be + appreciated. + + + A "png_get_copyright" function is available, for convenient use in "about" + boxes and the like: + + printf("%s",png_get_copyright(NULL)); + + Also, the PNG logo (in PNG format, of course) is supplied in the + files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + + Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a + certification mark of the Open Source Initiative. + + Glenn Randers-Pehrson + glennrp@users.sourceforge.net + September 12, 2004 + +=== zlib + +The directories modules/zlib/src and security/nss/cmd/zlib are licensed under +the following terms: + + (C) 1995-2004 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + If you use the zlib library in a product, we would appreciate *not* + receiving lengthy legal documents to sign. The sources are provided + for free but without warranty of any kind. The library has been + entirely written by Jean-loup Gailly and Mark Adler; it does not + include third-party code. + + If you redistribute modified sources, we would appreciate that you include + in the file ChangeLog history information documenting your changes. Please + read the FAQ for more information on the distribution of modified source + versions. + +=== expat + +The directory parser/expat is licensed under the following terms: +(from parser/expat/COPYING) + + Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd + and Clark Cooper + Copyright (c) 2001, 2002 Expat maintainers. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --- thunderbird-10.0.2+build1.orig/debian/thunderbird.manpages.in +++ thunderbird-10.0.2+build1/debian/thunderbird.manpages.in @@ -0,0 +1 @@ +debian/@MOZ_APP_NAME@.1 --- thunderbird-10.0.2+build1.orig/debian/thunderbird.lintian-overrides.in +++ thunderbird-10.0.2+build1/debian/thunderbird.lintian-overrides.in @@ -0,0 +1,10 @@ +@MOZ_APP_NAME@ binary: embedded-libjpeg .@MOZ_LIBDIR@/libxul.so +@MOZ_APP_NAME@ binary: embedded-zlib .@MOZ_LIBDIR@/libxul.so +@MOZ_APP_NAME@ binary: image-file-in-usr-lib usr/lib/@MOZ_APP_NAME@-@MOZ_VERSION@/icons/default/default16.png +@MOZ_APP_NAME@ binary: image-file-in-usr-lib usr/lib/@MOZ_APP_NAME@-@MOZ_VERSION@/icons/default/default22.png +@MOZ_APP_NAME@ binary: image-file-in-usr-lib usr/lib/@MOZ_APP_NAME@-@MOZ_VERSION@/icons/default/default24.png +@MOZ_APP_NAME@ binary: image-file-in-usr-lib usr/lib/@MOZ_APP_NAME@-@MOZ_VERSION@/icons/default/default256.png +@MOZ_APP_NAME@ binary: image-file-in-usr-lib usr/lib/@MOZ_APP_NAME@-@MOZ_VERSION@/icons/default/default32.png +@MOZ_APP_NAME@ binary: image-file-in-usr-lib usr/lib/@MOZ_APP_NAME@-@MOZ_VERSION@/icons/default/default48.png +@MOZ_APP_NAME@ binary: image-file-in-usr-lib usr/lib/@MOZ_APP_NAME@-addons/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon.png +@MOZ_APP_NAME@ binary: image-file-in-usr-lib usr/lib/@MOZ_APP_NAME@-addons/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/preview.png --- thunderbird-10.0.2+build1.orig/debian/thunderbird-dev.links.in +++ thunderbird-10.0.2+build1/debian/thunderbird-dev.links.in @@ -0,0 +1,14 @@ +%%ifdef MOZ_TREE_NSPR +@MOZ_LIBDIR@/libnspr4.so @MOZ_SDKDIR@/sdk/lib/libnspr4.so +@MOZ_LIBDIR@/libplc4.so @MOZ_SDKDIR@/sdk/lib/libplc4.so +@MOZ_LIBDIR@/libplds4.so @MOZ_SDKDIR@/sdk/lib/libplds4.so +%%else +/usr/include/nspr @MOZ_INCDIR@/nspr +/usr/bin/nspr-config @MOZ_SDKDIR@/sdk/bin/nspr-config +%%endif +%%ifndef MOZ_TREE_CAIRO +/usr/include/cairo @MOZ_INCDIR@/cairo +%%endif +@MOZ_LIBDIR@/libmozalloc.so @MOZ_SDKDIR@/sdk/lib/libmozalloc.so +@MOZ_LIBDIR@/libxpcom.so @MOZ_SDKDIR@/sdk/lib/libxpcom.so +@MOZ_LIBDIR@/libxul.so @MOZ_SDKDIR@/sdk/lib/libxul.so --- thunderbird-10.0.2+build1.orig/debian/thunderbird.sh.in +++ thunderbird-10.0.2+build1/debian/thunderbird.sh.in @@ -0,0 +1,113 @@ +#!/bin/sh + +set -e + +# Firefox launcher containing a Profile migration helper for +# temporary profiles used during alpha and beta phases. + +# Authors: +# Alexander Sack +# Fabien Tassin +# Steve Langasek +# Chris Coulson +# License: GPLv2 or later + +MOZ_LIBDIR=@MOZ_LIBDIR@ +MOZ_APP_LAUNCHER=`which $0` +EXE=@MOZ_APP_NAME@-bin +MOZ_APP_NAME=@MOZ_APP_NAME@ +MOZ_APP_BASENAME=@MOZ_APP_BASENAME@ +MOZ_PROFILE_PREFIX=@MOZ_PROFILE_PREFIX@ + +export MOZ_APP_LAUNCHER + +while [ ! -x $MOZ_LIBDIR/$EXE ] ; do + if [ -L "$MOZ_APP_LAUNCHER" ] ; then + MOZ_APP_LAUNCHER=`readlink -f $MOZ_APP_LAUNCHER` + MOZ_LIBDIR=`dirname $MOZ_APP_LAUNCHER` + else + echo "Can't find $MOZ_LIBDIR/$EXE" + exit 1 + fi +done + +LD_LIBRARY_PATH=${MOZ_LIBDIR}:${MOZ_LIBDIR}/plugins${LD_LIBRARY_PATH:+":$LD_LIBRARY_PATH"} +export LD_LIBRARY_PATH + +usage () { + $MOZ_LIBDIR/$EXE -h | sed -e 's,/.*/,,' + echo + echo " -g or --debug Start within debugger" + echo " -d or --debugger Specify debugger to start with (eg, gdb or valgrind)" + echo " -a or --debugger-args Specify arguments for debugger" +} + +moz_debug=0 +moz_debugger_args="" +moz_debugger="gdb" + +while [ $# -gt 0 ]; do + case "$1" in + -h | --help ) + usage + exit 0 + ;; + -g | --debug ) + moz_debug=1 + shift + ;; + -d | --debugger) + moz_debugger=$2; + if [ "${moz_debugger}" != "" ]; then + shift 2 + else + echo "-d requires an argument" + exit 1 + fi + ;; + -a | --debugger-args ) + moz_debugger_args=$2; + if [ "${moz_debugger_args}" != "" ] ; then + shift 2 + else + echo "-a requires an argument" + exit 1 + fi + ;; + -- ) # Stop option processing + shift + break + ;; + * ) + break + ;; + esac +done + +if [ $MOZ_APP_NAME != $MOZ_APP_BASENAME ] && + [ ! -e ${HOME}/${MOZ_PROFILE_PREFIX}${MOZ_APP_NAME} ] && + [ -d ${HOME}/${MOZ_PROFILE_PREFIX}${MOZ_APP_BASENAME} ] ; then + cp -r ${HOME}/${MOZ_PROFILE_PREFIX}${MOZ_APP_BASENAME} ${HOME}/${MOZ_PROFILE_PREFIX}${MOZ_APP_NAME} +fi + +if [ $moz_debug -eq 1 ] ; then + debugger=`which $moz_debugger` + if [ ! -x $debugger ] ; then + echo "Invalid debugger" + exit 1 + fi + + case `basename $debugger` in + gdb) + exec $debugger $moz_debugger_args --args $MOZ_LIBDIR/$EXE "$@" + ;; + valgrind) + exec $debugger $moz_debugger_args $MOZ_LIBDIR/$EXE "$@" + ;; + *) + exec $debugger $moz_debugger_args $MOZ_LIBDIR/$EXE "$@" + ;; + esac +else + exec $MOZ_LIBDIR/$EXE "$@" +fi --- thunderbird-10.0.2+build1.orig/debian/thunderbird-gnome-support.install.in +++ thunderbird-10.0.2+build1/debian/thunderbird-gnome-support.install.in @@ -0,0 +1,4 @@ +debian/tmp@MOZ_LIBDIR@/components/libmozgnome.so +%%ifndef MOZ_DISABLE_CONTROL_CENTER +debian/@MOZ_APP_NAME@.xml /usr/share/gnome-control-center/default-apps +%%endif --- thunderbird-10.0.2+build1.orig/debian/control.in +++ thunderbird-10.0.2+build1/debian/control.in @@ -0,0 +1,274 @@ +Source: @MOZ_APP_NAME@ +Section: web +Priority: optional +Maintainer: Ubuntu Mozilla Team +Vcs-Bzr: https://code.launchpad.net/~mozillateam/thunderbird/thunderbird.head +Build-Depends: cdbs (>= 0.4.27), + debhelper (>= 5), + m4, + autotools-dev, + autoconf2.13, + quilt, + zip, + libx11-dev, + libxt-dev, + libxext-dev, + libgtk2.0-dev (>= 2.10), + libglib2.0-dev, + libpango1.0-dev (>= 1.14.0), + libidl-dev (>= 0.8.0), + libfontconfig1-dev, + libgconf2-dev (>= 1.2.1), + libgnomeui-dev (>= 2.2.0), + libstartup-notification0-dev, + libasound2-dev, + libcurl4-openssl-dev, + libdbus-glib-1-dev (>= 0.60), + lsb-release, + libiw-dev, + mesa-common-dev, + libnotify-dev, @SYSLIBS_BD@ + libgnomevfs2-dev (>= 1:2.0), + yasm (>= 1.1), + imagemagick, + libdbusmenu-gtk-dev, + docbook-to-man, + libkrb5-dev, + unzip +Standards-Version: 3.9.1 + +Package: @MOZ_APP_NAME@ +Architecture: any +Depends: fontconfig, + psmisc, + debianutils (>= 1.16), + ${shlibs:Depends}, + ${misc:Depends} +Recommends: myspell-en-us | hunspell-dictionary | myspell-dictionary, + @MOZ_APP_NAME@-globalmenu +Suggests: @MOZ_APP_NAME@-gnome-support (= ${binary:Version}), + latex-xft-fonts, + libthai0 +Replaces: mozilla-thunderbird, + thunderbird-gnome-support (<= 3.0.4+nobinonly-0ubuntu3) +Conflicts: mozilla-thunderbird +Breaks: thunderbird-gnome-support (<= 3.0.4+nobinonly-0ubuntu3) +Provides: mail-reader +Section: mail +Description: Email, RSS and newsgroup client with integrated spam filter + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + +Package: @MOZ_APP_NAME@-gnome-support +Architecture: any +Section: gnome +Depends: ${shlibs:Depends}, + @MOZ_APP_NAME@ (= ${binary:Version}), + ${misc:Depends}, + ${unity:Depends} +Description: Email, RSS and newsgroup client - GNOME support + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + . + This package depends on the GNOME libraries which allow Thunderbird to take + advantage of technologies such as GConf, GIO and libnotify + +Package: @MOZ_APP_NAME@-dev +Architecture: any +Section: devel +Depends: @MOZ_APP_NAME@ (= ${binary:Version}), + ${misc:Depends}, + ${shlibs:Depends}, + ${nss:Depends}, + ${nspr:Depends}, + ${cairo:Depends} +Description: Email, RSS and newsgroup client - development files + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + . + This package contains the headers and SDK for building plugins and extensions + with Thunderbird + +Package: @MOZ_APP_NAME@-dbg +Architecture: any +Section: debug +Priority: extra +Depends: @MOZ_APP_NAME@, + ${shlibs:Depends}, + ${misc:Depends} +Description: Email, RSS and newsgroup client - debug symbols + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + . + This package contains the debugging symbols for Thunderbird + +Package: @MOZ_APP_NAME@-mozsymbols +Architecture: amd64 i386 armel +Section: debug +Priority: extra +Depends: ${shlibs:Depends}, + ${misc:Depends} +Description: Email, RSS and newsgroup client - Breakpad symbols + Thunderbird is a full-featured email, RSS and newsgroup client that makes + emailing safer, faster and easier than ever before. It supports different mail + accounts (POP, IMAP, Gmail), has a simple mail account setup wizard, one- + click address book, tabbed interface, an integrated learning spam filter, + advanced search and indexing capabilities, and offers easy organization + of mails with tagging and virtual folders. It also features unrivalled + extensibility. + . + This package contains the Firefox symbols in a format expected by Mozilla's + Breakpad. Eventually this package should go away and the symbol upload be + implemented in soyuz (or other builders that build this package) + +Package: @MOZ_APP_NAME@-globalmenu +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + @MOZ_APP_NAME@ (= ${binary:Version}) +Description: Unity appmenu integration for Thunderbird + This package provides an extension which adds support for the Unity + appmenu to Thunderbird + +# Transitional packages below here + +Package: thunderbird-gnome-support-dbg +Architecture: any +Depends: thunderbird-gnome-support, thunderbird-dbg, ${misc:Depends} +Description: Email, RSS and newsgroup client - transitional package + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-bn-bd +Architecture: all +Depends: thunderbird-locale-bn, ${misc:Depends} +Description: Transitional Bengali language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-en-gb +Architecture: all +Depends: thunderbird-locale-en, ${misc:Depends} +Description: Transitional English language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-en-us +Architecture: all +Depends: thunderbird-locale-en, ${misc:Depends} +Description: Transitional English language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-es-ar +Architecture: all +Depends: thunderbird-locale-es, ${misc:Depends} +Description: Transitional Spanish language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-es-es +Architecture: all +Depends: thunderbird-locale-es, ${misc:Depends} +Description: Transitional Spanish language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-fy-nl +Architecture: all +Depends: thunderbird-locale-fy, ${misc:Depends} +Description: Transitional Western Frisian language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-ga-ie +Architecture: all +Depends: thunderbird-locale-ga, ${misc:Depends} +Description: Transitional Irish language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-nb-no +Architecture: all +Depends: thunderbird-locale-nb, ${misc:Depends} +Description: Transitional Norwegian language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-nn-no +Architecture: all +Depends: thunderbird-locale-nn, ${misc:Depends} +Description: Transitional Norwegian language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-pa-in +Architecture: all +Depends: thunderbird-locale-pa, ${misc:Depends} +Description: Transitional Punjabi language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-pt-br +Architecture: all +Depends: thunderbird-locale-pt, ${misc:Depends} +Description: Transitional Portugese language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-pt-pt +Architecture: all +Depends: thunderbird-locale-pt, ${misc:Depends} +Description: Transitional Portugese language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-sv-se +Architecture: all +Depends: thunderbird-locale-sv, ${misc:Depends} +Description: Transitional Swedish language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-ta-lk +Architecture: all +Depends: thunderbird-locale-ta, ${misc:Depends} +Description: Transitional Tamil language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-zh-cn +Architecture: all +Depends: thunderbird-locale-zh-hans, ${misc:Depends} +Description: Transitional Simplified Chinese language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +Package: thunderbird-locale-zh-tw +Architecture: all +Depends: thunderbird-locale-zh-hant, ${misc:Depends} +Description: Transitional Traditional Chinese language pack for Thunderbird + This is a transitional package to ensure that upgrades work correctly. + It can be safely removed + +# Language packs below here --- thunderbird-10.0.2+build1.orig/debian/rules +++ thunderbird-10.0.2+build1/debian/rules @@ -0,0 +1,586 @@ +#!/usr/bin/make -f + +DISTRIB_VERSION_MAJOR = $(shell lsb_release -s -r | cut -d '.' -f 1) +DISTRIB_VERSION_MINOR = $(shell lsb_release -s -r | cut -d '.' -f 2) +DISTRIB_CODENAME = $(shell lsb_release -s -c) + +include $(CURDIR)/debian/config/branch.mk + +MOZ_APP_BASENAME := thunderbird +MOZ_MOZDIR := mozilla + +# Various build options +# tree = use in-tree libs, system = use system libs +MOZ_OVERRIDE_SHLIBS ?= +# 1 = Enable crashreporter (if supported) +MOZ_ENABLE_BREAKPAD ?= 0 +# 1 = Disable official branding and crash reporter (the crash reporter builds but is not enabled in application.ini) +MOZ_BUILD_UNOFFICIAL ?= 1 +# 1 = Build without jemalloc suitable for valgrind debugging +MOZ_VALGRIND ?= 0 +# 1 = Profile guided build +MOZ_BUILD_PGO ?= 0 +# 1 = Build and run the testsuite +MOZ_WANT_UNIT_TESTS ?= 0 +# 1 = Turn on debugging bits and disable optimizations +MOZ_DEBUG ?= 0 +# 1 = Disable optimizations +MOZ_NO_OPTIMIZE ?= 0 + +# Whether to use in-tree or system libs +# tree = force in-tree, system = force system, default = use upstream default +MOZ_USE_CAIRO ?= default +MOZ_USE_NSPR ?= default +MOZ_USE_NSS ?= default +MOZ_USE_SQLITE ?= default +MOZ_USE_HUNSPELL ?= default +MOZ_USE_VPX ?= default + +# Build-dependencies when using system libraries +NSPR_SYSTEM_BD = libnspr4-dev (>= 4.8.8) +CAIRO_SYSTEM_BD = libcairo2-dev (>= 1.10.0), libfreetype6-dev, libpixman-1-dev (>= 0.19.2) +SQLITE_SYSTEM_BD = libsqlite3-dev (>= 3.7.5) +HUNSPELL_SYSTEM_BD = libhunspell-dev +VPX_SYSTEM_BD = libvpx-dev +NSS_SYSTEM_BD = libnss3-dev (>= 3.12.10) + +# Build-dependencies when using in-tree libraries +CAIRO_TREE_BD = libxrender-dev + +# Additional build-dependencies +EXTRA_SYSTEM_BD = \n\tlibfreetype6-dev (>= 2.0.1),\n\tlibjpeg62-dev,\n\tlibpng12-dev,\n\tzlib1g-dev,\n\tlibbz2-dev,\n\tlibevent-dev, +EXTRA_DEFAULT_BD = \n\tlibfreetype6-dev (>= 2.0.1), + +DEFAULT_TREE_LIBS = CAIRO NSPR NSS SQLITE HUNSPELL VPX +DEFAULT_SYSTEM_LIBS = + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) +DEB_HOST_GNU_CPU ?= $(shell dpkg-architecture -qDEB_HOST_GNU_CPU) +# Other things which should be defined before including the CDBS rules +DEB_TAR_SRCDIR := mozilla + +# We need this to execute before the debian/control target gets called +clean:: pre-auto-update-debian-control + +# We need this to run before apply-patches +post-patches:: enable-dist-patches + +-include /usr/share/cdbs/1/rules/tarball.mk +-include /usr/share/cdbs/1/rules/debhelper.mk +-include /usr/share/cdbs/1/rules/patchsys-quilt.mk +-include /usr/share/cdbs/1/class/makefile.mk +include $(CURDIR)/debian/build/get-orig-source.mk + +MOZ_OBJDIR := $(DEB_BUILDDIR)/$(MOZ_MOZDIR)/obj-$(DEB_HOST_GNU_TYPE) +MOZ_DISTDIR := $(MOZ_OBJDIR)/$(MOZ_MOZDIR)/dist + +# Define other variables used throughout the build +MOZ_APP_NAME := $(shell dpkg-parsechangelog | sed -n 's/^Source: *\(.*\)$$/\1/ p') +MOZ_APP_NAME_SUFFIX := $(shell echo $(MOZ_APP_NAME) | sed 's/\($(MOZ_APP_BASENAME)\)\-*\(.*\)/\2/' ) + +DEB_MAKE_MAKEFILE := client.mk +# Without this, CDBS passes CFLAGS and CXXFLAGS options to client.mk, which breaks the build +DEB_MAKE_EXTRA_ARGS := +# These normally come from autotools.mk, which we no longer include (because we +# don't want to run configure) +ifeq (1, $(MOZ_BUILD_PGO)) + DEB_MAKE_BUILD_TARGET := profiledbuild +endif +DEB_MAKE_INSTALL_TARGET := install DESTDIR=$(CURDIR)/debian/tmp +DEB_MAKE_CLEAN_TARGET := distclean +DEB_DH_STRIP_ARGS := --dbg-package=$(MOZ_APP_NAME)-dbg +# We don't want build-tree/mozilla/README to be shipped as a doc +DEB_INSTALL_DOCS_ALL := $(NULL) + +MOZ_VERSION = $(shell cat $(DEB_BUILDDIR)/mail/config/version.txt) +MOZ_PREFIX := /usr +MOZ_LIBDIR = $(MOZ_PREFIX)/lib/$(MOZ_APP_NAME)-$(MOZ_VERSION) +MOZ_INCDIR = $(MOZ_PREFIX)/include/$(MOZ_APP_NAME)-$(MOZ_VERSION) +MOZ_IDLDIR = $(MOZ_PREFIX)/share/idl/$(MOZ_APP_NAME)-$(MOZ_VERSION) +MOZ_SDKDIR = $(MOZ_PREFIX)/lib/$(MOZ_APP_NAME)-devel-$(MOZ_VERSION) + +NSPR_DEPENDS := $(NULL) +NSS_DEPENDS := $(NULL) +CAIRO_DEPENDS := $(NULL) +DEB_DH_GENCONTROL_ARGS_$(MOZ_APP_NAME)-dev = -- -Vnspr:Depends=$(NSPR_DEPENDS) -Vnss:Depends=$(NSS_DEPENDS) -Vcairo:Depends=$(CAIRO_DEPENDS) +DEB_AUTO_UPDATE_DEBIAN_CONTROL = no + +MOZ_PYTHON := $(shell which python) +DISTRIB := $(shell lsb_release -i -s) + +NO_AUTO_REFRESH_LOCALES ?= 0 + +CFLAGS = -g +CXXFLAGS = -g +LDFLAGS = $(shell echo $$LDFLAGS | sed -e 's/-Wl,-Bsymbolic-functions//') + +ifneq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) + MOZ_WANT_UNIT_TESTS=0 +endif + +ifeq (1,$(MOZ_VALGRIND)) + MOZ_BUILD_UNOFFICIAL = 1 +endif + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + MOZ_BUILD_PGO = 0 + MOZ_NO_OPTIMIZE = 1 +endif + +ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) + MOZ_NO_OPTIMIZE = 1 + MOZ_DEBUG = 1 + MOZ_BUILD_UNOFFICIAL = 1 +endif + +ifeq (1, $(MOZ_BUILD_PGO)) + # See https://bugzilla.mozilla.org/show_bug.cgi?id=602245 + MOZ_WANT_UNIT_TESTS = 0 + # We don't really want the crash reporter on for PGO builds yet + MOZ_ENABLE_BREAKPAD = 0 + MOZ_BUILD_UNOFFICIAL = 1 +endif + +include $(CURDIR)/debian/build/testsuite.mk + +ifneq ($(MOZ_APP_NAME),$(MOZ_APP_BASENAME)) + # We don't want to make builds which change MOZ_APP_NAME official + MOZ_BUILD_UNOFFICIAL = 1 +endif + +# enable the crash reporter only on i386, amd64 and armel +ifeq (,$(filter i386 amd64 armel,$(DEB_HOST_ARCH))) + MOZ_ENABLE_BREAKPAD = 0 +endif + +BRANDING = $(CHANNEL) +ifneq (,$(filter release beta, $(BRANDING))) + BRANDING = official +endif +ifeq (1,$(MOZ_BUILD_UNOFFICIAL)) +ifneq (,$(filter official aurora, $(BRANDING))) + BRANDING = nightly +endif +endif +ifeq (official,$(BRANDING)) + BRANDING_DIR = other-licenses/branding/thunderbird + MOZ_BRANDING_OPTION = --enable-official-branding +else + BRANDING_DIR = mail/branding/$(BRANDING) + MOZ_BRANDING_OPTION = --with-branding=$(BRANDING_DIR) +endif +MOZ_DISPLAY_NAME = $(shell cat $(DEB_BUILDDIR)/$(BRANDING_DIR)/locales/en-US/brand.properties \ + | grep brandShortName | sed -e 's/brandShortName\=//') + +export LDFLAGS +export DEB_BUILD_HARDENING=1 +ifeq (1,$(shell test "$(DISTRIB_VERSION_MAJOR)$(DISTRIB_VERSION_MINOR)" -ge "1104" && echo "1")) + MOZ_ENABLE_GLOBALMENU := 1 +endif +ifeq (1,$(shell test "$(DISTRIB_VERSION_MAJOR)$(DISTRIB_VERSION_MINOR)" -ge "1110" && echo "1")) + MOZ_ENABLE_UNITY_INTEGRATION := 1 + UNITY_DEPENDS = libindicate5, libdbusmenu-gtk4, libunity6, libebook1.2-12, libedataserver1.2-15 +endif +ifeq (1,$(shell test "$(DISTRIB_VERSION_MAJOR)$(DISTRIB_VERSION_MINOR)" -ge "1010" && echo "1")) + MOZ_SYSTEM_DICTDIR = /usr/share/hunspell +else + MOZ_SYSTEM_DICTDIR = /usr/share/myspell/dicts +endif +export MOZCONFIG=$(CURDIR)/debian/config/mozconfig +ifneq (1,$(MOZ_BUILD_UNOFFICIAL)) + export BUILD_OFFICIAL=1 +endif +ifeq (1,$(MOZ_ENABLE_BREAKPAD)) + # Needed to enable crashreported in application.ini + export MOZILLA_OFFICIAL=1 +endif +ifeq (1,$(MOZ_BUILD_PGO)) + CC = $(shell which gcc-4.5) + CXX = $(shell which g++-4.5) + export CC + export CXX +endif +ifdef LOCAL_BRANCH +export LOCAL_REPO=$(shell dirname $(LOCAL_BRANCH)) +endif + +ifeq ($(MOZ_APP_BASENAME),$(MOZ_APP_NAME)) +# We need to add an epoch to the version of the thunderbird-locale- packages. Don't do this for thunderbird-trunk-locale- though +LOCALE_PACKAGES := $(shell cat $(CURDIR)/debian/control | grep "^Package:[[:space:]]*$(MOZ_APP_NAME)-locale\-" | sed -n -e 's/^Package\:[[:space:]]*\([^[:space:]]*\)/\1/ p') +DEB_VERSION := $(shell dpkg-parsechangelog | sed -n -e '/^Version:/s/.*: //p') +$(foreach locale_package, $(LOCALE_PACKAGES), $(eval DEB_DH_GENCONTROL_ARGS_$(locale_package) = -- -v1:$(DEB_VERSION))) +endif + +DEB_DH_GENCONTROL_ARGS_$(MOZ_APP_NAME)-gnome-support = -- -Vunity:Depends="$(UNITY_DEPENDS)" + +# Defines used for the Mozilla text preprocessor +DEB_DEFINES = -DMOZ_LIBDIR="$(MOZ_LIBDIR)" -DMOZ_APP_NAME="$(MOZ_APP_NAME)" -DMOZ_APP_BASENAME="$(MOZ_APP_BASENAME)"\ + -DMOZ_INCDIR="$(MOZ_INCDIR)" -DMOZ_IDLDIR="$(MOZ_IDLDIR)" -DMOZ_VERSION="$(MOZ_VERSION)" -DDEB_HOST_ARCH="$(DEB_HOST_ARCH)" \ + -DMOZ_DISPLAY_NAME="$(MOZ_DISPLAY_NAME)" -DMOZ_SYSTEM_DICTDIR="$(MOZ_SYSTEM_DICTDIR)" -DMOZ_OVERRIDE_SHLIBS="$(MOZ_OVERRIDE_SHLIBS)" \ + -DMOZ_BRANDING_OPTION="$(MOZ_BRANDING_OPTION)" -DTOPSRCDIR="$(CURDIR)" -DDEB_HOST_GNU_TYPE="$(DEB_HOST_GNU_TYPE)" \ + -DMOZ_PREFIX="$(MOZ_PREFIX)" -DMOZ_SDKDIR="$(MOZ_SDKDIR)" -DMOZ_DISTDIR="$(MOZ_DISTDIR)" \ + -DMOZ_OBJDIR="$(MOZ_OBJDIR)" -DDEB_BUILDDIR="$(DEB_BUILDDIR)" -DMOZ_PYTHON="$(MOZ_PYTHON)" -DMOZ_PROFILE_PREFIX="." + +SHLIB_OVERRIDE = $(if $(shell test "system" = "$(MOZ_OVERRIDE_SHLIBS)" && echo "1"), $(eval MOZ_USE_$(1) = system), \ + $(if $(shell test "tree" = "$(MOZ_OVERRIDE_SHLIBS)" && echo "1"), $(eval MOZ_USE_$(1) = tree),)) +DEFINE_DEFAULT_TREE_LIB = $(if $(shell test "system" != "$(MOZ_USE_$(1))" && echo "1"), $(eval DEB_DEFINES += -DMOZ_TREE_$(1)); $(eval MOZ_TREE_$(1) = 1),) +DEFINE_DEFAULT_SYSTEM_LIB = $(if $(shell test "tree" = "$(MOZ_USE_$(1))" && echo "1"), $(eval DEB_DEFINES += -DMOZ_TREE_$(1)); $(eval MOZ_TREE_$(1) = 1),) + +$(foreach lib, $(DEFAULT_TREE_LIBS) $(DEFAULT_SYSTEM_LIBS), $(call SHLIB_OVERRIDE,$(lib))) +$(foreach lib, $(DEFAULT_TREE_LIBS) $(DEFAULT_SYSTEM_LIBS), $(eval DEB_DEFINES += -DMOZ_USE_$(lib)="$(MOZ_USE_$(lib))")) +$(foreach lib, $(DEFAULT_TREE_LIBS), $(call DEFINE_DEFAULT_TREE_LIB,$(lib))) +$(foreach lib, $(DEFAULT_SYSTEM_LIBS), $(call DEFINE_DEFAULT_SYSTEM_LIB,$(lib))) + +ifeq (1, $(MOZ_ENABLE_BREAKPAD)) + DEB_DEFINES += -DMOZ_ENABLE_BREAKPAD +endif +ifeq (1, $(MOZ_VALGRIND)) + DEB_DEFINES += -DMOZ_VALGRIND +endif +ifeq (1,$(MOZ_NO_OPTIMIZE)) + DEB_DEFINES += -DMOZ_NO_OPTIMIZE +endif +ifeq (1,$(MOZ_WANT_UNIT_TESTS)) + DEB_DEFINES += -DMOZ_WANT_UNIT_TESTS +endif +ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) + DEB_DEFINES += -DDEB_BUILD_GNU_TYPE="$(DEB_BUILD_GNU_TYPE)" +endif +ifeq (1,$(MOZ_BUILD_PGO)) + DEB_DEFINES += -DMOZ_BUILD_PGO +endif +ifeq (1,$(shell test "$(DISTRIB_VERSION_MAJOR)$(DISTRIB_VERSION_MINOR)" -ge "1104" && echo "1")) + DEB_DEFINES += -DMOZ_DISABLE_GNOMEVFS + DEB_DEFINES += -DMOZ_DISABLE_CONTROL_CENTER +endif +ifneq (,$(filter aurora beta, $(CHANNEL))) + DEB_DEFINES += -DMOZ_UPDATE_CHANNEL="$(CHANNEL)" +endif +ifeq (1,$(MOZ_DEBUG)) + DEB_DEFINES += -DMOZ_DEBUG +endif +ifneq (,$(findstring armel,$(DEB_HOST_ARCH))) + DEB_DEFINES += -DDEB_ENABLE_THUMB2 +endif +ifeq (1,$(MOZ_ENABLE_GLOBALMENU)) + DEB_DEFINES += -DMOZ_ENABLE_GLOBALMENU +endif +ifeq (official, $(BRANDING)) + DEB_DEFINES += -DMOZ_OFFICIAL_BRANDING +endif +ifeq (1,$(MOZ_ENABLE_UNITY_INTEGRATION)) + DEB_DEFINES += -DMOZ_ENABLE_UNITY_INTEGRATION +endif + +ifneq (1, $(MOZ_TREE_NSPR)) + NSPR_DEPENDS = libnspr4-dev +endif +ifneq (1, $(MOZ_TREE_CAIRO)) + CAIRO_DEPENDS = libcairo2-dev +endif +ifneq (1, $(MOZ_TREE_NSS)) + NSS_DEPENDS = libnss3-dev +endif + +DEBIAN_EXECUTABLES = \ + $(MOZ_APP_NAME)$(MOZ_LIBDIR)/thunderbird.sh \ + $(NULL) + +subst_files = \ + debian/config/mozconfig \ + debian/$(MOZ_APP_NAME).dirs \ + debian/$(MOZ_APP_NAME).install \ + debian/$(MOZ_APP_NAME).links \ + debian/$(MOZ_APP_NAME).manpages \ + debian/thunderbird.sh \ + debian/$(MOZ_APP_NAME).xml \ + debian/$(MOZ_APP_NAME).desktop \ + debian/$(MOZ_APP_NAME)-dev.install \ + debian/$(MOZ_APP_NAME)-dev.links \ + debian/$(MOZ_APP_NAME)-gnome-support.install \ + debian/$(MOZ_APP_NAME)-mozsymbols.install \ + debian/$(MOZ_APP_NAME)-globalmenu.dirs \ + debian/$(MOZ_APP_NAME).lintian-overrides \ + debian/$(MOZ_APP_NAME).postinst \ + debian/$(MOZ_APP_NAME).postrm \ + debian/$(MOZ_APP_NAME).preinst \ + debian/apport/blacklist \ + debian/apport/native-origins \ + debian/apport/source_$(MOZ_APP_NAME).py \ + $(NULL) + +SYSLIBS_BD = $(NULL) +APPEND_BDS = $(if $(shell test "x$(1)" != "x" && echo "1" ), $(eval SYSLIBS_BD += \n\t$(1),),) +$(foreach lib, $(DEFAULT_TREE_LIBS) $(DEFAULT_SYSTEM_LIBS), $(if $(shell test "$(MOZ_TREE_$(lib))" != "1" && echo "1"), $(call APPEND_BDS,$($(lib)_SYSTEM_BD)),$(call APPEND_BDS,$($(lib)_TREE_BD)))) +ifeq (system, $(MOZ_OVERRIDE_SHLIBS)) +SYSLIBS_BD += $(EXTRA_SYSTEM_BD) +else ifneq (tree, $(MOZ_OVERRIDE_SHLIBS)) +SYSLIBS_BD += $(EXTRA_DEFAULT_BD) +endif + +debian/control:: debian/control.in debian/control.langpacks debian/control.langpacks.unavail debian/config/locales.shipped debian/config/locales.all + @echo "" + @echo "*****************************" + @echo "* Refreshing debian/control *" + @echo "*****************************" + @echo "" + + @sed -e 's/@SYSLIBS_BD@/$(SYSLIBS_BD)/g' \ + -e 's/@MOZ_APP_NAME@/$(MOZ_APP_NAME)/g' < debian/control.in > debian/control + + @perl debian/build/dump-langpack-control-entries.pl -i $(CURDIR)/debian/config -t $(CURDIR)/debian > debian/control.tmp + + @sed -e 's/@MOZ_APP_NAME@/$(MOZ_APP_NAME)/g' < debian/control.tmp >> debian/control && rm -f debian/control.tmp + +BRANCH := +ifneq (,$(MOZ_APP_NAME_SUFFIX)) + BRANCH = -$(MOZ_APP_NAME_SUFFIX) +endif +$(subst_files): $(foreach file, $(subst_files), $(subst $(BRANCH),,$(file).in)) + $(MOZ_PYTHON) $(DEB_BUILDDIR)/$(MOZ_MOZDIR)/config/Preprocessor.py -Fsubstitution --marker="%%" $(DEB_DEFINES) $(CURDIR)/$(subst $(BRANCH),,$@.in) > $(CURDIR)/$@ + +debian/stamp-buildsymbols: debian/stamp-makefile-build +ifeq (1, $(MOZ_ENABLE_BREAKPAD)) + # create build symbols + cd $(MOZ_OBJDIR); \ + $(MAKE) buildsymbols MOZ_SYMBOLS_EXTRA_BUILDID=$(shell date -d "`dpkg-parsechangelog | grep Date: | sed -e 's/^Date: //'`" +%y%m%d%H%M%S)-$(DEB_HOST_GNU_CPU) +endif + touch $@ + +compare-locales/scripts/compare-locales: + cp -r $(CURDIR)/debian/compare-locales $(CURDIR) + chmod +x $(CURDIR)/compare-locales/scripts/* + +debian/stamp-langpack-xpi-build: compare-locales/scripts/compare-locales + @echo "" + @echo "********************************" + @echo "* Building language pack xpi's *" + @echo "********************************" + @echo "" + + rm -rf $(CURDIR)/debian/l10n-mergedirs + mkdir $(CURDIR)/debian/l10n-mergedirs + + @export PATH=$(CURDIR)/compare-locales/scripts/:$$PATH ; \ + export PYTHONPATH=$(CURDIR)/compare-locales/lib ; \ + cd $(MOZ_OBJDIR)/mail/locales ; \ + while read line ; \ + do \ + line=`echo $$line | sed 's/#.*//' | sed '/^$$/d'` ; \ + if [ ! -z "$$line" ] ; \ + then \ + language=`echo $$line | sed 's/\([^:]*\):*\([^:]*\)/\1/'` ; \ + echo "" ; \ + echo "" ; \ + echo "* Building $${language}" ; \ + echo "" ; \ + $(MAKE) merge-$$language LOCALE_MERGEDIR=$(CURDIR)/debian/l10n-mergedirs/$$language || exit 1 ; \ + $(MAKE) langpack-$$language LOCALE_MERGEDIR=$(CURDIR)/debian/l10n-mergedirs/$$language || exit 1 ; \ + fi \ + done < $(CURDIR)/debian/config/locales.shipped + + touch $@ + +debian/messagingmenu/messagingmenu@mozilla.com.xpi: + cd $(CURDIR)/debian/messagingmenu; \ + sh build.sh || exit 1; \ + mv $(CURDIR)/debian/messagingmenu/messagingmenu.xpi $(CURDIR)/debian/messagingmenu/messagingmenu@mozilla.com.xpi + +debian/eds/edsintegration@mozilla.com.xpi: + cd $(CURDIR)/debian/eds; \ + LIBXUL_SDK=$(CURDIR)/$(MOZ_DISTDIR) sh build.sh || exit 1; \ + mv $(CURDIR)/debian/eds/edsintegration.xpi $(CURDIR)/debian/eds/edsintegration@mozilla.com.xpi + +common-build-arch:: debian/stamp-testsuite debian/messagingmenu/messagingmenu@mozilla.com.xpi debian/eds/edsintegration@mozilla.com.xpi + +common-build-indep:: debian/stamp-langpack-xpi-build + +common-binary-arch:: debian/stamp-buildsymbols + +common-binary-post-install-indep:: + @echo "" + @echo "**********************************" + @echo "* Installing language pack xpi's *" + @echo "**********************************" + @echo "" + + @while read line ; \ + do \ + line=`echo $$line | sed 's/#.*//' | sed '/^$$/d'` ; \ + if [ ! -z "$$line" ] ; \ + then \ + language=`echo $$line | sed 's/\([^:]*\):*\([^:]*\)/\1/'` ; \ + pkgname=`echo $$line | sed 's/\([^:]*\):*\([^:]*\)/\2/'` ; \ + id=`python $(CURDIR)/debian/build/get-xpi-id.py $(CURDIR)/$(MOZ_DISTDIR)/linux-$(DEB_HOST_GNU_CPU)/xpi/$(MOZ_APP_NAME)-$(MOZ_VERSION).$${language}.langpack.xpi` ; \ + [ $$? -eq 0 ] || exit 1 ; \ + echo "Installing $(MOZ_APP_NAME)-$(MOZ_VERSION).$${language}.langpack.xpi to $${id}.xpi in $(MOZ_APP_NAME)-locale-$${pkgname}" ; \ + dh_installdirs -p$(MOZ_APP_NAME)-locale-$${pkgname} usr/lib/$(MOZ_APP_NAME)-addons/extensions ; \ + cp $(CURDIR)/$(MOZ_DISTDIR)/linux-$(DEB_HOST_GNU_CPU)/xpi/$(MOZ_APP_NAME)-$(MOZ_VERSION).$${language}.langpack.xpi \ + $(CURDIR)/debian/$(MOZ_APP_NAME)-locale-$${pkgname}/usr/lib/$(MOZ_APP_NAME)-addons/extensions/$${id}.xpi ; \ + fi \ + done < $(CURDIR)/debian/config/locales.shipped + +binary-install/$(MOZ_APP_NAME):: + convert -resize 32x32 debian/$(MOZ_APP_NAME)/usr/share/pixmaps/$(MOZ_APP_NAME).png debian/$(MOZ_APP_NAME)/usr/share/pixmaps/$(MOZ_APP_NAME).xpm +ifeq (1, $(MOZ_ENABLE_UNITY_INTEGRATION)) + echo "$(MOZ_PREFIX)/share/applications/$(MOZ_APP_NAME).desktop" > debian/$(MOZ_APP_NAME)/usr/share/indicators/messages/applications/$(MOZ_APP_NAME) +endif +ifeq (1,$(MOZ_ENABLE_BREAKPAD)) + install -m 0644 $(CURDIR)/debian/apport/blacklist $(CURDIR)/debian/$(MOZ_APP_NAME)/etc/apport/blacklist.d/$(MOZ_APP_NAME) +endif + install -m 0644 $(CURDIR)/debian/apport/native-origins $(CURDIR)/debian/$(MOZ_APP_NAME)/etc/apport/native-origins.d/$(MOZ_APP_NAME) + +ifeq (1, $(MOZ_ENABLE_GLOBALMENU)) +binary-install/$(MOZ_APP_NAME)-globalmenu:: + unzip -o -d debian/$(MOZ_APP_NAME)-globalmenu$(MOZ_PREFIX)/lib/$(MOZ_APP_NAME)-addons/extensions/globalmenu@ubuntu.com/ $(MOZ_DISTDIR)/xpi-stage/globalmenu.xpi + find debian/$(MOZ_APP_NAME)-globalmenu$(MOZ_PREFIX)/lib/$(MOZ_APP_NAME)-addons/extensions/globalmenu@ubuntu.com/ -type f -executable | xargs chmod -x +endif + +GNOME_SUPPORT_FILES = libmozgnome.so + +binary-post-install/$(MOZ_APP_NAME):: + $(foreach file,$(GNOME_SUPPORT_FILES),rm -fv debian/$(MOZ_APP_NAME)/usr/lib/firefox-*/components/$(file);) true + +ifeq (1, $(MOZ_TREE_NSPR)) +binary-post-install/$(MOZ_APP_NAME)-dev:: + rm -f debian/$(MOZ_APP_NAME)-dev$(MOZ_INCDIR)/nspr/md/_linux.cfg + dh_link -p$(MOZ_APP_NAME)-dev $(MOZ_INCDIR)/nspr/prcpucfg.h $(MOZ_INCDIR)/nspr/md/_linux.cfg +endif + +common-binary-predeb-arch:: + $(foreach file,$(DEBIAN_EXECUTABLES),chmod a+x debian/$(file);) + # we want the gnome dependencies not to be in the main package at shlibdeps runtime, hence we dont + # install them at binary-install/* stage, but copy them over _after_ the shlibdeps had been generated + $(foreach file,$(GNOME_SUPPORT_FILES),mv debian/$(MOZ_APP_NAME)-gnome-support$(MOZ_LIBDIR)/components/$(file) debian/$(MOZ_APP_NAME)$(MOZ_LIBDIR)/components/;) true + +ifeq (1, $(MOZ_TREE_NSS)) +binary-predeb/$(MOZ_APP_NAME):: + $(foreach lib,libsoftokn3.so libfreebl3.so libnssdbm3.so, \ + LD_LIBRARY_PATH=debian/$(MOZ_APP_NAME)$(MOZ_LIBDIR):$$LD_LIBRARY_PATH \ + $(MOZ_DISTDIR)/bin/shlibsign -v -i debian/$(MOZ_APP_NAME)$(MOZ_LIBDIR)/$(lib);) +endif + +pre-build:: $(subst_files) + $(shell /usr/bin/docbook-to-man $(CURDIR)/debian/thunderbird.sgml > $(CURDIR)/debian/$(MOZ_APP_NAME).1) + mkdir -p $(DEB_SRCDIR)/mozilla/extensions/globalmenu + (cd debian/globalmenu && tar -cvhf - .) | (cd $(DEB_SRCDIR)/mozilla/extensions/globalmenu && tar -xf -) + +get-compare-locales: + mkdir -p compare-locales-tmp + hg clone http://hg.mozilla.org/build/compare-locales compare-locales-tmp +ifdef HGTAG + cd compare-locales-tmp; \ + hg update $(HGTAG); \ + printf "TAG=%s" $(HGTAG) > REV +else + cd compare-locales-tmp; \ + CHANGESET=`hg summary | grep parent | cut -d ' ' -f 2 | cut -d : -f 2`; \ + printf "CHANGESET=%s" $$CHANGESET > REV +endif + cd compare-locales-tmp; \ + find . -name *.pyc | xargs rm -f; \ + rm -rf .hg .hgtags .hgignore tests *.py + rm -rf debian/compare-locales + mv compare-locales-tmp debian/compare-locales + +refresh-supported-locales: real-refresh-supported-locales debian/control + +real-refresh-supported-locales: + @echo "" + @echo "****************************************" + @echo "* Refreshing list of shipped languages *" + @echo "****************************************" + @echo "" + + @if [ ! -f $(CURDIR)/upstream-shipped-locales ] ; \ + then \ + if [ ! -z $(TARBALL) ] ; \ + then \ + tarball_opts="-o $(TARBALL)" ; \ + else \ + tarball_opts="" ; \ + fi ; \ + python debian/build/extract-file.py -d $(CURDIR) $$tarball_opts upstream-shipped-locales ; \ + touch $(CURDIR)/upstream-shipped-locales.stamp ; \ + fi +ifdef LANGPACK_O_MATIC + @perl debian/build/refresh-supported-locales.pl -s $(CURDIR)/upstream-shipped-locales -l $(LANGPACK_O_MATIC) -o $(CURDIR)/debian/config -b $(CURDIR)/debian/config/locales.blacklist +else + @perl debian/build/refresh-supported-locales.pl -s $(CURDIR)/upstream-shipped-locales -o $(CURDIR)/debian/config -b $(CURDIR)/debian/config/locales.blacklist +endif + @if [ -f $(CURDIR)/upstream-shipped-locales.stamp ] ; \ + then \ + rm -f $(CURDIR)/upstream-shipped-locales $(CURDIR)/upstream-shipped-locales.stamp ; \ + fi + +pre-auto-refresh-supported-locales: + cp debian/config/locales.shipped debian/config/locales.shipped.old + +auto-refresh-supported-locales: pre-auto-refresh-supported-locales real-refresh-supported-locales + @if ! cmp -s debian/config/locales.shipped debian/config/locales.shipped.old ; \ + then \ + echo "" ; \ + echo "****************************************************************************" ; \ + echo "* List of shipped locales is out of date. Please refresh and try again *" ; \ + echo "* To refresh, run \"debian/rules refresh-supported-locales\" in the source *" ; \ + echo "* directory. If you are in bzr, you will need to pass the location of the *" ; \ + echo "* upstream tarball, using \"TARBALL=/path/to/tarball\". If extra information *" ; \ + echo "* is required for new locales, you will also need to pass the location of *" ; \ + echo "* langpack-o-matic, using \"LANGPACK_O_MATIC=/path/to/langpack-o-matic\" *" ; \ + echo "****************************************************************************" ; \ + echo "" ; \ + rm -f debian/config/locales.shipped.old ; \ + exit 1 ; \ + fi + rm -f debian/config/locales.shipped.old + +pre-auto-update-debian-control: + cp debian/control debian/control.old + touch debian/control.in + +post-auto-update-debian-control: + @if ! cmp -s debian/control debian/control.old ; \ + then \ + echo "" ; \ + echo "*************************************************************************" ; \ + echo "* debian/control file is out of date. Please refresh and try again *" ; \ + echo "* To refresh, run \"debian/rules debian/control\" in the source directory *" ; \ + echo "*************************************************************************" ; \ + echo "" ; \ + rm -f debian/control.old ; \ + exit 1 ; \ + fi + rm -f debian/control.old + +ifdef PATCHES_DIST +CODENAME = $(PATCHES_DIST) +else +CODENAME = $(DISTRIB_CODENAME) +endif + +ifdef PATCHES_ARCH +ARCH = $(PATCHES_ARCH) +else +ARCH = $(DEB_HOST_ARCH) +endif + +enable-dist-patches: + perl $(CURDIR)/debian/build/enable-dist-patches.pl $(CODENAME) $(ARCH) $(CURDIR)/debian/patches/series + +ifeq (1, $(NO_AUTO_REFRESH_LOCALES)) +clean:: post-auto-update-debian-control +else +clean:: auto-refresh-supported-locales post-auto-update-debian-control +endif + perl $(CURDIR)/debian/build/enable-dist-patches.pl --clean $(CURDIR)/debian/patches/series + rm -f $(subst_files) + rm -f debian/stamp-* + rm -f debian/messagingmenu/*.xpi + rm -f debian/eds/*.xpi + rm -f debian/eds/components/*.xpt + rm -rf debian/l10n-mergedirs + rm -rf compare-locales --- thunderbird-10.0.2+build1.orig/debian/thunderbird.install.in +++ thunderbird-10.0.2+build1/debian/thunderbird.install.in @@ -0,0 +1,34 @@ +debian/tmp@MOZ_LIBDIR@/chrome/icons +debian/tmp@MOZ_LIBDIR@/components/*.manifest +debian/tmp@MOZ_LIBDIR@/components/*.so +debian/tmp@MOZ_LIBDIR@/defaults/messenger +debian/tmp@MOZ_LIBDIR@/isp +debian/tmp@MOZ_LIBDIR@/omni.ja +debian/tmp@MOZ_LIBDIR@/*.so +debian/tmp@MOZ_LIBDIR@/@MOZ_APP_NAME@-bin +%%ifdef MOZ_ENABLE_BREAKPAD +debian/tmp@MOZ_LIBDIR@/crashreporter +%%endif +debian/tmp@MOZ_LIBDIR@/plugin-container +debian/tmp@MOZ_LIBDIR@/chrome.manifest +debian/tmp@MOZ_LIBDIR@/blocklist.xml +debian/tmp@MOZ_LIBDIR@/extensions/\{972ce4c6-7e08-4474-a285-3208198ce6fd\} /usr/lib/@MOZ_APP_NAME@-addons/extensions +%%ifdef MOZ_ENABLE_UNITY_INTEGRATION +debian/messagingmenu/messagingmenu@mozilla.com.xpi /usr/lib/@MOZ_APP_NAME@-addons/extensions +debian/eds/edsintegration@mozilla.com.xpi /usr/lib/@MOZ_APP_NAME@-addons/extensions +%%endif +debian/tmp@MOZ_LIBDIR@/*.ini + +%%ifdef MOZ_UPDATE_CHANNEL +debian/tmp@MOZ_LIBDIR@/defaults/pref/channel-prefs.js +%%endif + +debian/@MOZ_APP_NAME@.desktop /usr/share/applications + +debian/apport/source_@MOZ_APP_NAME@.py /usr/share/apport/package-hooks/ + +debian/thunderbird.sh @MOZ_LIBDIR@ +#debian/distribution.ini @MOZ_LIBDIR@/distribution +debian/vendor.js @MOZ_LIBDIR@/defaults/pref + +debian/syspref.js /etc/@MOZ_APP_NAME@ --- thunderbird-10.0.2+build1.orig/debian/apport/source_thunderbird.py.in +++ thunderbird-10.0.2+build1/debian/apport/source_thunderbird.py.in @@ -0,0 +1,953 @@ +'''thunderbird apport hook + +/usr/share/apport/package-hooks/thunderbird.py + +Copyright (c) 2007: Hilario J. Montoliu + (c) 2011: Chris Coulson + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2 of the License, or (at your +option) any later version. See http://www.gnu.org/copyleft/gpl.html for +the full text of the license. +''' + +import os +import os.path +import sys +import fcntl +import subprocess +import struct +from subprocess import Popen +from ConfigParser import ConfigParser +import sqlite3 +import tempfile +import re +import apport.packaging +from apport.hookutils import * + +class PrefParseError(Exception): + def __init__(self, msg): + super(PrefParseError, self).__init__(msg) + self.msg = msg + + def __str__(self): + return self.msg + +class PluginRegParseError(Exception): + def __init__(self, msg): + super(PluginRegParseError, self).__init__(msg) + self.msg = msg + + def __str__(self): + return self.msg + + +class ExtensionTypeNotRecognised(Exception): + def __init__(self, ext_type, ext_id): + super(ExtensionTypeNotRecognised, self).__init__(ext_type, ext_id) + self.ext_type = ext_type + self.ext_id = ext_id + + def __str__(self): + return "Extension type not recognised: %s (ID: %s)" % (self.ext_type, self.ext_id) + + +class VersionCompareFailed(Exception): + def __init__(self, a, b, e): + if a == None: + a = '' + if b == None: + b = '' + super(VersionCompareFailed, self).__init__(a, b, e) + self.a = a + self.b = b + self.e = e + + def __str__(self): + return "Failed to compare versions A = %s, B = %s (%s)" % (self.a, self.b, str(self.e)) + + +def mkstemp_copy(path): + '''Make a copy of a file to a temporary file, and return the path''' + (outfd, outpath) = tempfile.mkstemp() + outfile = os.fdopen(outfd, 'w') + infile = open(path, 'r') + + total = 0 + while True: + data = infile.read(4096) + total += len(data) + outfile.write(data) + infile.seek(total) + outfile.seek(total) + if len(data) < 4096: break + + return outpath + + +class CompatINIParser(ConfigParser): + def __init__(self, path): + ConfigParser.__init__(self) + self.read(os.path.join(path, "compatibility.ini")) + + @property + def last_version(self): + if not self.has_section("Compatibility") or not self.has_option("Compatibility", "LastVersion"): + return None + return re.sub(r'([^_]*)(.*)', r'\1', self.get("Compatibility", "LastVersion")) + + @property + def last_buildid(self): + if not self.has_section("Compatibility") or not self.has_option("Compatibility", "LastVersion"): + return None + return re.sub(r'([^_]*)_([^/]*)/(.*)', r'\2', self.get("Compatibility", "LastVersion")) + + +class AppINIParser(ConfigParser): + def __init__(self, path): + ConfigParser.__init__(self) + self.read(os.path.join(path, "application.ini")) + + @property + def buildid(self): + if not self.has_section('App') or not self.has_option('App', 'BuildID'): + return None + return self.get('App', 'BuildID') + + @property + def appid(self): + if not self.has_section('App') or not self.has_option('App', 'ID'): + return None + return self.get('App', 'ID') + + +def compare_versions(a, b): + '''Compare 2 version numbers, returns -1 for ab + This is basically just a python reimplementation of nsVersionComparator''' + class VersionPart: + def __init__(self): + self.numA = 0 + self.strB = None + self.numC = 0 + self.extraD = None + + def parse_version(part): + res = VersionPart() + if part == None or part == '': + return (part, res) + spl = part.split('.') + + if part == '*' and len(part) == 1: + res.numA = sys.maxint + res.strB = "" + else: + res.numA = int(re.sub(r'([0-9]*)(.*)', r'\1', spl[0])) + res.strB = re.sub(r'([0-9]*)(.*)', r'\2', spl[0]) + + if res.strB == '': + res.strB = None + + if res.strB != None: + if res.strB[0] == '+': + res.numA += 1 + res.strB = "pre" + else: + tmp = res.strB + res.strB = re.sub(r'([^0-9+-]*)([0-9]*)(.*)', r'\1', tmp) + strC = re.sub(r'([^0-9+-]*)([0-9]*)(.*)', r'\2', tmp) + if strC != '': + res.numC = int(strC) + res.extraD = re.sub(r'([^0-9+-]*)([0-9]*)(.*)', r'\3', tmp) + if res.extraD == '': + res.extraD = None + + return (re.sub(r'([^\.]*)\.*(.*)', r'\2', part), res) + + def strcmp(stra, strb): + if stra == None and strb != None: + return 1 + elif stra != None and strb == None: + return -1 + if stra < strb: + return -1 + elif stra > strb: + return 1 + else: + return 0 + + def do_compare(apart, bpart): + if apart.numA < bpart.numA: + return -1 + elif apart.numA > bpart.numA: + return 1 + + res = strcmp(apart.strB, bpart.strB) + if res != 0: + return res + + if apart.numC < bpart.numC: + return -1 + elif apart.numC > bpart.numC: + return 1 + + return strcmp(apart.extraD, bpart.extraD) + + try: + saved_a = a + saved_b = b + while a or b: + (a, va) = parse_version(a) + (b, vb) = parse_version(b) + + res = do_compare(va, vb) + if res != 0: + break + except Exception as e: + raise VersionCompareFailed(saved_a, saved_b, e) + + return res + + +class Plugin: + def __init__(self): + self.lib = None + self.path = None + self.desc = None + self.package = None + + def dump(self): + if self.path.startswith(os.path.join(os.environ['HOME'], '.@MOZ_APP_NAME@')): + location = "app-profile" + else: + location = os.path.dirname(self.path) + + return "%s - Lib=%s, Location=%s%s" % (self.desc, self.lib, location, " (%s)" % self.package if self.package != None else "") + + @property + def package(self): + if self._package == None: + self._package = apport.packaging.get_file_package(self.path) + return self._package + +class PluginRegistry: + + STATE_PENDING = 0 + STATE_START = 1 + STATE_PROCESSING_1 = 2 + STATE_PROCESSING_2 = 3 + STATE_PROCESSING_3 = 4 + STATE_FINISHED = 5 + + def __init__(self, filename): + self.plugins = {} + self._state = PluginRegistry.STATE_PENDING + self._count = 0 + self._current_plugin = None + self.available = False + try: + fd = open(filename, 'r') + skip = 0 + for line in fd.readlines(): + if skip == 0: + skip = self._parseline(line) + if skip == -1: + break + else: + skip -= 1 + self.available = True + except Exception as e: + self.parse_error = str(e) + + def _parseline(self, line): + line = line.strip() + if line != '' and line[0] == '[' and self._state != PluginRegistry.STATE_START and self._state != PluginRegistry.STATE_PENDING: + raise PluginRegParseError('Unexpected section header') + + if self._state == PluginRegistry.STATE_PENDING: + if line == '[PLUGINS]': + self._state += 1 + return 0 + elif self._state == PluginRegistry.STATE_START: + if line == '': + return 0 + if line[0] == '[': + self._state = PluginRegistry.STATE_FINISHED + return -1 + self._current_plugin = Plugin() + self._current_plugin.lib = line.split(':')[0] + self._state += 1 + return 0 + elif self._state == PluginRegistry.STATE_PROCESSING_1: + self._current_plugin.path = line.split(':')[0] + if self._current_plugin.path[0] != '/': + raise PluginRegParseError("Invalid path %s" % self._current_plugin.path) + self._state += 1 + return 3 + elif self._state == PluginRegistry.STATE_PROCESSING_2: + self._current_plugin.desc = line.split(':')[0] + self._state += 1 + return 0 + elif self._state == PluginRegistry.STATE_PROCESSING_3: + self.plugins[self._count] = self._current_plugin + self._count += 1 + self._state = PluginRegistry.STATE_START + return int(line.strip()) + else: + return -1 + + def __getitem__(self, key): + if not key in self.plugins: + raise IndexError + return self.plugins[key] + + def __iter__(self): + self._current_index = 0 + return self + + def next(self): + if self._current_index == len(self.plugins): + raise StopIteration + ret = self.plugins[self._current_index] + self._current_index += 1 + return ret + + def __len__(self): + return len(self.plugins) + + +class PrefFile: + '''Class which represents a pref file. Handles all of the parsing, and can be accessed + like a normal python dictionary''' + PREF_WHITELIST = [ + r'accessibility\.*', + r'browser\.fixup\.*', + r'browser\.history_expire_*', + r'browser\.link\.open_newwindow', + r'browser\.mousewheel\.*', + r'browser\.places\.*', + r'browser\.startup\.homepage', + r'browser\.tabs\.*', + r'browser\.zoom\.*', + r'dom\.*', + r'extensions\.checkCompatibility\.*', + r'extensions\.lastAppVersion\.*', + r'font\.*', + r'general\.skins\.*', + r'general\.useragent\.*', + r'gfx\.*', + r'html5\.*', + r'mozilla\.widget\.render\-mode', + r'layers\.*', + r'javascript\.*', + r'keyword\.*', + r'layout\.css\.dpi', + r'network\.*', + r'places\.*', + r'plugin\.*', + r'plugins\.*', + r'print\.*', + r'privacy\.*', + r'security\.*', + r'webgl\.*' + ] + + PREF_BLACKLIST = [ + r'^network.*proxy\.*', + r'.*print_to_filename$', + r'print\.tmp\.', + r'print\.printer_*' + ] + + def __init__(self, filename, whitelist=None, blacklist=None): + self.whitelist = whitelist if whitelist != None else PrefFile.PREF_WHITELIST + self.blacklist = blacklist if blacklist != None else PrefFile.PREF_BLACKLIST + self.prefs = {} + self._in_comment = False + self.available = False + try: + f = open(filename) + for line in f.readlines(): + self._parseline(line) + self.available = True + except Exception as e: + self.parse_error = str(e) + + def _maybe_add_pref(self, key, value): + for match in self.blacklist: + if re.match(match, key): + return + + for match in self.whitelist: + if re.match(match, key): + self.prefs[key] = value + + def _do_parse(self, line, start): + # XXX: I pity the poor soul who ever needs to change anything inside this function + in_escape = False + in_name = True + in_value = False + in_quote = False + has_name = False + has_value = False + done = False + name = "" + value = "" + for i in range(start, len(line)): + if in_escape == True: + in_escape = False + if in_name == True: + name += line[i] + elif in_value == True: + value += line[i] + else: + raise PrefParseError("Unexpected character") + elif line[i] == '"': + if in_name == False and in_value == False: + raise PrefParseError("Unexpected double quote") + in_quote = not in_quote + if in_quote == False: + if in_name == True: + in_name = False + has_name = True + elif in_value == True: + in_value = False + has_value = True + elif line[i] == '\\': + if in_quote == True: + in_escape = True + else: + raise PrefParseError("Unexpected escape character") + elif line[i] == ' ' and in_quote == False: + if in_name == True and len(name) > 0: + in_name = False + has_name = True + elif in_value == True and len(value) > 0: + in_value = False + has_value = True + elif line[i] == ',' and in_quote == False: + if (in_name == True or has_name == True) and in_value == False and has_value == False: + in_name = False + in_value = True + has_name = True + else: + raise PrefParseError("Unexpected comma") + elif line[i] == ')' and in_quote == False: + if (in_value == True or has_value == True) and has_name == True and done == False: + in_value = False + has_value = True + done = True + else: + raise PrefParseError("Unexpected close braces character for " + line) + elif line[i] == ';' and in_quote == False: + if done == False: + raise PrefParseError("Unexpected line terminator") + else: + if in_name == True: + name += line[i] + elif in_value == True: + value += line[i] + else: + raise PrefParseError("Unexpected character") + + if done == True and in_name == False and in_value == False: + self._maybe_add_pref(name, value) + else: + raise PrefParseError("Failed to parse line") + + def _parseline(self, line): + line = line.strip() + if line == '' or line[0] == '#' or line.startswith('//'): + return + + if line.startswith('/*'): + self._in_comment = True + + if self._in_comment == True: + for i in range(len(line)): + if i < len(line) - 1 and line[i]+line[i+1] == '*/': + self._in_comment = False + break + return + + if line.startswith("user_pref("): + self._do_parse(line, 10) + elif line.startswith("pref("): + self._do_parse(line, 5) + else: + raise PrefParseError("Unexpected line start") + + def __getitem__(self, key): + if not key in self.prefs: + raise IndexError + return self.prefs[key] + + def __iter__(self): + self.keys = self.prefs.keys() + self.current = 0 + return self + + def next(self): + if self.current == len(self.keys): + raise StopIteration + val = self.keys[self.current] + self.current += 1 + return val + + def __len__(self): + return len(self.prefs) + + +class Extension: + '''Small class representing an extension''' + def __init__(self, ext_id, location, ver, ext_type, active, desc, min_appver, max_appver, cur_appver): + self.ext_id = ext_id; + self.location = location + self.ver = ver + self.ext_type = ext_type + self.active = active + self.desc = desc + self.min_appver = min_appver + self.max_appver = max_appver + self.cur_appver = cur_appver + + def dump(self): + active = "Yes" if self.active == 1 else "No" + return "%s - ID=%s, Version=%s, minVersion=%s, maxVersion=%s, Location=%s, Type=%s, Active=%s" % (self.desc, self.ext_id, self.ver, self.min_appver, self.max_appver, self.location, self.ext_type, active) + + @property + def active_but_incompatible(self): + return self.active and (self.cur_appver != None and compare_versions(self.cur_appver, self.min_appver) == -1 or compare_versions(self.cur_appver, self.max_appver) == 1) + + +class Profile: + '''Container to represent a profile''' + def __init__(self, id, name, path, is_default, appini): + self.extensions = {} + self.locales = {} + self.themes = {} + self.id = id + self.name = name + self.path = path + self.default = is_default + self.appini = appini + + try: + self._populate_extensions() + except: + self.extensions = None + + self.prefs = PrefFile(os.path.join(path, "prefs.js")) + self.userjs = PrefFile(os.path.join(path, "user.js")) + self.plugins = PluginRegistry(os.path.join(path, "pluginreg.dat")) + + def _populate_extensions(self): + # We copy the db as it's locked whilst Thunderbird is open. This is still racy + # though, as it could be modified during the copy, leaving us with a corrupt + # DB. Can we detect this somehow? + tmp_db = mkstemp_copy(os.path.join(self.path, "extensions.sqlite")) + conn = sqlite3.connect(tmp_db) + + def get_extension_from_row(row): + moz_id = row[0] + ext_id = row[1] + location = row[2] + ext_ver = row[3] + ext_type = row[4] + active = True if row[6] == 1 else False + + cur = conn.cursor() + cur.execute("select name from locale where id=:id", { "id": row[5] }) + desc = cur.fetchone()[0] + + cur = conn.cursor() + cur.execute("select minVersion, maxVersion from targetApplication where addon_internal_id=:id and (id=:appid or id=:tkid)", \ + { "id": row[0], "appid": self.appini.appid, "tkid": "toolkit@mozilla.org" }) + (min_ver, max_ver) = cur.fetchone() + + return Extension(ext_id, location, ext_ver, ext_type, active, desc, min_ver, max_ver, self.last_version) + + cur = conn.cursor() + cur.execute("select internal_id, id, location, version, type, defaultLocale, active from addon") + rows = cur.fetchall() + for row in rows: + extension = get_extension_from_row(row) + if extension.ext_type == "extension": + storage_array = self.extensions + elif extension.ext_type == "locale": + storage_array = self.locales + elif extension.ext_type == "theme": + storage_array = self.themes + else: + raise ExtensionTypeNotRecognised(extension.type, extension.ext_id) + + if not extension.location in storage_array: + storage_array[extension.location] = [] + storage_array[extension.location].append(extension) + + os.remove(tmp_db) + + def _do_dump(self, storage_array): + if self.extensions == None: + return "extensions.sqlite corrupt or missing" + + ret = "" + for location in storage_array: + ret += "Location: " + location + "\n\n" + for extension in storage_array[location]: + prefix = " (Inactive) " if not extension.active else "" + ret += "\t%s%s = ID=%s, Version=%s, minVersion=%s, maxVersion=%s\n" % (prefix, extension.desc, extension.ext_id, extension.ver, extension.min_appver, extension.max_appver) + ret += "\n\n\n" + return ret + + @property + def running(self): + if not hasattr(self, '_running'): + # We detect if this profile is running or not by trying to lock the lockfile + # If we can't lock it, then Thunderbird is running + fd = os.open(os.path.join(self.path, ".parentlock"), os.O_WRONLY|os.O_CREAT|os.O_TRUNC, 0666) + lock = struct.pack("hhqqi", 1, 0, 0, 0, 0) + try: + fcntl.fcntl(fd, fcntl.F_SETLK, lock) + self._running = False + # If we acquired the lock, ensure that we unlock again immediately + lock = struct.pack("hhqqi", 2, 0, 0, 0, 0) + fcntl.fcntl(fd, fcntl.F_SETLK, lock) + except: + self._running = True + + return self._running + + def dump_extensions(self): + return self._do_dump(self.extensions) + + def dump_locales(self): + return self._do_dump(self.locales) + + def dump_themes(self): + return self._do_dump(self.themes) + + def dump_prefs(self): + if self.prefs.available == False: + if os.path.exists(os.path.join(self.path, "prefs.js")): + return "prefs.js exists but isn't parseable - %s" % self.prefs.parse_error + else: + return "prefs.js is not available" + + ret = '' + for pref in self.prefs: + ret += pref + " - " + self.prefs[pref] + '\n' + return ret + + def dump_user_js(self): + if self.userjs.available == False: + if os.path.exists(os.path.join(self.path, "user.js")): + return "user.js exists but isn't parseable - %s" % self.userjs.parse_error + else: + return None + + ret = '' + for pref in self.userjs: + ret += pref + " - " + self.userjs[pref] + '\n' + return ret + + def dump_plugins(self): + if self.plugins.available == False: + if os.path.exists(os.path.join(self.path, "pluginreg.dat")): + return "pluginreg.dat exists but isn't parseable = %s" % self.plugins.parse_error + else: + return "pluginreg.dat isn't available" + + ret = '' + for plugin in self.plugins: + ret += plugin.dump() + '\n' + return ret + + def get_plugin_packages(self, pkglist): + if self.plugins.available == False: + return None + + for plugin in self.plugins: + if plugin.package != None and plugin.package not in pkglist: + pkglist.append(plugin.package) + + @property + def current(self): + return True if self.appini.buildid == self.last_buildid or self.appini.buildid == None else False + + @property + def has_active_but_incompatible_extensions(self): + if self.last_version == None: + return False + for storage_array in self.extensions, self.locales, self.themes: + for location in storage_array: + for extension in storage_array[location]: + if extension.active_but_incompatible: + return True + return False + + def dump_active_but_incompatible_extensions(self): + if self.last_version == None: + return "Unavailable (corrupt or non-existant compatibility.ini)" + res = '' + for storage_array in self.extensions, self.locales, self.themes: + for location in storage_array: + for extension in storage_array[location]: + if extension.active_but_incompatible: + res += extension.dump() + "\n" + return res + + @property + def has_forced_layers_acceleration(self): + if self.prefs != None and "layers.acceleration.force-enabled" in self.prefs and self.prefs["layers.acceleration.force-enabled"] == "true": + return True + + if self.userjs != None and "layers.acceleration.force-enabled" in self.userjs and self.userjs["layers.acceleration.force-enabled"] == "true": + return True + + return False + + @property + def compatini(self): + if not hasattr(self, '_compatini'): + self._compatini = CompatINIParser(self.path) + return self._compatini + + @property + def last_version(self): + return self.compatini.last_version + + @property + def last_buildid(self): + return self.compatini.last_buildid + + @property + def addon_compat_check_disabled(self): + is_nightly = re.sub(r'^[^\.]+\.[0-9]+([a-z0-9]*).*', r'\1', self.last_version) == 'a1' + if is_nightly == True: + pref = "extensions.checkCompatibility.nightly" + else: + pref = "extensions.checkCompatibility.%s" % re.sub(r'(^[^\.]+\.[0-9]+[a-z]*).*', r'\1', self.last_version) + return pref in self.prefs and self.prefs[pref] == 'false' + + +class Profiles: + '''Small class to build an array of profiles from a profile.ini. + Can be accessed like a normal array''' + def __init__(self, ini_file, appini): + self.profiles = {} + + parser = ConfigParser() + parser.read(ini_file) + profile_folder = os.path.dirname(ini_file) + + i = 0 + for section in parser.sections(): + if section == "General": continue + if not parser.has_option(section, "Path"): continue + path = parser.get(section, "Path") + name = parser.get(section, "Name") + is_default = True if parser.has_option(section, "Default") and parser.getint(section, "Default") == 1 else False + self.profiles[i] = Profile(section, name, os.path.join(profile_folder, path), is_default, appini) + i += 1 + + # No "Default" entry when there is one profile + if len(self) == 1: self[0].default = True + + def __getitem__(self, key): + if not key in self.profiles: + raise IndexError + return self.profiles[key] + + def __iter__(self): + self.current_index = 0 + return self + + def __len__(self): + return len(self.profiles) + + def next(self): + if self.current_index == len(self.profiles): + raise StopIteration + else: + val = self.profiles[self.current_index] + self.current_index += 1 + return val + + def dump_profile_summaries(self): + res = '' + for profile in self: + running = " (Running)" if profile.running == True else "" + default = " (Default)" if profile.default else "" + outdated = " (Out of date)" if not profile.current else "" + res += "%s%s - LastVersion=%s/%s%s%s\n" % (profile.id, default, profile.last_version, profile.last_buildid, running, outdated) + return res + + +def recent_kernlog(pattern): + '''Extract recent messages from kern.log or message which match a regex. + pattern should be a "re" object. ''' + lines = '' + if os.path.exists('/var/log/kern.log'): + file = '/var/log/kern.log' + elif os.path.exists('/var/log/messages'): + file = '/var/log/messages' + else: + return lines + + for line in open(file): + if pattern.search(line): + lines += line + return lines + + +def recent_auditlog(pattern): + '''Extract recent messages from kern.log or message which match a regex. + pattern should be a "re" object. ''' + lines = '' + if os.path.exists('/var/log/audit/audit.log'): + file = '/var/log/audit/audit.log' + else: + return lines + + for line in open(file): + if pattern.search(line): + lines += line + return lines + + +def add_info(report, ui): + '''Entry point for apport''' + + def populate_item(key, data): + if data != None and data.strip() != '': + report[key] = data + + def append_tag(tag): + tags = report.get('Tags', '') + if tags: + tags += ' ' + report['Tags'] = tags + tag + + ddproc = Popen(['dpkg-divert', '--truename', '/usr/bin/@MOZ_APP_NAME@'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + truename = ddproc.communicate() + if ddproc.returncode == 0 and truename[0].strip() != '/usr/bin/@MOZ_APP_NAME@': + ddproc = Popen(['dpkg-divert', '--listpackage', '/usr/bin/@MOZ_APP_NAME@'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + diverter = ddproc.communicate() + report['UnreportableReason'] = "/usr/bin/@MOZ_APP_NAME@ has been diverted by a third party package (%s)" % diverter[0].strip() + return + + conf_dir = os.path.join(os.environ["HOME"], ".@MOZ_APP_NAME@") + appini = AppINIParser('@MOZ_LIBDIR@') + populate_item("BuildID", appini.buildid) + try: + profiles = Profiles(os.path.join(conf_dir, "profiles.ini"), appini) + populate_item("Profiles", profiles.dump_profile_summaries()) + except: + pass + finally: + if len(profiles) == 0: report["NoProfiles"] = 'True' + + for profile in profiles: + if profile.running and not profile.current: + report["UnreportableReason"] = "Thunderbird has been upgraded since you started it. Please restart all instances of Thunderbird and try again" + return + + seen_default = False + running_incompatible_addons = False + forced_layers_accel = False + addon_compat_check_disabled = False + for profile in profiles: + if profile.default and not seen_default and len(profiles) > 1: + prefix = 'DefaultProfile' + seen_default = True + elif len(profiles) > 1: + prefix = profile.id + else: + prefix = '' + + populate_item(prefix + "Extensions", profile.dump_extensions()) + populate_item(prefix + "Locales", profile.dump_locales()) + populate_item(prefix + "Themes", profile.dump_themes()) + populate_item(prefix + "Plugins", profile.dump_plugins()) + populate_item(prefix + "IncompatibleExtensions", profile.dump_active_but_incompatible_extensions()) + populate_item(prefix + "Prefs", profile.dump_prefs()) + populate_item(prefix + "UserJS", profile.dump_user_js()) + + if (profile.current or profile.default) and profile.has_active_but_incompatible_extensions: + running_incompatible_addons = True + if (profile.current or profile.default) and profile.has_forced_layers_acceleration: + forced_layers_accel = True + if (profile.current or profile.default) and profile.addon_compat_check_disabled: + addon_compat_check_disabled = True + + plugin_packages = [] + for profile in profiles: + profile.get_plugin_packages(plugin_packages) + if len(plugin_packages) > 0: attach_related_packages(report, plugin_packages) + + report["RunningIncompatibleAddons"] = 'True' if running_incompatible_addons == True else 'False' + report["ForcedLayersAccel"] = 'True' if forced_layers_accel == True else 'False' + report["AddonCompatCheckDisabled"] = 'True' if addon_compat_check_disabled == True else 'False' + + syspref = PrefFile("/etc/@MOZ_APP_NAME@/syspref.js") + if syspref.available == False: + report["EtcThunderbirdSyspref"] = "Cannot parse /etc/@MOZ_APP_NAME@/syspref.js - %s" % syspref.parse_error + for pref in syspref: + report["EtcThunderbirdSyspref"] += "%s - %s\n" % (pref, syspref[pref]) + + if '@MOZ_APP_NAME@' == 'thunderbird-trunk': + report["Channel"] = 'nightly' + append_tag('nightly-channel') + if report["SourcePackage"] == 'thunderbird-trunk': + report["SourcePackage"] = 'thunderbird' + else: + channelpref = PrefFile("@MOZ_LIBDIR@/defaults/pref/channel-prefs.js", whitelist = [ r'app\.update\.channel' ]) + if channelpref.available == False: + report["Channel"] = 'release' + else: + if "app.update.channel" in channelpref: + report["Channel"] = channelpref["app.update.channel"] + append_tag(channelpref["app.update.channel"] + '-channel') + else: + report["Channel"] = 'Unavailable' + + if os.path.exists('/sys/bus/pci'): + report['Lspci'] = command_output(['lspci','-vvnn']) + attach_alsa(report) + attach_network(report) + attach_wifi(report) + + # XXX: Apparmor stuff disabled for Thunderbird + # Get apparmor stuff if the profile isn't disabled. copied from + # source_apparmor.py until apport runs hooks via attach_related_packages + #apparmor_disable_dir = "/etc/apparmor.d/disable" + #add_apparmor = True + #if os.path.isdir(apparmor_disable_dir): + # for f in os.listdir(apparmor_disable_dir): + # if f.startswith("usr.bin.@MOZ_APP_NAME@"): + # add_apparmor = False + # break + #if add_apparmor: + # attach_related_packages(report, ['apparmor', 'libapparmor1', + # 'libapparmor-perl', 'apparmor-utils', 'auditd', 'libaudit0']) + + # attach_file(report, '/proc/version_signature', 'ProcVersionSignature') + # attach_file(report, '/proc/cmdline', 'ProcCmdline') + + # sec_re = re.compile('audit\(|apparmor|selinux|security', re.IGNORECASE) + # report['KernLog'] = recent_kernlog(sec_re) + + # if os.path.exists("/var/log/audit"): + # # this needs to be run as root + # report['AuditLog'] = recent_auditlog(sec_re) + + +if __name__ == "__main__": + import apport + from apport import packaging + D = {} + D['Package'] = 'thunderbird' + add_info(D, None) + for KEY in D.keys(): + print '''-------------------%s: ------------------\n''' % KEY, D[KEY] --- thunderbird-10.0.2+build1.orig/debian/apport/blacklist.in +++ thunderbird-10.0.2+build1/debian/apport/blacklist.in @@ -0,0 +1,2 @@ +@MOZ_LIBDIR@/@MOZ_APP_NAME@-bin +@MOZ_LIBDIR@/plugin-container --- thunderbird-10.0.2+build1.orig/debian/apport/native-origins.in +++ thunderbird-10.0.2+build1/debian/apport/native-origins.in @@ -0,0 +1,3 @@ +LP-PPA-ubuntu-mozilla-daily +LP-PPA-ubuntu-mozilla-daily-thunderbird-aurora +LP-PPA-mozillateam-thunderbird-next --- thunderbird-10.0.2+build1.orig/debian/patches/fix-build-failure-without-yarr-jit2.patch +++ thunderbird-10.0.2+build1/debian/patches/fix-build-failure-without-yarr-jit2.patch @@ -0,0 +1,286 @@ +From: Mike Hommey +Date: Sat, 24 Dec 2011 09:56:58 +0100 +Subject: Bug 691898 - Use YARR interpreter instead of PCRE on platforms where + YARR JIT is not supported + +--- + js/src/Makefile.in | 21 +++++++++++++-------- + js/src/vm/RegExpObject-inl.h | 28 ++++++---------------------- + js/src/vm/RegExpObject.cpp | 36 ------------------------------------ + js/src/vm/RegExpObject.h | 27 ++++++--------------------- + js/src/yarr/wtfbridge.h | 2 -- + 5 files changed, 25 insertions(+), 89 deletions(-) + +diff --git a/mozilla/js/src/Makefile.in b/mozilla/js/src/Makefile.in +index fc48cbd..49f0bdc 100644 +--- a/mozilla/js/src/Makefile.in ++++ b/mozilla/js/src/Makefile.in +@@ -416,15 +416,20 @@ CPPSRCS += checks.cc \ + + ifeq (,$(filter arm% sparc %86 x86_64,$(TARGET_CPU))) + +-VPATH += $(srcdir)/yarr/pcre \ ++VPATH += $(srcdir)/assembler \ ++ $(srcdir)/assembler/wtf \ ++ $(srcdir)/yarr \ + $(NULL) + + CPPSRCS += \ +- pcre_compile.cpp \ +- pcre_exec.cpp \ +- pcre_tables.cpp \ +- pcre_xclass.cpp \ +- pcre_ucp_searchfuncs.cpp \ ++ Assertions.cpp \ ++ OSAllocatorOS2.cpp \ ++ OSAllocatorPosix.cpp \ ++ OSAllocatorWin.cpp \ ++ PageBlock.cpp \ ++ YarrInterpreter.cpp \ ++ YarrPattern.cpp \ ++ YarrSyntaxChecker.cpp \ + $(NULL) + else + +@@ -1015,10 +1020,10 @@ endif + # Needed to "configure" it correctly. Unfortunately these + # flags wind up being applied to all code in js/src, not just + # the code in js/src/assembler. +-CXXFLAGS += -DUSE_SYSTEM_MALLOC=1 -DENABLE_ASSEMBLER=1 ++CXXFLAGS += -DUSE_SYSTEM_MALLOC=1 + + ifneq (,$(ENABLE_YARR_JIT)$(ENABLE_TRACEJIT)$(ENABLE_METHODJIT)) +-CXXFLAGS += -DENABLE_JIT=1 ++CXXFLAGS += -DENABLE_JIT=1 -DENABLE_ASSEMBLER=1 + endif + + INCLUDES += -I$(srcdir)/assembler -I$(srcdir)/yarr +diff --git a/mozilla/js/src/vm/RegExpObject-inl.h b/mozilla/js/src/vm/RegExpObject-inl.h +index 5f7817d..91108a7 100644 +--- a/mozilla/js/src/vm/RegExpObject-inl.h ++++ b/mozilla/js/src/vm/RegExpObject-inl.h +@@ -327,6 +327,7 @@ RegExpPrivate::create(JSContext *cx, JSString *source, RegExpFlag flags, TokenSt + return RetType(self); + } + ++#if ENABLE_YARR_JIT + /* This function should be deleted once bad Android platforms phase out. See bug 604774. */ + inline bool + RegExpPrivateCode::isJITRuntimeEnabled(JSContext *cx) +@@ -337,12 +338,12 @@ RegExpPrivateCode::isJITRuntimeEnabled(JSContext *cx) + return true; + #endif + } ++#endif + + inline bool + RegExpPrivateCode::compile(JSContext *cx, JSLinearString &pattern, TokenStream *ts, + uintN *parenCount, RegExpFlag flags) + { +-#if ENABLE_YARR_JIT + /* Parse the pattern. */ + ErrorCode yarrError; + YarrPattern yarrPattern(pattern, bool(flags & IgnoreCaseFlag), bool(flags & MultilineFlag), +@@ -359,7 +360,7 @@ RegExpPrivateCode::compile(JSContext *cx, JSLinearString &pattern, TokenStream * + * case we have to bytecode compile it. + */ + +-#ifdef JS_METHODJIT ++#if ENABLE_YARR_JIT && defined(JS_METHODJIT) + if (isJITRuntimeEnabled(cx) && !yarrPattern.m_containsBackreferences) { + if (!cx->compartment->ensureJaegerCompartmentExists(cx)) + return false; +@@ -371,21 +372,11 @@ RegExpPrivateCode::compile(JSContext *cx, JSLinearString &pattern, TokenStream * + } + #endif + ++#if ENABLE_YARR_JIT + codeBlock.setFallBack(true); ++#endif + byteCode = byteCompile(yarrPattern, cx->compartment->regExpAllocator).get(); + return true; +-#else /* !defined(ENABLE_YARR_JIT) */ +- int error = 0; +- compiled = jsRegExpCompile(pattern.chars(), pattern.length(), +- ignoreCase() ? JSRegExpIgnoreCase : JSRegExpDoNotIgnoreCase, +- multiline() ? JSRegExpMultiline : JSRegExpSingleLine, +- parenCount, &error); +- if (error) { +- reportPCREError(cx, error); +- return false; +- } +- return true; +-#endif + } + + inline bool +@@ -431,19 +422,12 @@ RegExpPrivateCode::execute(JSContext *cx, const jschar *chars, size_t start, siz + else + result = JSC::Yarr::execute(codeBlock, chars, start, length, output); + #else +- result = jsRegExpExecute(cx, compiled, chars, length, start, output, outputCount); ++ result = JSC::Yarr::interpret(byteCode, chars, start, length, output); + #endif + + if (result == -1) + return Success_NotFound; + +-#if !ENABLE_YARR_JIT +- if (result < 0) { +- reportPCREError(cx, result); +- return Error; +- } +-#endif +- + JS_ASSERT(result >= 0); + return Success; + } +diff --git a/mozilla/js/src/vm/RegExpObject.cpp b/mozilla/js/src/vm/RegExpObject.cpp +index f75c6a5..7631dd5 100644 +--- a/mozilla/js/src/vm/RegExpObject.cpp ++++ b/mozilla/js/src/vm/RegExpObject.cpp +@@ -251,7 +251,6 @@ Class js::RegExpClass = { + NULL /* trace */ + }; + +-#if ENABLE_YARR_JIT + void + RegExpPrivateCode::reportYarrError(JSContext *cx, TokenStream *ts, ErrorCode error) + { +@@ -283,41 +282,6 @@ RegExpPrivateCode::reportYarrError(JSContext *cx, TokenStream *ts, ErrorCode err + } + } + +-#else /* !ENABLE_YARR_JIT */ +- +-void +-RegExpPrivateCode::reportPCREError(JSContext *cx, int error) +-{ +-#define REPORT(msg_) \ +- JS_ReportErrorFlagsAndNumberUC(cx, JSREPORT_ERROR, js_GetErrorMessage, NULL, msg_); \ +- return +- switch (error) { +- case -2: REPORT(JSMSG_REGEXP_TOO_COMPLEX); +- case 0: JS_NOT_REACHED("Precondition violation: an error must have occurred."); +- case 1: REPORT(JSMSG_TRAILING_SLASH); +- case 2: REPORT(JSMSG_TRAILING_SLASH); +- case 3: REPORT(JSMSG_REGEXP_TOO_COMPLEX); +- case 4: REPORT(JSMSG_BAD_QUANTIFIER); +- case 5: REPORT(JSMSG_BAD_QUANTIFIER); +- case 6: REPORT(JSMSG_BAD_CLASS_RANGE); +- case 7: REPORT(JSMSG_REGEXP_TOO_COMPLEX); +- case 8: REPORT(JSMSG_BAD_CLASS_RANGE); +- case 9: REPORT(JSMSG_BAD_QUANTIFIER); +- case 10: REPORT(JSMSG_UNMATCHED_RIGHT_PAREN); +- case 11: REPORT(JSMSG_REGEXP_TOO_COMPLEX); +- case 12: REPORT(JSMSG_UNMATCHED_RIGHT_PAREN); +- case 13: REPORT(JSMSG_REGEXP_TOO_COMPLEX); +- case 14: REPORT(JSMSG_MISSING_PAREN); +- case 15: REPORT(JSMSG_BAD_BACKREF); +- case 16: REPORT(JSMSG_REGEXP_TOO_COMPLEX); +- case 17: REPORT(JSMSG_REGEXP_TOO_COMPLEX); +- default: +- JS_NOT_REACHED("Precondition violation: unknown PCRE error code."); +- } +-#undef REPORT +-} +-#endif /* ENABLE_YARR_JIT */ +- + bool + js::ParseRegExpFlags(JSContext *cx, JSString *flagStr, RegExpFlag *flagsOut) + { +diff --git a/mozilla/js/src/vm/RegExpObject.h b/mozilla/js/src/vm/RegExpObject.h +index 1449d56..279f3c0 100644 +--- a/mozilla/js/src/vm/RegExpObject.h ++++ b/mozilla/js/src/vm/RegExpObject.h +@@ -49,8 +49,6 @@ + #include "yarr/Yarr.h" + #if ENABLE_YARR_JIT + #include "yarr/YarrJIT.h" +-#else +-#include "yarr/pcre/pcre.h" + #endif + + namespace js { +@@ -153,48 +151,39 @@ ResetRegExpObject(JSContext *cx, AlreadyIncRefed rep); + /* Abstracts away the gross |RegExpPrivate| backend details. */ + class RegExpPrivateCode + { +-#if ENABLE_YARR_JIT + typedef JSC::Yarr::BytecodePattern BytecodePattern; + typedef JSC::Yarr::ErrorCode ErrorCode; ++ typedef JSC::Yarr::YarrPattern YarrPattern; ++#if ENABLE_YARR_JIT + typedef JSC::Yarr::JSGlobalData JSGlobalData; + typedef JSC::Yarr::YarrCodeBlock YarrCodeBlock; +- typedef JSC::Yarr::YarrPattern YarrPattern; + + /* Note: Native code is valid only if |codeBlock.isFallBack() == false|. */ + YarrCodeBlock codeBlock; +- BytecodePattern *byteCode; +-#else +- JSRegExp *compiled; + #endif ++ BytecodePattern *byteCode; + + public: + RegExpPrivateCode() + : + #if ENABLE_YARR_JIT + codeBlock(), +- byteCode(NULL) +-#else +- compiled(NULL) + #endif ++ byteCode(NULL) + { } + + ~RegExpPrivateCode() { + #if ENABLE_YARR_JIT + codeBlock.release(); ++#endif + if (byteCode) + Foreground::delete_(byteCode); +-#else +- if (compiled) +- jsRegExpFree(compiled); +-#endif + } + + #if ENABLE_YARR_JIT + static inline bool isJITRuntimeEnabled(JSContext *cx); +- void reportYarrError(JSContext *cx, TokenStream *ts, JSC::Yarr::ErrorCode error); +-#else +- void reportPCREError(JSContext *cx, int error); + #endif ++ void reportYarrError(JSContext *cx, TokenStream *ts, JSC::Yarr::ErrorCode error); + + inline bool compile(JSContext *cx, JSLinearString &pattern, TokenStream *ts, uintN *parenCount, + RegExpFlag flags); +@@ -205,11 +194,7 @@ class RegExpPrivateCode + int *output, size_t outputCount); + + static size_t getOutputSize(size_t pairCount) { +-#if ENABLE_YARR_JIT + return pairCount * 2; +-#else +- return pairCount * 3; /* Should be x2, but PCRE has... needs. */ +-#endif + } + }; + +diff --git a/mozilla/js/src/yarr/wtfbridge.h b/mozilla/js/src/yarr/wtfbridge.h +index ac41d08..fb8eb86 100644 +--- a/mozilla/js/src/yarr/wtfbridge.h ++++ b/mozilla/js/src/yarr/wtfbridge.h +@@ -49,9 +49,7 @@ + #include "jsprvtd.h" + #include "vm/String.h" + #include "assembler/wtf/Platform.h" +-#if ENABLE_YARR_JIT + #include "assembler/jit/ExecutableAllocator.h" +-#endif + + namespace JSC { namespace Yarr { + + --- thunderbird-10.0.2+build1.orig/debian/patches/unity-globalmenu-build-support.patch +++ thunderbird-10.0.2+build1/debian/patches/unity-globalmenu-build-support.patch @@ -0,0 +1,66 @@ +Description: Support building globalmenu-extension from the Thunderbird source +Author: Chris Coulson +Forwarded: not-needed + +--- a/mozilla/config/autoconf.mk.in ++++ b/mozilla/config/autoconf.mk.in +@@ -555,6 +555,11 @@ MOZ_ENABLE_D3D10_LAYER = @MOZ_ENABLE_D3 + MOZ_GTK2_CFLAGS = @MOZ_GTK2_CFLAGS@ + MOZ_GTK2_LIBS = @MOZ_GTK2_LIBS@ + ++DBUSMENU_CFLAGS = @DBUSMENU_CFLAGS@ ++DBUSMENU_LIBS = @DBUSMENU_LIBS@ ++ ++UNITY_GLOBALMENU = @UNITY_GLOBALMENU@ ++ + MOZ_QT_CFLAGS = @MOZ_QT_CFLAGS@ + MOZ_QT_LIBS = @MOZ_QT_LIBS@ + MOZ_ENABLE_QTNETWORK = @MOZ_ENABLE_QTNETWORK@ +--- a/mozilla/config/system-headers ++++ b/mozilla/config/system-headers +@@ -395,6 +395,10 @@ LFocusBox.h + LGrafPortView.h + LHandleStream.h + libc_r.h ++#ifdef UNITY_GLOBALMENU ++libdbusmenu-glib/server.h ++libdbusmenu-gtk/menuitem.h ++#endif + libelf.h + libelf/libelf.h + libgen.h +@@ -1030,6 +1034,11 @@ osso-mem.h + #ifdef MOZ_ENABLE_GIO + gio/gio.h + #endif ++#ifdef UNITY_GLOBALMENU ++#ifndef MOZ_ENABLE_GIO ++gio/gio.h ++#endif ++#endif + #ifdef MOZ_ENABLE_LIBCONIC + conic/conicconnection.h + conic/conicconnectionevent.h +--- a/mozilla/configure.in ++++ b/mozilla/configure.in +@@ -8810,6 +8810,20 @@ AC_SUBST(MOZ_CAIRO_LIBS) + AC_SUBST(MOZ_TREE_PIXMAN) + + dnl ======================================================== ++dnl Dbus-Menu ++dnl ======================================================== ++ ++UNITY_GLOBALMENU=0 ++if test `echo "$MOZ_EXTENSIONS" | grep -c globalmenu` -ne 0; then ++ PKG_CHECK_MODULES(DBUSMENU, dbusmenu-gtk-0.4 gio-2.0) ++ UNITY_GLOBALMENU=1 ++ AC_SUBST(DBUSMENU_CFLAGS) ++ AC_SUBST(DBUSMENU_LIBS) ++ AC_DEFINE(UNITY_GLOBALMENU) ++fi ++AC_SUBST(UNITY_GLOBALMENU) ++ ++dnl ======================================================== + dnl qcms + dnl ======================================================== + --- thunderbird-10.0.2+build1.orig/debian/patches/theme-refresh-messenger-toolbar-icons.patch +++ thunderbird-10.0.2+build1/debian/patches/theme-refresh-messenger-toolbar-icons.patch @@ -0,0 +1,2364 @@ +# HG changeset patch +# Parent f949fa44766392f56e3e690d298ca1f3ead3fb4a + +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-archive-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-archive-disabled.svg 2011-11-15 12:46:30.748890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-archive-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-archive-hover.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-archive-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-archive-small-disabled.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-archive-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-archive-small-hover.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-archive-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-archive-small.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-archive-toolbar.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-archive-toolbar.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-address-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-address-disabled.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-address-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-address-hover.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-address-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-address-small-disabled.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-address-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-address-small-hover.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-address-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-address-small.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-address.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-address.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-compact-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-compact-disabled.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-compact-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-compact-hover.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-compact-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-compact-small-disabled.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-compact-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-compact-small-hover.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-compact-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-compact-small.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-compact.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-compact.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-delete-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-delete-disabled.svg 2011-11-15 12:46:30.752890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-delete-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-delete-hover.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-delete-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-delete-small-disabled.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-delete-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-delete-small-hover.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-delete-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-delete-small.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-delete-toolbar.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-delete-toolbar.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-download-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-download-disabled.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-download-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-download-hover.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-download-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-download-small-disabled.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-download-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-download-small-hover.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-download-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-download-small.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-download.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-download.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-forward-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-forward-disabled.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-forward-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-forward-hover.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-forward-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-forward-small-disabled.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-forward-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-forward-small-hover.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-forward-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-forward-small.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-forward-toolbar.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-forward-toolbar.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-disabled.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-hover.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-small-disabled.svg 2011-11-15 12:46:30.756890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-small-hover.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg-small.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-getmsg.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-disabled.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-hover.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-small-disabled.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-small-hover.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-back-small.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-back.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-back.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-disabled.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-hover.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-small-disabled.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-small-hover.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward-small.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-forward.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-disabled.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-hover.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-small-disabled.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-small-hover.svg 2011-11-15 12:46:30.760890091 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-next-small.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-next.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-next.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-disabled.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-hover.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-small-disabled.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-small-hover.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous-small.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-go-previous.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-junk-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-junk-disabled.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-junk-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-junk-hover.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-junk-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-junk-small-disabled.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-junk-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-junk-small-hover.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-junk-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-junk-small.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-junk-toolbar.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-junk-toolbar.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-disabled.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-hover.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-small-disabled.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-small-hover.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read-small.svg 2011-11-15 12:46:30.764890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-mark-read.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-disabled.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-hover.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-small-disabled.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-small-hover.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg-small.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-newmsg.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-print-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-print-disabled.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-print-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-print-hover.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-print-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-print-small-disabled.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-print-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-print-small-hover.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-print-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-print-small.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-print.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-print.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-disabled.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-hover.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-small-disabled.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-small-hover.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-small.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-toolbar.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-all-toolbar.svg 2011-11-15 12:46:30.768890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-disabled.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-hover.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-disabled.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-hover.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-small-disabled.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-small-hover.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-small.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-toolbar.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-list-toolbar.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-small-disabled.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-small-hover.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-small.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-reply-toolbar.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-reply-toolbar.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-stop-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-stop-disabled.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-stop-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-stop-hover.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-stop-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-stop-small-disabled.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-stop-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-stop-small-hover.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-stop-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-stop-small.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-stop.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-stop.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-tag-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-tag-disabled.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-tag-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-tag-hover.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-tag-small-disabled.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-tag-small-disabled.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-tag-small-hover.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-tag-small-hover.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-tag-small.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-tag-small.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/icons/button-tag.svg +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/icons/button-tag.svg 2011-11-15 12:46:30.772890090 +0000 +@@ -0,0 +1,7 @@ ++ ++ ++ +Index: mozilla/mail/themes/gnomestripe/mail/primaryToolbar.css +=================================================================== +--- mozilla.orig/mail/themes/gnomestripe/mail/primaryToolbar.css 2011-11-15 02:39:43.000000000 +0000 ++++ mozilla/mail/themes/gnomestripe/mail/primaryToolbar.css 2011-11-15 12:46:30.772890090 +0000 +@@ -75,387 +75,607 @@ + } + + #button-getmsg { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 24px 24px 0px); ++ list-style-image: url("chrome://messenger/skin/icons/button-getmsg.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-getmsg[disabled] { +- -moz-image-region: rect(24px 24px 48px 0px) !important; ++#button-getmsg:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-getmsg-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-getmsg[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-getmsg-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-newmsg { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 48px 24px 24px); ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-newmsg:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-newmsg[disabled] { +- -moz-image-region: rect(24px 48px 48px 24px) !important; +-} ++#button-newmsg[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + #button-address { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 72px 24px 48px); ++ list-style-image: url("chrome://messenger/skin/icons/button-address.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-address:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-address-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-address[disabled="true"] { +- -moz-image-region: rect(24px 72px 48px 48px) !important; +-} ++ list-style-image: url("chrome://messenger/skin/icons/button-address-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + #button-reply { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 96px 24px 72px); ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-toolbar.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-reply[disabled] { +- -moz-image-region: rect(24px 96px 48px 72px) !important; +-} ++#button-reply:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-reply[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + #button-replyall { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 120px 24px 96px); ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-all-toolbar.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-replyall[disabled] { +- -moz-image-region: rect(24px 120px 48px 96px) !important; ++#button-replyall:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-all-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-replyall[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-all-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-replylist { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 144px 24px 120px); ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-list-toolbar.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-replylist[disabled] { +- -moz-image-region: rect(24px 144px 48px 120px) !important; ++#button-replylist:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-list-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-replylist[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-list-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-forward { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 168px 24px 144px); ++ list-style-image: url("chrome://messenger/skin/icons/button-forward-toolbar.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-forward:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-forward-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-forward[disabled] { +- -moz-image-region: rect(24px 168px 48px 144px) !important; ++#button-forward[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-forward-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + .junk-button { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 192px 24px 168px); ++ list-style-image: url("chrome://messenger/skin/icons/button-junk-toolbar.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++.junk-button:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-junk-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + .junk-button[disabled="true"] { +- -moz-image-region: rect(24px 192px 48px 168px) !important; ++ list-style-image: url("chrome://messenger/skin/icons/button-junk-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-mark { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 216px 24px 192px); ++ list-style-image: url("chrome://messenger/skin/icons/button-mark-read.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-mark:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-mark-read-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-mark[disabled] { +- -moz-image-region: rect(24px 216px 48px 192px) !important; ++#button-mark[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-mark-read-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-next, #button-previous:-moz-locale-dir(rtl) { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 264px 24px 240px); ++ list-style-image: url("chrome://messenger/skin/icons/button-go-next.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-next[disabled], #button-previous:-moz-locale-dir(rtl)[disabled] { +- -moz-image-region: rect(24px 264px 48px 240px) !important; ++#button-next:hover, #button-previous:-moz-locale-dir(rtl):hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-next-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-next[disabled="true"], #button-previous:-moz-locale-dir(rtl)[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-next-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-previous, #button-next:-moz-locale-dir(rtl) { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 240px 24px 216px); ++ list-style-image: url("chrome://messenger/skin/icons/button-go-previous.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-previous:hover, #button-next:-moz-locale-dir(rtl):hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-previous-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-previous[disabled], #button-next:-moz-locale-dir(rtl)[disabled] { +- -moz-image-region: rect(24px 240px 48px 216px) !important; ++#button-previous[disabled="true"], #button-next:-moz-locale-dir(rtl)[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-previous-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-tag { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 288px 24px 264px); ++ list-style-image: url("chrome://messenger/skin/icons/button-tag.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-tag:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-tag-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-tag[disabled] { +- -moz-image-region: rect(24px 288px 48px 264px) !important; ++#button-tag[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-tag-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-compact { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 312px 24px 288px); ++ list-style-image: url("chrome://messenger/skin/icons/button-compact.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-compact[disabled] { +- -moz-image-region: rect(24px 312px 48px 288px) !important; ++#button-compact:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-compact-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-compact[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-compact-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + .delete-button { +- list-style-image: url("moz-icon://stock/gtk-delete?size=toolbar"); ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-toolbar.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++.delete-button:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + .delete-button[disabled] { +- list-style-image: url("moz-icon://stock/gtk-delete?size=toolbar&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-print { +- list-style-image: url("moz-icon://stock/gtk-print?size=toolbar"); ++ list-style-image: url("chrome://messenger/skin/icons/button-print.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-print[disabled] { +- list-style-image: url("moz-icon://stock/gtk-print?size=toolbar&state=disabled"); ++#button-print:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-print-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-print[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-print-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-stop { +- list-style-image: url("moz-icon://stock/gtk-stop?size=toolbar"); ++ list-style-image: url("chrome://messenger/skin/icons/button-stop.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-stop:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-stop-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-stop[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-stop?size=toolbar&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/icons/button-stop-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-file { +- list-style-image: url("moz-icon://stock/gtk-save-as?size=toolbar"); ++ list-style-image: url("chrome://messenger/skin/icons/button-download.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-archive { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar.png"); +- -moz-image-region: rect(0px 336px 24px 312px); ++#button-file:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-download-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-archive[disabled] { +- -moz-image-region: rect(24px 336px 48px 312px); ++#button-file[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-download-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-file[disabled] { +- list-style-image: url("moz-icon://stock/gtk-save-as?size=toolbar&state=disabled"); ++#button-archive { ++ list-style-image: url("chrome://messenger/skin/icons/button-archive-toolbar.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-goback { +- list-style-image: url("moz-icon://stock/gtk-go-back-ltr?size=toolbar"); ++#button-archive:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-archive-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-goback[disabled] { +- list-style-image: url("moz-icon://stock/gtk-go-back-ltr?size=toolbar&state=disabled"); ++#button-archive[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-archive-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-goback:-moz-locale-dir(rtl) { +- list-style-image: url("moz-icon://stock/gtk-go-back-rtl?size=toolbar"); ++#button-goback, #button-goforward:-moz-locale-dir(rtl) { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-back.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-goback:-moz-locale-dir(rtl)[disabled] { +- list-style-image: url("moz-icon://stock/gtk-go-back-rtl?size=toolbar&state=disabled"); ++#button-goback:hover, #button-goforward:-moz-locale-dir(rtl):hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-back-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-goforward { +- list-style-image: url("moz-icon://stock/gtk-go-forward-ltr?size=toolbar"); ++#button-goback[disabled], #button-goforward:-moz-locale-dir(rtl)[disabled] { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-back-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-goforward:-moz-locale-dir(rtl) { +- list-style-image: url("moz-icon://stock/gtk-go-forward-rtl?size=toolbar"); ++#button-goforward, #button-goback:-moz-locale-dir(rtl) { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-forward.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-goforward[disabled] { +- list-style-image: url("moz-icon://stock/gtk-go-forward-ltr?size=toolbar&state=disabled"); ++#button-goforward:hover, #button-goback:-moz-locale-dir(rtl):hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-forward-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-goforward:-moz-locale-dir(rtl)[disabled] { +- list-style-image: url("moz-icon://stock/gtk-go-forward-rtl?size=toolbar&state=disabled"); ++#button-goforward[disabled], #button-goback:-moz-locale-dir(rtl)[disabled] { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-forward-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + /* ::::: small primary toolbar buttons ::::: */ + + toolbar[iconsize="small"] #button-getmsg { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 16px 16px 0px); ++ list-style-image: url("chrome://messenger/skin/icons/button-getmsg-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-getmsg[disabled] { +- -moz-image-region: rect(16px 16px 32px 0px) !important; +-} ++toolbar[iconsize="small"] #button-getmsg:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-getmsg-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-getmsg[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-getmsg-small-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + toolbar[iconsize="small"] #button-newmsg { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 32px 16px 16px); ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-newmsg[disabled] { +- -moz-image-region: rect(16px 32px 32px 16px) !important; +-} ++toolbar[iconsize="small"] #button-newmsg:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-newmsg[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-small-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + toolbar[iconsize="small"] #button-address { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 48px 16px 32px); ++ list-style-image: url("chrome://messenger/skin/icons/button-address-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-address:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-address-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-address[disabled="true"] { +- -moz-image-region: rect(16px 48px 32px 32px) !important; +-} ++ list-style-image: url("chrome://messenger/skin/icons/button-address-small-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + toolbar[iconsize="small"] #button-reply { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 64px 16px 48px); ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-reply[disabled] { +- -moz-image-region: rect(16px 64px 32px 48px) !important; +-} ++toolbar[iconsize="small"] #button-reply:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-reply[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-small-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + toolbar[iconsize="small"] #button-replyall { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 80px 16px 64px); ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-all-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-replyall[disabled] { +- -moz-image-region: rect(16px 80px 32px 64px) !important; +-} ++toolbar[iconsize="small"] #button-replyall:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-all-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-replyall[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-all-small-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + toolbar[iconsize="small"] #button-replylist { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 96px 16px 80px); ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-list-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-replylist[disabled] { +- -moz-image-region: rect(16px 96px 32px 80px) !important; ++toolbar[iconsize="small"] #button-replylist:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-list-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-replylist[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-reply-list-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-forward { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 112px 16px 96px); ++ list-style-image: url("chrome://messenger/skin/icons/button-forward-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-forward:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-forward-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-forward[disabled] { +- -moz-image-region: rect(16px 112px 32px 96px) !important; ++toolbar[iconsize="small"] #button-forward[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-forward-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] .junk-button { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 128px 16px 112px); ++ list-style-image: url("chrome://messenger/skin/icons/button-junk-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] .junk-button:hover { ++ ++ list-style-image: url("chrome://messenger/skin/icons/button-junk-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] .junk-button[disabled="true"] { +- -moz-image-region: rect(16px 128px 32px 112px) !important; ++ list-style-image: url("chrome://messenger/skin/icons/button-junk-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-mark { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 144px 16px 128px); ++ list-style-image: url("chrome://messenger/skin/icons/button-mark-read-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-mark[disabled] { +- -moz-image-region: rect(16px 144px 32px 128px) !important; ++toolbar[iconsize="small"] #button-mark:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-mark-read-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-next { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 160px 16px 144px); ++toolbar[iconsize="small"] #button-mark[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-mark-read-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-next[disabled] { +- -moz-image-region: rect(16px 160px 32px 144px) !important; +-} +- +-toolbar[iconsize="small"] #button-next:-moz-locale-dir(rtl) { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 176px 16px 160px); ++toolbar[iconsize="small"] #button-next, #button-previous:-moz-locale-dir(rtl) { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-next-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-next:-moz-locale-dir(rtl)[disabled] { +- -moz-image-region: rect(16px 176px 32px 160px) !important; +-} ++toolbar[iconsize="small"] #button-next:hover, #button-previous:-moz-locale-dir(rtl):hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-next-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} + +-toolbar[iconsize="small"] #button-previous { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 176px 16px 160px); ++toolbar[iconsize="small"] #button-next[disabled="true"], #button-previous:-moz-locale-dir(rtl)[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-next-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-previous[disabled] { +- -moz-image-region: rect(16px 176px 32px 160px) !important; +-} ++toolbar[iconsize="small"] #button-previous, #button-next:-moz-locale-dir(rtl) { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-previous-small.svg") !important; ++ -moz-image-region: auto !important; ++} + +-toolbar[iconsize="small"] #button-previous:-moz-locale-dir(rtl) { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 160px 16px 144px); ++toolbar[iconsize="small"] #button-previous:hover, #button-next:-moz-locale-dir(rtl):hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-previous-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-previous:-moz-locale-dir(rtl)[disabled] { +- -moz-image-region: rect(16px 160px 32px 144px) !important; ++toolbar[iconsize="small"] #button-previous[disabled="true"], #button-next:-moz-locale-dir(rtl)[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-previous-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-tag { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 192px 16px 176px); ++ list-style-image: url("chrome://messenger/skin/icons/button-tag-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-tag[disabled] { +- -moz-image-region: rect(16px 192px 32px 176px) !important; ++toolbar[iconsize="small"] #button-tag:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-tag-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-tag[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-tag-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-compact { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 208px 16px 192px); ++ list-style-image: url("chrome://messenger/skin/icons/button-compact-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-compact:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-compact-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-compact[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-compact-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-compact[disabled] { +- -moz-image-region: rect(16px 208px 32px 192px) !important; ++toolbar[iconsize="small"] #button-goback, #button-goforward:-moz-locale-dir(rtl) { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-back-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-goback { +- list-style-image: url("moz-icon://stock/gtk-go-back-ltr?size=menu"); ++toolbar[iconsize="small"] #button-goback:hover, #button-goforward:-moz-locale-dir(rtl):hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-back-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-goback[disabled] { +- list-style-image: url("moz-icon://stock/gtk-go-back-ltr?size=menu&state=disabled"); ++toolbar[iconsize="small"] #button-goback[disabled], #button-goforward:-moz-locale-dir(rtl)[disabled] { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-back-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-goforward { +- list-style-image: url("moz-icon://stock/gtk-go-forward-ltr?size=menu"); ++toolbar[iconsize="small"] #button-goforward, #button-goback:-moz-locale-dir(rtl) { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-forward-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-goforward[disabled] { +- list-style-image: url("moz-icon://stock/gtk-go-forward-ltr?size=menu&state=disabled"); ++toolbar[iconsize="small"] #button-goforward:hover, #button-goback:-moz-locale-dir(rtl):hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-forward-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + ++toolbar[iconsize="small"] #button-goforward[disabled], #button-goback:-moz-locale-dir(rtl)[disabled] { ++ list-style-image: url("chrome://messenger/skin/icons/button-go-forward-small-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++ + toolbar[iconsize="small"] #button-print { +- list-style-image: url("moz-icon://stock/gtk-print?size=menu"); ++ list-style-image: url("chrome://messenger/skin/icons/button-print-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-print:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-print-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-print[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-print-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] .delete-button { +- list-style-image: url("moz-icon://stock/gtk-delete?size=menu"); ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] .delete-button[disabled] { +- list-style-image: url("moz-icon://stock/gtk-delete?size=menu&state=disabled"); ++toolbar[iconsize="small"] .delete-button:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-print[disabled] { +- list-style-image: url("moz-icon://stock/gtk-print?size=menu&state=disabled"); ++toolbar[iconsize="small"] .delete-button[disabled] { ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-stop { +- list-style-image: url("moz-icon://stock/gtk-stop?size=menu"); ++ list-style-image: url("chrome://messenger/skin/icons/button-stop-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-stop:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-stop-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-stop[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-stop?size=menu&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/icons/button-stop-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-file { +- list-style-image: url("moz-icon://stock/gtk-save-as?size=menu"); ++ list-style-image: url("chrome://messenger/skin/icons/button-download-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-file:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-download-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-file[disabled] { +- list-style-image: url("moz-icon://stock/gtk-save-as?size=menu&state=disabled"); ++toolbar[iconsize="small"] #button-file[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-download-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-archive { +- list-style-image: url("chrome://messenger/skin/icons/mail-toolbar-small.png"); +- -moz-image-region: rect(0px 224px 16px 208px); ++ list-style-image: url("chrome://messenger/skin/icons/button-archive-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-archive:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-archive-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-archive[disabled] { +- -moz-image-region: rect(16px 224px 32px 208px); ++toolbar[iconsize="small"] #button-archive[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-archive-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + /* ::::: end small primary toolbar buttons ::::: */ +Index: mozilla/mail/themes/gnomestripe/jar.mn +=================================================================== +--- mozilla.orig/mail/themes/gnomestripe/jar.mn 2011-11-15 12:46:47.752889497 +0000 ++++ mozilla/mail/themes/gnomestripe/jar.mn 2011-11-15 12:48:18.696886322 +0000 +@@ -172,6 +172,126 @@ + skin/classic/messenger/icons/button-reply.svg (mail/icons/button-reply.svg) + skin/classic/messenger/icons/button-reply-all.svg (mail/icons/button-reply-all.svg) + skin/classic/messenger/icons/button-reply-list.svg (mail/icons/button-reply-list.svg) ++ skin/classic/messenger/icons/button-address-disabled.svg (mail/icons/button-address-disabled.svg) ++ skin/classic/messenger/icons/button-address-hover.svg (mail/icons/button-address-hover.svg) ++ skin/classic/messenger/icons/button-address-small-disabled.svg (mail/icons/button-address-small-disabled.svg) ++ skin/classic/messenger/icons/button-address-small-hover.svg (mail/icons/button-address-small-hover.svg) ++ skin/classic/messenger/icons/button-address-small.svg (mail/icons/button-address-small.svg) ++ skin/classic/messenger/icons/button-address.svg (mail/icons/button-address.svg) ++ skin/classic/messenger/icons/button-archive-disabled.svg (mail/icons/button-archive-disabled.svg) ++ skin/classic/messenger/icons/button-archive-hover.svg (mail/icons/button-archive-hover.svg) ++ skin/classic/messenger/icons/button-archive-small-disabled.svg (mail/icons/button-archive-small-disabled.svg) ++ skin/classic/messenger/icons/button-archive-small-hover.svg (mail/icons/button-archive-small-hover.svg) ++ skin/classic/messenger/icons/button-archive-small.svg (mail/icons/button-archive-small.svg) ++ skin/classic/messenger/icons/button-archive-toolbar.svg (mail/icons/button-archive-toolbar.svg) ++ skin/classic/messenger/icons/button-compact-disabled.svg (mail/icons/button-compact-disabled.svg) ++ skin/classic/messenger/icons/button-compact-hover.svg (mail/icons/button-compact-hover.svg) ++ skin/classic/messenger/icons/button-compact-small-disabled.svg (mail/icons/button-compact-small-disabled.svg) ++ skin/classic/messenger/icons/button-compact-small-hover.svg (mail/icons/button-compact-small-hover.svg) ++ skin/classic/messenger/icons/button-compact-small.svg (mail/icons/button-compact-small.svg) ++ skin/classic/messenger/icons/button-compact.svg (mail/icons/button-compact.svg) ++ skin/classic/messenger/icons/button-delete-disabled.svg (mail/icons/button-delete-disabled.svg) ++ skin/classic/messenger/icons/button-delete-hover.svg (mail/icons/button-delete-hover.svg) ++ skin/classic/messenger/icons/button-delete-small-disabled.svg (mail/icons/button-delete-small-disabled.svg) ++ skin/classic/messenger/icons/button-delete-small-hover.svg (mail/icons/button-delete-small-hover.svg) ++ skin/classic/messenger/icons/button-delete-small.svg (mail/icons/button-delete-small.svg) ++ skin/classic/messenger/icons/button-delete-toolbar.svg (mail/icons/button-delete-toolbar.svg) ++ skin/classic/messenger/icons/button-download-disabled.svg (mail/icons/button-download-disabled.svg) ++ skin/classic/messenger/icons/button-download-hover.svg (mail/icons/button-download-hover.svg) ++ skin/classic/messenger/icons/button-download-small-disabled.svg (mail/icons/button-download-small-disabled.svg) ++ skin/classic/messenger/icons/button-download-small-hover.svg (mail/icons/button-download-small-hover.svg) ++ skin/classic/messenger/icons/button-download-small.svg (mail/icons/button-download-small.svg) ++ skin/classic/messenger/icons/button-download.svg (mail/icons/button-download.svg) ++ skin/classic/messenger/icons/button-forward-disabled.svg (mail/icons/button-forward-disabled.svg) ++ skin/classic/messenger/icons/button-forward-hover.svg (mail/icons/button-forward-hover.svg) ++ skin/classic/messenger/icons/button-forward-small-disabled.svg (mail/icons/button-forward-small-disabled.svg) ++ skin/classic/messenger/icons/button-forward-small-hover.svg (mail/icons/button-forward-small-hover.svg) ++ skin/classic/messenger/icons/button-forward-small.svg (mail/icons/button-forward-small.svg) ++ skin/classic/messenger/icons/button-forward-toolbar.svg (mail/icons/button-forward-toolbar.svg) ++ skin/classic/messenger/icons/button-getmsg-disabled.svg (mail/icons/button-getmsg-disabled.svg) ++ skin/classic/messenger/icons/button-getmsg-hover.svg (mail/icons/button-getmsg-hover.svg) ++ skin/classic/messenger/icons/button-getmsg-small-disabled.svg (mail/icons/button-getmsg-small-disabled.svg) ++ skin/classic/messenger/icons/button-getmsg-small-hover.svg (mail/icons/button-getmsg-small-hover.svg) ++ skin/classic/messenger/icons/button-getmsg-small.svg (mail/icons/button-getmsg-small.svg) ++ skin/classic/messenger/icons/button-getmsg.svg (mail/icons/button-getmsg.svg) ++ skin/classic/messenger/icons/button-go-back-disabled.svg (mail/icons/button-go-back-disabled.svg) ++ skin/classic/messenger/icons/button-go-back-hover.svg (mail/icons/button-go-back-hover.svg) ++ skin/classic/messenger/icons/button-go-back-small-disabled.svg (mail/icons/button-go-back-small-disabled.svg) ++ skin/classic/messenger/icons/button-go-back-small-hover.svg (mail/icons/button-go-back-small-hover.svg) ++ skin/classic/messenger/icons/button-go-back-small.svg (mail/icons/button-go-back-small.svg) ++ skin/classic/messenger/icons/button-go-back.svg (mail/icons/button-go-back.svg) ++ skin/classic/messenger/icons/button-go-forward-disabled.svg (mail/icons/button-go-forward-disabled.svg) ++ skin/classic/messenger/icons/button-go-forward-hover.svg (mail/icons/button-go-forward-hover.svg) ++ skin/classic/messenger/icons/button-go-forward-small-disabled.svg (mail/icons/button-go-forward-small-disabled.svg) ++ skin/classic/messenger/icons/button-go-forward-small-hover.svg (mail/icons/button-go-forward-small-hover.svg) ++ skin/classic/messenger/icons/button-go-forward-small.svg (mail/icons/button-go-forward-small.svg) ++ skin/classic/messenger/icons/button-go-forward.svg (mail/icons/button-go-forward.svg) ++ skin/classic/messenger/icons/button-go-next-disabled.svg (mail/icons/button-go-next-disabled.svg) ++ skin/classic/messenger/icons/button-go-next-hover.svg (mail/icons/button-go-next-hover.svg) ++ skin/classic/messenger/icons/button-go-next-small-disabled.svg (mail/icons/button-go-next-small-disabled.svg) ++ skin/classic/messenger/icons/button-go-next-small-hover.svg (mail/icons/button-go-next-small-hover.svg) ++ skin/classic/messenger/icons/button-go-next-small.svg (mail/icons/button-go-next-small.svg) ++ skin/classic/messenger/icons/button-go-next.svg (mail/icons/button-go-next.svg) ++ skin/classic/messenger/icons/button-go-previous-disabled.svg (mail/icons/button-go-previous-disabled.svg) ++ skin/classic/messenger/icons/button-go-previous-hover.svg (mail/icons/button-go-previous-hover.svg) ++ skin/classic/messenger/icons/button-go-previous-small-disabled.svg (mail/icons/button-go-previous-small-disabled.svg) ++ skin/classic/messenger/icons/button-go-previous-small-hover.svg (mail/icons/button-go-previous-small-hover.svg) ++ skin/classic/messenger/icons/button-go-previous-small.svg (mail/icons/button-go-previous-small.svg) ++ skin/classic/messenger/icons/button-go-previous.svg (mail/icons/button-go-previous.svg) ++ skin/classic/messenger/icons/button-junk-disabled.svg (mail/icons/button-junk-disabled.svg) ++ skin/classic/messenger/icons/button-junk-hover.svg (mail/icons/button-junk-hover.svg) ++ skin/classic/messenger/icons/button-junk-small-disabled.svg (mail/icons/button-junk-small-disabled.svg) ++ skin/classic/messenger/icons/button-junk-small-hover.svg (mail/icons/button-junk-small-hover.svg) ++ skin/classic/messenger/icons/button-junk-small.svg (mail/icons/button-junk-small.svg) ++ skin/classic/messenger/icons/button-junk-toolbar.svg (mail/icons/button-junk-toolbar.svg) ++ skin/classic/messenger/icons/button-mark-read-disabled.svg (mail/icons/button-mark-read-disabled.svg) ++ skin/classic/messenger/icons/button-mark-read-hover.svg (mail/icons/button-mark-read-hover.svg) ++ skin/classic/messenger/icons/button-mark-read-small-disabled.svg (mail/icons/button-mark-read-small-disabled.svg) ++ skin/classic/messenger/icons/button-mark-read-small-hover.svg (mail/icons/button-mark-read-small-hover.svg) ++ skin/classic/messenger/icons/button-mark-read-small.svg (mail/icons/button-mark-read-small.svg) ++ skin/classic/messenger/icons/button-mark-read.svg (mail/icons/button-mark-read.svg) ++ skin/classic/messenger/icons/button-newmsg-disabled.svg (mail/icons/button-newmsg-disabled.svg) ++ skin/classic/messenger/icons/button-newmsg-hover.svg (mail/icons/button-newmsg-hover.svg) ++ skin/classic/messenger/icons/button-newmsg-small-disabled.svg (mail/icons/button-newmsg-small-disabled.svg) ++ skin/classic/messenger/icons/button-newmsg-small-hover.svg (mail/icons/button-newmsg-small-hover.svg) ++ skin/classic/messenger/icons/button-newmsg-small.svg (mail/icons/button-newmsg-small.svg) ++ skin/classic/messenger/icons/button-newmsg.svg (mail/icons/button-newmsg.svg) ++ skin/classic/messenger/icons/button-print-disabled.svg (mail/icons/button-print-disabled.svg) ++ skin/classic/messenger/icons/button-print-hover.svg (mail/icons/button-print-hover.svg) ++ skin/classic/messenger/icons/button-print-small-disabled.svg (mail/icons/button-print-small-disabled.svg) ++ skin/classic/messenger/icons/button-print-small-hover.svg (mail/icons/button-print-small-hover.svg) ++ skin/classic/messenger/icons/button-print-small.svg (mail/icons/button-print-small.svg) ++ skin/classic/messenger/icons/button-print.svg (mail/icons/button-print.svg) ++ skin/classic/messenger/icons/button-reply-disabled.svg (mail/icons/button-reply-disabled.svg) ++ skin/classic/messenger/icons/button-reply-hover.svg (mail/icons/button-reply-hover.svg) ++ skin/classic/messenger/icons/button-reply-small-disabled.svg (mail/icons/button-reply-small-disabled.svg) ++ skin/classic/messenger/icons/button-reply-small-hover.svg (mail/icons/button-reply-small-hover.svg) ++ skin/classic/messenger/icons/button-reply-small.svg (mail/icons/button-reply-small.svg) ++ skin/classic/messenger/icons/button-reply-toolbar.svg (mail/icons/button-reply-toolbar.svg) ++ skin/classic/messenger/icons/button-reply-all-disabled.svg (mail/icons/button-reply-all-disabled.svg) ++ skin/classic/messenger/icons/button-reply-all-hover.svg (mail/icons/button-reply-all-hover.svg) ++ skin/classic/messenger/icons/button-reply-all-small-disabled.svg (mail/icons/button-reply-all-small-disabled.svg) ++ skin/classic/messenger/icons/button-reply-all-small-hover.svg (mail/icons/button-reply-all-small-hover.svg) ++ skin/classic/messenger/icons/button-reply-all-small.svg (mail/icons/button-reply-all-small.svg) ++ skin/classic/messenger/icons/button-reply-all-toolbar.svg (mail/icons/button-reply-all-toolbar.svg) ++ skin/classic/messenger/icons/button-reply-list-disabled.svg (mail/icons/button-reply-list-disabled.svg) ++ skin/classic/messenger/icons/button-reply-list-hover.svg (mail/icons/button-reply-list-hover.svg) ++ skin/classic/messenger/icons/button-reply-list-small-disabled.svg (mail/icons/button-reply-list-small-disabled.svg) ++ skin/classic/messenger/icons/button-reply-list-small-hover.svg (mail/icons/button-reply-list-small-hover.svg) ++ skin/classic/messenger/icons/button-reply-list-small.svg (mail/icons/button-reply-list-small.svg) ++ skin/classic/messenger/icons/button-reply-list-toolbar.svg (mail/icons/button-reply-list-toolbar.svg) ++ skin/classic/messenger/icons/button-stop-disabled.svg (mail/icons/button-stop-disabled.svg) ++ skin/classic/messenger/icons/button-stop-hover.svg (mail/icons/button-stop-hover.svg) ++ skin/classic/messenger/icons/button-stop-small-disabled.svg (mail/icons/button-stop-small-disabled.svg) ++ skin/classic/messenger/icons/button-stop-small-hover.svg (mail/icons/button-stop-small-hover.svg) ++ skin/classic/messenger/icons/button-stop-small.svg (mail/icons/button-stop-small.svg) ++ skin/classic/messenger/icons/button-stop.svg (mail/icons/button-stop.svg) ++ skin/classic/messenger/icons/button-tag-disabled.svg (mail/icons/button-tag-disabled.svg) ++ skin/classic/messenger/icons/button-tag-hover.svg (mail/icons/button-tag-hover.svg) ++ skin/classic/messenger/icons/button-tag-small-disabled.svg (mail/icons/button-tag-small-disabled.svg) ++ skin/classic/messenger/icons/button-tag-small-hover.svg (mail/icons/button-tag-small-hover.svg) ++ skin/classic/messenger/icons/button-tag-small.svg (mail/icons/button-tag-small.svg) ++ skin/classic/messenger/icons/button-tag.svg (mail/icons/button-tag.svg) + % skin communicator classic/1.0 %skin/classic/communicator/ + skin/classic/communicator/communicator.css (mail/communicator.css) + skin/classic/communicator/icons/smileys/smiley-smile.png (mail/icons/smiley-smile.png) --- thunderbird-10.0.2+build1.orig/debian/patches/fix-build-failure-without-yarr-jit.patch +++ thunderbird-10.0.2+build1/debian/patches/fix-build-failure-without-yarr-jit.patch @@ -0,0 +1,27 @@ +Subject: Fix build failure on platforms without YARR JIT +Bug-Mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=703534 +Origin: upstream, https://hg.mozilla.org/mozilla-central/raw-rev/15cf58eb7923 +Author: Mike Hommey +# Rebased for Firefox 9 and Thunderbird directory structure +# HG changeset patch +# User Mike Hommey +# Date 1321613368 -3600 +# Node ID 15cf58eb7923d34de7e61df80fa5f8a18a995abf +# Parent aeb035da53283c56370992f254e4f79d7dd180f8 + +--- + js/src/jscompartment.cpp | 1 - + 1 file changed, 1 deletion(-) + +Index: mozilla/mozilla/js/src/jscompartment.cpp +=================================================================== +--- mozilla.orig/mozilla/js/src/jscompartment.cpp ++++ mozilla/mozilla/js/src/jscompartment.cpp +@@ -50,7 +50,6 @@ + #include "jswatchpoint.h" + #include "jswrapper.h" + #include "assembler/wtf/Platform.h" +-#include "assembler/jit/ExecutableAllocator.h" + #include "yarr/BumpPointerAllocator.h" + #include "methodjit/MethodJIT.h" + #include "methodjit/PolyIC.h" --- thunderbird-10.0.2+build1.orig/debian/patches/series +++ thunderbird-10.0.2+build1/debian/patches/series @@ -0,0 +1,9 @@ +no-dynamic-nss-softokn.patch +ctypes-callback-reentry-fix.patch +theme-refresh-messenger-toolbar-icons.patch +theme-resfresh-addressbook-toolbar-icons.patch +theme-refresh-compose-toolbar-icons.patch +unity-globalmenu-build-support.patch +#@ARCH=powerpc@fix-build-failure-without-yarr-jit.patch +fix-cursor-handling.patch +#@ARCH=powerpc@fix-build-failure-without-yarr-jit2.patch --- thunderbird-10.0.2+build1.orig/debian/patches/fix-cursor-handling.patch +++ thunderbird-10.0.2+build1/debian/patches/fix-cursor-handling.patch @@ -0,0 +1,107 @@ +# HG changeset patch +# User Chris Coulson +# Date 1323858871 -3600 +# Node ID 596e3eca4196e990e4dcddbdcb1642e6565fd781 +# Parent 82187424f0512e2b1622f3d2edadabd92f706d28 +Bug 709259 - Try creating a named cursor before a bitmap cursor. r=karlt + +diff --git a/mozilla/widget/src/gtk2/nsGtkCursors.h b/mozilla/widget/src/gtk2/nsGtkCursors.h +--- a/mozilla/widget/src/gtk2/nsGtkCursors.h ++++ b/mozilla/widget/src/gtk2/nsGtkCursors.h +@@ -41,16 +41,17 @@ + #ifndef nsGtkCursors_h__ + #define nsGtkCursors_h__ + + typedef struct { + const unsigned char *bits; + const unsigned char *mask_bits; + int hot_x; + int hot_y; ++ const char *hash; + } nsGtkCursor; + + /* MOZ_CURSOR_HAND_GRAB */ + static const unsigned char moz_hand_grab_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, + 0x60, 0x39, 0x00, 0x00, 0x90, 0x49, 0x00, 0x00, 0x90, 0x49, 0x01, 0x00, + 0x20, 0xc9, 0x02, 0x00, 0x20, 0x49, 0x02, 0x00, 0x58, 0x40, 0x02, 0x00, + 0x64, 0x00, 0x02, 0x00, 0x44, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, +@@ -410,26 +411,28 @@ enum { + MOZ_CURSOR_ZOOM_OUT, + MOZ_CURSOR_NOT_ALLOWED, + MOZ_CURSOR_VERTICAL_TEXT, + MOZ_CURSOR_NESW_RESIZE, + MOZ_CURSOR_NWSE_RESIZE, + MOZ_CURSOR_NONE + }; + +-// create custom pixmap cursor ++// create custom pixmap cursor. The hash values must stay in sync with the ++// bitmap data above. To see the hash function, have a look at XcursorImageHash ++// in libXcursor + static const nsGtkCursor GtkCursors[] = { +- { moz_hand_grab_bits, moz_hand_grab_mask_bits, 10, 10 }, +- { moz_hand_grabbing_bits, moz_hand_grabbing_mask_bits, 10, 10 }, +- { moz_copy_bits, moz_copy_mask_bits, 2, 2 }, +- { moz_alias_bits, moz_alias_mask_bits, 2, 2 }, +- { moz_menu_bits, moz_menu_mask_bits, 2, 2 }, +- { moz_spinning_bits, moz_spinning_mask_bits, 2, 2 }, +- { moz_zoom_in_bits, moz_zoom_in_mask_bits, 6, 6 }, +- { moz_zoom_out_bits, moz_zoom_out_mask_bits, 6, 6 }, +- { moz_not_allowed_bits, moz_not_allowed_mask_bits, 9, 9 }, +- { moz_vertical_text_bits, moz_vertical_text_mask_bits, 8, 4 }, +- { moz_nesw_resize_bits, moz_nesw_resize_mask_bits, 8, 8 }, +- { moz_nwse_resize_bits, moz_nwse_resize_mask_bits, 8, 8 }, +- { moz_none_bits, moz_none_mask_bits, 0, 0 } ++ { moz_hand_grab_bits, moz_hand_grab_mask_bits, 10, 10, "5aca4d189052212118709018842178c0" }, ++ { moz_hand_grabbing_bits, moz_hand_grabbing_mask_bits, 10, 10, "208530c400c041818281048008011002" }, ++ { moz_copy_bits, moz_copy_mask_bits, 2, 2, "08ffe1cb5fe6fc01f906f1c063814ccf" }, ++ { moz_alias_bits, moz_alias_mask_bits, 2, 2, "0876e1c15ff2fc01f906f1c363074c0f" }, ++ { moz_menu_bits, moz_menu_mask_bits, 2, 2, "08ffe1e65f80fcfdf9fff11263e74c48" }, ++ { moz_spinning_bits, moz_spinning_mask_bits, 2, 2, "08e8e1c95fe2fc01f976f1e063a24ccd" }, ++ { moz_zoom_in_bits, moz_zoom_in_mask_bits, 6, 6, "f41c0e382c94c0958e07017e42b00462" }, ++ { moz_zoom_out_bits, moz_zoom_out_mask_bits, 6, 6, "f41c0e382c97c0938e07017e42800402" }, ++ { moz_not_allowed_bits, moz_not_allowed_mask_bits, 9, 9, "03b6e0fcb3499374a867d041f52298f0" }, ++ { moz_vertical_text_bits, moz_vertical_text_mask_bits, 8, 4, "048008013003cff3c00c801001200000" }, ++ { moz_nesw_resize_bits, moz_nesw_resize_mask_bits, 8, 8, "50585d75b494802d0151028115016902" }, ++ { moz_nwse_resize_bits, moz_nwse_resize_mask_bits, 8, 8, "38c5dff7c7b8962045400281044508d2" }, ++ { moz_none_bits, moz_none_mask_bits, 0, 0, NULL } + }; + + #endif /* nsGtkCursors_h__ */ +diff --git a/mozilla/widget/src/gtk2/nsWindow.cpp b/mozilla/widget/src/gtk2/nsWindow.cpp +--- a/mozilla/widget/src/gtk2/nsWindow.cpp ++++ b/mozilla/widget/src/gtk2/nsWindow.cpp +@@ -5640,19 +5640,27 @@ get_gtk_cursor(nsCursor aCursor) + newType = MOZ_CURSOR_NONE; + break; + default: + NS_ASSERTION(aCursor, "Invalid cursor type"); + gdkcursor = gdk_cursor_new(GDK_LEFT_PTR); + break; + } + +- // if by now we don't have a xcursor, this means we have to make a +- // custom one +- if (newType != 0xff) { ++ // If by now we don't have a xcursor, this means we have to make a custom ++ // one. First, we try creating a named cursor based on the hash of our ++ // custom bitmap, as libXcursor has some magic to convert bitmapped cursors ++ // to themed cursors ++ if (newType != 0xFF && GtkCursors[newType].hash) { ++ gdkcursor = gdk_cursor_new_from_name(gdk_display_get_default(), ++ GtkCursors[newType].hash); ++ } ++ ++ // If we still don't have a xcursor, we now really create a bitmap cursor ++ if (newType != 0xff && !gdkcursor) { + GdkPixbuf * cursor_pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 32, 32); + if (!cursor_pixbuf) + return NULL; + + guchar *data = gdk_pixbuf_get_pixels(cursor_pixbuf); + + // Read data from GtkCursors and compose RGBA surface from 1bit bitmap and mask + // GtkCursors bits and mask are 32x32 monochrome bitmaps (1 bit for each pixel) + + --- thunderbird-10.0.2+build1.orig/debian/patches/no-dynamic-nss-softokn.patch +++ thunderbird-10.0.2+build1/debian/patches/no-dynamic-nss-softokn.patch @@ -0,0 +1,20 @@ +Description: ??? +Author: ??? +Bug: ??? +Forwarded: no + +--- + directory/c-sdk/component_versions.mk | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/ldap/sdks/c-sdk/component_versions.mk ++++ b/ldap/sdks/c-sdk/component_versions.mk +@@ -46,7 +46,7 @@ NSPR_RELEASE_TREE = $(COMPONENTS_DIR) + # NSS - Network Security Services + NSSVERS = 3 + NSS_RELEASE_TAG = NSS_3_9_3_RTM +-NSS_DYNAMIC_SOFTOKN = 1 ++NSS_DYNAMIC_SOFTOKN = 0 + NSS_RELEASE_TREE = $(COMPONENTS_DIR) + + # SVRCORE - Client/server utility library --- thunderbird-10.0.2+build1.orig/debian/patches/ctypes-callback-reentry-fix.patch +++ thunderbird-10.0.2+build1/debian/patches/ctypes-callback-reentry-fix.patch @@ -0,0 +1,59 @@ +Description: Fix an assert when reentering ctypes function callbacks +Origin: https://bugzilla.mozilla.org/attachment.cgi?id=545444 +Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=671027 + +--- a/mozilla/js/src/ctypes/CTypes.cpp ++++ b/mozilla/js/src/ctypes/CTypes.cpp +@@ -62,19 +62,6 @@ namespace js { + namespace ctypes { + + /******************************************************************************* +-** Helper classes +-*******************************************************************************/ +- +-class ScopedContextThread +-{ +-public: +- ScopedContextThread(JSContext* cx) : mCx(cx) { JS_SetContextThread(cx); } +- ~ScopedContextThread() { JS_ClearContextThread(mCx); } +-private: +- JSContext* mCx; +-}; +- +-/******************************************************************************* + ** JSAPI function prototypes + *******************************************************************************/ + +@@ -2749,7 +2736,6 @@ CType::FinalizeProtoClass(JSContext* cx, + return; + + JSContext* closureCx = static_cast(JSVAL_TO_PRIVATE(slot)); +- JS_SetContextThread(closureCx); + JS_DestroyContextNoGC(closureCx); + } + +@@ -5245,8 +5231,6 @@ CClosure::Create(JSContext* cx, + JS_DestroyContextNoGC(cinfo->cx); + return NULL; + } +- +- JS_ClearContextThread(cinfo->cx); + } + + #ifdef DEBUG +@@ -5342,8 +5326,6 @@ CClosure::ClosureStub(ffi_cif* cif, void + JSObject* thisObj = cinfo->thisObj; + JSObject* jsfnObj = cinfo->jsfnObj; + +- ScopedContextThread scopedThread(cx); +- + // Assert that we're on the thread we were created from. + JS_ASSERT(cinfo->cxThread == JS_GetContextThread(cx)); + +--- /dev/null ++++ b/mozilla/js/src/jit-test/tests/basic/bug671027.js +@@ -0,0 +1,4 @@ ++var fp_t = new ctypes.FunctionType(ctypes.default_abi, ctypes.int32_t).ptr; ++var f = fp_t(function () { return 2; }); ++var g = fp_t(function () { return f() + 2; }); ++assertEq(g(), 4); --- thunderbird-10.0.2+build1.orig/debian/patches/theme-refresh-compose-toolbar-icons.patch +++ thunderbird-10.0.2+build1/debian/patches/theme-refresh-compose-toolbar-icons.patch @@ -0,0 +1,1120 @@ +# HG changeset patch +# Parent 8ef5eb3494700696bf8d8f098cf1b93607e08ad9 + +diff --git a/mail/themes/gnomestripe/jar.mn b/mail/themes/gnomestripe/jar.mn +--- a/mail/themes/gnomestripe/jar.mn ++++ b/mail/themes/gnomestripe/jar.mn +@@ -98,16 +98,70 @@ classic.jar: + skin/classic/messenger/addressbook/icons/abcard-large.png (mail/addrbook/abcard-large.png) + skin/classic/messenger/addressbook/icons/remote-addrbook.png (mail/addrbook/remote-addrbook.png) + skin/classic/messenger/addressbook/icons/remote-addrbook-error.png (mail/addrbook/remote-addrbook-error.png) + skin/classic/messenger/addressbook/icons/secure-remote-addrbook.png (mail/addrbook/secure-remote-addrbook.png) + skin/classic/messenger/messengercompose/messengercompose.css (mail/compose/messengercompose.css) + skin/classic/messenger/messengercompose/editorOverlay.css (mail/compose/editorOverlay.css) + skin/classic/messenger/messengercompose/compose-toolbar.png (mail/compose/compose-toolbar.png) + skin/classic/messenger/messengercompose/compose-toolbar-small.png (mail/compose/compose-toolbar-small.png) ++ skin/classic/messenger/messengercompose/button-attach-disabled.svg (mail/compose/button-attach-disabled.svg) ++ skin/classic/messenger/messengercompose/button-attach-hover.svg (mail/compose/button-attach-hover.svg) ++ skin/classic/messenger/messengercompose/button-attach-small-disabled.svg (mail/compose/button-attach-small-disabled.svg) ++ skin/classic/messenger/messengercompose/button-attach-small-hover.svg (mail/compose/button-attach-small-hover.svg) ++ skin/classic/messenger/messengercompose/button-attach-small.svg (mail/compose/button-attach-small.svg) ++ skin/classic/messenger/messengercompose/button-attach.svg (mail/compose/button-attach.svg) ++ skin/classic/messenger/messengercompose/button-copy-disabled.svg (mail/compose/button-copy-disabled.svg) ++ skin/classic/messenger/messengercompose/button-copy-hover.svg (mail/compose/button-copy-hover.svg) ++ skin/classic/messenger/messengercompose/button-copy-small-disabled.svg (mail/compose/button-copy-small-disabled.svg) ++ skin/classic/messenger/messengercompose/button-copy-small-hover.svg (mail/compose/button-copy-small-hover.svg) ++ skin/classic/messenger/messengercompose/button-copy-small.svg (mail/compose/button-copy-small.svg) ++ skin/classic/messenger/messengercompose/button-copy.svg (mail/compose/button-copy.svg) ++ skin/classic/messenger/messengercompose/button-cut-disabled.svg (mail/compose/button-cut-disabled.svg) ++ skin/classic/messenger/messengercompose/button-cut-hover.svg (mail/compose/button-cut-hover.svg) ++ skin/classic/messenger/messengercompose/button-cut-small-disabled.svg (mail/compose/button-cut-small-disabled.svg) ++ skin/classic/messenger/messengercompose/button-cut-small-hover.svg (mail/compose/button-cut-small-hover.svg) ++ skin/classic/messenger/messengercompose/button-cut-small.svg (mail/compose/button-cut-small.svg) ++ skin/classic/messenger/messengercompose/button-cut.svg (mail/compose/button-cut.svg) ++ skin/classic/messenger/messengercompose/button-paste-disabled.svg (mail/compose/button-paste-disabled.svg) ++ skin/classic/messenger/messengercompose/button-paste-hover.svg (mail/compose/button-paste-hover.svg) ++ skin/classic/messenger/messengercompose/button-paste-small-disabled.svg (mail/compose/button-paste-small-disabled.svg) ++ skin/classic/messenger/messengercompose/button-paste-small-hover.svg (mail/compose/button-paste-small-hover.svg) ++ skin/classic/messenger/messengercompose/button-paste-small.svg (mail/compose/button-paste-small.svg) ++ skin/classic/messenger/messengercompose/button-paste.svg (mail/compose/button-paste.svg) ++ skin/classic/messenger/messengercompose/button-quote-disabled.svg (mail/compose/button-quote-disabled.svg) ++ skin/classic/messenger/messengercompose/button-quote-hover.svg (mail/compose/button-quote-hover.svg) ++ skin/classic/messenger/messengercompose/button-quote-small-disabled.svg (mail/compose/button-quote-small-disabled.svg) ++ skin/classic/messenger/messengercompose/button-quote-small-hover.svg (mail/compose/button-quote-small-hover.svg) ++ skin/classic/messenger/messengercompose/button-quote-small.svg (mail/compose/button-quote-small.svg) ++ skin/classic/messenger/messengercompose/button-quote.svg (mail/compose/button-quote.svg) ++ skin/classic/messenger/messengercompose/button-save-disabled.svg (mail/compose/button-save-disabled.svg) ++ skin/classic/messenger/messengercompose/button-save-hover.svg (mail/compose/button-save-hover.svg) ++ skin/classic/messenger/messengercompose/button-save-small-disabled.svg (mail/compose/button-save-small-disabled.svg) ++ skin/classic/messenger/messengercompose/button-save-small-hover.svg (mail/compose/button-save-small-hover.svg) ++ skin/classic/messenger/messengercompose/button-save-small.svg (mail/compose/button-save-small.svg) ++ skin/classic/messenger/messengercompose/button-save.svg (mail/compose/button-save.svg) ++ skin/classic/messenger/messengercompose/button-security-disabled.svg (mail/compose/button-security-disabled.svg) ++ skin/classic/messenger/messengercompose/button-security-hover.svg (mail/compose/button-security-hover.svg) ++ skin/classic/messenger/messengercompose/button-security-small-disabled.svg (mail/compose/button-security-small-disabled.svg) ++ skin/classic/messenger/messengercompose/button-security-small-hover.svg (mail/compose/button-security-small-hover.svg) ++ skin/classic/messenger/messengercompose/button-security-small.svg (mail/compose/button-security-small.svg) ++ skin/classic/messenger/messengercompose/button-security.svg (mail/compose/button-security.svg) ++ skin/classic/messenger/messengercompose/button-send-disabled.svg (mail/compose/button-send-disabled.svg) ++ skin/classic/messenger/messengercompose/button-send-hover.svg (mail/compose/button-send-hover.svg) ++ skin/classic/messenger/messengercompose/button-send-small-disabled.svg (mail/compose/button-send-small-disabled.svg) ++ skin/classic/messenger/messengercompose/button-send-small-hover.svg (mail/compose/button-send-small-hover.svg) ++ skin/classic/messenger/messengercompose/button-send-small.svg (mail/compose/button-send-small.svg) ++ skin/classic/messenger/messengercompose/button-send.svg (mail/compose/button-send.svg) ++ skin/classic/messenger/messengercompose/button-spelling-disabled.svg (mail/compose/button-spelling-disabled.svg) ++ skin/classic/messenger/messengercompose/button-spelling-hover.svg (mail/compose/button-spelling-hover.svg) ++ skin/classic/messenger/messengercompose/button-spelling-small-disabled.svg (mail/compose/button-spelling-small-disabled.svg) ++ skin/classic/messenger/messengercompose/button-spelling-small-hover.svg (mail/compose/button-spelling-small-hover.svg) ++ skin/classic/messenger/messengercompose/button-spelling-small.svg (mail/compose/button-spelling-small.svg) ++ skin/classic/messenger/messengercompose/button-spelling.svg (mail/compose/button-spelling.svg) + skin/classic/messenger/messengercompose/format-buttons.png (mail/compose/format-buttons.png) + % skin messenger-newsblog classic/1.0 %skin/classic/messenger-newsblog/ + skin/classic/messenger-newsblog/feed-subscriptions.css (mail/newsblog/feed-subscriptions.css) + skin/classic/messenger-newsblog/icons/rss-feed.png (mail/newsblog/rss-feed.png) + skin/classic/messenger-newsblog/icons/server-rss.png (mail/newsblog/server-rss.png) + skin/classic/messenger/preferences/alwaysAsk.png (mail/preferences/alwaysAsk.png) + skin/classic/messenger/preferences/preferences.css (mail/preferences/preferences.css) + skin/classic/messenger/preferences/general.png (mail/preferences/general.png) +diff --git a/mail/themes/gnomestripe/mail/compose/button-attach-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-attach-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-attach-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-attach-hover.svg b/mail/themes/gnomestripe/mail/compose/button-attach-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-attach-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-attach-small-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-attach-small-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-attach-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-attach-small-hover.svg b/mail/themes/gnomestripe/mail/compose/button-attach-small-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-attach-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-attach-small.svg b/mail/themes/gnomestripe/mail/compose/button-attach-small.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-attach-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-attach.svg b/mail/themes/gnomestripe/mail/compose/button-attach.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-attach.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-copy-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-copy-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-copy-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-copy-hover.svg b/mail/themes/gnomestripe/mail/compose/button-copy-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-copy-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-copy-small-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-copy-small-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-copy-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-copy-small-hover.svg b/mail/themes/gnomestripe/mail/compose/button-copy-small-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-copy-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-copy-small.svg b/mail/themes/gnomestripe/mail/compose/button-copy-small.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-copy-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-copy.svg b/mail/themes/gnomestripe/mail/compose/button-copy.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-copy.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-cut-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-cut-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-cut-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-cut-hover.svg b/mail/themes/gnomestripe/mail/compose/button-cut-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-cut-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-cut-small-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-cut-small-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-cut-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-cut-small-hover.svg b/mail/themes/gnomestripe/mail/compose/button-cut-small-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-cut-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-cut-small.svg b/mail/themes/gnomestripe/mail/compose/button-cut-small.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-cut-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-cut.svg b/mail/themes/gnomestripe/mail/compose/button-cut.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-cut.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-paste-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-paste-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-paste-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-paste-hover.svg b/mail/themes/gnomestripe/mail/compose/button-paste-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-paste-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-paste-small-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-paste-small-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-paste-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-paste-small-hover.svg b/mail/themes/gnomestripe/mail/compose/button-paste-small-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-paste-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-paste-small.svg b/mail/themes/gnomestripe/mail/compose/button-paste-small.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-paste-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-paste.svg b/mail/themes/gnomestripe/mail/compose/button-paste.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-paste.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-quote-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-quote-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-quote-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-quote-hover.svg b/mail/themes/gnomestripe/mail/compose/button-quote-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-quote-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-quote-small-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-quote-small-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-quote-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-quote-small-hover.svg b/mail/themes/gnomestripe/mail/compose/button-quote-small-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-quote-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-quote-small.svg b/mail/themes/gnomestripe/mail/compose/button-quote-small.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-quote-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-quote.svg b/mail/themes/gnomestripe/mail/compose/button-quote.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-quote.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-save-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-save-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-save-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-save-hover.svg b/mail/themes/gnomestripe/mail/compose/button-save-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-save-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-save-small-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-save-small-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-save-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-save-small-hover.svg b/mail/themes/gnomestripe/mail/compose/button-save-small-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-save-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-save-small.svg b/mail/themes/gnomestripe/mail/compose/button-save-small.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-save-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-save.svg b/mail/themes/gnomestripe/mail/compose/button-save.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-save.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-security-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-security-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-security-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-security-hover.svg b/mail/themes/gnomestripe/mail/compose/button-security-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-security-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-security-small-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-security-small-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-security-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-security-small-hover.svg b/mail/themes/gnomestripe/mail/compose/button-security-small-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-security-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-security-small.svg b/mail/themes/gnomestripe/mail/compose/button-security-small.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-security-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-security.svg b/mail/themes/gnomestripe/mail/compose/button-security.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-security.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-send-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-send-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-send-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-send-hover.svg b/mail/themes/gnomestripe/mail/compose/button-send-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-send-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-send-small-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-send-small-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-send-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-send-small-hover.svg b/mail/themes/gnomestripe/mail/compose/button-send-small-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-send-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-send-small.svg b/mail/themes/gnomestripe/mail/compose/button-send-small.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-send-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-send.svg b/mail/themes/gnomestripe/mail/compose/button-send.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-send.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-spelling-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-spelling-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-spelling-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-spelling-hover.svg b/mail/themes/gnomestripe/mail/compose/button-spelling-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-spelling-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-spelling-small-disabled.svg b/mail/themes/gnomestripe/mail/compose/button-spelling-small-disabled.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-spelling-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-spelling-small-hover.svg b/mail/themes/gnomestripe/mail/compose/button-spelling-small-hover.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-spelling-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-spelling-small.svg b/mail/themes/gnomestripe/mail/compose/button-spelling-small.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-spelling-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/button-spelling.svg b/mail/themes/gnomestripe/mail/compose/button-spelling.svg +new file mode 100644 +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/compose/button-spelling.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +diff --git a/mail/themes/gnomestripe/mail/compose/messengercompose.css b/mail/themes/gnomestripe/mail/compose/messengercompose.css +--- a/mail/themes/gnomestripe/mail/compose/messengercompose.css ++++ b/mail/themes/gnomestripe/mail/compose/messengercompose.css +@@ -65,166 +65,285 @@ toolbox[labelalign="end"] > toolbar[mode + -moz-padding-start: 2px; + } + + toolbox[labelalign="end"] > toolbar[mode="full"] deck .toolbarbutton-text { + text-align: start; + } + + #button-send { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar.png"); +- -moz-image-region: rect(198px 22px 220px 0px); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-send.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-send:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-send-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-send[disabled="true"] { +- -moz-image-region: rect(176px 22px 198px 0px) !important; +-} ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-send-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + #button-contacts { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar.png"); +- -moz-image-region: rect(22px 22px 44px 0px) !important; ++ list-style-image: url("chrome://messenger/skin/icons/button-address.svg"); ++ -moz-image-region: auto !important; ++} ++ ++#button-contacts:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-address-hover.svg"); ++ -moz-image-region: auto !important; + } + + #button-contacts[disabled="true"] { +- -moz-image-region: rect(0px 22px 22px 0px) !important; ++ list-style-image: url("chrome://messenger/skin/icons/button-address-disabled.svg"); ++ -moz-image-region: auto !important; + } + + #spellingButton { +- list-style-image: url("moz-icon://stock/gtk-spell-check?size=toolbar"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-spelling.svg"); ++ -moz-image-region: auto !important; ++} ++ ++#spellingButton:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-spelling-hover.svg"); ++ -moz-image-region: auto !important; + } + + #spellingButton[disabled="true"] { +- list-style-image: url("moz-icon://stock/tools-check-spelling?size=toolbar&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-spelling-disabled.svg"); ++ -moz-image-region: auto !important; + } + + #button-attach { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar.png"); +- -moz-image-region: rect(66px 22px 88px 0px); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-attach.svg"); ++ -moz-image-region: auto !important; ++} ++ ++#button-attach:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-attach-hover.svg"); ++ -moz-image-region: auto !important; + } + + #button-attach[disabled="true"] { +- -moz-image-region: rect(44px 22px 66px 0px) !important; +-} ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-attach-disabled.svg"); ++ -moz-image-region: auto !important; ++} + + #button-save { +- list-style-image: url("moz-icon://stock/gtk-save?size=toolbar"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-save.svg"); ++ -moz-image-region: auto !important; ++} ++ ++#button-save:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-save-hover.svg"); ++ -moz-image-region: auto !important; + } + + #button-save[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-save?size=toolbar&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-save-disabled.svg"); ++ -moz-image-region: auto !important; + } + + #quoteButton { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar.png"); +- -moz-image-region: rect(110px 22px 132px 0px); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-quote.svg"); ++ -moz-image-region: auto !important; ++} ++ ++#quoteButton:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-quote-hover.svg"); ++ -moz-image-region: auto !important; + } + + #quoteButton[disabled="true"] { +- -moz-image-region: rect(88px 22px 110px 0px) !important; ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-quote-disabled.svg"); ++ -moz-image-region: auto !important; + } + + #cut-button { +- list-style-image: url("moz-icon://stock/gtk-cut?size=toolbar"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-cut.svg"); ++ -moz-image-region: auto !important; ++} ++ ++#cut-button:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-cut-hover.svg"); ++ -moz-image-region: auto !important; + } + + #cut-button[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-cut?size=toolbar&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-cut-disabled.svg"); ++ -moz-image-region: auto !important; + } + + #copy-button { +- list-style-image: url("moz-icon://stock/gtk-copy?size=toolbar"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-copy.svg"); ++ -moz-image-region: auto !important; ++} ++ ++#copy-button:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-copy-hover.svg"); ++ -moz-image-region: auto !important; + } + + #copy-button[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-copy?size=toolbar&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-copy-disabled.svg"); ++ -moz-image-region: auto !important; + } + + #paste-button { +- list-style-image: url("moz-icon://stock/gtk-paste?size=toolbar"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-paste.svg"); ++ -moz-image-region: auto !important; ++} ++ ++#paste-button:hover{ ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-paste-hover.svg"); ++ -moz-image-region: auto !important; + } + + #paste-button[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-paste?size=toolbar&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-paste-disabled.svg"); ++ -moz-image-region: auto !important; + } + + /* ::::: small primary toolbar buttons ::::: */ + + toolbar[iconsize="small"] #button-send { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar-small.png"); +- -moz-image-region: rect(144px 16px 160px 0px); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-send-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-send[disabled] { +- -moz-image-region: rect(128px 16px 144px 0px) !important; ++toolbar[iconsize="small"] #button-send:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-send-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-send[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-send-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-contacts { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar-small.png"); +- -moz-image-region: rect(16px 16px 32px 0px) !important; ++ list-style-image: url("chrome://messenger/skin/icons/button-address-small.svg"); ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-contacts[disabled] { +- -moz-image-region: rect(0px 16px 16px 0px) !important; ++toolbar[iconsize="small"] #button-contacts:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-address-small-hover.svg"); ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-contacts[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-address-small-disabled.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #spellingButton { +- list-style-image: url("moz-icon://stock/gtk-spell-check?size=menu"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-spelling-small.svg"); ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #spellingButton:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-spelling-small-hover.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #spellingButton[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-spell-check?size=menu&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-spelling-small-disabled.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-attach { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar-small.png"); +- -moz-image-region: rect(48px 16px 64px 0px); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-attach-small.svg"); ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-attach[disabled] { +- -moz-image-region: rect(32px 16px 48px 0px) !important; +-} ++toolbar[iconsize="small"] #button-attach:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-attach-small-hover.svg"); ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-attach[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-attach-small-disabled.svg"); ++ -moz-image-region: auto !important; ++} + + toolbar[iconsize="small"] #button-save { +- list-style-image: url("moz-icon://stock/gtk-save?size=menu"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-save-small.svg"); ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-save[disabled] { +- list-style-image: url("moz-icon://stock/gtk-save?size=menu&state=disabled"); ++toolbar[iconsize="small"] #button-save:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-save-small-hover.svg"); ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-save[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-save-small-disabled.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #quoteButton { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar-small.png"); +- -moz-image-region: rect(80px 16px 96px 0px); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-quote-small.svg"); ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #quoteButton:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-quote-small-hover.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #quoteButton[disabled="true"] { +- -moz-image-region: rect(64px 16px 80px 0px) !important; ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-quote-small-disabled.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #cut-button { +- list-style-image: url("moz-icon://stock/gtk-cut?size=menu"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-cut-small.svg"); ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #cut-button:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-cut-small-hover.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #cut-button[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-cut?size=menu&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-cut-small-disabled.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #copy-button { +- list-style-image: url("moz-icon://stock/gtk-copy?size=menu"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-copy-small.svg"); ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #copy-button:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-copy-small-hover.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #copy-button[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-copy?size=menu&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-copy-small-disabled.svg"); ++ -moz-image-region: auto !important; + } ++ + toolbar[iconsize="small"] #paste-button { +- list-style-image: url("moz-icon://stock/gtk-paste?size=menu"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-paste-small.svg"); ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #paste-button:hover{ ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-paste-small-hover.svg"); ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #paste-button[disabled="true"] { +- list-style-image: url("moz-icon://stock/gtk-paste?size=menu&state=disabled"); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-paste-small-disabled.svg"); ++ -moz-image-region: auto !important; + } + + #priority-button:not(:-moz-lwtheme) > label { + color: MenuText; + } + + /* ::::: special toolbar colors ::::: */ + +diff --git a/mail/themes/gnomestripe/mail/smime/msgCompSMIMEOverlay.css b/mail/themes/gnomestripe/mail/smime/msgCompSMIMEOverlay.css +--- a/mail/themes/gnomestripe/mail/smime/msgCompSMIMEOverlay.css ++++ b/mail/themes/gnomestripe/mail/smime/msgCompSMIMEOverlay.css +@@ -36,32 +36,44 @@ + + /* ===== msgCompSMIMEOverlay.css ======================================== + == Styles for the S/Mime in composer window. + ======================================================================= */ + + @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); + + #button-security { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar.png"); +- -moz-image-region: rect(154px 22px 176px 0px); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-security.svg"); ++ -moz-image-region: auto !important; ++} ++ ++#button-security:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-security-hover.svg"); ++ -moz-image-region: auto !important; + } + + #button-security[disabled="true"] { +- -moz-image-region: rect(132px 22px 154px 0px); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-security-disabled.svg"); ++ -moz-image-region: auto !important; + } + + + toolbar[iconsize="small"] #button-security { +- list-style-image: url("chrome://messenger/skin/messengercompose/compose-toolbar-small.png"); +- -moz-image-region: rect(112px 16px 128px 0px); ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-security-small.svg"); ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-security[disabled] { +- -moz-image-region: rect(96px 16px 112px 0px); ++toolbar[iconsize="small"] #button-security:hover { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-security-small-hover.svg"); ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-security[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/messengercompose/button-security-small-disabled.svg"); ++ -moz-image-region: auto !important; + } + + #msgcomposeWindow #signing-status { + list-style-image: none; + visibility: collapse; + } + + #msgcomposeWindow[signing="ok"] #signing-status { --- thunderbird-10.0.2+build1.orig/debian/patches/theme-resfresh-addressbook-toolbar-icons.patch +++ thunderbird-10.0.2+build1/debian/patches/theme-resfresh-addressbook-toolbar-icons.patch @@ -0,0 +1,589 @@ +# HG changeset patch +# Parent 44546ef161af3817dd5c24513c351e9cc4323633 + +--- a/mail/themes/gnomestripe/jar.mn ++++ b/mail/themes/gnomestripe/jar.mn +@@ -71,8 +71,30 @@ classic.jar: + skin/classic/messenger/addressbook/icons/ablist.png (mail/addrbook/ablist.png) + skin/classic/messenger/addressbook/icons/contact-generic.png (mail/addrbook/contact-generic.png) + skin/classic/messenger/addressbook/icons/contact-generic-tiny.png (mail/addrbook/contact-generic-tiny.png) +- skin/classic/messenger/addressbook/icons/addressbook-toolbar.png (mail/addrbook/addressbook-toolbar.png) +- skin/classic/messenger/addressbook/icons/addressbook-toolbar-small.png (mail/addrbook/addressbook-toolbar-small.png) ++ skin/classic/messenger/addressbook/icons/button-info-disabled.svg (mail/addrbook/button-info-disabled.svg) ++ skin/classic/messenger/addressbook/icons/button-info-hover.svg (mail/addrbook/button-info-hover.svg) ++ skin/classic/messenger/addressbook/icons/button-info-small-disabled.svg (mail/addrbook/button-info-small-disabled.svg) ++ skin/classic/messenger/addressbook/icons/button-info-small-hover.svg (mail/addrbook/button-info-small-hover.svg) ++ skin/classic/messenger/addressbook/icons/button-info-small.svg (mail/addrbook/button-info-small.svg) ++ skin/classic/messenger/addressbook/icons/button-info.svg (mail/addrbook/button-info.svg) ++ skin/classic/messenger/addressbook/icons/button-newcard-disabled.svg (mail/addrbook/button-newcard-disabled.svg) ++ skin/classic/messenger/addressbook/icons/button-newcard-hover.svg (mail/addrbook/button-newcard-hover.svg) ++ skin/classic/messenger/addressbook/icons/button-newcard-small-disabled.svg (mail/addrbook/button-newcard-small-disabled.svg) ++ skin/classic/messenger/addressbook/icons/button-newcard-small-hover.svg (mail/addrbook/button-newcard-small-hover.svg) ++ skin/classic/messenger/addressbook/icons/button-newcard-small.svg (mail/addrbook/button-newcard-small.svg) ++ skin/classic/messenger/addressbook/icons/button-newcard.svg (mail/addrbook/button-newcard.svg) ++ skin/classic/messenger/addressbook/icons/button-newim-disabled.svg (mail/addrbook/button-newim-disabled.svg) ++ skin/classic/messenger/addressbook/icons/button-newim-hover.svg (mail/addrbook/button-newim-hover.svg) ++ skin/classic/messenger/addressbook/icons/button-newim-small-disabled.svg (mail/addrbook/button-newim-small-disabled.svg) ++ skin/classic/messenger/addressbook/icons/button-newim-small-hover.svg (mail/addrbook/button-newim-small-hover.svg) ++ skin/classic/messenger/addressbook/icons/button-newim-small.svg (mail/addrbook/button-newim-small.svg) ++ skin/classic/messenger/addressbook/icons/button-newim.svg (mail/addrbook/button-newim.svg) ++ skin/classic/messenger/addressbook/icons/button-newlist-disabled.svg (mail/addrbook/button-newlist-disabled.svg) ++ skin/classic/messenger/addressbook/icons/button-newlist-hover.svg (mail/addrbook/button-newlist-hover.svg) ++ skin/classic/messenger/addressbook/icons/button-newlist-small-disabled.svg (mail/addrbook/button-newlist-small-disabled.svg) ++ skin/classic/messenger/addressbook/icons/button-newlist-small-hover.svg (mail/addrbook/button-newlist-small-hover.svg) ++ skin/classic/messenger/addressbook/icons/button-newlist-small.svg (mail/addrbook/button-newlist-small.svg) ++ skin/classic/messenger/addressbook/icons/button-newlist.svg (mail/addrbook/button-newlist.svg) + skin/classic/messenger/addressbook/icons/abcard-large.png (mail/addrbook/abcard-large.png) + skin/classic/messenger/addressbook/icons/remote-addrbook.png (mail/addrbook/remote-addrbook.png) + skin/classic/messenger/addressbook/icons/remote-addrbook-error.png (mail/addrbook/remote-addrbook-error.png) +--- a/mail/themes/gnomestripe/mail/addrbook/addressbook.css ++++ b/mail/themes/gnomestripe/mail/addrbook/addressbook.css +@@ -71,111 +71,185 @@ toolbox[labelalign="end"] > toolbar[mode + } + + #button-newcard { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar.png"); +- -moz-image-region: rect(44px 22px 66px 0px); /* contact-add.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newcard.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-newcard:hover { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newcard-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-newcard[disabled="true"] { +- -moz-image-region: rect(66px 22px 88px 0px); /* contact-add-disabled.png */ +-} ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newcard-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + #button-newlist { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar.png"); +- -moz-image-region: rect(88px 22px 110px 0px); /* contact-list-add.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newlist.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-newlist:hover { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newlist-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-newlist[disabled="true"] { +- -moz-image-region: rect(110px 22px 132px 0px); /* contact-list-add-disabled.png */ +-} ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newlist-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + #button-editcard { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar.png"); +- -moz-image-region: rect(132px 22px 154px 0px); /* contact-properties.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-info.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-editcard:hover { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-info-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-editcard[disabled="true"] { +- -moz-image-region: rect(154px 22px 176px 0px); /* contact-properties-disabled.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-info-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-newmessage { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar.png"); +- -moz-image-region: rect(176px 22px 198px 0px); /* message-compose.png */ ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-newmessage:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-newmessage[disabled] { +- -moz-image-region: rect(198px 22px 220px 0px); /* message-compose-disabled.png */ ++#button-newmessage[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #button-newim { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar.png"); +- -moz-image-region: rect(0px 22px 22px 0px); /* chat-new.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newim.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-newim[disabled] { +- -moz-image-region: rect(22px 22px 44px 0px); /* chat-new-disabled.png */ +-} ++#button-newim:hover { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newim-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-newim[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newim-disabled.svg") !important; ++ -moz-image-region: auto !important; ++} + + #button-abdelete { +- list-style-image: url("moz-icon://stock/gtk-delete?size=toolbar") ++ list-style-image: url("chrome://messenger/skin/icons/button-delete.svg") !important; ++ -moz-image-region: auto !important; + } + +-#button-abdelete[disabled] { +- list-style-image: url("moz-icon://stock/gtk-delete?size=toolbar&state=disabled") ++#button-abdelete:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++#button-abdelete[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + /* ::::: small primary toolbar buttons ::::: */ + + toolbar[iconsize="small"] #button-newcard { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(32px 16px 48px 0px); /* contact-add-small.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newcard-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-newcard:hover { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newcard-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-newcard[disabled] { +- -moz-image-region: rect(48px 16px 64px 0px); /* contact-add-small-disabled.png */ ++toolbar[iconsize="small"] #button-newcard[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newcard-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-newlist { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(64px 16px 80px 0px); /* contact-list-add-small.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newlist-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-newlist[disabled] { +- -moz-image-region: rect(80px 16px 96px 0px); /* contact-list-add-small-disabled.png */ ++toolbar[iconsize="small"] #button-newlist:hover { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newlist-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-newlist[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newlist-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-editcard { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(96px 16px 112px 0px); /* contact-properties-small.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-info-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-editcard:hover { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-info-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-editcard[disabled="true"] { +- -moz-image-region: rect(112px 16px 128px 0px); /* contact-properties-small-disabled.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-info-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-newmessage { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(128px 16px 144px 0px); /* message-compose-small.png */ ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-small.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-newmessage[disabled] { +- -moz-image-region: rect(144px 16px 160px 0px); /* message-compose-small-disabled.png */ ++toolbar[iconsize="small"] #button-newmessage:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-small-hover.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-newmessage[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-newim { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(0px 16px 16px 0px); /* chat-new-small.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newim-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-newim:hover { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newim-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-newim[disabled] { +- -moz-image-region: rect(16px 16px 32px 0px); /* chat-new-small-disabled.png */ ++toolbar[iconsize="small"] #button-newim[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newim-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + toolbar[iconsize="small"] #button-abdelete { +- list-style-image: url("moz-icon://stock/gtk-delete?size=menu"); ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-small.svg") !important; ++ -moz-image-region: auto !important; ++} ++ ++toolbar[iconsize="small"] #button-abdelete:hover { ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-small-hover.svg") !important; ++ -moz-image-region: auto !important; + } + +-toolbar[iconsize="small"] #button-abdelete[disabled] { +- list-style-image: url("moz-icon://stock/gtk-delete?size=menu&state=disabled"); ++toolbar[iconsize="small"] #button-abdelete[disabled="true"] { ++ list-style-image: url("chrome://messenger/skin/icons/button-delete-small-disabled.svg") !important; ++ -moz-image-region: auto !important; + } + + #abContent { +@@ -349,25 +423,25 @@ html|p { + + #menu_newContact, + #dirTreeContext-newcard { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(32px 16px 48px 0px); /* contact-add-small.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newcard-small.svg") !important; ++ -moz-image-region: auto !important; + } + + #menu_newList, + #dirTreeContext-newlist { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(64px 16px 80px 0px); /* contact-list-add-small.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newlist-small.svg") !important; ++ -moz-image-region: auto !important; + } + + #menu_newMessage, + #abResultsTreeContext-newmessage { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(128px 16px 144px 0px); /* message-compose-small.png */ ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-small.svg") !important; ++ -moz-image-region: auto !important; + } + + #abResultsTreeContext-newim { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(0px 16px 16px 0px); /* chat-new-small.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newim-small.svg") !important; ++ -moz-image-region: auto !important; + } + + #menu_search_addresses { +@@ -377,8 +451,8 @@ html|p { + #menu_properties, + #dirTreeContext-properties, + #abResultsTreeContext-properties { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar-small.png"); +- -moz-image-region: rect(96px 16px 112px 0px); /* contact-properties-small.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-info-small.svg") !important; ++ -moz-image-region: auto !important; + } + + #dirTreeContext-delete, +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-info-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-info-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-info-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-info-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-info-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-info.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newcard-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newcard-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newcard-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newcard-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newcard-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newcard.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newim-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newim-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newim-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newim-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newim-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newim.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newlist-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newlist-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newlist-small-disabled.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newlist-small-hover.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newlist-small.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- /dev/null ++++ b/mail/themes/gnomestripe/mail/addrbook/button-newlist.svg +@@ -0,0 +1,7 @@ ++ ++ ++ +--- a/mail/themes/gnomestripe/mail/messenger.css ++++ b/mail/themes/gnomestripe/mail/messenger.css +@@ -158,8 +158,8 @@ menuitem:not([type]) { + } + + #menu_newCard { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar.png"); +- -moz-image-region: rect(44px 22px 66px 0px); /* contact-add.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newcard.svg") !important; ++ -moz-image-region: auto !important; + } + + #openMessageFileMenuitem { +--- a/mail/themes/gnomestripe/mail/compose/messengercompose.css ++++ b/mail/themes/gnomestripe/mail/compose/messengercompose.css +@@ -665,13 +665,13 @@ toolbarbutton.formatting-button { + + /** Stock icons for the menu items. */ + #menu_NewMessage { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar.png"); +- -moz-image-region: rect(176px 22px 198px 0px); /* message-compose.png */ ++ list-style-image: url("chrome://messenger/skin/icons/button-newmsg-small.svg") !important; ++ -moz-image-region: auto !important; + } + + #menu_NewContact { +- list-style-image: url("chrome://messenger/skin/addressbook/icons/addressbook-toolbar.png"); +- -moz-image-region: rect(44px 22px 66px 0px); /* contact-add.png */ ++ list-style-image: url("chrome://messenger/skin/addressbook/icons/button-newcard-small.svg") !important; ++ -moz-image-region: auto !important; + } + + #menu_SaveCmd { --- thunderbird-10.0.2+build1.orig/debian/config/mozconfig.in +++ thunderbird-10.0.2+build1/debian/config/mozconfig.in @@ -0,0 +1,111 @@ +%%ifdef DEB_BUILD_GNU_TYPE +ac_add_options --build=@DEB_BUILD_GNU_TYPE@ +%%endif +ac_add_options --host=@DEB_HOST_GNU_TYPE@ +ac_add_options --prefix=@MOZ_PREFIX@ +ac_add_options --libexecdir=@MOZ_LIBDIR@ +ac_add_options --with-l10n-base=@TOPSRCDIR@/@DEB_BUILDDIR@/l10n +ac_add_options --srcdir=@TOPSRCDIR@/@DEB_BUILDDIR@ +mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/@MOZ_OBJDIR@ +ac_add_options --disable-install-strip +ac_add_options --disable-updater +ac_add_options --enable-application=mail +ac_add_options --enable-startup-notification +ac_add_options --with-distribution-id=com.ubuntu +%%ifdef DEB_ENABLE_THUMB2 +ac_add_options --enable-thumb2 +%%endif +%%if MOZ_OVERRIDE_SHLIBS == system +ac_add_options --with-system-jpeg=/usr +ac_add_options --with-system-png=/usr +ac_add_options --with-system-zlib=/usr +ac_add_options --with-system-bz2=/usr +ac_add_options --with-system-libevent=/usr +ac_add_options --enable-system-pixman +ac_add_options --disable-tree-freetype +%%elif MOZ_OVERRIDE_SHLIBS == tree +ac_add_options --without-system-jpeg +ac_add_options --without-system-png +ac_add_options --without-system-zlib +ac_add_options --without-system-bz2 +ac_add_options --without-system-libevent +ac_add_options --disable-system-pixman +ac_add_options --enable-tree-freetype +%%endif +ac_add_options --enable-chrome-format=omni +%%ifdef MOZ_NO_OPTIMIZE +ac_add_options --disable-optimize +%%else +%%ifndef MOZ_VALGRIND +ac_add_options --enable-optimize +%%else +ac_add_options --enable-optimize="-g -O -freorder-blocks" +%%endif +%%endif +%%ifdef MOZ_VALGRIND +ac_add_options --disable-jemalloc +ac_add_options --enable-valgrind +mk_add_options MOZ_MAKE_FLAGS=-j4 +%%endif +%%ifdef MOZ_WANT_UNIT_TESTS +ac_add_options --enable-tests +ac_add_options --enable-ipdl-tests +%%else +ac_add_options --disable-tests +ac_add_options --disable-ipdl-tests +%%endif +%%if MOZ_USE_CAIRO == system +ac_add_options --enable-system-cairo +%%elif MOZ_USE_CAIRO == tree +ac_add_options --disable-system-cairo +%%endif +%%if MOZ_USE_NSPR == system +ac_add_options --with-system-nspr +%%elif MOZ_USE_NSPR == tree +ac_add_options --without-system-nspr +%%endif +%%if MOZ_USE_NSS == system +ac_add_options --with-system-nss +%%elif MOZ_USE_NSS == tree +ac_add_options --without-system-nss +%%endif +%%if MOZ_USE_SQLITE == tree +ac_add_options --disable-system-sqlite +%%elif MOZ_USE_SQLITE == system +ac_add_options --enable-system-sqlite +%%endif +%%if MOZ_USE_HUNSPELL == tree +ac_add_options --disable-system-hunspell +%%elif MOZ_USE_HUNSPELL == system +ac_add_options --enable-system-hunspell +%%endif +%%if MOZ_USE_VPX == tree +ac_add_options --without-system-libvpx +%%elif MOZ_USE_VPX == system +ac_add_options --with-system-libvpx=/usr +%%endif +%%ifdef MOZ_ENABLE_BREAKPAD +ac_add_options --enable-crashreporter +%%else +ac_add_options --disable-crashreporter +%%endif +ac_add_options @MOZ_BRANDING_OPTION@ +%%ifdef MOZ_BUILD_PGO +mk_add_options PROFILE_GEN_SCRIPT='xvfb-run -a @MOZ_PYTHON@ @TOPSRCDIR@/@MOZ_OBJDIR@/_profile/pgo/profileserver.py' +%%endif +%%ifdef MOZ_DISABLE_GNOMEVFS +ac_add_options --disable-gnomevfs +ac_add_options --enable-gio +%%endif +%%ifdef MOZ_UPDATE_CHANNEL +ac_add_options --enable-update-channel=@MOZ_UPDATE_CHANNEL@ +%%endif +%%ifdef MOZ_DEBUG +ac_add_options --enable-debug +%%else +ac_add_options --disable-debug +%%endif +ac_add_options --disable-elf-hack +%%ifdef MOZ_ENABLE_GLOBALMENU +ac_add_options --enable-extensions=default,globalmenu +%%endif --- thunderbird-10.0.2+build1.orig/debian/config/locales.blacklist +++ thunderbird-10.0.2+build1/debian/config/locales.blacklist @@ -0,0 +1 @@ +# List of upstream locales to blacklist --- thunderbird-10.0.2+build1.orig/debian/config/locales.all +++ thunderbird-10.0.2+build1/debian/config/locales.all @@ -0,0 +1,54 @@ +# List of all language packs, past and present. Please don't delete any entries from this file +af:Afrikaans +ar:Arabic +ast:Asturian +be:Belarusian +bg:Bulgarian +bn:Bengali +br:Breton +ca:Catalan; Valencian +cs:Czech +da:Danish +de:German +el:Greek +en:English +es:Spanish; Castilian +et:Estonian +eu:Basque +fi:Finnish +fr:French +fy:Western Frisian +ga:Irish +gd:Gaelic; Scottish Gaelic +gl:Galician +he:Hebrew +hu:Hungarian +id:Indonesian +is:Icelandic +it:Italian +ja:Japanese +ka:Georgian +ko:Korean +lt:Lithuanian +mk:Macedonian +nb:Bokmål, Norwegian; Norwegian Bokmål +nl:Dutch; Flemish +nn:Norwegian Nynorsk; Nynorsk, Norwegian +pa:Panjabi; Punjabi +pl:Polish +pt:Portuguese +rm:Romansh +ro:Romanian +ru:Russian +si:Sinhala; Sinhalese +sk:Slovak +sl:Slovenian +sq:Albanian +sr:Serbian +sv:Swedish +ta:Tamil +tr:Turkish +uk:Ukrainian +vi:Vietnamese +zh-hans:Simplified Chinese +zh-hant:Traditional Chinese --- thunderbird-10.0.2+build1.orig/debian/config/locales.shipped +++ thunderbird-10.0.2+build1/debian/config/locales.shipped @@ -0,0 +1,53 @@ +# List of shipped locales. This list is automatically generated. Do not edit by hand +ar:ar +ast:ast +be:be +bg:bg +bn-BD:bn +br:br +ca:ca +cs:cs +da:da +de:de +el:el +en-GB:en +es-AR:es +es-ES:es +et:et +eu:eu +fi:fi +fr:fr +fy-NL:fy +ga-IE:ga +gd:gd +gl:gl +he:he +hu:hu +id:id +is:is +it:it +ja:ja +ko:ko +lt:lt +nb-NO:nb +nl:nl +nn-NO:nn +pa-IN:pa +pl:pl +pt-BR:pt +pt-PT:pt +rm:rm +ro:ro +ru:ru +si:si +sk:sk +sl:sl +sq:sq +sr:sr +sv-SE:sv +ta-LK:ta +tr:tr +uk:uk +vi:vi +zh-CN:zh-hans +zh-TW:zh-hant --- thunderbird-10.0.2+build1.orig/debian/config/branch.mk +++ thunderbird-10.0.2+build1/debian/config/branch.mk @@ -0,0 +1,6 @@ +CHANNEL = release +MOZ_BUILD_UNOFFICIAL = 0 +MOZ_ENABLE_BREAKPAD = 1 + +COMM_REPO = http://hg.mozilla.org/releases/comm-release +L10N_REPO = http://hg.mozilla.org/releases/l10n/mozilla-release --- thunderbird-10.0.2+build1.orig/debian/compare-locales/REV +++ thunderbird-10.0.2+build1/debian/compare-locales/REV @@ -0,0 +1 @@ +TAG=FIREFOX_5_0b1_BUILD1 \ No newline at end of file --- thunderbird-10.0.2+build1.orig/debian/compare-locales/lib/Mozilla/Tests.py +++ thunderbird-10.0.2+build1/debian/compare-locales/lib/Mozilla/Tests.py @@ -0,0 +1,394 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2006 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +import logging +import Paths +import Parser + +def getRegionProperties(loc): + regprop = Paths.get_path('browser', loc, + 'chrome/browser-region/region.properties') + p = Parser.getParser(regprop) + f = Paths.File(regprop, 'chrome/browser-region/region.properties') + p.readContents(f.getContents()) + return p + +class Base: + '''Base class for all tests''' + def __init__(self): + if not hasattr(self, 'leafName'): + self.leafName = 'TODO' + logging.warning(' ' + self + ' does not have leafName set, writing to TODO') + def run(self): + '''Run this test for all locales, returns a dictionary with results''' + pass + def serialize(self, result, saveHandler): + '''Serialize the previously generated result, writes the dictionary + by default''' + return saveHandler(result, self.leafName) + pass + def failureTest(self, myResult, failureResult): + pass + +import CompareLocales +class CompareTest(Base): + '''Test class to compare locales''' + def __init__(self): + '''Initializes the test object''' + # nothing to be done here + self.apps = ['browser', 'mail'] + pass + def run(self): + '''Runs CompareLocales.compareApp()''' + app = Paths.EnumerateApp() + for appname in self.apps: + app.addApplication(appname) + return CompareLocales.compareApp(app) + def serialize(self, result, saveHandler): + '''Serialize the CompareLocales result by locale into + cmp-details-ab-CD + and a compacted version into + cmp-data + + ''' + #for locale, stats in result.details: + # assert locale is not None + # saveHandler(foo, 'cmp-details-%s.json' % locale) + saveHandler(result.summary, 'cmp-data.json') + + def failureTest(self, myResult, failureResult): + '''signal pass/warn/failure for each locale''' + def sumdata(data, part): + res = 0 + for mod in [u'browser', u'toolkit']: + res += data[part][mod] + data[part + u'Files'][mod] + return res + def getState(data): + ret = 0 + if sumdata(data, u'obsolete') > 0: + ret |= 1 + if sumdata(data, u'missing') > 0: + ret |= 2 + return ret + for loc, val in myResult.iteritems(): + if not failureResult.has_key(loc): + failureResult[loc] = getState(val) + else: + failureResult |= getState(val) + +from xml import sax +from types import DictType, FunctionType +import md5 +from codecs import utf_8_encode +import re +import os + +class SearchTest(Base): + """Test class to collect information from search plugins and to + verify that they're doing something good. + + """ + def __init__(self): + '''Set up the test class with a good leaf name''' + self.leafName = 'search-results.json' + pass + def run(self): + '''Collect all data from the MozSearch plugins in both the /cvsroot + repository for en-US and the /l10n repository for locales + + ''' + class DummyHandler(sax.handler.ContentHandler): + def startDocument(self): + self.md5 = md5.new() + self.indent = '' + self.engine = {'urls':[]} + self.lNames = [] + self.textField = None + self.content = '' + return + def endDocument(self): + self.engine['md5'] = self.md5.hexdigest() + return + def startElementNS(self, (ns, local), qname, attrs): + if self.textField: + logging.warning('Found Element, but expected CDATA.') + self.indent += ' ' + if ns != u'http://www.mozilla.org/2006/browser/search/': + raise UserWarning, ('bad namespace: ' + ns) + self.lNames.append(local) + handler = self.getOpenHandler() + if handler: + handler(self, attrs) + self.update(ns+local) + for qna in attrs.getQNames(): + self.update(qna[0] + qna[1] + attrs.getValueByQName(qna)) + return + def endElementNS(self, (ns, local), qname): + if self.textField: + self.engine[self.textField] = self.content + self.textField = None + self.content = '' + self.lNames.pop() + self.indent = self.indent[0:-2] + def characters(self, content): + self.update(content) + if not self.textField: + return + self.content += content + def update(self, content): + self.md5.update(utf_8_encode(content)[0]) + def openURL(self, attrs): + entry = {'params':{}, + 'type': attrs.getValueByQName(u'type'), + 'template': attrs.getValueByQName(u'template')} + self.engine['urls'].append(entry) + def handleParam(self, attrs): + try: + self.engine['urls'][-1]['params'][attrs.getValueByQName(u'name')] = attrs.getValueByQName(u'value') + except KeyError: + raise UserWarning, 'bad param' + return + def handleMozParam(self, attrs): + mp = None + try: + mp = { 'name': attrs.getValueByQName(u'name'), + 'condition': attrs.getValueByQName(u'condition'), + 'trueValue': attrs.getValueByQName(u'trueValue'), + 'falseValue': attrs.getValueByQName(u'falseValue')} + except KeyError: + try: + mp = {'name': attrs.getValueByQName(u'name'), + 'condition': attrs.getValueByQName(u'condition'), + 'pref': attrs.getValueByQName(u'pref')} + except KeyError: + raise UserWarning, 'bad mozParam' + if self.engine['urls'][-1].has_key('MozParams'): + self.engine['urls'][-1]['MozParams'].append(mp) + else: + self.engine['urls'][-1]['MozParams'] = [mp] + return + def handleShortName(self, attrs): + self.textField = 'ShortName' + return + def handleImage(self, attrs): + self.textField = 'Image' + return + def getOpenHandler(self): + return self.getHandler(DummyHandler.openHandlers) + def getHandler(self, handlers): + for local in self.lNames: + if type(handlers) != DictType or not handlers.has_key(local): + return + handlers = handlers[local] + if handlers.has_key('_handler'): + return handlers['_handler'] + return + openHandlers = {'SearchPlugin': + {'ShortName': {'_handler': handleShortName}, + 'Image': {'_handler': handleImage}, + 'Url':{'_handler': openURL, + 'Param': {'_handler':handleParam}, + 'MozParam': {'_handler':handleMozParam} + } + } + } + + handler = DummyHandler() + parser = sax.make_parser() + parser.setContentHandler(handler) + parser.setFeature(sax.handler.feature_namespaces, True) + + locales = [loc.strip() for loc in open('mozilla/browser/locales/all-locales')] + locales.insert(0, 'en-US') + sets = {} + details = {} + + for loc in locales: + l = logging.getLogger('locales.' + loc) + try: + lst = open(Paths.get_path('browser',loc,'searchplugins/list.txt'),'r') + except IOError: + l.error("Locale " + loc + " doesn't have search plugins") + details[Paths.get_path('browser',loc,'searchplugins/list.txt')] = { + 'error': 'not found' + } + continue + sets[loc] = {'list': []} + p = getRegionProperties(loc) + orders = {} + for entity in p: + m = re.match('browser.search.order.([1-9])', entity.key) + if m: + orders[entity.val.strip()] = int(m.group(1)) + elif entity.key == 'browser.search.defaultenginename': + sets[loc]['default'] = entity.val.strip() + sets[loc]['orders'] = orders + for fn in lst: + name = fn.strip() + if len(name) == 0: + continue + leaf = 'searchplugins/' + name + '.xml' + _path = Paths.get_path('browser','en-US', leaf) + if not os.access(_path, os.R_OK): + _path = Paths.get_path('browser', loc, leaf) + l.debug('testing ' + _path) + sets[loc]['list'].append(_path) + try: + parser.parse(_path) + except IOError: + l.error("can't open " + _path) + details[_path] = {'_name': name, 'error': 'not found'} + continue + except UserWarning, ex: + l.error("error in searchplugin " + _path) + details[_path] = {'_name': name, 'error': ex.args[0]} + continue + except sax._exceptions.SAXParseException, ex: + l.error("error in searchplugin " + _path) + details[_path] = {'_name': name, 'error': ex.args[0]} + continue + details[_path] = handler.engine + details[_path]['_name'] = name + + engines = {'locales': sets, + 'details': details} + return engines + def failureTest(self, myResult, failureResult): + '''signal pass/warn/failure for each locale + Just signaling errors in individual plugins for now. + + ''' + for loc, val in myResult['locales'].iteritems(): + l = logging.getLogger('locales.' + loc) + # Verify that there are no errors in the engine parsing, + # and that there default engine is the first one. + if (not val['orders'].has_key(val['default'])) or val['orders'][val['default']] != 1: + l.error('Default engine is not first in order in locale ' + loc) + if not failureResult.has_key(loc): + failureResult[loc] = 2 + else: + failureResult[loc] |= 2 + for p in val['list']: + # no logging, that is already reported above + if myResult['details'][p].has_key('error'): + if not failureResult.has_key(loc): + failureResult[loc] = 2 + else: + failureResult[loc] |= 2 + +class RSSReaderTest(Base): + """Test class to collect information about RSS readers and to + verify that they might be working. + + """ + def __init__(self): + '''Set up the test class with a good leaf name''' + self.leafName = 'feed-reader-results.json' + pass + def run(self): + '''Collect the data from browsers region.properties for all locales + + ''' + locales = [loc.strip() for loc in open('mozilla/browser/locales/all-locales')] + uri = re.compile('browser\\.contentHandlers\\.types\\.([0-5])\\.uri') + title = re.compile('browser\\.contentHandlers\\.types\\.([0-5])\\.title') + res = {} + for loc in locales: + l = logging.getLogger('locales.' + loc) + p = getRegionProperties(loc) + uris = {} + titles = {} + for entity in p: + key = entity.key + val = entity.val + m = uri.match(key) + if m: + o = int(m.group(1)) + if uris.has_key(o): + l.error('Double definition of RSS reader ' + o) + uris[o] = val.strip() + else: + m = title.match(key) + if m: + o = int(m.group(1)) + if titles.has_key(o): + l.error('Double definition of RSS reader ' + o) + titles[o] = val.strip() + ind = sorted(uris.keys()) + if ind != range(len(ind)) or ind != sorted(titles.keys()): + l.error('RSS Readers are badly set up') + res[loc] = [(titles[o], uris[o]) for o in ind] + return res + +class BookmarksTest(Base): + """Test class to collect information about bookmarks and check their + structure. + + """ + def __init__(self): + '''Set up the test class with a good leaf name''' + self.leafName = 'bookmarks-results.json' + pass + def run(self): + '''Collect the data from bookmarks.html for all locales + + ''' + locales = [loc.strip() for loc in open('mozilla/browser/locales/all-locales')] + bm = Parser.BookmarksParser() + res = {} + for loc in locales: + try: + bm.readFile('l10n/%s/browser/profile/bookmarks.html'%loc) + res[loc] = bm.getDetails() + except Exception, e: + logging.getLogger('locale.%s'%loc).error('Bookmarks are busted, %s'%e) + return res + def failureTest(self, myResult, failureResult): + '''signal pass/warn/failure for each locale + Just signaling errors for now. + + ''' + locales = [loc.strip() for loc in open('mozilla/browser/locales/all-locales')] + bm = Parser.BookmarksParser() + bm.read('mozilla/browser/locales/en-US/profile/bookmarks.html') + enUSDetails = bm.getDetails() + for loc in locales: + if not myResult.has_key(loc): + if not failureResult.has_key(loc): + failureResult[loc] = 2 + else: + failureResult[loc] |= 2 --- thunderbird-10.0.2+build1.orig/debian/compare-locales/lib/Mozilla/__init__.py +++ thunderbird-10.0.2+build1/debian/compare-locales/lib/Mozilla/__init__.py @@ -0,0 +1 @@ +version="0.8.2" --- thunderbird-10.0.2+build1.orig/debian/compare-locales/lib/Mozilla/Parser.py +++ thunderbird-10.0.2+build1/debian/compare-locales/lib/Mozilla/Parser.py @@ -0,0 +1,425 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2006 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# Toshihiro Kura +# Tomoya Asai (dynamis) +# Clint Talbert +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +import re +import codecs +import logging +from HTMLParser import HTMLParser + +__constructors = [] + +class Entity(object): + ''' + Abstraction layer for a localizable entity. + Currently supported are grammars of the form: + + 1: pre white space + 2: pre comments + 3: entity definition + 4: entity key (name) + 5: entity value + 6: post comment (and white space) in the same line (dtd only) + <--[1] + <--[2] + + + <-------[3]---------><------[6]------> + ''' + def __init__(self, contents, pp, + span, pre_ws_span, pre_comment_span, def_span, + key_span, val_span, post_span): + self.contents = contents + self.span = span + self.pre_ws_span = pre_ws_span + self.pre_comment_span = pre_comment_span + self.def_span = def_span + self.key_span = key_span + self.val_span = val_span + self.post_span = post_span + self.pp = pp + pass + + # getter helpers + + def get_all(self): + return self.contents[self.span[0] : self.span[1]] + def get_pre_ws(self): + return self.contents[self.pre_ws_span[0] : self.pre_ws_span[1]] + def get_pre_comment(self): + return self.contents[self.pre_comment_span[0] : self.pre_comment_span[1]] + def get_def(self): + return self.contents[self.def_span[0] : self.def_span[1]] + def get_key(self): + return self.contents[self.key_span[0] : self.key_span[1]] + def get_val(self): + return self.pp(self.contents[self.val_span[0] : self.val_span[1]]) + def get_post(self): + return self.contents[self.post_span[0] : self.post_span[1]] + + # getters + + all = property(get_all) + pre_ws = property(get_pre_ws) + pre_comment = property(get_pre_comment) + definition = property(get_def) + key = property(get_key) + val = property(get_val) + post = property(get_post) + + def __repr__(self): + return self.key + +class Junk(object): + ''' + An almost-Entity, representing junk data that we didn't parse. + This way, we can signal bad content as stuff we don't understand. + And the either fix that, or report real bugs in localizations. + ''' + junkid = 0 + def __init__(self, contents, span): + self.contents = contents + self.span = span + self.pre_ws = self.pre_comment = self.definition = self.post = '' + self.__class__.junkid += 1 + self.key = '_junk_%d_%d-%d' % (self.__class__.junkid, span[0], span[1]) + + # getter helpers + + def get_all(self): + return self.contents[self.span[0] : self.span[1]] + + # getters + + all = property(get_all) + val = property(get_all) + def __repr__(self): + return self.key + + +class Parser: + canMerge = True + def __init__(self): + if not hasattr(self, 'encoding'): + self.encoding = 'utf-8'; + pass + def readFile(self, file): + f = codecs.open(file, 'r', self.encoding) + try: + self.contents = f.read() + except UnicodeDecodeError, e: + logging.getLogger('locales').error("Can't read file: " + file + '; ' + str(e)) + self.contents = u'' + f.close() + def readContents(self, contents): + (self.contents, length) = codecs.getdecoder(self.encoding)(contents) + def parse(self): + l = [] + m = {} + for e in self: + m[e.key] = len(l) + l.append(e) + return (l, m) + def postProcessValue(self, val): + return val + def __iter__(self): + contents = self.contents + offset = 0 + self.header = '' + self.footer = '' + h = self.reHeader.match(contents) + if h: + self.header = h.group() + offset = h.end() + entity, offset = self.getEntity(contents, offset) + while entity: + yield entity + entity, offset = self.getEntity(contents, offset) + f = self.reFooter.match(contents, offset) + if f: + self.footer = f.group() + offset = f.end() + if len(contents) > offset: + yield Junk(contents, (offset, len(contents))) + pass + def getEntity(self, contents, offset): + m = self.reKey.match(contents, offset) + if m: + offset = m.end() + entity = Entity(contents, self.postProcessValue, + *[m.span(i) for i in xrange(7)]) + return (entity, offset) + m = self.reKey.search(contents, offset) + if m: + # we didn't match, but search, so there's junk between offset + # and start. We'll match() on the next turn + junkend = m.start() + return (Junk(contents, (offset, junkend)), junkend) + return (None, offset) + +def getParser(path): + for item in __constructors: + if re.search(item[0], path): + return item[1] + raise UserWarning, "Cannot find Parser" + + +# Subgroups of the match will: +# 1: pre white space +# 2: pre comments +# 3: entity definition +# 4: entity key (name) +# 5: entity value +# 6: post comment (and white space) in the same line (dtd only) +# <--[1] +# <--[2] +# +# +# <-------[3]---------><------[6]------> + + +class DTDParser(Parser): + def __init__(self): + # http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-NameStartChar + #":" | [A-Z] | "_" | [a-z] | + # [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] + # | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | + # [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | + # [#x10000-#xEFFFF] + CharMinusDash = u'\x09\x0A\x0D\u0020-\u002C\u002E-\uD7FF\uE000-\uFFFD' + XmlComment = '' % CharMinusDash + NameStartChar = u':A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF' + \ + u'\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF'+\ + u'\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD' + # + \U00010000-\U000EFFFF seems to be unsupported in python + + # NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | + # [#x0300-#x036F] | [#x203F-#x2040] + NameChar = NameStartChar + ur'\-\.0-9' + u'\xB7\u0300-\u036F\u203F-\u2040' + Name = '[' + NameStartChar + '][' + NameChar + ']*' + self.reKey = re.compile('(?:(\s*)((?:' + XmlComment + '\s*)*)()([ \t]*(?:' + XmlComment + '\s*)*\n?)?)') + # add BOM to DTDs, details in bug 435002 + self.reHeader = re.compile(u'^\ufeff?(\s*)?') + self.reFooter = re.compile('\s*(\s*)*$') + self.rePE = re.compile('(?:(\s*)((?:' + XmlComment + '\s*)*)(\s*%' + Name + ';)([ \t]*(?:' + XmlComment + '\s*)*\n?)?)') + Parser.__init__(self) + def getEntity(self, contents, offset): + ''' + Overload Parser.getEntity to special-case ParsedEntities. + Just check for a parsed entity if that method claims junk. + + + %foo; + ''' + entity, inneroffset = Parser.getEntity(self, contents, offset) + if (entity and isinstance(entity, Junk)) or entity is None: + m = self.rePE.match(contents, offset) + if m: + inneroffset = m.end() + entity = Entity(contents, self.postProcessValue, + *[m.span(i) for i in xrange(7)]) + return (entity, inneroffset) + +class PropertiesParser(Parser): + def __init__(self): + self.reKey = re.compile('^(\s*)((?:[#!].*?\n\s*)*)(([^#!\s\n][^=:\n]*?)\s*[:=][ \t]*((?:[^\\\\]|\\\\.)*?))([ \t]*$\n?)',re.M|re.S) + self.reHeader = re.compile('^\s*([#!].*LICENSE BLOCK.*\s*)([#!].*\s*)*') + self.reFooter = re.compile('\s*([#!].*\s*)*$') + self._post = re.compile('\\\\u([0-9a-fA-F]{4})') + Parser.__init__(self) + _arg_re = re.compile('%(?:(?P[0-9]+)\$)?(?P[0-9]+)?(?:.(?P[0-9]+))?(?P[hL]|(?:ll?))?(?P[dciouxXefgpCSsn])') + def postProcessValue(self, val): + m = self._post.search(val) + if not m: + return val + while m: + uChar = unichr(int(m.group(1), 16)) + val = val.replace(m.group(), uChar) + m = self._post.search(val) + return val + +class DefinesParser(Parser): + # can't merge, #unfilter needs to be the last item, which we don't support + canMerge = False + def __init__(self): + self.reKey = re.compile('^(\s*)((?:^#(?!define\s).*\s*)*)(#define[ \t]+(\w+)[ \t]+(.*?))([ \t]*$\n?)',re.M) + self.reHeader = re.compile('^\s*(#(?!define\s).*\s*)*') + self.reFooter = re.compile('\s*(#(?!define\s).*\s*)*$',re.M) + Parser.__init__(self) + +class IniParser(Parser): + ''' + Parse files of the form: + # initial comment + [cat] + whitespace* + #comment + string=value + ... + ''' + def __init__(self): + self.reHeader = re.compile('^(\s*[;#].*\n)*\[.+?\]\n', re.M) + self.reKey = re.compile('(\s*)((?:[;#].*\n\s*)*)((.+?)=(.*))(\n?)') + self.reFooter = re.compile('\s*') + Parser.__init__(self) + + +DECL, COMMENT, START, END, CONTENT = range(5) + +class BookmarksParserInner(HTMLParser): + + class Token(object): + _type = None + content = '' + def __str__(self): + return self.content + class DeclToken(Token): + _type = DECL + def __init__(self, decl): + self.content = decl + pass + def __str__(self): + return '' % self.content + pass + class CommentToken(Token): + _type = COMMENT + def __init__(self, comment): + self.content = comment + pass + def __str__(self): + return '' % self.content + pass + class StartToken(Token): + _type = START + def __init__(self, tag, attrs, content): + self.tag = tag + self.attrs = dict(attrs) + self.content = content + pass + pass + class EndToken(Token): + _type = END + def __init__(self, tag): + self.tag = tag + pass + def __str__(self): + return '' % self.tag.upper() + pass + class ContentToken(Token): + _type = CONTENT + def __init__(self, content): + self.content = content + pass + pass + + def __init__(self): + HTMLParser.__init__(self) + self.tokens = [] + + def parse(self, contents): + self.tokens = [] + self.feed(contents) + self.close() + return self.tokens + + # Called when we hit an end DL tag to reset the folder selections + def handle_decl(self, decl): + self.tokens.append(self.DeclToken(decl)) + + # Called when we hit an end DL tag to reset the folder selections + def handle_comment(self, comment): + self.tokens.append(self.CommentToken(comment)) + + def handle_starttag(self, tag, attrs): + self.tokens.append(self.StartToken(tag, attrs, self.get_starttag_text())) + + # Called when text data is encountered + def handle_data(self, data): + if self.tokens[-1]._type == CONTENT: + self.tokens[-1].content += data + else: + self.tokens.append(self.ContentToken(data)) + + def handle_charref(self, data): + self.handle_data('&#%s;' % data) + + def handle_entityref(self, data): + self.handle_data('&%s;' % data) + + # Called when we hit an end DL tag to reset the folder selections + def handle_endtag(self, tag): + self.tokens.append(self.EndToken(tag)) + +class BookmarksParser(Parser): + canMerge = False + + class BMEntity(object): + def __init__(self, key, val): + self.key = key + self.val = val + + def __iter__(self): + p = BookmarksParserInner() + tks = p.parse(self.contents) + i = 0 + k = [] + for i in xrange(len(tks)): + t = tks[i] + if t._type == START: + k.append(t.tag) + keys = t.attrs.keys() + keys.sort() + for attrname in keys: + yield self.BMEntity('.'.join(k) + '.@' + attrname, + t.attrs[attrname]) + if i + 1 < len(tks) and tks[i+1]._type == CONTENT: + i += 1 + t = tks[i] + v = t.content.strip() + if v: + yield self.BMEntity('.'.join(k), v) + elif t._type == END: + k.pop() + + +__constructors = [('\\.dtd$', DTDParser()), + ('\\.properties$', PropertiesParser()), + ('\\.ini$', IniParser()), + ('\\.inc$', DefinesParser()), + ('bookmarks\\.html$', BookmarksParser())] --- thunderbird-10.0.2+build1.orig/debian/compare-locales/lib/Mozilla/Paths.py +++ thunderbird-10.0.2+build1/debian/compare-locales/lib/Mozilla/Paths.py @@ -0,0 +1,409 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2006 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +import os.path +import os +from ConfigParser import ConfigParser, NoSectionError, NoOptionError +from urlparse import urlparse, urljoin +from urllib import pathname2url, url2pathname +from urllib2 import urlopen +from Mozilla.CompareLocales import defaultdict + +class L10nConfigParser(object): + '''Helper class to gather application information from ini files. + + This class is working on synchronous open to read files or web data. + Subclass this and overwrite loadConfigs and addChild if you need async. + ''' + def __init__(self, inipath, **kwargs): + """Constructor for L10nConfigParsers + + inipath -- l10n.ini path + Optional keyword arguments are fowarded to the inner ConfigParser as + defaults. + """ + if os.path.isabs(inipath): + self.inipath = 'file:%s' % pathname2url(inipath) + else: + pwdurl = 'file:%s/' % pathname2url(os.getcwd()) + self.inipath = urljoin(pwdurl, inipath) + # l10n.ini files can import other l10n.ini files, store the + # corresponding L10nConfigParsers + self.children = [] + # we really only care about the l10n directories described in l10n.ini + self.dirs = [] + # optional defaults to be passed to the inner ConfigParser (unused?) + self.defaults = kwargs + + def getDepth(self, cp): + '''Get the depth for the comparison from the parsed l10n.ini. + + Overloadable to get the source depth for fennec and friends. + ''' + try: + depth = cp.get('general', 'depth') + except: + depth = '.' + return depth + + def getFilters(self): + '''Get the test functions from this ConfigParser and all children. + + Only works with synchronous loads, used by compare-locales, which + is local anyway. + ''' + filterurl = urljoin(self.inipath, 'filter.py') + try: + l = {} + execfile(url2pathname(urlparse(filterurl).path), {}, l) + if 'test' in l and callable(l['test']): + filters = [l['test']] + else: + filters = [] + except: + filters = [] + + for c in self.children: + filters += c.getFilters() + + return filters + + + def loadConfigs(self): + """Entry point to load the l10n.ini file this Parser refers to. + + This implementation uses synchronous loads, subclasses might overload + this behaviour. If you do, make sure to pass a file-like object + to onLoadConfig. + """ + self.onLoadConfig(urlopen(self.inipath)) + + def onLoadConfig(self, inifile): + """Parse a file-like object for the loaded l10n.ini file.""" + cp = ConfigParser(self.defaults) + cp.readfp(inifile) + depth = self.getDepth(cp) + self.baseurl = urljoin(self.inipath, depth) + # create child loaders for any other l10n.ini files to be included + try: + for title, path in cp.items('includes'): + # skip default items + if title in self.defaults: + continue + # add child config parser + self.addChild(title, path, cp) + except NoSectionError: + pass + # try to load the "dirs" defined in the "compare" section + try: + self.dirs.extend(cp.get('compare', 'dirs').split()) + except (NoOptionError, NoSectionError): + pass + # try getting a top level compare dir, as used for fennec + try: + self.tld = cp.get('compare', 'tld') + # remove tld from comparison dirs + if self.tld in self.dirs: + self.dirs.remove(self.tld) + except (NoOptionError, NoSectionError): + self.tld = None + # try to set "all_path" and "all_url" + try: + self.all_path = cp.get('general', 'all') + self.all_url = urljoin(self.baseurl, self.all_path) + except (NoOptionError, NoSectionError): + self.all_path = None + self.all_url = None + return cp + + def addChild(self, title, path, orig_cp): + """Create a child L10nConfigParser and load it. + + title -- indicates the module's name + path -- indicates the path to the module's l10n.ini file + orig_cp -- the configuration parser of this l10n.ini + """ + cp = L10nConfigParser(urljoin(self.baseurl, path), **self.defaults) + cp.loadConfigs() + self.children.append(cp) + + def getTLDPathsTuple(self, basepath): + """Given the basepath, return the path fragments to be used for + self.tld. For build runs, this is (basepath, self.tld), for + source runs, just (basepath,). + + @see overwritten method in SourceTreeConfigParser. + """ + return (basepath, self.tld) + + def dirsIter(self): + """Iterate over all dirs and our base path for this l10n.ini""" + url = urlparse(self.baseurl) + basepath = url2pathname(url.path) + if self.tld is not None: + yield self.tld, self.getTLDPathsTuple(basepath) + for dir in self.dirs: + yield dir, (basepath, dir) + + + def directories(self): + """Iterate over all dirs and base paths for this l10n.ini as well + as the included ones. + """ + for t in self.dirsIter(): + yield t + for child in self.children: + for t in child.directories(): + yield t + + def allLocales(self): + """Return a list of all the locales of this project""" + return urlopen(self.all_url).read().splitlines() + + +class SourceTreeConfigParser(L10nConfigParser): + '''Subclassing L10nConfigParser to work with just the repos + checked out next to each other instead of intermingled like + we do for real builds. + ''' + + def __init__(self, inipath, basepath): + '''Add additional arguments basepath. + + basepath is used to resolve local paths via branchnames. + ''' + L10nConfigParser.__init__(self, inipath) + self.basepath = basepath + self.tld = None + + def getDepth(self, cp): + '''Get the depth for the comparison from the parsed l10n.ini. + + Overloaded to get the source depth for fennec and friends. + ''' + try: + depth = cp.get('general', 'source-depth') + except: + try: + depth = cp.get('general', 'depth') + except: + depth = '.' + return depth + + def addChild(self, title, path, orig_cp): + # check if there's a section with details for this include + # we might have to check a different repo, or even VCS + # for example, projects like "mail" indicate in + # an "include_" section where to find the l10n.ini for "toolkit" + details = 'include_' + title + if orig_cp.has_section(details): + branch = orig_cp.get(details, 'mozilla') + inipath = orig_cp.get(details, 'l10n.ini') + path = self.basepath + '/' + branch + '/' + inipath + else: + path = urljoin(self.baseurl, path) + cp = SourceTreeConfigParser(path, self.basepath, **self.defaults) + cp.loadConfigs() + self.children.append(cp) + + def getTLDPathsTuple(self, basepath): + """Overwrite L10nConfigParser's getTLDPathsTuple to just return + the basepath. + """ + return (basepath, ) + + +class File(object): + def __init__(self, fullpath, file, module = None, locale = None): + self.fullpath = fullpath + self.file = file + self.module = module + self.locale = locale + pass + def getContents(self): + # open with universal line ending support and read + return open(self.fullpath, 'rU').read() + def __hash__(self): + f = self.file + if self.module: + f = self.module + '/' + f + return hash(f) + def __str__(self): + return self.fullpath + def __cmp__(self, other): + if not isinstance(other, File): + raise NotImplementedError + rv = cmp(self.module, other.module) + if rv != 0: + return rv + return cmp(self.file, other.file) + +class EnumerateDir(object): + ignore_dirs = ['CVS', '.svn', '.hg'] + def __init__(self, basepath, module = '', locale = None): + self.basepath = basepath + self.module = module + self.locale = locale + pass + def cloneFile(self, other): + ''' + Return a File object that this enumerator would return, if it had it. + ''' + return File(os.path.join(self.basepath, other.file), other.file, + self.module, self.locale) + def __iter__(self): + # our local dirs are given as a tuple of path segments, starting off + # with an empty sequence for the basepath. + dirs = [()] + while dirs: + dir = dirs.pop(0) + fulldir = os.path.join(self.basepath, *dir) + try: + entries = os.listdir(fulldir) + except OSError: + # we probably just started off in a non-existing dir, ignore + continue + entries.sort() + for entry in entries: + leaf = os.path.join(fulldir, entry) + if os.path.isdir(leaf): + if entry not in self.ignore_dirs: + dirs.append(dir + (entry,)) + continue + yield File(leaf, '/'.join(dir + (entry,)), + self.module, self.locale) + +class LocalesWrap(object): + def __init__(self, base, module, locales): + self.base = base + self.module = module + self.locales = locales + def __iter__(self): + for locale in self.locales: + path = os.path.join(self.base, locale, self.module) + yield (locale, EnumerateDir(path, self.module, locale)) + +class EnumerateApp(object): + reference = 'en-US' + def __init__(self, inipath, l10nbase, locales = None): + self.setupConfigParser(inipath) + self.modules = defaultdict(dict) + self.l10nbase = os.path.abspath(l10nbase) + self.filters = [] + drive, tail = os.path.splitdrive(inipath) + filterpath = drive + url2pathname(urlparse(urljoin(tail,'filter.py'))[2]) + self.addFilters(*self.config.getFilters()) + self.locales = locales or self.config.allLocales() + self.locales.sort() + pass + def setupConfigParser(self, inipath): + self.config = L10nConfigParser(inipath) + self.config.loadConfigs() + def addFilters(self, *args): + self.filters += args + + value_map = {None:None, 'error':0, 'ignore':1, 'report':2} + def filter(self, l10n_file, entity = None): + '''Go through all added filters, and, + - map "error" -> 0, "ignore" -> 1, "report" -> 2 + - if filter.test returns a bool, map that to + False -> "ignore" (1), True -> "error" (0) + - take the max of all reported + ''' + rv = 0 + for f in reversed(self.filters): + try: + _r = f(l10n_file.module, l10n_file.file, entity) + except: + # XXX error handling + continue + if isinstance(_r, bool): + _r = [1, 0][_r] + else: + # map string return value to int, default to 'error', None is None + _r = self.value_map.get(_r, 0) + if _r is not None: + rv = max(rv, _r) + return ['error','ignore','report'][rv] + + def __iter__(self): + ''' + Iterate over all modules, return en-US directory enumerator, and an + iterator over all locales in each iteration. Per locale, the locale + code and an directory enumerator will be given. + ''' + dirmap = dict(self.config.directories()) + mods = dirmap.keys() + mods.sort() + for mod in mods: + if self.reference == 'en-US': + base = os.path.join(*(dirmap[mod] + ('locales', 'en-US'))) + else: + base = os.path.join(self.l10nbase, self.reference, mod) + yield (mod, EnumerateDir(base, mod, self.reference), + LocalesWrap(self.l10nbase, mod, self.locales)) + + +class EnumerateSourceTreeApp(EnumerateApp): + '''Subclass EnumerateApp to work on side-by-side checked out + repos, and to no pay attention to how the source would actually + be checked out for building. + + It's supporting applications like Fennec, too, which have + 'locales/en-US/...' in their root dir, but claim to be 'mobile'. + ''' + + def __init__(self, inipath, basepath, l10nbase, locales=None): + self.basepath = basepath + EnumerateApp.__init__(self, inipath, l10nbase, locales) + + def setupConfigParser(self, inipath): + self.config = SourceTreeConfigParser(inipath, self.basepath) + self.config.loadConfigs() + + +def get_base_path(mod, loc): + 'statics for path patterns and conversion' + __l10n = 'l10n/%(loc)s/%(mod)s' + __en_US = 'mozilla/%(mod)s/locales/en-US' + if loc == 'en-US': + return __en_US % {'mod': mod} + return __l10n % {'mod': mod, 'loc': loc} + +def get_path(mod, loc, leaf): + return get_base_path(mod, loc) + '/' + leaf + --- thunderbird-10.0.2+build1.orig/debian/compare-locales/lib/Mozilla/CompareLocales.py +++ thunderbird-10.0.2+build1/debian/compare-locales/lib/Mozilla/CompareLocales.py @@ -0,0 +1,506 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2006 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +'Mozilla l10n compare locales tool' + +import codecs +import os +import os.path +import shutil +import re +import logging +from difflib import SequenceMatcher +try: + from collections import defaultdict +except ImportError: + class defaultdict(dict): + def __init__(self, defaultclass): + dict.__init__(self) + self.__defaultclass = defaultclass + def __getitem__(self, k): + if not dict.__contains__(self, k): + self[k] = self.__defaultclass() + return dict.__getitem__(self, k) +# backwards compat hack for any(), new in python 2.5 +try: + any([True]) +except NameError: + def any(sequence): + for item in sequence: + if item: + return True + return False + + +import Parser +import Paths + +class Tree(object): + def __init__(self, valuetype): + self.branches = dict() + self.valuetype = valuetype + self.value = None + def __getitem__(self, leaf): + parts = [] + if isinstance(leaf, Paths.File): + parts = [p for p in [leaf.locale, leaf.module] if p] + \ + leaf.file.split('/') + else: + parts = leaf.split('/') + return self.__get(parts) + def __get(self, parts): + common = None + old = None + new = tuple(parts) + t = self + for k, v in self.branches.iteritems(): + for i, part in enumerate(zip(k, parts)): + if part[0] != part[1]: + i -= 1 + break + if i < 0: + continue + i += 1 + common = tuple(k[:i]) + old = tuple(k[i:]) + new = tuple(parts[i:]) + break + if old: + self.branches.pop(k) + t = Tree(self.valuetype) + t.branches[old] = v + self.branches[common] = t + elif common: + t = self.branches[common] + if new: + if common: + return t.__get(new) + t2 = t + t = Tree(self.valuetype) + t2.branches[new] = t + if t.value is None: + t.value = t.valuetype() + return t.value + indent = ' ' + def getContent(self, depth = 0): + ''' + Returns iterator of (depth, flag, key_or_value) tuples. + If flag is 'value', key_or_value is a value object, otherwise + (flag is 'key') it's a key string. + ''' + keys = self.branches.keys() + keys.sort() + if self.value is not None: + yield (depth, 'value', self.value) + for key in keys: + yield (depth, 'key', key) + for child in self.branches[key].getContent(depth + 1): + yield child + def toJSON(self): + ''' + Returns this Tree as a JSON-able tree of hashes. + Only the values need to take care that they're JSON-able. + ''' + json = {} + keys = self.branches.keys() + keys.sort() + if self.value is not None: + json['value'] = self.value + children = [('/'.join(key), self.branches[key].toJSON()) + for key in keys] + if children: + json['children'] = children + return json + def getStrRows(self): + def tostr(t): + if t[1] == 'key': + return self.indent * t[0] + '/'.join(t[2]) + return self.indent * (t[0] + 1) + str(t[2]) + return map(tostr, self.getContent()) + def __str__(self): + return '\n'.join(self.getStrRows()) + +class AddRemove(SequenceMatcher): + def __init__(self): + SequenceMatcher.__init__(self, None, None, None) + def set_left(self, left): + if not isinstance(left, list): + left = [l for l in left] + self.set_seq1(left) + def set_right(self, right): + if not isinstance(right, list): + right = [l for l in right] + self.set_seq2(right) + def __iter__(self): + for tag, i1, i2, j1, j2 in self.get_opcodes(): + if tag == 'equal': + for pair in zip(self.a[i1:i2], self.b[j1:j2]): + yield ('equal', pair) + elif tag == 'delete': + for item in self.a[i1:i2]: + yield ('delete', item) + elif tag == 'insert': + for item in self.b[j1:j2]: + yield ('add', item) + else: + # tag == 'replace' + for item in self.a[i1:i2]: + yield ('delete', item) + for item in self.b[j1:j2]: + yield ('add', item) + +class DirectoryCompare(SequenceMatcher): + def __init__(self, reference): + SequenceMatcher.__init__(self, None, [i for i in reference], + []) + self.watcher = None + def setWatcher(self, watcher): + self.watcher = watcher + def compareWith(self, other): + if not self.watcher: + return + self.set_seq2([i for i in other]) + for tag, i1, i2, j1, j2 in self.get_opcodes(): + if tag == 'equal': + for i, j in zip(xrange(i1,i2), xrange(j1,j2)): + self.watcher.compare(self.a[i], self.b[j]) + elif tag == 'delete': + for i in xrange(i1,i2): + self.watcher.add(self.a[i], other.cloneFile(self.a[i])) + elif tag == 'insert': + for j in xrange(j1, j2): + self.watcher.remove(self.b[j]) + else: + for j in xrange(j1, j2): + self.watcher.remove(self.b[j]) + for i in xrange(i1,i2): + self.watcher.add(self.a[i], other.cloneFile(self.a[i])) + +class Observer(object): + stat_cats = ['missing', 'obsolete', 'missingInFiles', 'report', + 'changed', 'unchanged', 'keys'] + def __init__(self): + class intdict(defaultdict): + def __init__(self): + defaultdict.__init__(self, int) + self.summary = defaultdict(intdict) + self.details = Tree(dict) + self.filter = None + # support pickling + def __getstate__(self): + return dict(summary = self.getSummary(), details = self.details) + def __setstate__(self, state): + class intdict(defaultdict): + def __init__(self): + defaultdict.__init__(self, int) + self.summary = defaultdict(intdict) + if 'summary' in state: + for loc, stats in state['summary'].iteritems(): + self.summary[loc].update(stats) + self.details = state['details'] + self.filter = None + def getSummary(self): + plaindict = {} + for k, v in self.summary.iteritems(): + plaindict[k] = dict(v) + return plaindict + def toJSON(self): + return dict(summary = self.getSummary(), details = self.details.toJSON()) + def notify(self, category, file, data): + rv = "error" + if category in self.stat_cats: + # these get called post reporting just for stats + # return "error" to forward them to other observers + self.summary[file.locale][category] += data + return "error" + if category in ['missingFile', 'obsoleteFile']: + if self.filter is not None: + rv = self.filter(file) + if rv != "ignore": + self.details[file][category] = rv + return rv + if category in ['missingEntity', 'obsoleteEntity']: + if self.filter is not None: + rv = self.filter(file, data) + if rv == "ignore": + return rv + v = self.details[file] + try: + v[category].append(data) + except KeyError: + v[category] = [data] + return rv + if category == 'error': + try: + self.details[file][category].append(data) + except KeyError: + self.details[file][category] = [data] + self.summary[file.locale]['errors'] += 1 + return rv + def serialize(self, type="text/plain"): + def tostr(t): + if t[1] == 'key': + return ' ' * t[0] + '/'.join(t[2]) + o = [] + indent = ' ' * (t[0] + 1) + if 'error' in t[2]: + o += [indent + 'ERROR: ' + e for e in t[2]['error']] + if 'missingEntity' in t[2] or 'obsoleteEntity' in t[2]: + missingEntities = ('missingEntity' in t[2] and t[2]['missingEntity']) \ + or [] + obsoleteEntities = ('obsoleteEntity' in t[2] and + t[2]['obsoleteEntity']) or [] + entities = missingEntities + obsoleteEntities + entities.sort() + for entity in entities: + op = '+' + if entity in obsoleteEntities: + op = '-' + o.append(indent + op + entity) + elif 'missingFile' in t[2]: + o.append(indent + '// add and localize this file') + elif 'obsoleteFile' in t[2]: + o.append(indent + '// remove this file') + return '\n'.join(o) + out = [] + for locale, summary in self.summary.iteritems(): + if locale is not None: + out.append(locale + ':') + out += [k + ': ' + str(v) for k,v in summary.iteritems()] + total = sum([summary[k] \ + for k in ['changed','unchanged','report','missing', + 'missingInFiles'] \ + if k in summary]) + rate = (('changed' in summary and summary['changed'] * 100) + or 0) / total + out.append('%d%% of entries changed' % rate) + return '\n'.join(map(tostr, self.details.getContent()) + out) + def __str__(self): + return 'observer' + +class ContentComparer: + keyRE = re.compile('[kK]ey') + def __init__(self, filterObserver): + '''Create a ContentComparer. + filterObserver is usually a instance of Observer. The return values + of the notify method are used to control the handling of missing + entities. + ''' + self.reference = dict() + self.filterObserver = filterObserver + self.observers = [] + self.merge_stage = None + def add_observer(self, obs): + '''Add a non-filtering observer. + Results from the notify calls are ignored. + ''' + self.observers.append(obs) + def set_merge_stage(self, merge_stage): + self.merge_stage = merge_stage + def merge(self, ref_entities, ref_map, ref_file, l10n_file, missing, p): + outfile = os.path.join(self.merge_stage, l10n_file.module, l10n_file.file) + outdir = os.path.dirname(outfile) + if not os.path.isdir(outdir): + os.makedirs(outdir) + if not p.canMerge: + shutil.copyfile(ref_file.fullpath, outfile) + print "copied reference to " + outfile + return + trailing = [ref_entities[ref_map[key]].all for key in missing] + shutil.copyfile(l10n_file.fullpath, outfile) + print "adding to " + outfile + f = codecs.open(outfile, 'ab', p.encoding) + f.write(''.join(trailing)) + f.close() + def notify(self, category, file, data): + '''Check filterObserver for the found data, and if it's + not to ignore, notify observers. + ''' + rv = self.filterObserver.notify(category, file, data) + if rv == 'ignore': + return rv + for obs in self.observers: + # non-filtering observers, ignore results + obs.notify(category, file, data) + return rv + def remove(self, obsolete): + self.notify('obsoleteFile', obsolete, None) + pass + def compare(self, ref_file, l10n): + try: + p = Parser.getParser(ref_file.file) + except UserWarning: + # no comparison, XXX report? + return + if ref_file not in self.reference: + # we didn't parse this before + try: + p.readContents(ref_file.getContents()) + except Exception, e: + self.notify('error', ref_file, str(e)) + return + self.reference[ref_file] = p.parse() + ref = self.reference[ref_file] + ref_list = ref[1].keys() + ref_list.sort() + try: + p.readContents(l10n.getContents()) + l10n_entities, l10n_map = p.parse() + except Exception, e: + self.notify('error', l10n, str(e)) + return + l10n_list = l10n_map.keys() + l10n_list.sort() + ar = AddRemove() + ar.set_left(ref_list) + ar.set_right(l10n_list) + report = missing = obsolete = changed = unchanged = keys = 0 + missings = [] + for action, item_or_pair in ar: + if action == 'delete': + # missing entity + _rv = self.notify('missingEntity', l10n, item_or_pair) + if _rv == "ignore": + continue + if _rv == "error": + # only add to missing entities for l10n-merge on error, not report + missings.append(item_or_pair) + missing += 1 + else: + # just report + report += 1 + elif action == 'add': + # obsolete entity or junk + if isinstance(l10n_entities[l10n_map[item_or_pair]], Parser.Junk): + junk = l10n_entities[l10n_map[item_or_pair]] + params = (junk.val,) + junk.span + self.notify('error', l10n, 'Unparsed content "%s" at %d-%d' % params) + elif self.notify('obsoleteEntity', l10n, item_or_pair) != 'ignore': + obsolete += 1 + else: + # entity found in both ref and l10n, check for changed + entity = item_or_pair[0] + if self.keyRE.search(entity): + keys += 1 + else: + refent = ref[0][ref[1][entity]] + l10nent = l10n_entities[l10n_map[entity]] + if refent.val == l10nent.val: + self.doUnchanged(l10nent) + unchanged += 1 + else: + self.doChanged(ref_file, refent, l10nent) + changed += 1 + pass + if missing: + self.notify('missing', l10n, missing) + if self.merge_stage is not None and missings: + self.merge(ref[0], ref[1], ref_file, l10n, missings, p) + if report: + self.notify('report', l10n, report) + if obsolete: + self.notify('obsolete', l10n, obsolete) + if changed: + self.notify('changed', l10n, changed) + if unchanged: + self.notify('unchanged', l10n, unchanged) + if keys: + self.notify('keys', l10n, keys) + pass + def add(self, orig, missing): + if self.notify('missingFile', missing, None) == "ignore": + # filter said that we don't need this file, don't count it + return + f = orig + try: + p = Parser.getParser(f.file) + except UserWarning: + return + try: + p.readContents(f.getContents()) + entities, map = p.parse() + except Exception, e: + self.notify('error', f, str(e)) + return + self.notify('missingInFiles', missing, len(map)) + def doUnchanged(self, entity): + # overload this if needed + pass + def doChanged(self, file, ref_entity, l10n_entity): + # overload this if needed + pass + +def compareApp(app, otherObserver = None, merge_stage = None): + '''Compare locales set in app. + + Optional arguments are: + - otherObserver. A object implementing + notify(category, _file, data) + The return values of that callback are ignored. + - merge_stage. A directory to be used for staging the output of + l10n-merge. + ''' + o = Observer() + cc = ContentComparer(o) + if otherObserver is not None: + cc.add_observer(otherObserver) + cc.set_merge_stage(merge_stage) + o.filter = app.filter + for module, reference, locales in app: + dc = DirectoryCompare(reference) + dc.setWatcher(cc) + for locale, localization in locales: + dc.compareWith(localization) + return o + +def compareDirs(reference, locale, otherObserver = None, merge_stage = None): + '''Compare reference and locale dir. + + Optional arguments are: + - otherObserver. A object implementing + notify(category, _file, data) + The return values of that callback are ignored. + ''' + o = Observer() + cc = ContentComparer(o) + if otherObserver is not None: + cc.add_observer(otherObserver) + cc.set_merge_stage(merge_stage) + dc = DirectoryCompare(Paths.EnumerateDir(reference)) + dc.setWatcher(cc) + dc.compareWith(Paths.EnumerateDir(locale)) + return o --- thunderbird-10.0.2+build1.orig/debian/compare-locales/lib/Mozilla/Jars.py +++ thunderbird-10.0.2+build1/debian/compare-locales/lib/Mozilla/Jars.py @@ -0,0 +1,85 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2007 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +from zipfile import ZipFile +from difflib import SequenceMatcher +import os.path +import re + +from Paths import File +import CompareLocales + +class JarEntry(File): + def __init__(self, zf, file, fakefile): + File.__init__(self, None, fakefile) + self.realfile = file + self.zipfile = zf + def __str__(self): + return self.zipfile.filename + '!' + self.realfile + def getContents(self): + return self.zipfile.read(self.realfile) + +class EnumerateJar(object): + def __init__(self, basepath): + basepath = os.path.abspath(basepath) + if not basepath.endswith('.jar'): + raise RuntimeError("Only jar files supported") + self.basepath = basepath + # best guess we have on locale code + self.locale = os.path.split(basepath)[1].replace('.jar','') + self.zf = ZipFile(basepath, 'r') + def cloneFile(self, other): + return JarEntry(self.zf, other.realfile, other.file) + def __iter__(self): + # get all entries, drop those ending with '/', those are dirs. + files = [f for f in self.zf.namelist() if not f.endswith('/')] + files.sort() + # unfortunately, we have to fake file paths of the form + # locale/AB-CD/ + # for comparison. + # For real, the corresponding manifest would tell us. Whichever. + localesub = re.compile('^locale/' + self.locale) + for f in files: + yield JarEntry(self.zf, f, localesub.sub('locale/@AB_CD@', f)) + +def compareJars(ref, l10n): + o = CompareLocales.Observer() + cc = CompareLocales.ContentComparer(o) + dc = CompareLocales.DirectoryCompare(EnumerateJar(ref)) + dc.setWatcher(cc) + dc.compareWith(EnumerateJar(l10n)) + return o --- thunderbird-10.0.2+build1.orig/debian/compare-locales/scripts/compare-locales +++ thunderbird-10.0.2+build1/debian/compare-locales/scripts/compare-locales @@ -0,0 +1,85 @@ +#! /usr/bin/python +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2006 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + + +import logging +from optparse import OptionParser +import codecs + +from Mozilla.Paths import EnumerateApp +from Mozilla.CompareLocales import compareApp +from Mozilla import version + +usage = 'usage: %prog [options] l10n.ini l10n_base_dir language1 [language2 ...]' +parser = OptionParser(usage = usage, version = "%%prog %s" % version) + +parser.add_option('-v', '--verbose', action='count', dest='v', default=0, + help='Make more noise') +parser.add_option('-q', '--quiet', action='count', dest='q', default=0, + help='Make more noise') +parser.add_option('-r', '--reference', default='en-US', dest='reference', + help='Explicitly set the reference '+ + 'localization. [default: en-US]') +parser.add_option('-m', '--merge', + help='Use this directory to stage merged files') + +(options, args) = parser.parse_args() +if len(args) < 3: + parser.error('At least one language required') +inipath, l10nbase = args[:2] +locales = args[2:] + +# log as verbose or quiet as we want, warn by default +logging.basicConfig() +logging.getLogger().setLevel(logging.WARNING - (options.v - options.q)*10) + +app = EnumerateApp(inipath, l10nbase, locales) +app.reference = options.reference + +o = compareApp(app, merge_stage = options.merge) +print codecs.utf_8_encode(o.serialize())[0] + +if not options.merge: + # if not merging, error on really missing strings + totalMissing = 0 + for k in ('missing', 'missingInFiles'): + for summary in o.summary.values(): + if k in summary: + totalMissing = summary[k] + if totalMissing: + parser.exit(1) --- thunderbird-10.0.2+build1.orig/debian/compare-locales/scripts/compare-packs +++ thunderbird-10.0.2+build1/debian/compare-locales/scripts/compare-packs @@ -0,0 +1,69 @@ +#! python +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2007 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + + +import logging +import os.path +import re +from optparse import OptionParser +from pprint import pprint +from zipfile import ZipFile + +from Mozilla.Jars import compareJars + +usage = 'usage: %prog [options] language-pack reference-pack' +parser = OptionParser(usage=usage) + +parser.add_option('-v', '--verbose', action='count', dest='v', default=0, + help='Report more detail') +parser.add_option('-q', '--quiet', action='count', dest='q', default=0, + help='Report less detail') + +(options, args) = parser.parse_args() +if len(args) != 2: + parser.error('language pack and reference pack required') + +# log as verbose or quiet as we want, warn by default +logging.basicConfig(level=(logging.WARNING - (options.v - options.q)*10)) + +# we expect two jar files +if not (args[0].endswith('.jar') and args[1].endswith('.jar')): + parser.error('Please specify two jar files to compare') + +o = compareJars(*args) +print o.serialize() --- thunderbird-10.0.2+build1.orig/debian/compare-locales/scripts/compare-dirs +++ thunderbird-10.0.2+build1/debian/compare-locales/scripts/compare-dirs @@ -0,0 +1,76 @@ +#! python +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2006 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + + +import logging +from optparse import OptionParser +import codecs + +from Mozilla.CompareLocales import compareDirs + +usage = 'usage: %prog [options] reference locale' +parser = OptionParser(usage=usage) + +parser.add_option('-v', '--verbose', action='count', dest='v', default=0, + help='Make more noise') +parser.add_option('-q', '--quiet', action='count', dest='q', default=0, + help='Make more noise') +parser.add_option('-m', '--merge', + help='Use this directory to stage merged files') + +(options, args) = parser.parse_args() +if len(args) != 2: + parser.error('Reference and language required') + +# log as verbose or quiet as we want, warn by default +logging.basicConfig() +logging.getLogger().setLevel(logging.WARNING - (options.v - options.q)*10) + +reference, locale = args +o = compareDirs(reference, locale, merge_stage = options.merge) +print codecs.utf_8_encode(o.serialize())[0] + +if not options.merge: + # if not merging, error on really missing strings + totalMissing = 0 + for k in ('missing', 'missingInFiles'): + for summary in o.summary.values(): + if k in summary: + totalMissing = summary[k] + if totalMissing: + parser.exit(1) --- thunderbird-10.0.2+build1.orig/debian/compare-locales/scripts/test-locales +++ thunderbird-10.0.2+build1/debian/compare-locales/scripts/test-locales @@ -0,0 +1,245 @@ +#! python +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2006 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + + +import logging +import sys +import os +import os.path +from datetime import datetime +import time +from optparse import OptionParser +import gzip +import codecs + +from Mozilla import Parser, CompareLocales, Paths, Tests +import simplejson + +# +# Helper classes +# + +# +# Logging +# +class LogHandler(logging.Handler): + def __init__(self): + self.log = [] + logging.Handler.__init__(self) + def emit(self, record): + self.log.append((record.name, record.levelname, record.getMessage().strip())) + +# +# JSON with optional gzip +# +class Wrapper: + def __init__(self, path, name): + self.p = os.path.join(path, name) + self.n = name + self.f = None + if opts.gzip: + self.p += '.gz' + def open(self, mode): + if self.f: + self.f.close() + if opts.gzip: + mode += 'b' + self.f = open(self.p, mode) + if opts.gzip: + self.f = gzip.GzipFile(fileobj = self.f, filename = self.n) + self.w = codecs.getwriter('utf-8')(self.f) + self.r = codecs.getreader('utf-8')(self.f) + def write(self, str): + self.w.write(str) + def read(self, size = -1): + return self.r.read(size) + def rewind(self): + if opts.gzip: + self.f.rewind() + else: + self.f.seek(0,0) + def close(self): + if opts.gzip: + f = self.f.fileobj; + self.f.close() + if opts.gzip: + f.close() + self.w = self.r = self.f = None +# +# Helper function for JSON output with optional gzip +# +def saveJSON(dic, localName): + name = os.path.join(basePath, localName) ; + if opts.gzip: + f = open(name + '.gz', 'wb') + s = gzip.GzipFile(fileobj = f, filename = localName) + else: + f = open(name, 'w') + s = f + sw = codecs.getwriter('utf-8')(s) + sw.write(simplejson.dumps(dic, sort_keys=True)) + sw.reset() + if opts.gzip: + s.close() + f.close() + + +lvl = logging.WARNING +date = datetime.utcnow().replace(second=0,microsecond=0).isoformat(' ') +# parse commandline arguments +cp = OptionParser(version='0.2') +cp.add_option('-v', '--verbose', action='count', dest='v', default=0, + help='Make more noise') +cp.add_option('-q', '--quiet', action='count', dest='q', default=0, + help='Make less noise') +cp.add_option('-O', '--base-dir', type='string', dest='target', + default='results', + help='Destination base directory') +cp.add_option('-c', '--checkout', action='store_true', dest='checkout', + default=False, + help='Run make -f client.mk l10n-checkout [Default: not]') +cp.add_option('-d', '--date', type='string', dest='date', + help='Explicit start date or subdir [Default: now]') +cp.add_option('-z',action="store_true", dest="gzip", default=False, + help='Use gzip compression for output') +cp.add_option('-w','--enable-waterfall', action="store_true", + dest="waterfall", default=False, + help='Update waterfall data') +cp.add_option('--end-date', type='string', dest='enddate', + help='Explicit (faked) end date') +opts, optlist = cp.parse_args(sys.argv[1:]) + +# +# Set up Logging +# +logging.basicConfig(level=(logging.WARNING + 10*(opts.q - opts.v))) +# Add a handler to store the output +h = LogHandler() +logging.getLogger('').addHandler(h) + +# +# Check that we're in the right location and check out if requested +# +try: + os.chdir('mozilla') + if opts.checkout: + env = '' + l = logging.getLogger('cvsco') + if opts.date: + env = 'MOZ_CO_DATE="' + opts.date + ' +0" ' + fh = os.popen(env + 'make -f client.mk l10n-checkout') + for ln in fh: + l.info(ln.strip()) + if fh.close(): + raise Exception('cvs checkout failed') + os.chdir('..') +except Exception,e: + sys.exit(str(e)) + +if not opts.date: + opts.date = date # use default set above + +logging.debug(' Ensure output directory') +# replace : with - +opts.date = opts.date.replace(':','-') +if not os.path.isdir(opts.target): + sys.exit('error: ' + opts.target + ' is not a directory') +if opts.waterfall: + startdate = time.mktime(time.strptime(opts.date, '%Y-%m-%d %H-%M-%S')) + time.altzone +basePath = os.path.join(opts.target, opts.date) +if not os.path.isdir(basePath): + os.mkdir(basePath) + + +tests = [Tests.CompareTest(), + Tests.SearchTest(), + Tests.RSSReaderTest()] +# disable bookmarks test, that's hard to fix. XXX +# Tests.BookmarksTest()] +drop = {} +for test in tests: + res = test.run() + test.serialize(res, saveJSON) + if opts.waterfall: + test.failureTest(res, drop) + +if not opts.waterfall: + saveJSON(h.log, 'buildlog.json') + sys.exit() + + +if opts.enddate: + endtime = time.mktime(time.strptime(opts.enddate, '%Y-%m-%d %H:%M:%S')) + time.altzone +else: + endtime = time.mktime(datetime.now().timetuple()) +f = None +w = Wrapper(opts.target, 'waterfall.json') +if os.path.isfile(w.p): + w.open('r') + water = simplejson.load(w) +else: + water = [] + +water.append((opts.date, (startdate, endtime), drop)) +# +# Check if we need to rotate the waterfall +# +rotateLen = 24 +if len(water) > rotateLen * 1.5: + # rotate, maximum of 16 logs + suffix = '' + if opts.gzip: + suffix = '.gz' + fnames = [os.path.join(opts.target, 'waterfall-%x.json'%i) + suffix for i in range(16)] + # remove oldest log + if os.path.isfile(fnames[15]): + os.remove(fnames[15]) + for l in range(14, -1, -1): + if os.path.isfile(fnames[l]): + os.rename(fnames[l], fnames[l+1]) + w0 = Wrapper('.', fnames[0]) + w0.open('w') + simplejson.dump(water[:rotateLen], w0, sort_keys=True) + w0.close() + water = water[rotateLen:] + +w.open('w') +simplejson.dump(water, w, sort_keys=True) +w.close() + +saveJSON(h.log, 'buildlog.json') --- thunderbird-10.0.2+build1.orig/debian/compare-locales/scripts/verify-rss-redirects +++ thunderbird-10.0.2+build1/debian/compare-locales/scripts/verify-rss-redirects @@ -0,0 +1,105 @@ +#!python +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is l10n test automation. +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2006 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Axel Hecht +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +import sys +import logging +from optparse import OptionParser +from urlparse import urlparse +import httplib +from urllib2 import urlopen + +EN_US_FEED = 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml' +FEEDSERVER = '%s.fxfeeds.mozilla.com' +FEEDPATH = '/%s/firefox/headlines.xml' + +L10NFEEDS = 'https://wiki.mozilla.org/index.php?title=Firefox/L10n_Feed_Redirects&action=raw' + +op = OptionParser() +op.add_option('--oldid', dest='oldid', + help='explicitly give a version number on the wiki') +op.add_option('-v', dest='verbose', action='count', default=0, + help='increase verbosity') +(options, args) = op.parse_args() + +if len(args) != 1: + sys.exit('all-locales or shipped-locales path expected') + +logging.basicConfig(level=(logging.WARNING - options.verbose*10)) + +if options.oldid: + L10NFEEDS += '&oldid=' + options.oldid + +lFeeds = urlopen(L10NFEEDS) +redirs = {} + +for row in lFeeds: + d, loc, url = row.split(' ', 2) + redirs[loc] = url.strip() + +# parse all-locales and shipped-locales, only take first bunch +lFile = open(args[0]) +locales = [ln.split(' ', 1)[0].strip() for ln in lFile] +# ignore ja-JP-mac, same bookmarks as ja +def not_ja_JP_mac(loc): return loc != 'ja-JP-mac' +locales = filter(not_ja_JP_mac, locales) + +for loc in locales: + logging.debug('testing ' + loc) + server = FEEDSERVER % loc + path = FEEDPATH % loc + while server.endswith('mozilla.com'): + url = None + conn = httplib.HTTPConnection(server) + conn.request('HEAD', path) + r = conn.getresponse() + if r.status != 302: + logging.error('mozilla.com loses feed for ' + loc) + server = '' + continue + url = r.getheader('location') + server, path = urlparse(url)[1:3] + conn.close() + refurl = EN_US_FEED + if redirs.has_key(loc): + refurl = redirs[loc] + if url != refurl: + print loc, "FAIL" + logging.info(str(url) + ' is not ' + refurl) + else: + logging.debug(loc + ' PASS') + --- thunderbird-10.0.2+build1.orig/debian/globalmenu/makefiles.sh +++ thunderbird-10.0.2+build1/debian/globalmenu/makefiles.sh @@ -0,0 +1,44 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is the Mozilla build system. +# +# The Initial Developer of the Original Code is +# the Mozilla Foundation . +# Portions created by the Initial Developer are Copyright (C) 2007 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Chris Coulson +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +add_makefiles " +extensions/globalmenu/Makefile +extensions/globalmenu/chrome/Makefile +extensions/globalmenu/components/Makefile +extensions/globalmenu/components/public/Makefile +extensions/globalmenu/components/src/Makefile +" --- thunderbird-10.0.2+build1.orig/debian/globalmenu/confvars.sh +++ thunderbird-10.0.2+build1/debian/globalmenu/confvars.sh @@ -0,0 +1,4 @@ +MOZ_WEBM=0 +MOZ_OGG=0 +MOZ_WAVE=0 +NECKO_WIFI=0 --- thunderbird-10.0.2+build1.orig/debian/globalmenu/install.rdf +++ thunderbird-10.0.2+build1/debian/globalmenu/install.rdf @@ -0,0 +1,34 @@ + + + + + globalmenu@ubuntu.com + 2.0.2 + true + + + + + {ec8030f7-c20a-464f-9b0e-13a3a9e97384} + 6.0 + 10.* + + + + + + + {3550f703-e582-4d05-9a08-453d09bdfdc6} + 6.0 + 10.* + + + + + Global Menu Bar integration + This extension integrates the menu bar in to the Unity panel + Chris Coulson + http://launchpad.net/globalmenu-extension + + --- thunderbird-10.0.2+build1.orig/debian/globalmenu/Makefile.in +++ thunderbird-10.0.2+build1/debian/globalmenu/Makefile.in @@ -0,0 +1,57 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Chris Coulson +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +MODULE = globalmenu +DIRS = \ + components \ + chrome \ + $(NULL) + +XPI_NAME = globalmenu +INSTALL_EXTENSION_ID = globalmenu@ubuntu.com +XPI_PKGNAME = globalmenu + +DIST_FILES = install.rdf + +include $(topsrcdir)/config/rules.mk --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/Makefile.in +++ thunderbird-10.0.2+build1/debian/globalmenu/components/Makefile.in @@ -0,0 +1,54 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Chris Coulson +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +MODULE = globalmenu + +DIRS = \ + public \ + src \ + $(NULL) + +XPI_NAME = globalmenu + +include $(topsrcdir)/config/rules.mk --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uWidgetAtoms.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uWidgetAtoms.h @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Original Author: Mike Pinkerton (pinkerton@netscape.com) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_WIDGETATOMS_H +#define _U_WIDGETATOMS_H + +#include "prtypes.h" +#include "nscore.h" + +class nsIAtom; + +class uWidgetAtoms { +public: + + static nsresult RegisterAtoms(); + +#define WIDGET_ATOM(_name, _value) static nsIAtom* _name; +#include "uWidgetAtomList.h" +#undef WIDGET_ATOM + +}; + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuUtils.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuUtils.h @@ -0,0 +1,104 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_GLOBALMENUFACTORY_H +#define _U_GLOBALMENUFACTORY_H + +#include + +class uGlobalMenuObject; +class uGlobalMenuDocListener; +class nsIContent; +class uGlobalMenuBar; +class nsIAtom; + +class uGlobalMenuRequestAutoCanceller +{ +public: + static uGlobalMenuRequestAutoCanceller* Create() + { + uGlobalMenuRequestAutoCanceller *canceller = + new uGlobalMenuRequestAutoCanceller(); + if (!canceller) { + return nsnull; + } + + if (!canceller->Init()) { + delete canceller; + canceller = nsnull; + } + + return canceller; + } + + GCancellable* GetCancellable() + { + return mCancellable; + } + + void Destroy() + { + if (mCancellable) { + g_object_unref(mCancellable); + mCancellable = nsnull; + } + } + + ~uGlobalMenuRequestAutoCanceller() + { + if (mCancellable) { + g_cancellable_cancel(mCancellable); + g_object_unref(mCancellable); + } + } +private: + uGlobalMenuRequestAutoCanceller() { }; + PRBool Init() + { + mCancellable = g_cancellable_new(); + return mCancellable ? PR_TRUE : PR_FALSE; + } + + GCancellable *mCancellable; +}; + +uGlobalMenuObject* NewGlobalMenuItem(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar); +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuObject.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuObject.cpp @@ -0,0 +1,688 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "uGlobalMenuObject.h" +#include "uGlobalMenuBar.h" +#include "uWidgetAtoms.h" + +#include "uDebug.h" +#include "compat.h" + +#define MAX_LABEL_NCHARS 40 + +typedef nsresult (nsIDOMRect::*GetRectSideMethod)(nsIDOMCSSPrimitiveValue**); + +NS_IMPL_ISUPPORTS3(uGlobalMenuIconLoader, imgIDecoderObserver, imgIContainerObserver, nsIRunnable) + +// Yes, we're abusing PRPackedBool a bit here. We initialize it to a value +// that is neither true or false, so that we don't need another static member +// to indicate the intialization status of it. +PRPackedBool uGlobalMenuIconLoader::sImagesInMenus = -1; +nsCOMPtr uGlobalMenuIconLoader::sLoader = 0; + +PRBool +uGlobalMenuIconLoader::ShouldShowIcon() +{ + // Ideally, we want to get the visibility of the XUL image in our menu item, + // but that is anonymous content which is only created when the frame is drawn + // (which obviously never happens here). + // As an alternative, we get the user setting for menus-have-icons from + // nsILookAndFeel. If menu icons are to be hidden, we hide everything except + // for menuitems with the menuitem-with-favicon class. This is basically + // how the visibility gets set anyway (see chrome://toolkit/content/xul.css), + // which should work in most cases. But, I guess a theme could override this, + // and then we ignore the users theme settings. Oh well...... + + if (sImagesInMenus == static_cast(-1)) { + // We could get the correct GtkSettings by getting the GdkScreen that our + // top-level window is on. However, I don't think this matters, as + // nsILookAndFeel never had per-screen settings + GtkSettings *settings = gtk_settings_get_default(); + gboolean menus_have_icons; + g_object_get(settings, "gtk-menu-images", &menus_have_icons, NULL); + + sImagesInMenus = !!menus_have_icons; + } + + if (sImagesInMenus) { + return PR_TRUE; + } + + return mMenuItem->WithFavicon(); +} + +void +uGlobalMenuIconLoader::LoadIcon() +{ + NS_DispatchToCurrentThread(this); +} + +static PRInt32 +GetDOMRectSide(nsIDOMRect* aRect, GetRectSideMethod aMethod) +{ + nsCOMPtr dimensionValue; + (aRect->*aMethod)(getter_AddRefs(dimensionValue)); + if (!dimensionValue) + return -1; + + PRUint16 primitiveType; + nsresult rv = dimensionValue->GetPrimitiveType(&primitiveType); + if (NS_FAILED(rv) || primitiveType != nsIDOMCSSPrimitiveValue::CSS_PX) + return -1; + + float dimension = 0; + rv = dimensionValue->GetFloatValue(nsIDOMCSSPrimitiveValue::CSS_PX, + &dimension); + if (NS_FAILED(rv)) + return -1; + + return NSToIntRound(dimension); +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::Run() +{ + TRACE_WITH_MENUOBJECT(mMenuItem); + // Some of this is borrowed from widget/src/cocoa/nsMenuItemIconX.mm + if (mIconRequest) { + mIconRequest->Cancel(NS_BINDING_ABORTED); + mIconRequest = nsnull; + } + + if (!mMenuItem) { + // Our menu item got destroyed already + return NS_OK; + } + + mMenuItem->GetContent(getter_AddRefs(mContent)); + + nsIDocument *doc = mContent->GetCurrentDoc(); + if (!doc) { + // We might have been removed from the menu, in which case we will + // no longer be in a document + return NS_OK; + } + + if (!ShouldShowIcon()) { + ClearIcon(); + return NS_OK; + } + + mIconLoaded = PR_FALSE; + + nsAutoString uriString; + PRBool hasImage = mContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::image, + uriString); + + nsresult rv; + nsCOMPtr domRect; + + if (!hasImage) { + DEBUG_WITH_MENUOBJECT(mMenuItem, "Menuitem does not have an image"); + nsCOMPtr cssStyleDecl; + nsCOMPtr domWin; + nsCOMPtr domDoc = do_QueryInterface(doc); + if (domDoc) { + domDoc->GetDefaultView(getter_AddRefs(domWin)); + if (domWin) { + nsCOMPtr domElement = do_QueryInterface(mContent); + if (domElement) { + domWin->GetComputedStyle(domElement, EmptyString(), + getter_AddRefs(cssStyleDecl)); + } + } + } + + if (!cssStyleDecl) { + return NS_ERROR_FAILURE; + } + + nsCOMPtr cssValue; + nsCOMPtr primitiveValue; + PRUint16 primitiveType; + cssStyleDecl->GetPropertyCSSValue(NS_LITERAL_STRING("list-style-image"), + getter_AddRefs(cssValue)); + if (cssValue) { + primitiveValue = do_QueryInterface(cssValue); + if (primitiveValue) { + primitiveValue->GetPrimitiveType(&primitiveType); + if (primitiveType == nsIDOMCSSPrimitiveValue::CSS_URI) { + rv = primitiveValue->GetStringValue(uriString); + if (NS_SUCCEEDED(rv)) { + hasImage = PR_TRUE; + } + } else { + NS_WARNING("list-style-image has wrong primitive type"); + } + } + } + + if (!hasImage) { + return NS_OK; + } + + cssStyleDecl->GetPropertyCSSValue(NS_LITERAL_STRING("-moz-image-region"), + getter_AddRefs(cssValue)); + if (cssValue) { + primitiveValue = do_QueryInterface(cssValue); + if (primitiveValue) { + primitiveValue->GetPrimitiveType(&primitiveType); + if (primitiveType == nsIDOMCSSPrimitiveValue::CSS_RECT) { + primitiveValue->GetRectValue(getter_AddRefs(domRect)); + } + } + } + } + + DEBUG_WITH_MENUOBJECT(mMenuItem, "Icon URI: %s", DEBUG_CSTR_FROM_UTF16(uriString)); + nsCOMPtr uri; + rv = NS_NewURI(getter_AddRefs(uri), uriString); + if (NS_FAILED(rv)) { + NS_WARNING("Failed to create new URI"); + ClearIcon(); + return NS_OK; + } + + if (!sLoader) { + sLoader = do_GetService("@mozilla.org/image/loader;1"); + } + + NS_ASSERTION(sLoader, "No icon loader"); + if (!sLoader) { + return NS_OK; + } + + nsCOMPtr loadGroup = doc->GetDocumentLoadGroup(); + +#if MOZILLA_BRANCH_MAJOR_VERSION >= 8 + rv = sLoader->LoadImage(uri, nsnull, nsnull, nsnull, loadGroup, this, +#else + rv = sLoader->LoadImage(uri, nsnull, nsnull, loadGroup, this, +#endif + nsnull, nsIRequest::LOAD_NORMAL, nsnull, + nsnull, nsnull, getter_AddRefs(mIconRequest)); + NS_ENSURE_SUCCESS(rv, rv); + + mImageRect.SetEmpty(); + + if (domRect) { + PRInt32 bottom = GetDOMRectSide(domRect, &nsIDOMRect::GetBottom); + PRInt32 right = GetDOMRectSide(domRect, &nsIDOMRect::GetRight); + PRInt32 top = GetDOMRectSide(domRect, &nsIDOMRect::GetTop); + PRInt32 left = GetDOMRectSide(domRect, &nsIDOMRect::GetLeft); + + if (top < 0 || left < 0 || bottom <= top || right <= left) { + return NS_ERROR_FAILURE; + } + + mImageRect.SetRect(left, top, right - left, bottom - top); + } + + return NS_OK; +} + +void +uGlobalMenuIconLoader::ClearIcon() +{ + dbusmenu_menuitem_property_remove(mMenuItem->GetDbusMenuItem(), + DBUSMENU_MENUITEM_PROP_ICON_DATA); +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnStartRequest(imgIRequest *aRequest) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnStartDecode(imgIRequest *aRequest) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnStartContainer(imgIRequest *aRequest, imgIContainer *aContainer) +{ + TRACE_WITH_MENUOBJECT(mMenuItem); + aContainer->RequestDecode(); + return NS_OK; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnStartFrame(imgIRequest *aRequest, PRUint32 aFrame) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnDataAvailable(imgIRequest *aRequest, + MOZ_API_BOOL aCurrentFrame, + const nsIntRect *aRect) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnStopFrame(imgIRequest *aRequest, PRUint32 aFrame) +{ + TRACE_WITH_MENUOBJECT(mMenuItem); + if (aRequest != mIconRequest) { + return NS_ERROR_FAILURE; + } + + if (mIconLoaded) { + DEBUG_WITH_MENUOBJECT(mMenuItem, "Icon is already loaded"); + return NS_OK; + } + + mIconLoaded = PR_TRUE; + + nsCOMPtr img; + aRequest->GetImage(getter_AddRefs(img)); + if (!img) { + NS_WARNING("Failed to get image"); + return NS_ERROR_FAILURE; + } + + PRInt32 origWidth; + PRInt32 origHeight; + img->GetWidth(&origWidth); + img->GetHeight(&origHeight); + + PRBool needsClip = PR_FALSE; + + if (!mImageRect.IsEmpty()) { + if (mImageRect.XMost() > origWidth || mImageRect.YMost() > origHeight) { + NS_WARNING("-moz-image-region is larger than image"); + return NS_ERROR_FAILURE; + } + + if (!(mImageRect.x == 0 && mImageRect.y == 0 && + mImageRect.width == origWidth && mImageRect.height == origHeight)) { + needsClip = PR_TRUE; + } + } + + if ((!needsClip && (origWidth > 100 || origHeight > 100)) || + (needsClip && (mImageRect.width > 100 || mImageRect.height > 100))) { + /* The icon data needs to go across DBus. Make sure the icon + * data isn't too large, else our connection gets terminated and + * GDbus helpfully aborts the application. Thank you :) + */ + NS_WARNING("Icon data too large"); + ClearIcon(); + return NS_OK; + } + + nsCOMPtr clippedImg; + if (needsClip) { + nsresult rv = img->ExtractFrame(0, mImageRect, 0, + getter_AddRefs(clippedImg)); + if (NS_FAILED(rv)) { + NS_WARNING("Failed to clip icon"); + return NS_ERROR_FAILURE; + } + } + + nsCOMPtr converter = + do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1"); + NS_ASSERTION(converter, "No image converter"); + if (!converter) { + return NS_ERROR_FAILURE; + } + + GdkPixbuf *pixbuf = + converter->ConvertImageToPixbuf(clippedImg ? clippedImg : img); + if (pixbuf) { + dbusmenu_menuitem_property_set_image(mMenuItem->GetDbusMenuItem(), + DBUSMENU_MENUITEM_PROP_ICON_DATA, + pixbuf); + g_object_unref(pixbuf); + } else { + ClearIcon(); + } + + return NS_OK; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnStopContainer(imgIRequest *aRequest, + imgIContainer *aContainer) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnStopDecode(imgIRequest *aRequest, nsresult status, + const PRUnichar *statusArg) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnStopRequest(imgIRequest *aRequest, MOZ_API_BOOL aIsLastPart) +{ + TRACE_WITH_MENUOBJECT(mMenuItem); + return NS_OK; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::OnDiscard(imgIRequest *aRequest) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuIconLoader::FrameChanged(imgIContainer *aContainer, + const nsIntRect *aDirtyRect) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +void +uGlobalMenuIconLoader::Destroy() +{ + TRACE_WITH_MENUOBJECT(mMenuItem); + if (mIconRequest) { + mIconRequest->Cancel(NS_BINDING_ABORTED); + mIconRequest = nsnull; + } + + mMenuItem = nsnull; +} + +void +uGlobalMenuObject::GetContent(nsIContent **_retval) +{ + if (!_retval) { + return; + } + *_retval = mContent; + NS_IF_ADDREF(*_retval); +} + +void +uGlobalMenuObject::SyncLabelFromContent(nsIContent *aContent) +{ + TRACE_WITH_THIS_MENUOBJECT(); + // Gecko stores the label and access key in separate attributes + // so we need to convert label="Foo"/accesskey="F" in to + // label="_Foo" for dbusmenu + + nsAutoString label; + if (aContent && aContent->GetAttr(kNameSpaceID_None, + uWidgetAtoms::label, label)) { + UGM_BLOCK_EVENTS_FOR_CURRENT_SCOPE(); + DEBUG_WITH_CONTENT(aContent, "Content has label \"%s\"", DEBUG_CSTR_FROM_UTF16(label)); + mContent->SetAttr(kNameSpaceID_None, uWidgetAtoms::label, label, MOZ_API_TRUE); + } else { + mContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::label, label); + } + + nsAutoString accesskey; + mContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::accesskey, accesskey); + + const PRUnichar *tmp = accesskey.BeginReading(); + PRUnichar keyUpper; + PRUnichar keyLower; + // XXX: I think we need to link against libxul.so to get ToLowerCase + // and ToUpperCase from nsUnicharUtils.h + nsCOMPtr converter = + do_GetService(NS_UNICHARUTIL_CONTRACTID); + if (converter) { + converter->ToUpper(*tmp, &keyUpper); + converter->ToLower(*tmp, &keyLower); + } else { + if (*tmp < 256) { + keyUpper = toupper(char(*tmp)); + keyLower = tolower(char(*tmp)); + } else { + NS_WARNING("accesskey matching is case-sensitive when it shouldn't be"); + keyUpper = *tmp; + keyLower = *tmp; + } + } + + PRUnichar *cur = label.BeginWriting(); + PRUnichar *end = label.EndWriting(); + int length = label.Length(); + int pos = 0; + PRBool foundAccessKey = PR_FALSE; + + while (cur < end) { + if (*cur != PRUnichar('_')) { + if ((*cur != keyLower && *cur != keyUpper) || foundAccessKey) { + cur++; + pos++; + continue; + } + foundAccessKey = PR_TRUE; + } + + length += 1; + label.SetLength(length); + int newLength = label.Length(); + if (length != newLength) + break; + + cur = label.BeginWriting() + pos; + end = label.EndWriting(); + memmove(cur + 1, cur, (length - 1 - pos) * sizeof(PRUnichar)); +// \^/ + *cur = PRUnichar('_'); // Yeah! +// v + + cur += 2; + pos += 2; + } + + // Ellipsize long labels. I've picked an arbitrary length here + if (length > MAX_LABEL_NCHARS) { + cur = label.BeginWriting(); + for (PRUint32 i = 1; i < 4; i++) { + *(cur + (MAX_LABEL_NCHARS - i)) = PRUnichar('.'); + } + *(cur + MAX_LABEL_NCHARS) = nsnull; + label.SetLength(MAX_LABEL_NCHARS); + } + + nsCAutoString clabel; + CopyUTF16toUTF8(label, clabel); + DEBUG_WITH_THIS_MENUOBJECT("Setting label to \"%s\"", clabel.get()); + dbusmenu_menuitem_property_set(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_LABEL, + clabel.get()); +} + +void +uGlobalMenuObject::SyncLabelFromContent() +{ + SyncLabelFromContent(nsnull); +} + +// Synchronize the 'hidden' attribute on the DOM node with the +// 'visible' property on the dbusmenu node +void +uGlobalMenuObject::SyncVisibilityFromContent() +{ + TRACE_WITH_THIS_MENUOBJECT(); + mContentVisible = !IsHidden(); + PRBool realVis = (!mMenuBar || !ShouldShowOnlyForKb() || + mMenuBar->OpenedByKeyboard()) ? + mContentVisible : PR_FALSE; + DEBUG_WITH_THIS_MENUOBJECT("Setting %s", realVis ? "visible" : "hidden"); + + dbusmenu_menuitem_property_set_bool(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_VISIBLE, + realVis); +} + +void +uGlobalMenuObject::SyncSensitivityFromContent(nsIContent *aContent) +{ + TRACE_WITH_THIS_MENUOBJECT(); + + nsIContent *content; + if (aContent) { + content = aContent; + } else { + content = mContent; + } + PRBool disabled = content->AttrValueIs(kNameSpaceID_None, + uWidgetAtoms::disabled, + uWidgetAtoms::_true, + eCaseMatters); + DEBUG_WITH_THIS_MENUOBJECT("Setting %s", disabled ? "disabled" : "enabled"); + + if (aContent) { + UGM_BLOCK_EVENTS_FOR_CURRENT_SCOPE(); + if (disabled) { + mContent->SetAttr(kNameSpaceID_None, uWidgetAtoms::disabled, + NS_LITERAL_STRING("true"), MOZ_API_TRUE); + } else { + mContent->UnsetAttr(kNameSpaceID_None, uWidgetAtoms::disabled, MOZ_API_TRUE); + } + } + + dbusmenu_menuitem_property_set_bool(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_ENABLED, + !disabled); +} + +void +uGlobalMenuObject::SyncSensitivityFromContent() +{ + SyncSensitivityFromContent(nsnull); +} + +void +uGlobalMenuObject::UpdateInfoFromContentClass() +{ + TRACE_WITH_THIS_MENUOBJECT(); + nsCOMPtr element(do_QueryInterface(mContent)); + if (!element) { + return; + } + + nsCOMPtr classes; + element->GetClassList(getter_AddRefs(classes)); + if (!classes) { + return; + } + + MOZ_API_BOOL tmp; + classes->Contains(NS_LITERAL_STRING("show-only-for-keyboard"), + &tmp); + mShowOnlyForKb = !!tmp; + + classes->Contains(NS_LITERAL_STRING("menuitem-with-favicon"), + &tmp); + mWithFavicon = !!tmp; + + DEBUG_WITH_THIS_MENUOBJECT("show-only-for-keyboard class? %s", mShowOnlyForKb ? "Yes" : "No"); + DEBUG_WITH_THIS_MENUOBJECT("menuitem-with-favicon class? %s", mWithFavicon ? "Yes" : "No"); +} + +PRBool +uGlobalMenuObject::IsHidden() +{ + return mContent->AttrValueIs(kNameSpaceID_None, uWidgetAtoms::hidden, + uWidgetAtoms::_true, eCaseMatters) || + mContent->AttrValueIs(kNameSpaceID_None, uWidgetAtoms::collapsed, + uWidgetAtoms::_true, eCaseMatters); +} + +void +uGlobalMenuObject::UpdateVisibility() +{ + TRACE_WITH_THIS_MENUOBJECT(); + if (!mMenuBar) { + return; + } + + PRBool newVis = (!ShouldShowOnlyForKb() || mMenuBar->OpenedByKeyboard()) ? + mContentVisible : PR_FALSE; + + DEBUG_WITH_THIS_MENUOBJECT("Setting %s", newVis ? "visible" : "hidden"); + dbusmenu_menuitem_property_set_bool(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_VISIBLE, + newVis); +} + +void +uGlobalMenuObject::SyncIconFromContent() +{ + TRACE_WITH_THIS_MENUOBJECT(); + if (!mIconLoader) { + mIconLoader = new uGlobalMenuIconLoader(this); + } + + mIconLoader->LoadIcon(); +} + +void +uGlobalMenuObject::DestroyIconLoader() +{ + if (mIconLoader) { + mIconLoader->Destroy(); + } +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuDummy.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuDummy.cpp @@ -0,0 +1,136 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * Mike Conley + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include + +#include +#include + +#include "uGlobalMenuDummy.h" +#include "uGlobalMenuBar.h" +#include "uWidgetAtoms.h" + +#include "uDebug.h" + +nsresult +uGlobalMenuDummy::ConstructDbusMenuItem() +{ + mDbusMenuItem = dbusmenu_menuitem_new(); + if (!mDbusMenuItem) + return NS_ERROR_OUT_OF_MEMORY; + + dbusmenu_menuitem_property_set(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_VISIBLE, + FALSE); + + return NS_OK; +} + +uGlobalMenuDummy::uGlobalMenuDummy(): + uGlobalMenuObject(MenuDummy) +{ + MOZ_COUNT_CTOR(uGlobalMenuDummy); +} + +uGlobalMenuDummy::~uGlobalMenuDummy() +{ + + if (mDbusMenuItem) + g_object_unref(mDbusMenuItem); + + MOZ_COUNT_DTOR(uGlobalMenuDummy); +} + +nsresult +uGlobalMenuDummy::Init() +{ + mParent = nsnull; + mMenuBar = nsnull; + + return ConstructDbusMenuItem(); +} + +/*static*/ uGlobalMenuObject* +uGlobalMenuDummy::Create() +{ + TRACE(); + + uGlobalMenuDummy *menuitem = new uGlobalMenuDummy(); + if (!menuitem) { + return nsnull; + } + + if (NS_FAILED(menuitem->Init())) { + delete menuitem; + return nsnull; + } + + return static_cast(menuitem); +} + +// GlobalMenuDummy is inert, and does not observe/react to content +// changes. The following methods are included simply to fill out +// the interface. +void +uGlobalMenuDummy::ObserveAttributeChanged(nsIDocument *aDocument, + nsIContent *aContent, + nsIAtom *aAttribute) +{ + +} + +void +uGlobalMenuDummy::ObserveContentRemoved(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + +} + +void +uGlobalMenuDummy::ObserveContentInserted(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uWidgetAtoms.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uWidgetAtoms.cpp @@ -0,0 +1,81 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Original Author: Mike Pinkerton (pinkerton@netscape.com) + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include +#include +#include + +#define WIDGET_ATOM(_name, _value) nsIAtom* uWidgetAtoms::_name = 0; +#include "uWidgetAtomList.h" +#undef WIDGET_ATOM + +struct uWidgetAtom { + const char *raw; + nsIAtom **atom; +}; + +static const uWidgetAtom atoms[] = { +#define WIDGET_ATOM(_name, _value) { _value, &uWidgetAtoms::_name }, +#include "uWidgetAtomList.h" +#undef WIDGET_ATOM +}; + +nsresult +uWidgetAtoms::RegisterAtoms() +{ + nsCOMPtr as = + do_GetService("@mozilla.org/atom-service;1"); + NS_ENSURE_TRUE(as, NS_ERROR_OUT_OF_MEMORY); + + nsAutoString aAtomStr; + nsCAutoString cAtomStr; + + for (PRUint32 i = 0; i < NS_ARRAY_LENGTH(atoms); i++) { + cAtomStr = atoms[i].raw; + CopyUTF8toUTF16(cAtomStr, aAtomStr); + nsresult rv = as->GetAtom(aAtomStr, atoms[i].atom); + NS_ENSURE_SUCCESS(rv, rv); + } + + return NS_OK; +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenu.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenu.cpp @@ -0,0 +1,762 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "uGlobalMenu.h" +#include "uGlobalMenuBar.h" +#include "uGlobalMenuUtils.h" +#include "uWidgetAtoms.h" + +#include "uDebug.h" +#include "compat.h" + +/*static*/ PRBool +uGlobalMenu::MenuEventCallback(DbusmenuMenuitem *menu, + const gchar *name, + GVariant *value, + guint timestamp, + void *data) +{ + uGlobalMenu *self = static_cast(data); + if (!g_strcmp0("closed", name)) { + self->OnClose(); + return PR_TRUE; + } + + if (!g_strcmp0("opened", name)) { + self->OnOpen(); + return PR_TRUE; + } + + return PR_FALSE; +} + +/*static*/ PRBool +uGlobalMenu::MenuAboutToOpenCallback(DbusmenuMenuitem *menu, + void *data) +{ + uGlobalMenu *self = static_cast(data); + self->AboutToOpen(); + + // We return false here for "needsUpdate", as we have no way of + // knowing in advance if the menu structure is going to be updated. + // The menu layout will still update on the client, but we won't block + // opening the menu until it's happened + return PR_FALSE; +} + +void +uGlobalMenu::Activate() +{ + mContent->SetAttr(kNameSpaceID_None, uWidgetAtoms::menuactive, + NS_LITERAL_STRING("true"), MOZ_API_TRUE); + + nsCOMPtr target = do_QueryInterface(mContent); + if (target) { +#if MOZILLA_BRANCH_MAJOR_VERSION >= 10 + nsCOMPtr domDoc = do_QueryInterface(mContent->OwnerDoc()); +#else + nsCOMPtr domDoc = do_QueryInterface(mContent->GetOwnerDoc()); +#endif + if (domDoc) { + nsCOMPtr event; + domDoc->CreateEvent(NS_LITERAL_STRING("Events"), + getter_AddRefs(event)); + if (event) { + event->InitEvent(NS_LITERAL_STRING("DOMMenuItemActive"), + MOZ_API_TRUE, MOZ_API_TRUE); + nsCOMPtr priv = do_QueryInterface(event); + if (priv) { + priv->SetTrusted(MOZ_API_TRUE); + } + MOZ_API_BOOL dummy; + target->DispatchEvent(event, &dummy); + } + } + } +} + +void +uGlobalMenu::Deactivate() +{ + mContent->UnsetAttr(kNameSpaceID_None, uWidgetAtoms::menuactive, MOZ_API_TRUE); + +#if MOZILLA_BRANCH_MAJOR_VERSION >= 10 + nsCOMPtr domDoc = do_QueryInterface(mContent->OwnerDoc()); +#else + nsCOMPtr domDoc = do_QueryInterface(mContent->GetOwnerDoc()); +#endif + if (domDoc) { + nsCOMPtr event; + domDoc->CreateEvent(NS_LITERAL_STRING("Events"), + getter_AddRefs(event)); + if (event) { + event->InitEvent(NS_LITERAL_STRING("DOMMenuItemInactive"), + MOZ_API_TRUE, MOZ_API_TRUE); + nsCOMPtr target = do_QueryInterface(mContent); + if (target) { + nsCOMPtr priv = do_QueryInterface(event); + if (priv) { + priv->SetTrusted(MOZ_API_TRUE); + } + MOZ_API_BOOL dummy; + target->DispatchEvent(event, &dummy); + } + } + } +} + +PRBool +uGlobalMenu::CanOpen() +{ + PRBool isHidden = IsHidden(); + PRBool isDisabled = mContent->AttrValueIs(kNameSpaceID_None, + uWidgetAtoms::disabled, + uWidgetAtoms::_true, + eCaseMatters); + + return (!isHidden && !isDisabled); +} + +void +uGlobalMenu::AboutToOpen() +{ + TRACE_WITH_THIS_MENUOBJECT(); + // XXX: HACK, HACK, HACK ALERT!! + // We ignore the first AboutToOpen on top-level menus, because Unity + // stupidly sends this signal on all top-levels when the window opens. + // This isn't useful at all for us, and leaves the menu in a partially + // open state (it doesn't finish the job by sending open/close events), + // where we sit unnecessarily keeping our menu in-sync with the DOM + // (we do think it is in the middle of opening, after all) until after + // the menu is first opened, when sanity returns again + // YUCK! + if (!mPrimed) { + DEBUG_WITH_THIS_MENUOBJECT("Ignoring first AboutToOpen"); + mPrimed = PR_TRUE; + return; + } + + mOpening = PR_TRUE; + + if (DoesNeedRebuild()) { + Build(); + } + + // If there is no popup content, then there is nothing to do, and it's + // unsafe to proceed anyway + if (!mPopupContent) { + DEBUG_WITH_THIS_MENUOBJECT("Menu has no popup content"); + mOpening = PR_FALSE; + return; + } + + PRUint32 count = mMenuObjects.Length(); + for (PRUint32 i = 0; i < count; i++) { + mMenuObjects[i]->AboutToShowNotify(); + } + + // XXX: This should happen when the pointer hovers over the menu entry, + // but we don't have that information right now. We synthesize it for + // menus, but this doesn't work for menuitems at all + Activate(); + +#if MOZILLA_BRANCH_MAJOR_VERSION >= 10 + nsCOMPtr domDoc = do_QueryInterface(mPopupContent->OwnerDoc()); +#else + nsCOMPtr domDoc = do_QueryInterface(mPopupContent->GetOwnerDoc()); +#endif + if (domDoc) { + nsCOMPtr event; + domDoc->CreateEvent(NS_LITERAL_STRING("mouseevent"), + getter_AddRefs(event)); + if (event) { + nsCOMPtr mouseEvent = do_QueryInterface(event); + if (mouseEvent) { + nsCOMPtr window; + domDoc->GetDefaultView(getter_AddRefs(window)); + if (window) { + mouseEvent->InitMouseEvent(NS_LITERAL_STRING("popupshowing"), + MOZ_API_TRUE, MOZ_API_TRUE, window, nsnull, + 0, 0, 0, 0, MOZ_API_FALSE, MOZ_API_FALSE, + MOZ_API_FALSE, MOZ_API_FALSE, 0, nsnull); + nsCOMPtr target = do_QueryInterface(mPopupContent); + if (target) { + nsCOMPtr priv = do_QueryInterface(event); + if (priv) { + priv->SetTrusted(MOZ_API_TRUE); + } + MOZ_API_BOOL dummy; + // XXX: dummy == PR_FALSE means that we should prevent the + // the menu from opening, but there's no way to do this + target->DispatchEvent(event, &dummy); + } + } + } + } + } + + nsCOMPtr os = + do_GetService("@mozilla.org/observer-service;1"); + if (os) { + nsAutoString popupID; + mPopupContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::id, popupID); + os->NotifyObservers(nsnull, "native-menu-service:popup-open", popupID.get()); + } +} + +void +uGlobalMenu::OnOpen() +{ + if (!mOpening) { + AboutToOpen(); + } + + // If there is no popup content, then there is nothing to do, and it's + // unsafe to proceed anyway + if (!mPopupContent) { + mOpening = PR_FALSE; + return; + } + + mContent->SetAttr(kNameSpaceID_None, uWidgetAtoms::open, NS_LITERAL_STRING("true"), MOZ_API_TRUE); + +#if MOZILLA_BRANCH_MAJOR_VERSION >= 10 + nsCOMPtr domDoc = do_QueryInterface(mPopupContent->OwnerDoc()); +#else + nsCOMPtr domDoc = do_QueryInterface(mPopupContent->GetOwnerDoc()); +#endif + if (domDoc) { + nsCOMPtr event; + domDoc->CreateEvent(NS_LITERAL_STRING("mouseevent"), + getter_AddRefs(event)); + if (event) { + nsCOMPtr mouseEvent = do_QueryInterface(event); + if (mouseEvent) { + nsCOMPtr window; + domDoc->GetDefaultView(getter_AddRefs(window)); + if (window) { + mouseEvent->InitMouseEvent(NS_LITERAL_STRING("popupshown"), + MOZ_API_TRUE, MOZ_API_TRUE, window, nsnull, + 0, 0, 0, 0, MOZ_API_FALSE, MOZ_API_FALSE, + MOZ_API_FALSE, MOZ_API_FALSE, 0, nsnull); + nsCOMPtr target = do_QueryInterface(mPopupContent); + if (target) { + nsCOMPtr priv = do_QueryInterface(event); + if (priv) { + priv->SetTrusted(MOZ_API_TRUE); + } + MOZ_API_BOOL dummy; + target->DispatchEvent(event, &dummy); + } + } + } + } + } + + mOpening = PR_FALSE; +} + +void +uGlobalMenu::OnClose() +{ + mOpening = PR_FALSE; + // If there is no popup content, then there is nothing to do, and it's + // unsafe to proceed anyway + if (!mPopupContent) { + return; + } + + mContent->UnsetAttr(kNameSpaceID_None, uWidgetAtoms::open, MOZ_API_TRUE); + +#if MOZILLA_BRANCH_MAJOR_VERSION >= 10 + nsCOMPtr domDoc = do_QueryInterface(mPopupContent->OwnerDoc()); +#else + nsCOMPtr domDoc = do_QueryInterface(mPopupContent->GetOwnerDoc()); +#endif + if (domDoc) { + nsCOMPtr event; + domDoc->CreateEvent(NS_LITERAL_STRING("mouseevent"), + getter_AddRefs(event)); + if (event) { + nsCOMPtr mouseEvent = do_QueryInterface(event); + if (mouseEvent) { + nsCOMPtr window; + domDoc->GetDefaultView(getter_AddRefs(window)); + if (window) { + mouseEvent->InitMouseEvent(NS_LITERAL_STRING("popuphiding"), + MOZ_API_TRUE, MOZ_API_TRUE, window, nsnull, + 0, 0, 0, 0, MOZ_API_FALSE, MOZ_API_FALSE, + MOZ_API_FALSE, MOZ_API_FALSE, 0, nsnull); + nsCOMPtr target = do_QueryInterface(mPopupContent); + if (target) { + nsCOMPtr priv = do_QueryInterface(event); + if (priv) { + priv->SetTrusted(MOZ_API_TRUE); + } + MOZ_API_BOOL dummy; + target->DispatchEvent(event, &dummy); + mouseEvent->InitMouseEvent(NS_LITERAL_STRING("popuphidden"), + MOZ_API_TRUE, MOZ_API_TRUE, window, nsnull, + 0, 0, 0, 0, MOZ_API_FALSE, MOZ_API_FALSE, + MOZ_API_FALSE, MOZ_API_FALSE, 0, nsnull); + target->DispatchEvent(event, &dummy); + } + } + } + } + } + + Deactivate(); +} + +void +uGlobalMenu::SyncProperties() +{ + TRACE_WITH_THIS_MENUOBJECT(); + + UpdateInfoFromContentClass(); + SyncLabelFromContent(); + SyncSensitivityFromContent(); + SyncVisibilityFromContent(); + SyncIconFromContent(); + + ClearInvalid(); +} + +nsresult +uGlobalMenu::ConstructDbusMenuItem() +{ + mDbusMenuItem = dbusmenu_menuitem_new(); + if (!mDbusMenuItem) + return NS_ERROR_OUT_OF_MEMORY; + + // This happens automatically when we add children, but we have to + // do this manually for menus which don't initially have children, + // so we can receive about-to-show which triggers a build of the menu + dbusmenu_menuitem_property_set(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_CHILD_DISPLAY, + DBUSMENU_MENUITEM_CHILD_DISPLAY_SUBMENU); + + mOpenHandlerID = g_signal_connect(G_OBJECT(mDbusMenuItem), + "about-to-show", + G_CALLBACK(MenuAboutToOpenCallback), + this); + mEventHandlerID = g_signal_connect(G_OBJECT(mDbusMenuItem), + "event", + G_CALLBACK(MenuEventCallback), + this); + + SyncProperties(); + + return NS_OK; +} + +void +uGlobalMenu::GetMenuPopupFromMenu(nsIContent **aResult) +{ + if (!aResult) + return; + + *aResult = nsnull; + + // Taken from widget/src/cocoa/nsMenuX.mm. Not sure if we need this + nsresult rv; + nsCOMPtr xblService = do_GetService("@mozilla.org/xbl;1", &rv); + if (!xblService) + return; + + PRInt32 dummy; + nsCOMPtr tag; + xblService->ResolveTag(mContent, &dummy, getter_AddRefs(tag)); + if (tag == uWidgetAtoms::menupopup) { + *aResult = mContent; + NS_ADDREF(*aResult); + return; + } + + PRUint32 count = mContent->GetChildCount(); + + for (PRUint32 i = 0; i < count; i++) { + PRInt32 dummy; + nsIContent *child = mContent->GetChildAt(i); + nsCOMPtr tag; + xblService->ResolveTag(child, &dummy, getter_AddRefs(tag)); + if (tag == uWidgetAtoms::menupopup) { + *aResult = child; + NS_ADDREF(*aResult); + return; + } + } +} + +PRBool +uGlobalMenu::InsertMenuObjectAt(uGlobalMenuObject *menuObj, + PRUint32 index) +{ + gboolean res = dbusmenu_menuitem_child_add_position(mDbusMenuItem, + menuObj->GetDbusMenuItem(), + index); + return res && mMenuObjects.InsertElementAt(index, menuObj); +} + +PRBool +uGlobalMenu::AppendMenuObject(uGlobalMenuObject *menuObj) +{ + gboolean res = dbusmenu_menuitem_child_append(mDbusMenuItem, + menuObj->GetDbusMenuItem()); + return res && mMenuObjects.AppendElement(menuObj); +} + +PRBool +uGlobalMenu::RemoveMenuObjectAt(PRUint32 index) +{ + NS_ASSERTION(index < mMenuObjects.Length(), "Invalid index"); + if (index >= mMenuObjects.Length()) { + return PR_FALSE; + } + + gboolean res = dbusmenu_menuitem_child_delete(mDbusMenuItem, + mMenuObjects[index]->GetDbusMenuItem()); + mMenuObjects.RemoveElementAt(index); + + return !!res; +} + +nsresult +uGlobalMenu::Build() +{ + TRACE_WITH_THIS_MENUOBJECT(); + + PRUint32 count = mMenuObjects.Length(); + for (PRUint32 i = 0; i < count; i++) { + RemoveMenuObjectAt(0); + } + + if (mPopupContent && mPopupContent != mContent) { + mListener->UnregisterForContentChanges(mPopupContent, this); + } + + GetMenuPopupFromMenu(getter_AddRefs(mPopupContent)); + + if (!mPopupContent) { + // The menu has no popup, so there are no menuitems here + return NS_OK; + } + + // Manually wrap the menupopup node to make sure it's bounded + // Borrowed from widget/src/cocoa/nsMenuX.mm, we need this to make + // some menus in Thunderbird work + nsIDocument *doc = mPopupContent->GetCurrentDoc(); + if (doc) { + nsresult rv; + nsCOMPtr xpconnect = + do_GetService(nsIXPConnect::GetCID(), &rv); + if (NS_SUCCEEDED(rv)) { + nsIScriptGlobalObject *sgo = doc->GetScriptGlobalObject(); + nsCOMPtr scriptContext = sgo->GetContext(); + JSObject *global = sgo->GetGlobalJSObject(); + if (scriptContext && global) { + JSContext *cx = (JSContext *)scriptContext->GetNativeContext(); + if (cx) { + nsCOMPtr wrapper; + xpconnect->WrapNative(cx, global, + mPopupContent, NS_GET_IID(nsISupports), + getter_AddRefs(wrapper)); + } + } + } + } + + if (mContent != mPopupContent) { + nsresult rv = mListener->RegisterForContentChanges(mPopupContent, this); + NS_ENSURE_SUCCESS(rv, rv); + } + + ClearNeedsRebuild(); + + count = mPopupContent->GetChildCount(); + + for (PRUint32 i = 0; i < count; i++) { + nsIContent *child = mPopupContent->GetChildAt(i); + uGlobalMenuObject *menuObject = + NewGlobalMenuItem(static_cast(this), + mListener, child, mMenuBar); + PRBool res = PR_FALSE; + if (menuObject) { + res = AppendMenuObject(menuObject); + } + NS_WARN_IF_FALSE(res, "Failed to append menuitem. Marking menu invalid"); + if (!res) { + SetNeedsRebuild(); + return NS_ERROR_FAILURE; + } + } + + return NS_OK; +} + +nsresult +uGlobalMenu::Init(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar) +{ + NS_ENSURE_ARG(aParent); + NS_ENSURE_ARG(aListener); + NS_ENSURE_ARG(aContent); + NS_ENSURE_ARG(aMenuBar); + + mParent = aParent; + mListener = aListener; + mContent = aContent; + mMenuBar = aMenuBar; + + // See the hack comment above for why this workaround is here + if (mParent->GetType() != MenuBar || mMenuBar->IsRegistered()) { + mPrimed = PR_TRUE; + } + + nsresult rv = mListener->RegisterForContentChanges(mContent, this); + NS_ENSURE_SUCCESS(rv, rv); + + return ConstructDbusMenuItem(); +} + +uGlobalMenu::uGlobalMenu(): + uGlobalMenuObject(Menu), mOpening(PR_FALSE), mNeedsRebuild(PR_TRUE), + mPrimed(PR_FALSE) +{ + MOZ_COUNT_CTOR(uGlobalMenu); +} + +uGlobalMenu::~uGlobalMenu() +{ + if (mListener) { + mListener->UnregisterForContentChanges(mContent, this); + if (mPopupContent && mContent != mPopupContent) { + mListener->UnregisterForContentChanges(mPopupContent, this); + } + } + + DestroyIconLoader(); + + if (mDbusMenuItem) { + g_signal_handler_disconnect(mDbusMenuItem, mOpenHandlerID); + g_signal_handler_disconnect(mDbusMenuItem, mEventHandlerID); + g_object_unref(mDbusMenuItem); + } + + MOZ_COUNT_DTOR(uGlobalMenu); +} + +/*static*/ uGlobalMenuObject* +uGlobalMenu::Create(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar) +{ + TRACE_WITH_CONTENT(aContent); + + uGlobalMenu *menu = new uGlobalMenu(); + if (!menu) { + return nsnull; + } + + if (NS_FAILED(menu->Init(aParent, aListener, aContent, aMenuBar))) { + delete menu; + return nsnull; + } + + return static_cast(menu); +} + +void +uGlobalMenu::AboutToShowNotify() +{ + TRACE_WITH_THIS_MENUOBJECT(); + + if (IsDirty()) { + SyncProperties(); + } else { + UpdateVisibility(); + } +} + +void +uGlobalMenu::OpenMenu() +{ + if (!CanOpen()) { + return; + } + + dbusmenu_menuitem_show_to_user(mDbusMenuItem, 0); +} + +void +uGlobalMenu::ObserveAttributeChanged(nsIDocument *aDocument, + nsIContent *aContent, + nsIAtom *aAttribute) +{ + TRACE_WITH_THIS_MENUOBJECT(); + NS_ASSERTION(aContent == mContent || aContent == mPopupContent, + "Received an event that wasn't meant for us!"); + + if (IsDirty()) { + DEBUG_WITH_THIS_MENUOBJECT("Previously marked as invalid"); + return; + } + + if (mParent->GetType() == Menu && + !(static_cast(mParent))->IsOpening()) { + DEBUG_WITH_THIS_MENUOBJECT("Parent isn't opening. Marking invalid"); + Invalidate(); + return; + } + + if (aAttribute == uWidgetAtoms::open) { + return; + } + + if (aAttribute == uWidgetAtoms::disabled) { + SyncSensitivityFromContent(); + } else if (aAttribute == uWidgetAtoms::hidden || + aAttribute == uWidgetAtoms::collapsed) { + SyncVisibilityFromContent(); + } else if (aAttribute == uWidgetAtoms::label || + aAttribute == uWidgetAtoms::accesskey) { + SyncLabelFromContent(); + } else if (aAttribute == uWidgetAtoms::image) { + SyncIconFromContent(); + } else if (aAttribute == uWidgetAtoms::_class) { + UpdateInfoFromContentClass(); + SyncVisibilityFromContent(); + SyncIconFromContent(); + } +} + +void +uGlobalMenu::ObserveContentRemoved(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + TRACE_WITH_THIS_MENUOBJECT(); + NS_ASSERTION(aContainer == mContent || aContainer == mPopupContent, + "Received an event that wasn't meant for us!"); + + if (DoesNeedRebuild()) { + DEBUG_WITH_THIS_MENUOBJECT("Previously marked as needing a rebuild"); + return; + } + + if (!IsOpening()) { + DEBUG_WITH_THIS_MENUOBJECT("Parent not opening - Marking as needing a rebuild"); + SetNeedsRebuild(); + return; + } + + if (aContainer == mPopupContent) { + PRBool res = RemoveMenuObjectAt(aIndexInContainer); + NS_WARN_IF_FALSE(res, "Failed to remove menuitem. Marking menu invalid"); + if (!res) { + SetNeedsRebuild(); + } + } else { + Build(); + } +} + +void +uGlobalMenu::ObserveContentInserted(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + TRACE_WITH_THIS_MENUOBJECT(); + NS_ASSERTION(aContainer == mContent || aContainer == mPopupContent, + "Received an event that wasn't meant for us!"); + + if (DoesNeedRebuild()) { + DEBUG_WITH_THIS_MENUOBJECT("Previously marked as needing a rebuild"); + return; + } + + if (!IsOpening()) { + DEBUG_WITH_THIS_MENUOBJECT("Parent not opening - Marking as needing a rebuild"); + SetNeedsRebuild(); + return; + } + + if (aContainer == mPopupContent) { + uGlobalMenuObject *newItem = + NewGlobalMenuItem(static_cast(this), + mListener, aChild, mMenuBar); + PRBool res = PR_FALSE; + if (newItem) { + res = InsertMenuObjectAt(newItem, aIndexInContainer); + } + NS_WARN_IF_FALSE(res, "Failed to insert menuitem. Marking menu invalid"); + if (!res) { + SetNeedsRebuild(); + } + } else { + Build(); + } +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuSeparator.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuSeparator.h @@ -0,0 +1,75 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_GLOBALMENUSEPARATOR_H +#define _U_GLOBALMENUSEPARATOR_H + +#include "uGlobalMenuObject.h" +#include "uMenuChangeObserver.h" + +class nsIContent; +class uGlobalMenuDocListener; +class uGlobalMenuBar; + +class uGlobalMenuSeparator: public uGlobalMenuObject, + public uMenuChangeObserver +{ +public: + NS_DECL_UMENUCHANGEOBSERVER + + static uGlobalMenuObject* Create(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar); + + void AboutToShowNotify(); + +private: + uGlobalMenuSeparator(); + + nsresult Init(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar); + ~uGlobalMenuSeparator(); + + nsresult ConstructDbusMenuItem(); +}; + + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuDocListener.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuDocListener.h @@ -0,0 +1,85 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * Thomas K. Dyas + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_GLOBALMENUDOCLISTENER_H +#define _U_GLOBALMENUDOCLISTENER_H + +#include +#include +#include +#include + +#include "uMenuChangeObserver.h" + +#ifdef DEBUG +#define DEBUG_chrisccoulson +#endif + +class nsIContent; +class nsIDocument; + +class uGlobalMenuDocListener: public nsIMutationObserver +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIMUTATIONOBSERVER + + uGlobalMenuDocListener(); + nsresult Init(nsIContent *rootNode); + nsresult RegisterForContentChanges(nsIContent *aContent, + uMenuChangeObserver *aMenuObject); + nsresult UnregisterForContentChanges(nsIContent *aContent, + uMenuChangeObserver *aMenuObject); + nsresult RegisterForAllChanges(uMenuChangeObserver *aMenuObject); + nsresult UnregisterForAllChanges(uMenuChangeObserver *aMenuObject); + void Destroy(); + ~uGlobalMenuDocListener(); + +private: + void GetListeners(nsIContent *aContent, nsTArray& _result); + + nsIDocument *mDocument; + nsClassHashtable, nsTArray > mContentToObserverTable; + nsTArray mGlobalObservers; +#ifdef DEBUG_chrisccoulson + PRUint32 mCount; +#endif +}; + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuBar.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuBar.cpp @@ -0,0 +1,696 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include +#include +#include +#include +#if 1 +# include +#endif +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "uGlobalMenuBar.h" +#include "uGlobalMenu.h" +#include "uGlobalMenuUtils.h" +#include "uIGlobalMenuService.h" +#include "uWidgetAtoms.h" + +#include "uDebug.h" +#include "compat.h" + +#define MODIFIER_SHIFT 1 +#define MODIFIER_CONTROL 2 +#define MODIFIER_ALT 4 +#define MODIFIER_META 8 + +NS_IMPL_ISUPPORTS1(uGlobalMenuBarListener, nsIDOMEventListener) + +NS_IMETHODIMP +uGlobalMenuBarListener::HandleEvent(nsIDOMEvent *aEvent) +{ + nsAutoString type; + nsresult rv = aEvent->GetType(type); + NS_ENSURE_SUCCESS(rv, rv); + + if (type.EqualsLiteral("focus")) { + mMenuBar->Focus(); + } else if (type.EqualsLiteral("blur")) { + mMenuBar->Blur(); + } else if (type.EqualsLiteral("keypress")) { + rv = mMenuBar->KeyPress(aEvent); + } else if (type.EqualsLiteral("keydown")) { + rv = mMenuBar->KeyDown(aEvent); + } else if (type.EqualsLiteral("keyup")) { + rv = mMenuBar->KeyUp(aEvent); + } + + return rv; +} + +GtkWidget* +uGlobalMenuBar::WidgetToGTKWindow(nsIWidget *aWidget) +{ + // Get the main GDK drawing window from our nsIWidget + GdkWindow *window = static_cast(aWidget->GetNativeData(NS_NATIVE_WINDOW)); + if (!window) + return nsnull; + + // Get the widget for the main drawing window, which should be a MozContainer + gpointer user_data = nsnull; + gdk_window_get_user_data(window, &user_data); + if (!user_data || !GTK_IS_CONTAINER(user_data)) + return nsnull; + + return gtk_widget_get_toplevel(GTK_WIDGET(user_data)); +} + +PRBool +uGlobalMenuBar::AppendMenuObject(uGlobalMenuObject *menu) +{ + gboolean res = dbusmenu_menuitem_child_append(mDbusMenuItem, + menu->GetDbusMenuItem()); + return res && mMenuObjects.AppendElement(menu); +} + +PRBool +uGlobalMenuBar::InsertMenuObjectAt(uGlobalMenuObject *menu, + PRUint32 index) +{ + gboolean res = dbusmenu_menuitem_child_add_position(mDbusMenuItem, + menu->GetDbusMenuItem(), + index); + return res && mMenuObjects.InsertElementAt(index, menu); +} + +PRBool +uGlobalMenuBar::RemoveMenuObjectAt(PRUint32 index) +{ + NS_ASSERTION(index < mMenuObjects.Length(), "Invalid index"); + if (index >= mMenuObjects.Length()) { + return PR_FALSE; + } + + gboolean res = dbusmenu_menuitem_child_delete(mDbusMenuItem, + mMenuObjects[index]->GetDbusMenuItem()); + mMenuObjects.RemoveElementAt(index); + + return !!res; +} + +nsresult +uGlobalMenuBar::Build() +{ + PRUint32 count = mContent->GetChildCount(); + + for (PRUint32 i = 0; i < count; i++) { + nsIContent *menuContent = mContent->GetChildAt(i); + uGlobalMenuObject *newItem = + NewGlobalMenuItem(static_cast(this), + mListener, menuContent, this); + PRBool res = PR_FALSE; + if (newItem) { + res = AppendMenuObject(newItem); + } + NS_ASSERTION(res, "Failed to append menuitem. Our menu representation is out-of-sync with reality"); + if (!res) { + // XXX: Is there anything else we should do here? + return NS_ERROR_FAILURE; + } + } + + return NS_OK; +} + +nsresult +uGlobalMenuBar::Init(nsIWidget *aWindow, + nsIContent *aMenuBar) +{ + NS_ENSURE_ARG(aWindow); + NS_ENSURE_ARG(aMenuBar); + + // We create this early so that IsRegistered() works + mCancellable = uGlobalMenuRequestAutoCanceller::Create(); + + mContent = aMenuBar; + + mTopLevel = WidgetToGTKWindow(aWindow); + if (!GTK_IS_WINDOW(mTopLevel)) + return NS_ERROR_FAILURE; + + g_object_ref(mTopLevel); + + mPath = NS_LITERAL_CSTRING("/com/canonical/menu/"); + char xid[10]; + sprintf(xid, "%X", (PRUint32) GDK_WINDOW_XID(gtk_widget_get_window(mTopLevel))); + mPath.Append(xid); + + mServer = dbusmenu_server_new(mPath.get()); + if (!mServer) + return NS_ERROR_OUT_OF_MEMORY; + + mDbusMenuItem = dbusmenu_menuitem_new(); + if (!mDbusMenuItem) + return NS_ERROR_OUT_OF_MEMORY; + + dbusmenu_server_set_root(mServer, mDbusMenuItem); + + mListener = new uGlobalMenuDocListener(); + if (!mListener) + return NS_ERROR_OUT_OF_MEMORY; + + nsresult rv = mListener->Init(mContent); + NS_ENSURE_SUCCESS(rv, rv); + + rv = mListener->RegisterForContentChanges(mContent, this); + NS_ENSURE_SUCCESS(rv, rv); + + rv = Build(); + NS_ENSURE_SUCCESS(rv, rv); + + mEventListener = new uGlobalMenuBarListener(this); + NS_ENSURE_TRUE(mEventListener, NS_ERROR_OUT_OF_MEMORY); + + mDocTarget = do_QueryInterface(mContent->GetCurrentDoc()); + + mDocTarget->AddEventListener(NS_LITERAL_STRING("focus"), + mEventListener, + MOZ_API_TRUE); + mDocTarget->AddEventListener(NS_LITERAL_STRING("blur"), + mEventListener, + MOZ_API_TRUE); + mDocTarget->AddEventListener(NS_LITERAL_STRING("keypress"), + mEventListener, + MOZ_API_FALSE); + mDocTarget->AddEventListener(NS_LITERAL_STRING("keydown"), + mEventListener, + MOZ_API_FALSE); + mDocTarget->AddEventListener(NS_LITERAL_STRING("keyup"), + mEventListener, + MOZ_API_FALSE); + + nsCOMPtr prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); + NS_ENSURE_TRUE(prefs, NS_ERROR_FAILURE); + + prefs->GetIntPref("ui.key.menuAccessKey", &mAccessKey); + if (mAccessKey == nsIDOMKeyEvent::DOM_VK_SHIFT) { + mAccessKeyMask = MODIFIER_SHIFT; + } else if (mAccessKey == nsIDOMKeyEvent::DOM_VK_CONTROL) { + mAccessKeyMask = MODIFIER_CONTROL; + } else if (mAccessKey == nsIDOMKeyEvent::DOM_VK_ALT) { + mAccessKeyMask = MODIFIER_ALT; + } else if (mAccessKey == nsIDOMKeyEvent::DOM_VK_META) { + mAccessKeyMask = MODIFIER_META; + } else { + mAccessKeyMask = MODIFIER_ALT; + } + + rv = mListener->RegisterForAllChanges(this); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr service = + do_GetService("@canonical.com/globalmenu-service;1"); + NS_ENSURE_TRUE(service, NS_ERROR_FAILURE); + + service->RegisterGlobalMenuBar(this, mCancellable); + + return NS_OK; +} + +PRBool +uGlobalMenuBar::ShouldParentStayVisible(nsIContent *aContent) +{ + static nsIAtom *blacklist[] = + { uWidgetAtoms::toolbarspring, nsnull }; + + nsIContent *parent = aContent->GetParent(); + if (!parent) { + return PR_TRUE; + } + + PRUint32 count = parent->GetChildCount(); + + if (count <= 1) { + // It's just us + return PR_FALSE; + } + + for (PRUint32 i = 0 ; i < count ; i++) { + nsIContent *child = parent->GetChildAt(i); + if (child == aContent) { + continue; + } + + PRBool found = PR_FALSE; + for (PRUint32 j = 0 ; blacklist[j] != nsnull ; j++) { + if (child->Tag() == blacklist[j]) { + found = PR_TRUE; + break; + } + } + + if (!found) { + return PR_TRUE; + } + } + + return PR_FALSE; +} + +PRUint32 +uGlobalMenuBar::GetModifiersFromEvent(nsIDOMKeyEvent *aKeyEvent) +{ + PRUint32 modifiers = 0; + MOZ_API_BOOL modifier; + + aKeyEvent->GetAltKey(&modifier); + if (modifier) { + modifiers |= MODIFIER_ALT; + } + + aKeyEvent->GetShiftKey(&modifier); + if (modifier) { + modifiers |= MODIFIER_SHIFT; + } + + aKeyEvent->GetCtrlKey(&modifier); + if (modifier) { + modifiers |= MODIFIER_CONTROL; + } + + aKeyEvent->GetMetaKey(&modifier); + if (modifier) { + modifiers |= MODIFIER_META; + } + + return modifiers; +} + +PRBool +uGlobalMenuBar::IsParentOfMenuBar(nsIContent *aContent) +{ + nsIContent *tmp = mContent->GetParent(); + + while (tmp) { + if (tmp == aContent) { + return PR_TRUE; + } + + tmp = tmp->GetParent(); + } + + return PR_FALSE; +} + +void +uGlobalMenuBar::SetXULMenuBarHidden(PRBool hidden) +{ + mXULMenuHidden = hidden; + + if (hidden) { + if (mHiddenElement) { + mHiddenElement->SetAttr(kNameSpaceID_None, uWidgetAtoms::hidden, + mRestoreHidden ? NS_LITERAL_STRING("true") : + NS_LITERAL_STRING("false"), MOZ_API_TRUE); + } + nsIContent *tmp = mContent; + + // Walk up the DOM tree until we find a node with siblings + while (tmp) { + if (ShouldParentStayVisible(tmp)) { + break; + } + + tmp = tmp->GetParent(); + } + + mHiddenElement = tmp; + mRestoreHidden = mHiddenElement->AttrValueIs(kNameSpaceID_None, + uWidgetAtoms::hidden, + uWidgetAtoms::_true, + eCaseMatters); + + mHiddenElement->SetAttr(kNameSpaceID_None, uWidgetAtoms::hidden, + NS_LITERAL_STRING("true"), MOZ_API_TRUE); + } else if (mHiddenElement) { + mHiddenElement->SetAttr(kNameSpaceID_None, uWidgetAtoms::hidden, + mRestoreHidden ? NS_LITERAL_STRING("true") : + NS_LITERAL_STRING("false"), MOZ_API_TRUE); + mHiddenElement = nsnull; + } +} + +uGlobalMenuBar::uGlobalMenuBar(): + uGlobalMenuObject(MenuBar), mServer(nsnull), mTopLevel(nsnull), + mOpenedByKeyboard(PR_FALSE) +{ + MOZ_COUNT_CTOR(uGlobalMenuBar); +} + +uGlobalMenuBar::~uGlobalMenuBar() +{ + SetXULMenuBarHidden(PR_FALSE); + + if (mDocTarget) { + mDocTarget->RemoveEventListener(NS_LITERAL_STRING("focus"), + mEventListener, + MOZ_API_TRUE); + mDocTarget->RemoveEventListener(NS_LITERAL_STRING("blur"), + mEventListener, + MOZ_API_TRUE); + mDocTarget->RemoveEventListener(NS_LITERAL_STRING("keypress"), + mEventListener, + MOZ_API_FALSE); + mDocTarget->RemoveEventListener(NS_LITERAL_STRING("keydown"), + mEventListener, + MOZ_API_FALSE); + mDocTarget->RemoveEventListener(NS_LITERAL_STRING("keyup"), + mEventListener, + MOZ_API_FALSE); + } + + if (mListener) { + mListener->UnregisterForAllChanges(this); + mListener->UnregisterForContentChanges(mContent, this); + mListener->Destroy(); + } + + if (mTopLevel) + g_object_unref(mTopLevel); + + if (mDbusMenuItem) + g_object_unref(mDbusMenuItem); + + if (mServer) + g_object_unref(mServer); + + MOZ_COUNT_DTOR(uGlobalMenuBar); +} + +/*static*/ uGlobalMenuBar* +uGlobalMenuBar::Create(nsIWidget *aWindow, + nsIContent *aMenuBar) +{ + uGlobalMenuBar *menubar = new uGlobalMenuBar(); + if (!menubar) { + return nsnull; + } + + if (NS_FAILED(menubar->Init(aWindow, aMenuBar))) { + delete menubar; + return nsnull; + } + + return menubar; +} + +void +uGlobalMenuBar::Blur() +{ + dbusmenu_server_set_status(mServer, DBUSMENU_STATUS_NORMAL); +} + +void +uGlobalMenuBar::Focus() +{ + mOpenedByKeyboard = PR_FALSE; +} + +PRBool +uGlobalMenuBar::ShouldHandleKeyEvent(nsIDOMEvent *aKeyEvent) +{ +#if 0 +# define nsEvent aKeyEvent +#else + nsCOMPtr nsEvent = do_QueryInterface(aKeyEvent); + if (!nsEvent) { + return PR_FALSE; + } +#endif + + MOZ_API_BOOL handled, trusted; + nsEvent->GetPreventDefault(&handled); + nsEvent->GetIsTrusted(&trusted); + +#if 0 +# undef nsEvent +#endif + + if (handled || !trusted) { + return PR_FALSE; + } + + return PR_TRUE; +} + +nsresult +uGlobalMenuBar::KeyDown(nsIDOMEvent *aKeyEvent) +{ + if (!ShouldHandleKeyEvent(aKeyEvent)) { + return NS_OK; + } + + nsCOMPtr keyEvent = do_QueryInterface(aKeyEvent); + if (keyEvent) { + PRUint32 keyCode; + keyEvent->GetKeyCode(&keyCode); + PRUint32 modifiers = GetModifiersFromEvent(keyEvent); + if ((keyCode == static_cast(mAccessKey)) && + ((modifiers & ~mAccessKeyMask) == 0)) { + dbusmenu_server_set_status(mServer, DBUSMENU_STATUS_NOTICE); + } + } + + return NS_OK; +} + +nsresult +uGlobalMenuBar::KeyUp(nsIDOMEvent *aKeyEvent) +{ + if (!ShouldHandleKeyEvent(aKeyEvent)) { + return NS_OK; + } + + nsCOMPtr keyEvent = do_QueryInterface(aKeyEvent); + if (keyEvent) { + PRUint32 keyCode; + keyEvent->GetKeyCode(&keyCode); + if (keyCode == static_cast(mAccessKey)) { + dbusmenu_server_set_status(mServer, DBUSMENU_STATUS_NORMAL); + } + } + + return NS_OK; +} + +nsresult +uGlobalMenuBar::KeyPress(nsIDOMEvent *aKeyEvent) +{ + if (!ShouldHandleKeyEvent(aKeyEvent)) { + return NS_OK; + } + + nsCOMPtr keyEvent = do_QueryInterface(aKeyEvent); + uGlobalMenuObject *found = nsnull; + PRUint32 keyCode = nsnull; + + if (keyEvent) { + keyEvent->GetKeyCode(&keyCode); + PRUint32 count = mMenuObjects.Length(); + PRUint32 modifiers = GetModifiersFromEvent(keyEvent); + if ((modifiers & mAccessKeyMask) && ((modifiers & ~mAccessKeyMask) == 0)) { + // The menu access modifier is pressed + PRUint32 charCode; + keyEvent->GetCharCode(&charCode); + if (charCode != 0) { + PRUnichar ch = PRUnichar(charCode); + PRUnichar chl; + PRUnichar chu; + // XXX: I think we need to link against libxul.so to get ToLowerCase + // and ToUpperCase from nsUnicharUtils.h + nsCOMPtr converter = + do_GetService(NS_UNICHARUTIL_CONTRACTID); + if (converter) { + converter->ToUpper(ch, &chu); + converter->ToLower(ch, &chl); + } else { + if (ch < 256) { + chu = toupper(char(ch)); + chl = tolower(char(ch)); + } else { + chu = ch; + chl = ch; + } + } + + for (PRUint32 i = 0; i < count; i++) { + nsCOMPtr content; + mMenuObjects[i]->GetContent(getter_AddRefs(content)); + if (content) { + nsAutoString accessKey; + content->GetAttr(kNameSpaceID_None, uWidgetAtoms::accesskey, + accessKey); + const PRUnichar *key = accessKey.BeginReading(); + if (*key == chl || *key == chu) { + found = mMenuObjects[i]; + break; + } + } + } + } + } else if (keyCode == nsIDOMKeyEvent::DOM_VK_F10) { + // Go through each mMenuObject, and find the first one + // that is both visible and sensitive, and mark it found + // for opening. + for (PRUint32 i = 0; i < count; i++) { + uGlobalMenu *menu = static_cast((uGlobalMenuObject *)mMenuObjects[i]); + if (menu->CanOpen()) { + found = mMenuObjects[i]; + break; + } + } + } + } + + if (found) { + mOpenedByKeyboard = PR_TRUE; + uGlobalMenu *menu = static_cast(found); + menu->OpenMenu(); + aKeyEvent->StopPropagation(); + aKeyEvent->PreventDefault(); + } + + return NS_OK; +} + +void +uGlobalMenuBar::SetMenuBarRegistered(PRBool aRegistered) +{ + if (mCancellable) { + mCancellable->Destroy(); + mCancellable = nsnull; + } + + SetXULMenuBarHidden(aRegistered); +} + +PRUint32 +uGlobalMenuBar::GetWindowID() +{ + return (PRUint32) GDK_WINDOW_XID(gtk_widget_get_window(mTopLevel)); +} + +const char* +uGlobalMenuBar::GetMenuPath() +{ + return mPath.get(); +} + +PRBool +uGlobalMenuBar::WidgetHasSameToplevelWindow(nsIWidget *aWidget) +{ + GtkWidget *topLevel = WidgetToGTKWindow(aWidget); + return GDK_WINDOW_XID(gtk_widget_get_window(mTopLevel)) == GDK_WINDOW_XID(gtk_widget_get_window(topLevel)); +} + +void +uGlobalMenuBar::ObserveAttributeChanged(nsIDocument *aDocument, + nsIContent *aContent, + nsIAtom *aAttribute) +{ + +} + +void +uGlobalMenuBar::ObserveContentRemoved(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + if (IsParentOfMenuBar(aContainer)) { + SetXULMenuBarHidden(mXULMenuHidden); + return; + } + + if (aContainer != mContent) { + return; + } + + PRBool res = RemoveMenuObjectAt(aIndexInContainer); + NS_ASSERTION(res, "Failed to remove menuitem. Our menu representation is out-of-sync with reality"); + // XXX: Is there anything else we can do if removal fails? +} + +void +uGlobalMenuBar::ObserveContentInserted(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + if (IsParentOfMenuBar(aContainer)) { + SetXULMenuBarHidden(mXULMenuHidden); + return; + } + + if (aContainer != mContent) { + return; + } + + uGlobalMenuObject *newItem = + NewGlobalMenuItem(static_cast(this), + mListener, aChild, this); + PRBool res = PR_FALSE; + if (newItem) { + res = InsertMenuObjectAt(newItem, aIndexInContainer); + } + NS_ASSERTION(res, "Failed to insert menuitem. Our menu representation is out-of-sync with reality"); + // XXX: Is there anything else we can do if insertion fails? +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuService.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuService.h @@ -0,0 +1,98 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_GLOBALMENUSERVICE_H +#define _U_GLOBALMENUSERVICE_H + +#include +#include +#include +#include + +#include +#include + +#include "uGlobalMenuBar.h" +#include "uIGlobalMenuService.h" +#include "uGlobalMenuUtils.h" + +#define U_GLOBALMENUSERVICE_CID \ +{ 0xa9e41684, 0xbf71, 0x46e3, { 0x93, 0xbf, 0x3c, 0xda, 0x1e, 0xc6, 0x16, 0x49 } } + +#define U_GLOBALMENUSERVICE_CONTRACTID "@canonical.com/globalmenu-service;1" + +class nsIWidget; + +class uGlobalMenuService: public uIGlobalMenuService, + public nsIWindowMediatorListener +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_UIGLOBALMENUSERVICE + NS_DECL_NSIWINDOWMEDIATORLISTENER + + uGlobalMenuService() : mOnline(PR_FALSE), + mDbusProxy(NULL), + mCancellable(NULL) { }; + nsresult Init(); + + ~uGlobalMenuService(); + +private: + void SetOnline(PRBool aOnline); + static void ProxyCreatedCallback(GObject *object, + GAsyncResult *res, + gpointer userdata); + static void NameOwnerChangedCallback(GObject *object, + GParamSpec *pspec, + gpointer userdata); + static void RegisterWindowCallback(GObject *object, + GAsyncResult *res, + gpointer userdata); + PRBool WidgetHasGlobalMenu(nsIWidget *aWidget); + void DestroyMenus(); + void DestroyMenuForWidget(nsIWidget *aWidget); + + PRPackedBool mOnline; + GDBusProxy *mDbusProxy; + nsAutoPtr mCancellable; + PRUint32 mNOCHandlerID; + nsTArray< nsAutoPtr > mMenus; +}; + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuLoader.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuLoader.cpp @@ -0,0 +1,312 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "uIGlobalMenuService.h" +#include "uGlobalMenuLoader.h" + +#include "uDebug.h" +#include "compat.h" + +// XXX: The sole purpose of this class is to listen for new nsIXULWindows +// and do the task that xpfe/appshell/src/nsWebShellWindow.cpp +// would be doing if this extension were part of Mozilla core. The reason +// it is an entirely separate entity is so that the menubar service +// implementation is as close as possible to how it might look inside Mozilla + +void +uGlobalMenuLoader::RegisterMenuForWindow(nsIXULWindow *aWindow) +{ + nsCOMPtr baseWindow = do_QueryInterface(aWindow); + if (!baseWindow) + return; + + nsCOMPtr mainWidget; + baseWindow->GetMainWidget(getter_AddRefs(mainWidget)); + if (!mainWidget) + return; + + nsCOMPtr docShell; + aWindow->GetDocShell(getter_AddRefs(docShell)); + if (!docShell) + return; + + PRBool res = RegisterMenu(mainWidget, docShell); + + if (!res) { + // If we've been called off a window open event from the window mediator, + // then the document probably hasn't loaded yet. To fix this, we set up a progress + // listener on the docshell, so we can do the actual menu load once the + // document has finished loading + nsCOMPtr progress = do_GetInterface(docShell); + if (progress) { + progress->AddProgressListener(this, nsIWebProgress::NOTIFY_STATE_NETWORK); + } + } +} + +PRBool +uGlobalMenuLoader::RegisterMenu(nsIWidget *aWindow, + nsIDocShell *aDocShell) +{ + nsCOMPtr cv; + aDocShell->GetContentViewer(getter_AddRefs(cv)); + if (!cv) + return PR_FALSE; + + nsIDocument *doc = cv->GetDocument(); + nsCOMPtr domDoc = do_QueryInterface(doc); + if (!domDoc) + return PR_FALSE; + + nsresult rv; + nsCOMPtr elements; + rv = domDoc->GetElementsByTagNameNS(NS_LITERAL_STRING("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"), + NS_LITERAL_STRING("menubar"), + getter_AddRefs(elements)); + if (NS_FAILED(rv) || !elements) + return PR_TRUE; + + nsCOMPtr menubar; + elements->Item(0, getter_AddRefs(menubar)); + if (!menubar) + return PR_TRUE; + + nsCOMPtr menubarContent = do_QueryInterface(menubar); + // XXX: Should we do anything with errors here? + mService->CreateGlobalMenuBar(aWindow, menubarContent); + + return PR_TRUE; +} + +void +uGlobalMenuLoader::RegisterAllMenus() +{ + nsCOMPtr wm = + do_GetService("@mozilla.org/appshell/window-mediator;1"); + if (!wm) { + return; + } + + nsCOMPtr iter; + wm->GetXULWindowEnumerator(nsnull, getter_AddRefs(iter)); + if (!iter) { + return; + } + + MOZ_API_BOOL hasMore; + iter->HasMoreElements(&hasMore); + + while (hasMore) { + nsCOMPtr elem; + iter->GetNext(getter_AddRefs(elem)); + iter->HasMoreElements(&hasMore); + if (!elem) + continue; + + nsCOMPtr xulWindow = do_QueryInterface(elem); + if (!xulWindow) + continue; + + RegisterMenuForWindow(xulWindow); + } +} + +NS_IMPL_ISUPPORTS3(uGlobalMenuLoader, nsIObserver, nsIWebProgressListener, nsISupportsWeakReference) + +nsresult +uGlobalMenuLoader::Init() +{ + mService = do_GetService("@canonical.com/globalmenu-service;1"); + NS_ENSURE_TRUE(mService, NS_ERROR_OUT_OF_MEMORY); + + mService->RegisterNotification(this); + + nsCOMPtr wm = + do_GetService("@mozilla.org/appshell/window-mediator;1"); + NS_ENSURE_TRUE(wm, NS_ERROR_OUT_OF_MEMORY); + + wm->AddListener(this); + + MOZ_API_BOOL online; + mService->GetOnline(&online); + if (online) { + RegisterAllMenus(); + } + + return NS_OK; +} + +uGlobalMenuLoader::~uGlobalMenuLoader() +{ + mService->UnregisterNotification(this); + + nsCOMPtr wm = + do_GetService("@mozilla.org/appshell/window-mediator;1"); + + if (wm) { + wm->RemoveListener(this); + } +} + +NS_IMETHODIMP +uGlobalMenuLoader::Observe(nsISupports *aSubject, + const char *aTopic, + const PRUnichar *aData) +{ + if (strcmp(aTopic, "native-menu-service:online") == 0) { + RegisterAllMenus(); + } + + return NS_OK; +} + +/* void onWindowTitleChange (in nsIXULWindow window, in wstring newTitle); */ +NS_IMETHODIMP +uGlobalMenuLoader::OnWindowTitleChange(nsIXULWindow *window, + const PRUnichar *newTitle) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +/* void onOpenWindow (in nsIXULWindow window); */ +NS_IMETHODIMP +uGlobalMenuLoader::OnOpenWindow(nsIXULWindow *window) +{ + RegisterMenuForWindow(window); + return NS_OK; +} + +/* void onCloseWindow (in nsIXULWindow window); */ +NS_IMETHODIMP +uGlobalMenuLoader::OnCloseWindow(nsIXULWindow *window) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuLoader::OnStateChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRUint32 aStateFlags, + nsresult aStatus) +{ + // Borrowed from nsWebShellWindow.cpp + + // If the notification is not about a document finishing, then just + // ignore it... + if (!(aStateFlags & nsIWebProgressListener::STATE_STOP) || + !(aStateFlags & nsIWebProgressListener::STATE_IS_NETWORK)) { + return NS_OK; + } + + // If this document notification is for a frame then ignore it... + nsCOMPtr eventWin; + aWebProgress->GetDOMWindow(getter_AddRefs(eventWin)); + nsCOMPtr eventPWin(do_QueryInterface(eventWin)); + if (eventPWin) { + nsPIDOMWindow *rootPWin = eventPWin->GetPrivateRoot(); + if (eventPWin != rootPWin) + return NS_OK; + } + + aWebProgress->RemoveProgressListener(this); + + nsCOMPtr baseWindow = do_GetInterface(aWebProgress); + if (baseWindow) { + nsCOMPtr parentWidget; + baseWindow->GetParentWidget(getter_AddRefs(parentWidget)); + + nsCOMPtr docShell = do_GetInterface(aWebProgress); + if (docShell && parentWidget) { + RegisterMenu(parentWidget, docShell); + } + } + + return NS_OK; +} + +NS_IMETHODIMP +uGlobalMenuLoader::OnProgressChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRInt32 aCurSelfProgress, + PRInt32 aMaxSelfProgress, + PRInt32 aCurTotalProgress, + PRInt32 aMaxTotalProgress) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuLoader::OnLocationChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + nsIURI *aLocation) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuLoader::OnStatusChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + nsresult aStatus, + const PRUnichar *aMessage) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuLoader::OnSecurityChange(nsIWebProgress *aWebProgress, + nsIRequest *aRequest, + PRUint32 aState) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuItem.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuItem.cpp @@ -0,0 +1,843 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "uGlobalMenuItem.h" +#include "uGlobalMenuBar.h" +#include "uGlobalMenu.h" +#include "uWidgetAtoms.h" + +#include "uDebug.h" +#include "compat.h" + +// XXX: Borrowed from content/xbl/src/nsXBLPrototypeHandler.cpp. This doesn't +// seem to be publicly available, and we need a way to map key names +// to key codes (so we can then map them to GDK key codes) + +struct keyCodeData { + const char* str; + size_t strlength; + PRUint32 keycode; +}; + +// All of these must be uppercase, since the function below does +// case-insensitive comparison by converting to uppercase. +// XXX: be sure to check this periodically for new symbol additions! +static struct keyCodeData gKeyCodes[] = { + +#define KEYCODE_ENTRY(str) {#str, sizeof(#str) - 1, nsIDOMKeyEvent::DOM_##str} + + KEYCODE_ENTRY(VK_CANCEL), + KEYCODE_ENTRY(VK_BACK_SPACE), + KEYCODE_ENTRY(VK_TAB), + KEYCODE_ENTRY(VK_CLEAR), + KEYCODE_ENTRY(VK_RETURN), + KEYCODE_ENTRY(VK_ENTER), + KEYCODE_ENTRY(VK_SHIFT), + KEYCODE_ENTRY(VK_CONTROL), + KEYCODE_ENTRY(VK_ALT), + KEYCODE_ENTRY(VK_PAUSE), + KEYCODE_ENTRY(VK_CAPS_LOCK), + KEYCODE_ENTRY(VK_ESCAPE), + KEYCODE_ENTRY(VK_SPACE), + KEYCODE_ENTRY(VK_PAGE_UP), + KEYCODE_ENTRY(VK_PAGE_DOWN), + KEYCODE_ENTRY(VK_END), + KEYCODE_ENTRY(VK_HOME), + KEYCODE_ENTRY(VK_LEFT), + KEYCODE_ENTRY(VK_UP), + KEYCODE_ENTRY(VK_RIGHT), + KEYCODE_ENTRY(VK_DOWN), + KEYCODE_ENTRY(VK_PRINTSCREEN), + KEYCODE_ENTRY(VK_INSERT), + KEYCODE_ENTRY(VK_HELP), + KEYCODE_ENTRY(VK_DELETE), + KEYCODE_ENTRY(VK_0), + KEYCODE_ENTRY(VK_1), + KEYCODE_ENTRY(VK_2), + KEYCODE_ENTRY(VK_3), + KEYCODE_ENTRY(VK_4), + KEYCODE_ENTRY(VK_5), + KEYCODE_ENTRY(VK_6), + KEYCODE_ENTRY(VK_7), + KEYCODE_ENTRY(VK_8), + KEYCODE_ENTRY(VK_9), + KEYCODE_ENTRY(VK_SEMICOLON), + KEYCODE_ENTRY(VK_EQUALS), + KEYCODE_ENTRY(VK_A), + KEYCODE_ENTRY(VK_B), + KEYCODE_ENTRY(VK_C), + KEYCODE_ENTRY(VK_D), + KEYCODE_ENTRY(VK_E), + KEYCODE_ENTRY(VK_F), + KEYCODE_ENTRY(VK_G), + KEYCODE_ENTRY(VK_H), + KEYCODE_ENTRY(VK_I), + KEYCODE_ENTRY(VK_J), + KEYCODE_ENTRY(VK_K), + KEYCODE_ENTRY(VK_L), + KEYCODE_ENTRY(VK_M), + KEYCODE_ENTRY(VK_N), + KEYCODE_ENTRY(VK_O), + KEYCODE_ENTRY(VK_P), + KEYCODE_ENTRY(VK_Q), + KEYCODE_ENTRY(VK_R), + KEYCODE_ENTRY(VK_S), + KEYCODE_ENTRY(VK_T), + KEYCODE_ENTRY(VK_U), + KEYCODE_ENTRY(VK_V), + KEYCODE_ENTRY(VK_W), + KEYCODE_ENTRY(VK_X), + KEYCODE_ENTRY(VK_Y), + KEYCODE_ENTRY(VK_Z), + KEYCODE_ENTRY(VK_NUMPAD0), + KEYCODE_ENTRY(VK_NUMPAD1), + KEYCODE_ENTRY(VK_NUMPAD2), + KEYCODE_ENTRY(VK_NUMPAD3), + KEYCODE_ENTRY(VK_NUMPAD4), + KEYCODE_ENTRY(VK_NUMPAD5), + KEYCODE_ENTRY(VK_NUMPAD6), + KEYCODE_ENTRY(VK_NUMPAD7), + KEYCODE_ENTRY(VK_NUMPAD8), + KEYCODE_ENTRY(VK_NUMPAD9), + KEYCODE_ENTRY(VK_MULTIPLY), + KEYCODE_ENTRY(VK_ADD), + KEYCODE_ENTRY(VK_SEPARATOR), + KEYCODE_ENTRY(VK_SUBTRACT), + KEYCODE_ENTRY(VK_DECIMAL), + KEYCODE_ENTRY(VK_DIVIDE), + KEYCODE_ENTRY(VK_F1), + KEYCODE_ENTRY(VK_F2), + KEYCODE_ENTRY(VK_F3), + KEYCODE_ENTRY(VK_F4), + KEYCODE_ENTRY(VK_F5), + KEYCODE_ENTRY(VK_F6), + KEYCODE_ENTRY(VK_F7), + KEYCODE_ENTRY(VK_F8), + KEYCODE_ENTRY(VK_F9), + KEYCODE_ENTRY(VK_F10), + KEYCODE_ENTRY(VK_F11), + KEYCODE_ENTRY(VK_F12), + KEYCODE_ENTRY(VK_F13), + KEYCODE_ENTRY(VK_F14), + KEYCODE_ENTRY(VK_F15), + KEYCODE_ENTRY(VK_F16), + KEYCODE_ENTRY(VK_F17), + KEYCODE_ENTRY(VK_F18), + KEYCODE_ENTRY(VK_F19), + KEYCODE_ENTRY(VK_F20), + KEYCODE_ENTRY(VK_F21), + KEYCODE_ENTRY(VK_F22), + KEYCODE_ENTRY(VK_F23), + KEYCODE_ENTRY(VK_F24), + KEYCODE_ENTRY(VK_NUM_LOCK), + KEYCODE_ENTRY(VK_SCROLL_LOCK), + KEYCODE_ENTRY(VK_COMMA), + KEYCODE_ENTRY(VK_PERIOD), + KEYCODE_ENTRY(VK_SLASH), + KEYCODE_ENTRY(VK_BACK_QUOTE), + KEYCODE_ENTRY(VK_OPEN_BRACKET), + KEYCODE_ENTRY(VK_BACK_SLASH), + KEYCODE_ENTRY(VK_CLOSE_BRACKET), + KEYCODE_ENTRY(VK_QUOTE) + +#undef KEYCODE_ENTRY +}; + +PRUint32 +uGlobalMenuItem::GetKeyCode(nsAString &aKeyName) +{ + nsCAutoString keyName; + CopyUTF16toUTF8(aKeyName, keyName); + ToUpperCase(keyName); // We want case-insensitive comparison with data + // stored as uppercase. + + PRUint32 keyNameLength = keyName.Length(); + const char* keyNameStr = keyName.get(); + for (PRUint16 i = 0; i < (sizeof(gKeyCodes) / sizeof(gKeyCodes[0])); ++i) + if (keyNameLength == gKeyCodes[i].strlength && + !strcmp(gKeyCodes[i].str, keyNameStr)) + return gKeyCodes[i].keycode; + + return 0; +} + +// XXX: Borrowed from widget/src/gtk2/nsGtkKeyUtils.cpp +struct nsKeyConverter { + int vkCode; // Platform independent key code + int keysym; // GDK keysym key code +}; + +// +// Netscape keycodes are defined in widget/public/nsGUIEvent.h +// GTK keycodes are defined in +// +static struct nsKeyConverter nsKeycodes[] = { + { nsIDOMKeyEvent::DOM_VK_CANCEL, GDK_Cancel }, + { nsIDOMKeyEvent::DOM_VK_BACK_SPACE, GDK_BackSpace }, + { nsIDOMKeyEvent::DOM_VK_TAB, GDK_Tab }, + { nsIDOMKeyEvent::DOM_VK_TAB, GDK_ISO_Left_Tab }, + { nsIDOMKeyEvent::DOM_VK_CLEAR, GDK_Clear }, + { nsIDOMKeyEvent::DOM_VK_RETURN, GDK_Return }, + { nsIDOMKeyEvent::DOM_VK_SHIFT, GDK_Shift_L }, + { nsIDOMKeyEvent::DOM_VK_SHIFT, GDK_Shift_R }, + { nsIDOMKeyEvent::DOM_VK_CONTROL, GDK_Control_L }, + { nsIDOMKeyEvent::DOM_VK_CONTROL, GDK_Control_R }, + { nsIDOMKeyEvent::DOM_VK_ALT, GDK_Alt_L }, + { nsIDOMKeyEvent::DOM_VK_ALT, GDK_Alt_R }, + { nsIDOMKeyEvent::DOM_VK_META, GDK_Meta_L }, + { nsIDOMKeyEvent::DOM_VK_META, GDK_Meta_R }, + { nsIDOMKeyEvent::DOM_VK_PAUSE, GDK_Pause }, + { nsIDOMKeyEvent::DOM_VK_CAPS_LOCK, GDK_Caps_Lock }, + { nsIDOMKeyEvent::DOM_VK_KANA, GDK_Kana_Lock }, + { nsIDOMKeyEvent::DOM_VK_KANA, GDK_Kana_Shift }, + { nsIDOMKeyEvent::DOM_VK_HANGUL, GDK_Hangul }, + // { nsIDOMKeyEvent::DOM_VK_JUNJA, GDK_XXX }, + // { nsIDOMKeyEvent::DOM_VK_FINAL, GDK_XXX }, + { nsIDOMKeyEvent::DOM_VK_HANJA, GDK_Hangul_Hanja }, + { nsIDOMKeyEvent::DOM_VK_KANJI, GDK_Kanji }, + { nsIDOMKeyEvent::DOM_VK_ESCAPE, GDK_Escape }, + { nsIDOMKeyEvent::DOM_VK_CONVERT, GDK_Henkan }, + { nsIDOMKeyEvent::DOM_VK_NONCONVERT, GDK_Muhenkan }, + // { nsIDOMKeyEvent::DOM_VK_ACCEPT, GDK_XXX }, + { nsIDOMKeyEvent::DOM_VK_MODECHANGE, GDK_Mode_switch }, + { nsIDOMKeyEvent::DOM_VK_SPACE, GDK_space }, + { nsIDOMKeyEvent::DOM_VK_PAGE_UP, GDK_Page_Up }, + { nsIDOMKeyEvent::DOM_VK_PAGE_DOWN, GDK_Page_Down }, + { nsIDOMKeyEvent::DOM_VK_END, GDK_End }, + { nsIDOMKeyEvent::DOM_VK_HOME, GDK_Home }, + { nsIDOMKeyEvent::DOM_VK_LEFT, GDK_Left }, + { nsIDOMKeyEvent::DOM_VK_UP, GDK_Up }, + { nsIDOMKeyEvent::DOM_VK_RIGHT, GDK_Right }, + { nsIDOMKeyEvent::DOM_VK_DOWN, GDK_Down }, + { nsIDOMKeyEvent::DOM_VK_SELECT, GDK_Select }, + { nsIDOMKeyEvent::DOM_VK_PRINT, GDK_Print }, + { nsIDOMKeyEvent::DOM_VK_EXECUTE, GDK_Execute }, + { nsIDOMKeyEvent::DOM_VK_PRINTSCREEN, GDK_Print }, + { nsIDOMKeyEvent::DOM_VK_INSERT, GDK_Insert }, + { nsIDOMKeyEvent::DOM_VK_DELETE, GDK_Delete }, + { nsIDOMKeyEvent::DOM_VK_HELP, GDK_Help }, + + // keypad keys + { nsIDOMKeyEvent::DOM_VK_LEFT, GDK_KP_Left }, + { nsIDOMKeyEvent::DOM_VK_RIGHT, GDK_KP_Right }, + { nsIDOMKeyEvent::DOM_VK_UP, GDK_KP_Up }, + { nsIDOMKeyEvent::DOM_VK_DOWN, GDK_KP_Down }, + { nsIDOMKeyEvent::DOM_VK_PAGE_UP, GDK_KP_Page_Up }, + // Not sure what these are + //{ nsIDOMKeyEvent::DOM_VK_, GDK_KP_Prior }, + //{ nsIDOMKeyEvent::DOM_VK_, GDK_KP_Next }, + // GDK_KP_Begin is the 5 on the non-numlock keypad + //{ nsIDOMKeyEvent::DOM_VK_, GDK_KP_Begin }, + { nsIDOMKeyEvent::DOM_VK_PAGE_DOWN, GDK_KP_Page_Down }, + { nsIDOMKeyEvent::DOM_VK_HOME, GDK_KP_Home }, + { nsIDOMKeyEvent::DOM_VK_END, GDK_KP_End }, + { nsIDOMKeyEvent::DOM_VK_INSERT, GDK_KP_Insert }, + { nsIDOMKeyEvent::DOM_VK_DELETE, GDK_KP_Delete }, + + { nsIDOMKeyEvent::DOM_VK_MULTIPLY, GDK_KP_Multiply }, + { nsIDOMKeyEvent::DOM_VK_ADD, GDK_KP_Add }, + { nsIDOMKeyEvent::DOM_VK_SEPARATOR, GDK_KP_Separator }, + { nsIDOMKeyEvent::DOM_VK_SUBTRACT, GDK_KP_Subtract }, + { nsIDOMKeyEvent::DOM_VK_DECIMAL, GDK_KP_Decimal }, + { nsIDOMKeyEvent::DOM_VK_DIVIDE, GDK_KP_Divide }, + { nsIDOMKeyEvent::DOM_VK_RETURN, GDK_KP_Enter }, + { nsIDOMKeyEvent::DOM_VK_NUM_LOCK, GDK_Num_Lock }, + { nsIDOMKeyEvent::DOM_VK_SCROLL_LOCK,GDK_Scroll_Lock }, + + { nsIDOMKeyEvent::DOM_VK_COMMA, GDK_comma }, + { nsIDOMKeyEvent::DOM_VK_PERIOD, GDK_period }, + { nsIDOMKeyEvent::DOM_VK_SLASH, GDK_slash }, + { nsIDOMKeyEvent::DOM_VK_BACK_SLASH, GDK_backslash }, + { nsIDOMKeyEvent::DOM_VK_BACK_QUOTE, GDK_grave }, + { nsIDOMKeyEvent::DOM_VK_OPEN_BRACKET, GDK_bracketleft }, + { nsIDOMKeyEvent::DOM_VK_CLOSE_BRACKET, GDK_bracketright }, + { nsIDOMKeyEvent::DOM_VK_SEMICOLON, GDK_colon }, + { nsIDOMKeyEvent::DOM_VK_QUOTE, GDK_apostrophe }, + + // context menu key, keysym 0xff67, typically keycode 117 on 105-key (Microsoft) + // x86 keyboards, located between right 'Windows' key and right Ctrl key + { nsIDOMKeyEvent::DOM_VK_CONTEXT_MENU, GDK_Menu }, + { nsIDOMKeyEvent::DOM_VK_SLEEP, GDK_Sleep }, + + // NS doesn't have dash or equals distinct from the numeric keypad ones, + // so we'll use those for now. See bug 17008: + { nsIDOMKeyEvent::DOM_VK_SUBTRACT, GDK_minus }, + { nsIDOMKeyEvent::DOM_VK_EQUALS, GDK_equal }, + + // Some shifted keys, see bug 15463 as well as 17008. + // These should be subject to different keyboard mappings. + { nsIDOMKeyEvent::DOM_VK_QUOTE, GDK_quotedbl }, + { nsIDOMKeyEvent::DOM_VK_OPEN_BRACKET, GDK_braceleft }, + { nsIDOMKeyEvent::DOM_VK_CLOSE_BRACKET, GDK_braceright }, + { nsIDOMKeyEvent::DOM_VK_BACK_SLASH, GDK_bar }, + { nsIDOMKeyEvent::DOM_VK_SEMICOLON, GDK_semicolon }, + { nsIDOMKeyEvent::DOM_VK_BACK_QUOTE, GDK_asciitilde }, + { nsIDOMKeyEvent::DOM_VK_COMMA, GDK_less }, + { nsIDOMKeyEvent::DOM_VK_PERIOD, GDK_greater }, + { nsIDOMKeyEvent::DOM_VK_SLASH, GDK_question }, + { nsIDOMKeyEvent::DOM_VK_1, GDK_exclam }, + { nsIDOMKeyEvent::DOM_VK_2, GDK_at }, + { nsIDOMKeyEvent::DOM_VK_3, GDK_numbersign }, + { nsIDOMKeyEvent::DOM_VK_4, GDK_dollar }, + { nsIDOMKeyEvent::DOM_VK_5, GDK_percent }, + { nsIDOMKeyEvent::DOM_VK_6, GDK_asciicircum }, + { nsIDOMKeyEvent::DOM_VK_7, GDK_ampersand }, + { nsIDOMKeyEvent::DOM_VK_8, GDK_asterisk }, + { nsIDOMKeyEvent::DOM_VK_9, GDK_parenleft }, + { nsIDOMKeyEvent::DOM_VK_0, GDK_parenright }, + { nsIDOMKeyEvent::DOM_VK_SUBTRACT, GDK_underscore }, + { nsIDOMKeyEvent::DOM_VK_EQUALS, GDK_plus } +}; + +PRUint32 +uGlobalMenuItem::MozKeyCodeToGdkKeyCode(PRUint32 aMozKeyCode) +{ + if (aMozKeyCode >= nsIDOMKeyEvent::DOM_VK_A && + aMozKeyCode <= nsIDOMKeyEvent::DOM_VK_Z) + return aMozKeyCode; + + if (aMozKeyCode >= nsIDOMKeyEvent::DOM_VK_0 && + aMozKeyCode <= nsIDOMKeyEvent::DOM_VK_9) + return aMozKeyCode; + + if (aMozKeyCode >= nsIDOMKeyEvent::DOM_VK_NUMPAD0 && + aMozKeyCode <= nsIDOMKeyEvent::DOM_VK_NUMPAD9) + return aMozKeyCode - nsIDOMKeyEvent::DOM_VK_NUMPAD0 + GDK_0; + + if (aMozKeyCode >= nsIDOMKeyEvent::DOM_VK_F1 && + aMozKeyCode <= nsIDOMKeyEvent::DOM_VK_F24) + return aMozKeyCode - nsIDOMKeyEvent::DOM_VK_F1 + GDK_KEY_F1; + + for (PRUint32 i = 0; i < NS_ARRAY_LENGTH(nsKeycodes); i++) { + if (nsKeycodes[i].vkCode == aMozKeyCode) + return nsKeycodes[i].keysym; + } + + return GDK_VoidSymbol; +} + +void +uGlobalMenuItem::SyncAccelFromContent() +{ + if (!mKeyContent) { + dbusmenu_menuitem_property_remove(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_SHORTCUT); + return; + } + + nsAutoString modStr; + mKeyContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::modifiers, modStr); + + PRUint32 modifier = 0; + + if (!modStr.IsEmpty()) { + char* str = ToNewUTF8String(modStr); + char *token = strtok(str, ", \t"); + while(token) { + if (strcmp(token, "shift") == 0) { + modifier |= GDK_SHIFT_MASK; + } else if (strcmp(token, "alt") == 0) { + modifier |= GDK_MOD1_MASK; + } else if (strcmp(token, "meta") == 0) { + modifier |= GDK_META_MASK; + } else if (strcmp(token, "control") == 0) { + modifier |= GDK_CONTROL_MASK; + } else if (strcmp(token, "accel") == 0) { + nsCOMPtr prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); + if (prefs) { + PRInt32 accel; + prefs->GetIntPref("ui.key.accelKey", &accel); + if (accel == nsIDOMKeyEvent::DOM_VK_META) { + modifier |= GDK_META_MASK; + } else if (accel == nsIDOMKeyEvent::DOM_VK_ALT) { + modifier |= GDK_MOD1_MASK; + } else { + modifier |= GDK_CONTROL_MASK; + } + } else { + // This is the default, see layout/xul/base/src/nsMenuFrame.cpp + modifier |= GDK_CONTROL_MASK; + } + } + + token = strtok(nsnull, ", \t"); + } + + nsMemory::Free(str); + } + + nsAutoString keyStr; + guint key = 0; + mKeyContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::key, keyStr); + + nsCAutoString cKeyStr; + CopyUTF16toUTF8(keyStr, cKeyStr); + + if (!cKeyStr.IsEmpty()) { + key = gdk_keyval_from_name(cKeyStr.get()); + } + + if (key == 0 && !keyStr.IsEmpty()) { + key = gdk_unicode_to_keyval(*keyStr.BeginReading()); + } + + if (key == 0) { + mKeyContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::keycode, keyStr); + if (!keyStr.IsEmpty()) + key = MozKeyCodeToGdkKeyCode(GetKeyCode(keyStr)); + } + + if (key == 0) { + key = GDK_VoidSymbol; + } + + if (key != GDK_VoidSymbol) { + dbusmenu_menuitem_property_set_shortcut(mDbusMenuItem, key, + static_cast(modifier)); + } else { + dbusmenu_menuitem_property_remove(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_SHORTCUT); + } +} + +void +uGlobalMenuItem::SyncTypeAndStateFromContent() +{ + static nsIContent::AttrValuesArray attrs[] = + { &uWidgetAtoms::checkbox, &uWidgetAtoms::radio, nsnull }; + PRInt32 type = mContent->FindAttrValueIn(kNameSpaceID_None, + uWidgetAtoms::type, + attrs, eCaseMatters); + + if (type >= 0 && type < 2) { + if (type == 0) { + dbusmenu_menuitem_property_set(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE, + DBUSMENU_MENUITEM_TOGGLE_CHECK); + mType = CheckBox; + } else if (type == 1) { + dbusmenu_menuitem_property_set(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE, + DBUSMENU_MENUITEM_TOGGLE_RADIO); + mType = Radio; + } + + nsIContent *content = mCommandContent ? mCommandContent : mContent; + mToggleState = content->AttrValueIs(kNameSpaceID_None, + uWidgetAtoms::checked, + uWidgetAtoms::_true, + eCaseMatters); + dbusmenu_menuitem_property_set_int(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_TOGGLE_STATE, + mToggleState ? + DBUSMENU_MENUITEM_TOGGLE_STATE_CHECKED : + DBUSMENU_MENUITEM_TOGGLE_STATE_UNCHECKED); + + if (mCommandContent) { + UGM_BLOCK_EVENTS_FOR_CURRENT_SCOPE(); + if (mToggleState) { + mContent->SetAttr(kNameSpaceID_None, uWidgetAtoms::checked, + NS_LITERAL_STRING("true"), MOZ_API_TRUE); + } else { + mContent->UnsetAttr(kNameSpaceID_None, uWidgetAtoms::checked, + MOZ_API_TRUE); + } + } + + mIsToggle = PR_TRUE; + } else { + dbusmenu_menuitem_property_remove(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE); + dbusmenu_menuitem_property_remove(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_TOGGLE_STATE); + mIsToggle = PR_FALSE; + mType = Normal; + } +} + +void +uGlobalMenuItem::SyncProperties() +{ + TRACE_WITH_THIS_MENUOBJECT(); + + if (mCommandContent) { + mListener->UnregisterForContentChanges(mCommandContent, this); + mCommandContent = nsnull; + } + if (mKeyContent) { + mListener->UnregisterForContentChanges(mKeyContent, this); + mKeyContent = nsnull; + } + + nsIDocument *doc = mContent->GetCurrentDoc(); + nsAutoString value; + mContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::command, value); + if (!value.IsEmpty()) { + mCommandContent = doc->GetElementById(value); + if (mCommandContent) { + mListener->RegisterForContentChanges(mCommandContent, this); + } + } + mContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::key, value); + if (!value.IsEmpty()) { + mKeyContent = doc->GetElementById(value); + if (mKeyContent) { + mListener->RegisterForContentChanges(mKeyContent, this); + } + } + + // We need to do this first, as some of the next functions may + // trigger mutation events, which we want to handle if we our parent + // is opening + ClearInvalid(); + + UpdateInfoFromContentClass(); + SyncLabelFromContent(mCommandContent); + SyncSensitivityFromContent(mCommandContent); + SyncVisibilityFromContent(); + SyncTypeAndStateFromContent(); + SyncAccelFromContent(); + SyncIconFromContent(); +} + +/*static*/ void +uGlobalMenuItem::ItemActivatedCallback(DbusmenuMenuitem *menuItem, + PRUint32 timeStamp, + void *data) +{ + uGlobalMenuItem *self = static_cast(data); + self->Activate(); +} + +void +uGlobalMenuItem::Activate() +{ + // This first bit seems backwards, but it's not really. If autocheck is + // not set or autocheck==true, then the checkbox state is usually updated + // by the input event that clicked on the menu item. In this case, we need + // to manually update the checkbox state. If autocheck==false, then the input + // event doesn't toggle the checkbox state, and it is up to the handler on + // this node to do it instead. In this case, we leave it alone + + // XXX: it is important to update the checkbox state before dispatching + // the event, as the handler might check the new state + if (!mContent->AttrValueIs(kNameSpaceID_None, uWidgetAtoms::autocheck, + uWidgetAtoms::_false, eCaseMatters) && + mType != Normal) { + nsIContent *content = mCommandContent ? mCommandContent : mContent; + if (!mToggleState) { + // We're currently not checked, so check now + content->SetAttr(kNameSpaceID_None, uWidgetAtoms::checked, + NS_LITERAL_STRING("true"), MOZ_API_TRUE); + } else if (mToggleState && mType == CheckBox) { + // We're currently checked, so uncheck now. Don't do this for radio buttons + content->UnsetAttr(kNameSpaceID_None, uWidgetAtoms::checked, MOZ_API_TRUE); + } + } + +#if MOZILLA_BRANCH_MAJOR_VERSION >= 10 + nsCOMPtr domDoc = do_QueryInterface(mContent->OwnerDoc()); +#else + nsCOMPtr domDoc = do_QueryInterface(mContent->GetOwnerDoc()); +#endif + if (domDoc) { + nsCOMPtr event; + domDoc->CreateEvent(NS_LITERAL_STRING("xulcommandevent"), + getter_AddRefs(event)); + if (event) { + nsCOMPtr cmdEvent = do_QueryInterface(event); + if (cmdEvent) { + nsCOMPtr window; + domDoc->GetDefaultView(getter_AddRefs(window)); + if (window) { + cmdEvent->InitCommandEvent(NS_LITERAL_STRING("command"), + MOZ_API_TRUE, MOZ_API_TRUE, window, 0, + MOZ_API_FALSE, MOZ_API_FALSE, MOZ_API_FALSE, + MOZ_API_FALSE, nsnull); + nsCOMPtr target = do_QueryInterface(mContent); + if (target) { + nsCOMPtr priv = do_QueryInterface(event); + if (priv) { + priv->SetTrusted(MOZ_API_TRUE); + } + MOZ_API_BOOL dummy; + target->DispatchEvent(event, &dummy); + } + } + } + } + } +} + +nsresult +uGlobalMenuItem::ConstructDbusMenuItem() +{ + mDbusMenuItem = dbusmenu_menuitem_new(); + if (!mDbusMenuItem) + return NS_ERROR_OUT_OF_MEMORY; + + mHandlerID = g_signal_connect(G_OBJECT(mDbusMenuItem), + DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, + G_CALLBACK(ItemActivatedCallback), + this); + + SyncProperties(); + + return NS_OK; +} + +nsresult +uGlobalMenuItem::Init(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar) +{ + NS_ENSURE_ARG(aParent); + NS_ENSURE_ARG(aListener); + NS_ENSURE_ARG(aContent); + NS_ENSURE_ARG(aMenuBar); + + mParent = aParent; + mListener = aListener; + mContent = aContent; + mMenuBar = aMenuBar; + + nsresult rv; + rv = mListener->RegisterForContentChanges(mContent, this); + NS_ENSURE_SUCCESS(rv, rv); + + return ConstructDbusMenuItem(); +} + +void +uGlobalMenuItem::UncheckSiblings() +{ + if (mType != Radio) { + // If we're not a radio button, we don't care + return; + } + + nsAutoString name; + mContent->GetAttr(kNameSpaceID_None, uWidgetAtoms::name, name); + if (name.IsEmpty()) { + // If we don't have a name, then we can't find our siblings + return; + } + + nsIContent *parent = mContent->GetParent(); + if (!parent) { + return; + } + + PRUint32 count = parent->GetChildCount(); + for (PRUint32 i = 0; i < count; i++) { + nsIContent *sibling = parent->GetChildAt(i); + if (sibling->AttrValueIs(kNameSpaceID_None, uWidgetAtoms::name, + name, eCaseMatters) && sibling != mContent && + sibling->AttrValueIs(kNameSpaceID_None, uWidgetAtoms::type, + uWidgetAtoms::radio, eCaseMatters)) { + sibling->UnsetAttr(kNameSpaceID_None, uWidgetAtoms::checked, MOZ_API_TRUE); + } + } +} + +uGlobalMenuItem::uGlobalMenuItem(): + uGlobalMenuObject(MenuItem) +{ + MOZ_COUNT_CTOR(uGlobalMenuItem); +} + +uGlobalMenuItem::~uGlobalMenuItem() +{ + if (mListener) { + mListener->UnregisterForContentChanges(mContent, this); + if (mCommandContent) { + mListener->UnregisterForContentChanges(mCommandContent, this); + } + if (mKeyContent) { + mListener->UnregisterForContentChanges(mKeyContent, this); + } + } + + DestroyIconLoader(); + + if (mDbusMenuItem) { + g_signal_handler_disconnect(mDbusMenuItem, mHandlerID); + g_object_unref(mDbusMenuItem); + } + + MOZ_COUNT_DTOR(uGlobalMenuItem); +} + +/*static*/ uGlobalMenuObject* +uGlobalMenuItem::Create(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar) +{ + TRACE_WITH_CONTENT(aContent); + + uGlobalMenuItem *menuitem = new uGlobalMenuItem(); + if (!menuitem) { + return nsnull; + } + + if (NS_FAILED(menuitem->Init(aParent, aListener, aContent, aMenuBar))) { + delete menuitem; + return nsnull; + } + + return static_cast(menuitem); +} + +void +uGlobalMenuItem::AboutToShowNotify() +{ + TRACE_WITH_THIS_MENUOBJECT(); + + if (IsDirty()) { + SyncProperties(); + } else { + UpdateVisibility(); + } +} + +void +uGlobalMenuItem::ObserveAttributeChanged(nsIDocument *aDocument, + nsIContent *aContent, + nsIAtom *aAttribute) +{ + TRACE_WITH_THIS_MENUOBJECT(); + UGM_ENSURE_EVENTS_UNBLOCKED(); + NS_ASSERTION(aContent == mContent || aContent == mCommandContent || + aContent == mKeyContent, + "Received an event that wasn't meant for us!"); + + if ((aContent == mContent || aContent == mCommandContent) && + aAttribute == uWidgetAtoms::checked && + aContent->AttrValueIs(kNameSpaceID_None, uWidgetAtoms::checked, + uWidgetAtoms::_true, eCaseMatters)) { + UncheckSiblings(); + } + + if (IsDirty()) { + DEBUG_WITH_THIS_MENUOBJECT("Previously marked as invalid"); + return; + } + + if (mParent->GetType() == Menu && + !(static_cast(mParent))->IsOpening()) { + DEBUG_WITH_THIS_MENUOBJECT("Parent isn't opening. Marking invalid"); + Invalidate(); + return; + } + + if (aContent == mContent) { + if (aAttribute == uWidgetAtoms::command || + aAttribute == uWidgetAtoms::key) { + SyncProperties(); + } else if (aAttribute == uWidgetAtoms::label || + aAttribute == uWidgetAtoms::accesskey) { + SyncLabelFromContent(mCommandContent); + } else if (aAttribute == uWidgetAtoms::hidden || + aAttribute == uWidgetAtoms::collapsed) { + SyncVisibilityFromContent(); + } else if (aAttribute == uWidgetAtoms::disabled) { + SyncSensitivityFromContent(mCommandContent); + } else if (aAttribute == uWidgetAtoms::checked || + aAttribute == uWidgetAtoms::type) { + SyncTypeAndStateFromContent(); + } else if (aAttribute == uWidgetAtoms::image) { + SyncIconFromContent(); + } else if (aAttribute == uWidgetAtoms::_class) { + UpdateInfoFromContentClass(); + SyncVisibilityFromContent(); + SyncIconFromContent(); + } + } else if (aContent == mCommandContent) { + if (aAttribute == uWidgetAtoms::label) { + SyncLabelFromContent(mCommandContent); + } else if (aAttribute == uWidgetAtoms::disabled) { + SyncSensitivityFromContent(mCommandContent); + } else if (aAttribute == uWidgetAtoms::checked) { + SyncTypeAndStateFromContent(); + } + } else if (aContent == mKeyContent) { + SyncAccelFromContent(); + } +} + +void +uGlobalMenuItem::ObserveContentRemoved(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + NS_ASSERTION(0, "We can't remove content from a menuitem!"); +} + +void +uGlobalMenuItem::ObserveContentInserted(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + NS_ASSERTION(0, "We can't insert content in to a menuitem!"); +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuService.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuService.cpp @@ -0,0 +1,430 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "uGlobalMenuService.h" +#include "uWidgetAtoms.h" + +#include "uDebug.h" +#include "compat.h" + +class RegisterWindowCbData +{ +public: + RegisterWindowCbData(uGlobalMenuBar *aMenu, + uGlobalMenuRequestAutoCanceller *aCanceller): + mMenu(aMenu), + mCanceller(aCanceller) + { + mCancellable = mCanceller->GetCancellable(); + if (mCancellable) { + g_object_ref(mCancellable); + mID = g_cancellable_connect(mCancellable, G_CALLBACK(Cancelled), this, nsnull); + } + } + + static void Cancelled(GCancellable *aCancellable, + gpointer userdata) + { + RegisterWindowCbData *cbdata = + static_cast(userdata); + + // If the request was cancelled, then invalidate pointers to objects + // that might not exist anymore + + cbdata->mMenu = nsnull; + cbdata->mCanceller = nsnull; + } + + uGlobalMenuBar* GetMenuBar() { return mMenu; } + + ~RegisterWindowCbData() + { + if (mCancellable) { + g_cancellable_disconnect(mCancellable, mID); + g_object_unref(mCancellable); + } + } + +private: + uGlobalMenuBar *mMenu; + GCancellable *mCancellable; + uGlobalMenuRequestAutoCanceller *mCanceller; + PRUint32 mID; +}; + +NS_IMPL_ISUPPORTS2(uGlobalMenuService, uIGlobalMenuService, nsIWindowMediatorListener) + +/*static*/ void +uGlobalMenuService::ProxyCreatedCallback(GObject *object, + GAsyncResult *res, + gpointer userdata) +{ + uGlobalMenuService *self = static_cast(userdata); + + GError *error = NULL; + GDBusProxy *proxy = g_dbus_proxy_new_for_bus_finish(res, &error); + + if (error && g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + // We should only get cancelled if the service was destroyed. + // In this case, it is no longer safe to proceed + return; + } + + self->mCancellable->Destroy(); + self->mCancellable = nsnull; + + self->mDbusProxy = proxy; + + if (!proxy) { + NS_WARNING("Failed to create proxy for AppMenu registrar"); + self->SetOnline(PR_FALSE); + return; + } + + self->mNOCHandlerID = g_signal_connect(self->mDbusProxy, "notify::g-name-owner", + G_CALLBACK(NameOwnerChangedCallback), + userdata); + + char *owner = g_dbus_proxy_get_name_owner(self->mDbusProxy); + self->SetOnline(owner ? PR_TRUE : PR_FALSE); + + if (error) { + g_error_free(error); + } + g_free(owner); +} + +/*static*/ void +uGlobalMenuService::NameOwnerChangedCallback(GObject *object, + GParamSpec *pspec, + gpointer userdata) +{ + uGlobalMenuService *self = static_cast(userdata); + + char *owner = g_dbus_proxy_get_name_owner(self->mDbusProxy); + self->SetOnline(owner ? PR_TRUE : PR_FALSE); + g_free(owner); +} + +/*static*/ void +uGlobalMenuService::RegisterWindowCallback(GObject *object, + GAsyncResult *res, + gpointer userdata) +{ + RegisterWindowCbData *data = + static_cast(userdata); + + uGlobalMenuBar *menu = data->GetMenuBar(); + GDBusProxy *proxy = G_DBUS_PROXY(object); + + GError *error = NULL; + // RegisterWindowCbData owns a reference to the proxy + GVariant *result = g_dbus_proxy_call_finish(proxy, res, &error); + if (result) { + g_variant_unref(result); + } + + if (error && g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) { + // The call is cancelled if uGlobalMenuService goes away or the + // panel service goes offline. In either case, the menu has now + // been destroyed + delete data; + return; + } + + if (menu && !PR_GetEnv("GLOBAL_MENU_DEBUG")) { + // This check is probably bogus. menu should only be invalid if + // the request was cancelled, in which case, we should have + // returned already + menu->SetMenuBarRegistered(error ? PR_FALSE : PR_TRUE); + } + + if (error) { + g_error_free(error); + } + + delete data; +} + +void +uGlobalMenuService::DestroyMenus() +{ + PRUint32 count = mMenus.Length(); + for (PRUint32 j = 0; j < count; j++) { + mMenus.RemoveElementAt(0); + } +} + +void +uGlobalMenuService::DestroyMenuForWidget(nsIWidget *aWidget) +{ + for (PRUint32 i = 0; i < mMenus.Length(); i++) { + if (mMenus[i]->WidgetHasSameToplevelWindow(aWidget)) { + mMenus.RemoveElementAt(i); + return; + } + } +} + +void +uGlobalMenuService::SetOnline(PRBool aOnline) +{ + if (mOnline != !!aOnline) { + mOnline = !!aOnline; + nsCOMPtr os = + do_GetService("@mozilla.org/observer-service;1"); + if (os) { + os->NotifyObservers(nsnull, mOnline ? "native-menu-service:online" : "native-menu-service:offline", 0); + } + + if (!mOnline) { + DestroyMenus(); + } + } +} + +PRBool +uGlobalMenuService::WidgetHasGlobalMenu(nsIWidget *aWidget) +{ + for (PRUint32 i = 0; i < mMenus.Length(); i++) { + if (mMenus[i]->WidgetHasSameToplevelWindow(aWidget)) + return PR_TRUE; + } + return PR_FALSE; +} + +nsresult +uGlobalMenuService::Init() +{ + nsresult rv; + rv = uWidgetAtoms::RegisterAtoms(); + NS_ENSURE_SUCCESS(rv, rv); + + mCancellable = uGlobalMenuRequestAutoCanceller::Create(); + + GDBusProxyFlags flags = static_cast( + G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | + G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS | + G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START); + + g_dbus_proxy_new_for_bus(G_BUS_TYPE_SESSION, + flags, + NULL, + "com.canonical.AppMenu.Registrar", + "/com/canonical/AppMenu/Registrar", + "com.canonical.AppMenu.Registrar", + mCancellable->GetCancellable(), + ProxyCreatedCallback, + this); + + nsCOMPtr wm = + do_GetService("@mozilla.org/appshell/window-mediator;1"); + NS_ENSURE_TRUE(wm, NS_ERROR_OUT_OF_MEMORY); + + wm->AddListener(this); + return rv; +} + +uGlobalMenuService::~uGlobalMenuService() +{ + nsCOMPtr wm = + do_GetService("@mozilla.org/appshell/window-mediator;1"); + + if (wm) { + wm->RemoveListener(this); + } + + if (mDbusProxy) { + g_signal_handler_disconnect(mDbusProxy, mNOCHandlerID); + g_object_unref(mDbusProxy); + } +} + +NS_IMETHODIMP +uGlobalMenuService::CreateGlobalMenuBar(nsIWidget *aParent, + nsIContent *aMenuBarNode) +{ + NS_ENSURE_ARG(aParent); + NS_ENSURE_ARG(aMenuBarNode); + + NS_ENSURE_TRUE(mOnline, NS_ERROR_FAILURE); + + // Sanity check to make sure we don't register more than one menu + // for each top-level window + if (WidgetHasGlobalMenu(aParent)) + return NS_ERROR_FAILURE; + + uGlobalMenuBar *menu = uGlobalMenuBar::Create(aParent, aMenuBarNode); + NS_ENSURE_TRUE(menu, NS_ERROR_FAILURE); + + mMenus.AppendElement(menu); + + return NS_OK; +} + +/* [noscript, notxpcom] void registerGlobalMenuBar (in uGlobalMenuBarPtr menuBar); */ +NS_IMETHODIMP_(void) +uGlobalMenuService::RegisterGlobalMenuBar(uGlobalMenuBar *aMenuBar, + uGlobalMenuRequestAutoCanceller *aCanceller) +{ + if (mOnline != PR_TRUE) + return; + + if (!aMenuBar) + return; + + if (!aCanceller) { + return; + } + + PRUint32 xid = aMenuBar->GetWindowID(); + nsCAutoString path(aMenuBar->GetMenuPath()); + if (xid == 0 || path.IsEmpty()) + return; + + RegisterWindowCbData *data = + new RegisterWindowCbData(aMenuBar, + aCanceller); + if (!data) { + return; + } + + g_dbus_proxy_call(mDbusProxy, + "RegisterWindow", + g_variant_new("(uo)", xid, path.get()), + G_DBUS_CALL_FLAGS_NONE, + -1, + aCanceller->GetCancellable(), + RegisterWindowCallback, + data); +} + +/* void registerNotification (in nsIObserver observer); */ +NS_IMETHODIMP +uGlobalMenuService::RegisterNotification(nsIObserver *aObserver) +{ + NS_ENSURE_ARG(aObserver); + + nsCOMPtr os = + do_GetService("@mozilla.org/observer-service;1"); + NS_ENSURE_TRUE(os, NS_ERROR_OUT_OF_MEMORY); + + nsresult rv; + rv = os->AddObserver(aObserver, "native-menu-service:online", MOZ_API_FALSE); + NS_ENSURE_SUCCESS(rv, rv); + + rv = os->AddObserver(aObserver, "native-menu-service:offline", MOZ_API_FALSE); + NS_ENSURE_SUCCESS(rv, rv); + + rv = os->AddObserver(aObserver, "native-menu-service:popup-open", MOZ_API_FALSE); + return rv; +} + +/* void unregisterNotification (in nsIObserver observer); */ +NS_IMETHODIMP +uGlobalMenuService::UnregisterNotification(nsIObserver *aObserver) +{ + NS_ENSURE_ARG(aObserver); + + nsCOMPtr os = + do_GetService("@mozilla.org/observer-service;1"); + NS_ENSURE_TRUE(os, NS_ERROR_OUT_OF_MEMORY); + + nsresult rv; + rv = os->RemoveObserver(aObserver, "native-menu-service:online"); + NS_ENSURE_SUCCESS(rv, rv); + + rv = os->RemoveObserver(aObserver, "native-menu-service:offline"); + NS_ENSURE_SUCCESS(rv, rv); + + rv = os->RemoveObserver(aObserver, "native-menu-service:popup-open"); + return rv; +} + +/* readonly attribute boolean online; */ +NS_IMETHODIMP +uGlobalMenuService::GetOnline(MOZ_API_BOOL *online) +{ + NS_ENSURE_ARG_POINTER(online); + *online = !!mOnline; + return NS_OK; +} + +NS_IMETHODIMP +uGlobalMenuService::OnWindowTitleChange(nsIXULWindow *window, + const PRUnichar *newTitle) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuService::OnOpenWindow(nsIXULWindow *window) +{ + return NS_ERROR_NOT_IMPLEMENTED; +} + +NS_IMETHODIMP +uGlobalMenuService::OnCloseWindow(nsIXULWindow *window) +{ + nsCOMPtr baseWindow = do_QueryInterface(window); + NS_ENSURE_TRUE(baseWindow, NS_ERROR_INVALID_ARG); + + nsCOMPtr widget; + baseWindow->GetMainWidget(getter_AddRefs(widget)); + NS_ENSURE_TRUE(widget, NS_ERROR_FAILURE); + + DestroyMenuForWidget(widget); + + return NS_OK; +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuObject.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuObject.h @@ -0,0 +1,174 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_GLOBALMENUBASE_H +#define _U_GLOBALMENUBASE_H + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "uGlobalMenuDocListener.h" + +enum uMenuObjectType { + MenuBar, + Menu, + MenuItem, + MenuSeparator, + MenuDummy +}; + +class uGlobalMenuObject; +class uGlobalMenuBar; + +#define UGM_BLOCK_EVENTS_FOR_CURRENT_SCOPE() \ + uGlobalMenuObjectEventBlocker _event_blocker(this); +#define UGM_ENSURE_EVENTS_UNBLOCKED() \ + if (mEventsBlocked) { \ + DEBUG_WITH_THIS_MENUOBJECT("Events are blocked on this node"); \ + return; \ + } + +class uGlobalMenuIconLoader: public imgIDecoderObserver, + public nsRunnable +{ + friend class uGlobalMenuObject; +public: + NS_DECL_ISUPPORTS + NS_DECL_IMGIDECODEROBSERVER + NS_DECL_IMGICONTAINEROBSERVER + NS_DECL_NSIRUNNABLE + + void LoadIcon(); + + uGlobalMenuIconLoader(uGlobalMenuObject *aMenuItem): + mMenuItem(aMenuItem) { }; + ~uGlobalMenuIconLoader() { }; + +protected: + void Destroy(); + +private: + void ClearIcon(); + PRBool ShouldShowIcon(); + + PRBool mIconLoaded; + uGlobalMenuObject *mMenuItem; + nsCOMPtr mContent; + nsCOMPtr mIconRequest; + nsIntRect mImageRect; + static PRPackedBool sImagesInMenus; + static nsCOMPtr sLoader; +}; + +class uGlobalMenuObject +{ + friend class uGlobalMenuIconLoader; + friend class uGlobalMenuObjectEventBlocker; +public: + uGlobalMenuObject (uMenuObjectType aType): mDbusMenuItem(nsnull), + mListener(nsnull), + mParent(nsnull), + mType(aType), + mEventsBlocked(PR_FALSE), + mDirty(PR_FALSE) + { }; + DbusmenuMenuitem* GetDbusMenuItem() { return mDbusMenuItem; } + uGlobalMenuObject* GetParent() { return mParent; } + uMenuObjectType GetType() { return mType; } + void GetContent(nsIContent **_retval); + virtual void AboutToShowNotify() { }; + virtual ~uGlobalMenuObject() { }; + +protected: + void SyncLabelFromContent(nsIContent *aContent); + void SyncLabelFromContent(); + void SyncVisibilityFromContent(); + void SyncSensitivityFromContent(nsIContent *aContent); + void SyncSensitivityFromContent(); + void SyncIconFromContent(); + void UpdateInfoFromContentClass(); + void UpdateVisibility(); + void DestroyIconLoader(); + PRBool WithFavicon() { return !!mWithFavicon; } + PRBool IsHidden(); + void Invalidate() { mDirty = PR_TRUE; } + void ClearInvalid() { mDirty = PR_FALSE; } + PRBool IsDirty() { return !!mDirty; } + + nsCOMPtr mContent; + DbusmenuMenuitem *mDbusMenuItem; + nsRefPtr mListener; + uGlobalMenuObject *mParent; + uMenuObjectType mType; + uGlobalMenuBar *mMenuBar; + PRPackedBool mContentVisible; + PRPackedBool mEventsBlocked; + +private: + PRBool ShouldShowOnlyForKb() { return !!mShowOnlyForKb; } + + nsRefPtr mIconLoader; + PRPackedBool mWithFavicon; + PRPackedBool mShowOnlyForKb; + PRPackedBool mDirty; +}; + +class uGlobalMenuObjectEventBlocker +{ +public: + uGlobalMenuObjectEventBlocker(uGlobalMenuObject *aMenuObject): + mMenuObject(aMenuObject) + { + mMenuObject->mEventsBlocked = PR_TRUE; + } + + ~uGlobalMenuObjectEventBlocker() { mMenuObject->mEventsBlocked = PR_FALSE; } + +private: + uGlobalMenuObject *mMenuObject; +}; + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuUtils.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuUtils.cpp @@ -0,0 +1,82 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include + +#include "uGlobalMenuObject.h" +#include "uGlobalMenu.h" +#include "uGlobalMenuItem.h" +#include "uGlobalMenuSeparator.h" +#include "uGlobalMenuDummy.h" +#include "uGlobalMenuDocListener.h" +#include "uGlobalMenuBar.h" +#include "uWidgetAtoms.h" + +#include "uDebug.h" + +uGlobalMenuObject* +NewGlobalMenuItem(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar) +{ + TRACE_WITH_CONTENT(aContent); + + if (!aContent->IsXUL()) { + return uGlobalMenuDummy::Create(); + } + + uGlobalMenuObject *menuitem = nsnull; + if (aContent->Tag() == uWidgetAtoms::menu) { + menuitem = uGlobalMenu::Create(aParent, aListener, aContent, aMenuBar); + } else if (aContent->Tag() == uWidgetAtoms::menuitem) { + menuitem = uGlobalMenuItem::Create(aParent, aListener, aContent, aMenuBar); + } else if (aContent->Tag() == uWidgetAtoms::menuseparator) { + menuitem = uGlobalMenuSeparator::Create(aParent, aListener, aContent, aMenuBar); + } + + if (!menuitem) { + // We didn't recognize the tag, or initialization failed. We'll + // insert an invisible dummy node so that the indices between the + // XUL menuand the GlobalMenu stay in sync. + menuitem = uGlobalMenuDummy::Create(); + } + + return menuitem; +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenu.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenu.h @@ -0,0 +1,116 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_GLOBALMENU_H +#define _U_GLOBALMENU_H + +#include +#include +#include +#include +#include + +#include + +#include "uGlobalMenuObject.h" +#include "uMenuChangeObserver.h" + +class uGlobalMenuItem; +class uGlobalMenuBar; +class uGlobalMenuDocListener; + +class uGlobalMenu: public uGlobalMenuObject, + public uMenuChangeObserver +{ +public: + NS_DECL_UMENUCHANGEOBSERVER + + static uGlobalMenuObject* Create(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar); + + ~uGlobalMenu(); + + PRBool CanOpen(); + void OpenMenu(); + void AboutToShowNotify(); + PRBool IsOpening() { return !!mOpening; } + +private: + uGlobalMenu(); + + // Initialize the menu structure + nsresult Init(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar); + PRBool InsertMenuObjectAt(uGlobalMenuObject *menuObj, + PRUint32 index); + PRBool AppendMenuObject(uGlobalMenuObject *menuObj); + PRBool RemoveMenuObjectAt(PRUint32 index); + nsresult ConstructDbusMenuItem(); + nsresult Build(); + void SyncProperties(); + void GetMenuPopupFromMenu(nsIContent **aResult); + static PRBool MenuAboutToOpenCallback(DbusmenuMenuitem *menu, + void *data); + static PRBool MenuEventCallback(DbusmenuMenuitem *menu, + const gchar *name, + GVariant *value, + guint timestamp, + void *data); + void AboutToOpen(); + void OnOpen(); + void OnClose(); + void Activate(); + void Deactivate(); + void SetNeedsRebuild() { mNeedsRebuild = PR_TRUE; } + void ClearNeedsRebuild() { mNeedsRebuild = PR_FALSE; } + PRBool DoesNeedRebuild() { return !!mNeedsRebuild; } + + nsCOMPtr mPopupContent; + nsTArray< nsAutoPtr > mMenuObjects; + PRUint32 mOpenHandlerID; + PRUint32 mEventHandlerID; + PRPackedBool mOpening; + PRPackedBool mNeedsRebuild; + PRPackedBool mPrimed; +}; + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuLoader.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuLoader.h @@ -0,0 +1,77 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include + +#include "uIGlobalMenuService.h" + +#define U_GLOBALMENULOADER_CID \ +{ 0x1e8f2f48, 0xe0a8, 0x4649, { 0x98, 0xef, 0x13, 0x22, 0xc0, 0x3f, 0xf0, 0x8e } } + +#define U_GLOBALMENULOADER_CONTRACTID "@canonical.com/globalmenu-loader;1" + +class nsIXULWindow; +class nsIDocShell; +class nsIWidget; + +class uGlobalMenuLoader: public nsIObserver, + public nsIWindowMediatorListener, + public nsIWebProgressListener, + public nsSupportsWeakReference +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIOBSERVER + NS_DECL_NSIWINDOWMEDIATORLISTENER + NS_DECL_NSIWEBPROGRESSLISTENER + + uGlobalMenuLoader() { }; + ~uGlobalMenuLoader(); + nsresult Init(); + +private: + void RegisterAllMenus(); + void RegisterMenuForWindow(nsIXULWindow *aWindow); + PRBool RegisterMenu(nsIWidget *aWindow, + nsIDocShell *aDocShell); + + nsCOMPtr mService; +}; --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uMenuChangeObserver.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uMenuChangeObserver.h @@ -0,0 +1,80 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corp. + * Portions created by the Initial Developer are Copyright (C) 1999 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Mike Pinkerton + * Josh Aas (decomtaminate) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_MENUCHANGEOBSERVER_H +#define _U_MENUCHANGEOBSERVER_H + +class nsIContent; +class nsIDocument; +class nsIAtom; + +#define NS_DECL_UMENUCHANGEOBSERVER \ +void ObserveAttributeChanged(nsIDocument *aDocument, nsIContent *aContent, nsIAtom *aAttribute); \ +void ObserveContentRemoved(nsIDocument *aDocument, nsIContent *aContainer, nsIContent *aChild, PRInt32 aIndexInContainer); \ +void ObserveContentInserted(nsIDocument *aDocument, nsIContent *aContainer, nsIContent *aChild, PRInt32 aIndexInContainer); + +// Something that wants to be alerted to changes in attributes or changes in +// its corresponding content object. +// +// This interface is used by our menu code so we only have to have one +// nsIDocumentObserver. +// +// Any class that implements this interface must take care to unregister itself +// on deletion. +class uMenuChangeObserver +{ +public: + // XXX use dom::Element + virtual void ObserveAttributeChanged(nsIDocument *aDocument, + nsIContent *aContent, + nsIAtom *aAttribute)=0; + + virtual void ObserveContentRemoved(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer)=0; + + virtual void ObserveContentInserted(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer)=0; +}; + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uWidgetAtomList.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uWidgetAtomList.h @@ -0,0 +1,65 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1999 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Original Author: Mike Pinkerton (pinkerton@netscape.com) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +WIDGET_ATOM(accesskey, "accesskey") +WIDGET_ATOM(autocheck, "autocheck") +WIDGET_ATOM(checkbox, "checkbox") +WIDGET_ATOM(checked, "checked") +WIDGET_ATOM(_class, "class") +WIDGET_ATOM(collapsed, "collapsed") +WIDGET_ATOM(command, "command") +WIDGET_ATOM(disabled, "disabled") +WIDGET_ATOM(_false, "false") +WIDGET_ATOM(hidden, "hidden") +WIDGET_ATOM(id, "id") +WIDGET_ATOM(image, "image") +WIDGET_ATOM(key, "key") +WIDGET_ATOM(keycode, "keycode") +WIDGET_ATOM(label, "label") +WIDGET_ATOM(menu, "menu") +WIDGET_ATOM(menuactive, "_moz-menuactive") +WIDGET_ATOM(menuitem, "menuitem") +WIDGET_ATOM(menupopup, "menupopup") +WIDGET_ATOM(menuseparator, "menuseparator") +WIDGET_ATOM(modifiers, "modifiers") +WIDGET_ATOM(name, "name") +WIDGET_ATOM(open, "open") +WIDGET_ATOM(radio, "radio") +WIDGET_ATOM(toolbarspring, "toolbarspring") +WIDGET_ATOM(_true, "true") +WIDGET_ATOM(type, "type") --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuModule.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuModule.cpp @@ -0,0 +1,71 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Suresh Duddu + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either of the GNU General Public License Version 2 or later (the "GPL"), + * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsIClassInfoImpl.h" +#include "mozilla/ModuleUtils.h" +#include "uGlobalMenuService.h" +#include "uGlobalMenuLoader.h" + +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(uGlobalMenuService, Init) +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(uGlobalMenuLoader, Init) + +NS_DEFINE_NAMED_CID(U_GLOBALMENUSERVICE_CID); +NS_DEFINE_NAMED_CID(U_GLOBALMENULOADER_CID); + +static const mozilla::Module::CIDEntry kGlobalMenuCIDs[] = { + { &kU_GLOBALMENUSERVICE_CID, false, NULL, uGlobalMenuServiceConstructor }, + { &kU_GLOBALMENULOADER_CID, false, NULL, uGlobalMenuLoaderConstructor }, + { NULL } +}; + +static const mozilla::Module::ContractIDEntry kGlobalMenuContracts[] = { + { U_GLOBALMENUSERVICE_CONTRACTID, &kU_GLOBALMENUSERVICE_CID }, + { U_GLOBALMENULOADER_CONTRACTID, &kU_GLOBALMENULOADER_CID }, + { NULL } +}; + +static const mozilla::Module kGlobalMenuModule = { + mozilla::Module::kVersion, + kGlobalMenuCIDs, + kGlobalMenuContracts +}; + +// The following line implements the one-and-only "NSModule" symbol exported from this +// shared library. +NSMODULE_DEFN(uGlobalMenuModule) = &kGlobalMenuModule; --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuDocListener.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuDocListener.cpp @@ -0,0 +1,312 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is mozilla.org code. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Josh Aas + * Thomas K. Dyas + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include +#include +#include + +#include "uGlobalMenuDocListener.h" + +#include "uDebug.h" + +NS_IMPL_ISUPPORTS1(uGlobalMenuDocListener, nsIMutationObserver) + +nsresult +uGlobalMenuDocListener::Init(nsIContent *rootNode) +{ + NS_ENSURE_ARG(rootNode); + +#if MOZILLA_BRANCH_MAJOR_VERSION >= 10 + mDocument = rootNode->OwnerDoc(); +#else + mDocument = rootNode->GetOwnerDoc(); +#endif + if (!mDocument) + return NS_ERROR_FAILURE; + mDocument->AddMutationObserver(this); + + return NS_OK; +} + +void +uGlobalMenuDocListener::Destroy() +{ + if (mDocument) { + mDocument->RemoveMutationObserver(this); + } +} + +uGlobalMenuDocListener::uGlobalMenuDocListener() : +#ifdef DEBUG_chrisccoulson + mCount(0), +#endif + mDocument(nsnull) +{ + mContentToObserverTable.Init(); +} + +uGlobalMenuDocListener::~uGlobalMenuDocListener() +{ + NS_ASSERTION(mCount == 0, "Some nodes forgot to unregister listeners"); +} + +void +uGlobalMenuDocListener::CharacterDataWillChange(nsIDocument *aDocument, + nsIContent *aContent, + CharacterDataChangeInfo *aInfo) +{ + +} + +void +uGlobalMenuDocListener::CharacterDataChanged(nsIDocument *aDocument, + nsIContent *aContent, + CharacterDataChangeInfo *aInfo) +{ + +} + +void +uGlobalMenuDocListener::AttributeWillChange(nsIDocument *aDocument, + mozilla::dom::Element *aElement, + PRInt32 aNameSpaceID, + nsIAtom *aAttribute, + PRInt32 aModType) +{ + +} + +void +uGlobalMenuDocListener::AttributeChanged(nsIDocument *aDocument, + mozilla::dom::Element *aElement, + PRInt32 aNameSpaceID, + nsIAtom *aAttribute, + PRInt32 aModType) +{ + if (!aElement) + return; + + nsTArray listeners; + GetListeners(aElement, listeners); + + for (PRUint32 i = 0; i < listeners.Length(); i++) { + listeners[i]->ObserveAttributeChanged(aDocument, aElement, aAttribute); + } +} + +void +uGlobalMenuDocListener::ContentAppended(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aFirstNewContent, + PRInt32 aNewIndexInContainer) +{ + for (nsIContent* cur = aFirstNewContent; cur; cur = cur->GetNextSibling()) { + ContentInserted(aDocument, aContainer, cur, aNewIndexInContainer); + aNewIndexInContainer++; + } +} + +void +uGlobalMenuDocListener::ContentInserted(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + if (!aContainer) + return; + + nsTArray listeners; + GetListeners(aContainer, listeners); + + for (PRUint32 i = 0; i < listeners.Length(); i++) { + listeners[i]->ObserveContentInserted(aDocument, aContainer, aChild, + aIndexInContainer); + } + + if (listeners.Length() == 0) { + for (PRUint32 i = 0; i < mGlobalObservers.Length(); i++) { + mGlobalObservers[i]->ObserveContentInserted(aDocument, aContainer, + aChild, aIndexInContainer); + } + } +} + +void +uGlobalMenuDocListener::ContentRemoved(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer, + nsIContent *aPreviousSibling) +{ + if (!aContainer) + return; + + nsTArray listeners; + GetListeners(aContainer, listeners); + + for (PRUint32 i = 0; i < listeners.Length(); i++) { + listeners[i]->ObserveContentRemoved(aDocument, aContainer, aChild, + aIndexInContainer); + } + + if (listeners.Length() == 0) { + for (PRUint32 i = 0; i < mGlobalObservers.Length(); i++) { + mGlobalObservers[i]->ObserveContentRemoved(aDocument, aContainer, aChild, + aIndexInContainer); + } + } +} + +void +uGlobalMenuDocListener::NodeWillBeDestroyed(const nsINode *aNode) +{ + mDocument = nsnull; +} + +void +uGlobalMenuDocListener::ParentChainChanged(nsIContent *aContent) +{ + +} + +nsresult +uGlobalMenuDocListener::RegisterForContentChanges(nsIContent *aContent, + uMenuChangeObserver *aMenuObject) +{ + NS_ENSURE_ARG(aContent); + NS_ENSURE_ARG(aMenuObject); + + nsTArray *listeners; + if (!mContentToObserverTable.Get(aContent, &listeners)) { + listeners = new nsTArray(); + mContentToObserverTable.Put(aContent, listeners); + } + + for (PRUint32 i = 0; i < listeners->Length(); i++) { + if (listeners->ElementAt(i) == aMenuObject) { + return NS_ERROR_FAILURE; + } + } + + listeners->AppendElement(aMenuObject); +#ifdef DEBUG_chrisccoulson + mCount++; +#endif + return NS_OK; +} + +nsresult +uGlobalMenuDocListener::UnregisterForContentChanges(nsIContent *aContent, + uMenuChangeObserver *aMenuObject) +{ + NS_ENSURE_ARG(aContent); + NS_ENSURE_ARG(aMenuObject); + + nsTArray *listeners; + if (!mContentToObserverTable.Get(aContent, &listeners)) { + return NS_ERROR_FAILURE; + } + + PRUint32 length = listeners->Length(); + for (PRUint32 i = 0; i < length; i++) { + if (listeners->ElementAt(i) == aMenuObject) { + listeners->RemoveElementAt(i); +#ifdef DEBUG_chrisccoulson + mCount--; +#endif + } + } + + nsresult rv = listeners->Length() < length ? NS_OK : NS_ERROR_FAILURE; + + if (listeners->Length() == 0) { + mContentToObserverTable.Remove(aContent); + } + + return rv; +} + +nsresult +uGlobalMenuDocListener::RegisterForAllChanges(uMenuChangeObserver *aMenuObject) +{ + NS_ENSURE_ARG(aMenuObject); + + PRUint32 count = mGlobalObservers.Length(); + for (PRUint32 i = 0; i < count; i ++) { + if (mGlobalObservers[i] == aMenuObject) { + // Don't add more than once + return NS_ERROR_FAILURE; + } + } + + mGlobalObservers.AppendElement(aMenuObject); + return NS_OK; +} + +nsresult +uGlobalMenuDocListener::UnregisterForAllChanges(uMenuChangeObserver *aMenuObject) +{ + NS_ENSURE_ARG(aMenuObject); + + PRUint32 count = mGlobalObservers.Length(); + for (PRUint32 i = 0; i < count; i++) { + if (mGlobalObservers[i] == aMenuObject) { + mGlobalObservers.RemoveElementAt(i); + return NS_OK; + } + } + + return NS_ERROR_FAILURE; +} + +void +uGlobalMenuDocListener::GetListeners(nsIContent *aContent, + nsTArray& _result) +{ + nsTArray *listeners; + if (mContentToObserverTable.Get(aContent, &listeners)) { + _result.ReplaceElementsAt(0, _result.Length(), listeners->Elements(), + listeners->Length()); + } +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuDummy.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuDummy.h @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * Mike Conley + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_GLOBALMENUDUMMY_H +#define _U_GLOBALMENUDUMMY_H + +#include "uGlobalMenuObject.h" +#include "uMenuChangeObserver.h" + +class nsIContent; +class uGlobalMenuDocListener; + +class uGlobalMenuDummy: public uGlobalMenuObject, + public uMenuChangeObserver +{ +public: + NS_DECL_UMENUCHANGEOBSERVER + + static uGlobalMenuObject* Create(); + +private: + uGlobalMenuDummy(); + + nsresult Init(); + + ~uGlobalMenuDummy(); + + nsresult ConstructDbusMenuItem(); +}; + + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuItem.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuItem.h @@ -0,0 +1,104 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_GLOBALMENUITEM_H +#define _U_GLOBALMENUITEM_H + +#include +#include +#include + +#include + +#include "uGlobalMenuObject.h" +#include "uMenuChangeObserver.h" + +class nsIContent; +class uGlobalMenuDocListener; +class uGlobalMenuBar; + +enum uMenuItemType { + Normal, + CheckBox, + Radio +}; + +class uGlobalMenuItem: public uGlobalMenuObject, + public uMenuChangeObserver +{ +public: + NS_DECL_UMENUCHANGEOBSERVER + + static uGlobalMenuObject* Create(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar); + + void AboutToShowNotify(); + +private: + uGlobalMenuItem(); + + nsresult Init(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar); + ~uGlobalMenuItem(); + + PRUint32 GetKeyCode(nsAString &aKeyName); + PRUint32 MozKeyCodeToGdkKeyCode(PRUint32 aMozKeyCode); + void SyncAccelFromContent(); + void SyncProperties(); + void SyncTypeAndStateFromContent(); + nsresult ConstructDbusMenuItem(); + static void ItemActivatedCallback(DbusmenuMenuitem *menuItem, + PRUint32 timeStamp, + void *data); + void Activate(); + void UncheckSiblings(); + + nsCOMPtr mCommandContent; + nsCOMPtr mKeyContent; + PRUint32 mHandlerID; + PRPackedBool mIsToggle; + PRPackedBool mToggleState; + uMenuItemType mType; +}; + + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uDebug.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uDebug.cpp @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "uDebug.h" + +#ifdef DEBUG_chrisccoulson +PRUint32 FunctionTracer::sDepth = 0; +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/compat.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/compat.h @@ -0,0 +1,47 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#if MOZILLA_BRANCH_MAJOR_VERSION >= 10 +#define MOZ_API_BOOL bool +#define MOZ_API_TRUE true +#define MOZ_API_FALSE false +#else +#define MOZ_API_BOOL PRBool +#define MOZ_API_TRUE PR_TRUE +#define MOZ_API_FALSE PR_FALSE +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuBar.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuBar.h @@ -0,0 +1,156 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_GLOBALMENUBAR_H +#define _U_GLOBALMENUBAR_H + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "uMenuChangeObserver.h" +#include "uGlobalMenuObject.h" +#include "uGlobalMenuUtils.h" + +// Meh. X.h defines this +#ifdef KeyPress +# undef KeyPress +#endif + +class nsIObserver; +class nsIWidget; +class nsIDOMEvent; +class uGlobalMenuService; +class uGlobalMenu; +class uGlobalMenuBar; +class nsIDOMKeyEvent; + +class uGlobalMenuBarListener: public nsIDOMEventListener +{ +public: + NS_DECL_ISUPPORTS + NS_DECL_NSIDOMEVENTLISTENER + + uGlobalMenuBarListener(uGlobalMenuBar *aMenuBar): + mMenuBar(aMenuBar) { }; + ~uGlobalMenuBarListener() { }; + +private: + uGlobalMenuBar *mMenuBar; +}; + +class uGlobalMenuBar: public uGlobalMenuObject, + public uMenuChangeObserver +{ + friend class uGlobalMenuBarListener; +public: + NS_DECL_UMENUCHANGEOBSERVER + + static uGlobalMenuBar* Create(nsIWidget *aWindow, + nsIContent *aMenuBar); + ~uGlobalMenuBar(); + + // Return the native ID of the window + PRUint32 GetWindowID(); + + // Returns the path of the menubar on the session bus + const char* GetMenuPath(); + + // Checks if the menubar shares the same top level window as the + // specified nsIWidget + PRBool WidgetHasSameToplevelWindow(nsIWidget *aWidget); + + // Returns whether the menu was opened via a keyboard shortcut + PRBool OpenedByKeyboard() { return !!mOpenedByKeyboard; } + + // Called from the menu service. Used to hide the DOM element for the menubar + void SetMenuBarRegistered(PRBool aRegistered); + + PRBool IsRegistered() { return mCancellable == nsnull; } + +protected: + void Focus(); + void Blur(); + nsresult KeyPress(nsIDOMEvent *aKeyEvent); + nsresult KeyUp(nsIDOMEvent *aKeyEvent); + nsresult KeyDown(nsIDOMEvent *aKeyEvent); +private: + uGlobalMenuBar(); + // Initialize the menu structure + nsresult Init(nsIWidget *aWindow, + nsIContent *aMenuBar); + + GtkWidget* WidgetToGTKWindow(nsIWidget *aWidget); + nsresult Build(); + PRUint32 GetModifiersFromEvent(nsIDOMKeyEvent *aKeyEvent); + PRBool ShouldHandleKeyEvent(nsIDOMEvent *aKeyEvent); + + PRBool RemoveMenuObjectAt(PRUint32 index); + PRBool InsertMenuObjectAt(uGlobalMenuObject *menu, + PRUint32 index); + PRBool AppendMenuObject(uGlobalMenuObject *menu); + PRBool ShouldParentStayVisible(nsIContent *aContent); + PRBool IsParentOfMenuBar(nsIContent *aContent); + void SetXULMenuBarHidden(PRBool hidden); + + DbusmenuServer *mServer; + GtkWidget *mTopLevel; + nsCString mPath; + + nsCOMPtr mHiddenElement; + nsCOMPtr mDocTarget; + PRPackedBool mRestoreHidden; + PRPackedBool mXULMenuHidden; + nsRefPtr mEventListener; + PRInt32 mAccessKey; + PRUint32 mAccessKeyMask; + PRPackedBool mOpenedByKeyboard; + nsAutoPtr mCancellable; + + // Should probably have a container class and subclass that + nsTArray< nsAutoPtr > mMenuObjects; +}; + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uGlobalMenuSeparator.cpp +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uGlobalMenuSeparator.cpp @@ -0,0 +1,185 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include +#include +#include + +#include +#include + +#include "uGlobalMenuSeparator.h" +#include "uGlobalMenuBar.h" +#include "uGlobalMenu.h" +#include "uWidgetAtoms.h" + +#include "uDebug.h" + +nsresult +uGlobalMenuSeparator::ConstructDbusMenuItem() +{ + mDbusMenuItem = dbusmenu_menuitem_new(); + if (!mDbusMenuItem) + return NS_ERROR_OUT_OF_MEMORY; + + dbusmenu_menuitem_property_set(mDbusMenuItem, + DBUSMENU_MENUITEM_PROP_TYPE, + "separator"); + + UpdateInfoFromContentClass(); + SyncVisibilityFromContent(); + + return NS_OK; +} + +nsresult +uGlobalMenuSeparator::Init(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar) +{ + NS_ENSURE_ARG(aParent); + NS_ENSURE_ARG(aListener); + NS_ENSURE_ARG(aContent); + NS_ENSURE_ARG(aMenuBar); + + mParent = aParent; + mListener = aListener; + mContent = aContent; + mMenuBar = aMenuBar; + + nsresult rv = mListener->RegisterForContentChanges(mContent, this); + NS_ENSURE_SUCCESS(rv, rv); + + return ConstructDbusMenuItem(); +} + +uGlobalMenuSeparator::uGlobalMenuSeparator(): uGlobalMenuObject(MenuSeparator) +{ + MOZ_COUNT_CTOR(uGlobalMenuSeparator); +} + +uGlobalMenuSeparator::~uGlobalMenuSeparator() +{ + if (mListener) { + mListener->UnregisterForContentChanges(mContent, this); + } + + if (mDbusMenuItem) + g_object_unref(mDbusMenuItem); + + MOZ_COUNT_DTOR(uGlobalMenuSeparator); +} + +/*static*/ uGlobalMenuObject* +uGlobalMenuSeparator::Create(uGlobalMenuObject *aParent, + uGlobalMenuDocListener *aListener, + nsIContent *aContent, + uGlobalMenuBar *aMenuBar) +{ + TRACE_WITH_CONTENT(aContent); + + uGlobalMenuSeparator *menuitem = new uGlobalMenuSeparator(); + if (!menuitem) { + return nsnull; + } + + if (NS_FAILED(menuitem->Init(aParent, aListener, aContent, aMenuBar))) { + delete menuitem; + return nsnull; + } + + return static_cast(menuitem); +} + +void +uGlobalMenuSeparator::AboutToShowNotify() +{ + if (IsDirty()) { + UpdateInfoFromContentClass(); + SyncVisibilityFromContent(); + + ClearInvalid(); + } else { + UpdateVisibility(); + } +} + +void +uGlobalMenuSeparator::ObserveAttributeChanged(nsIDocument *aDocument, + nsIContent *aContent, + nsIAtom *aAttribute) +{ + NS_ASSERTION(aContent == mContent, "Received an event that wasn't meant for us!"); + + if (IsDirty()) { + return; + } + + if (mParent->GetType() == Menu && + !(static_cast(mParent))->IsOpening()) { + Invalidate(); + return; + } + + if (aAttribute == uWidgetAtoms::hidden || + aAttribute == uWidgetAtoms::collapsed) { + SyncVisibilityFromContent(); + } else if (aAttribute == uWidgetAtoms::_class) { + UpdateInfoFromContentClass(); + SyncVisibilityFromContent(); + } +} + +void +uGlobalMenuSeparator::ObserveContentRemoved(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + NS_ASSERTION(0, "We can't remove content from a menuseparator!"); +} + +void +uGlobalMenuSeparator::ObserveContentInserted(nsIDocument *aDocument, + nsIContent *aContainer, + nsIContent *aChild, + PRInt32 aIndexInContainer) +{ + NS_ASSERTION(0, "We can't insert content in to a menuseparator!"); +} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/uDebug.h +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/uDebug.h @@ -0,0 +1,187 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#ifndef _U_DEBUG_H +#define _U_DEBUG_H + +#include +#include + +#if defined DEBUG_chrisccoulson && !defined DEBUG +#undef NS_ASSERTION +#undef NS_WARN_IF_FALSE +#undef NS_WARNING + +#define NS_ASSERTION(expr, str) \ + do { \ + if (!(expr)) { \ + NS_DebugBreak(NS_DEBUG_ASSERTION, str, #expr, __FILE__, __LINE__); \ + } \ + } while(0) + +#define NS_WARN_IF_FALSE(_expr,_msg) \ + do { \ + if (!(_expr)) { \ + NS_DebugBreak(NS_DEBUG_WARNING, _msg, #_expr, __FILE__, __LINE__); \ + } \ + } while(0) + +#define NS_WARNING(str) \ + NS_DebugBreak(NS_DEBUG_WARNING, str, nsnull, __FILE__, __LINE__) +#endif + +#ifdef DEBUG +#define DEBUG_chrisccoulson +#endif + +#ifdef DEBUG_chrisccoulson +class FunctionTracer +{ +public: + FunctionTracer(const char *funcName, const char *extra): mFuncName(funcName), mExtra(extra) + { + if (getenv("GLOBAL_MENU_VERBOSE")) { + printf("%*s=== globalmenu-extension: Entering %s [%s] ===\n", sDepth, "", mFuncName.get(), mExtra.get()); + } + sDepth++; + } + + FunctionTracer(const char *funcName): mFuncName(funcName) + { + if (getenv("GLOBAL_MENU_VERBOSE")) { + printf("%*s=== globalmenu-extension: Entering %s ===\n", sDepth, "", mFuncName.get()); + } + sDepth++; + } + + ~FunctionTracer() + { + sDepth--; + if (getenv("GLOBAL_MENU_VERBOSE")) { + if (mExtra.Length() > 0) { + printf("%*s=== globalmenu-extension: Leaving %s [%s] ===\n", sDepth, "", mFuncName.get(), mExtra.get()); + } else { + printf("%*s=== globalmenu-extension: Leaving %s ===\n", sDepth, "", mFuncName.get()); + } + } + } + + static PRUint32 sDepth; +private: + nsCString mFuncName; + nsCString mExtra; +}; + +#define DEBUG_WITH_THIS_MENUOBJECT(format...) \ + DEBUG_WITH_MENUOBJECT(this, format) + +#define DEBUG_WITH_MENUOBJECT(object, format...) \ + if (getenv("GLOBAL_MENU_VERBOSE")) { \ + nsCOMPtr content; \ + if (object) object->GetContent(getter_AddRefs(content)); \ + nsAutoString id; \ + nsCAutoString cid; \ + if (content) content->GetAttr(kNameSpaceID_None, uWidgetAtoms::id, id); \ + CopyUTF16toUTF8(id, cid); \ + char *str; \ + asprintf(&str, format); \ + printf("%*s* globalmenu-extension %s: %s [menuobject: %p (id: %s)] [this: %p]\n", FunctionTracer::sDepth, "", __PRETTY_FUNCTION__, str, object, cid.get(), this); \ + free(str); \ + } + +#define DEBUG_WITH_CONTENT(content, format...) \ + if (getenv("GLOBAL_MENU_VERBOSE")) { \ + nsAutoString id; \ + nsCAutoString cid; \ + if (content) content->GetAttr(kNameSpaceID_None, uWidgetAtoms::id, id); \ + CopyUTF16toUTF8(id, cid); \ + char *str; \ + asprintf(&str, format); \ + printf("%*s* globalmenu-extension %s: %s [content: %p (id: %s)] [this: %p]\n", FunctionTracer::sDepth, "", __PRETTY_FUNCTION__, str, content, cid.get(), this); \ + free(str); \ + } + +#define DEBUG_CSTR_FROM_UTF16(str) __extension__({ \ + nsCAutoString cstr; \ + CopyUTF16toUTF8(str, cstr); \ + cstr.get(); \ +}) + +#define TRACE_WITH_THIS_MENUOBJECT() \ + TRACE_WITH_MENUOBJECT(this) + +#define TRACE_WITH_MENUOBJECT(object) \ + char *_id_s; \ + { \ + nsCOMPtr content; \ + if (object) object->GetContent(getter_AddRefs(content)); \ + nsAutoString _id; \ + if (content) content->GetAttr(kNameSpaceID_None, uWidgetAtoms::id, _id); \ + nsCAutoString _cid; \ + CopyUTF16toUTF8(_id, _cid); \ + asprintf(&_id_s, "menuobject: %p (id: %s)", object, _cid.get()); \ + } \ + FunctionTracer _marker(__PRETTY_FUNCTION__, _id_s); \ + free(_id_s); + +#define TRACE_WITH_CONTENT(content) \ + char *_id_s; \ + { \ + nsAutoString _id; \ + content->GetAttr(kNameSpaceID_None, uWidgetAtoms::id, _id); \ + nsCAutoString _cid; \ + CopyUTF16toUTF8(_id, _cid); \ + asprintf(&_id_s, "id: %s", _cid.get()); \ + } \ + FunctionTracer _marker(__PRETTY_FUNCTION__, _id_s); \ + free(_id_s); + +#define TRACE() \ + FunctionTracer _marker(__PRETTY_FUNCTION__); +#else +#define DEBUG_WITH_THIS_MENUOBJECT(format...) +#define DEBUG_WITH_MENUOBJECT(object, format...) +#define DEBUG_WITH_CONTENT(content, format...) +#define DEBUG_CSTR_FROM_UTF16(str) +#define TRACE_WITH_THIS_MENUOBJECT() +#define TRACE_WITH_MENUOBJECT(object) +#define TRACE_WITH_CONTENT(content) +#define TRACE() +#endif + +#endif --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/src/Makefile.in +++ thunderbird-10.0.2+build1/debian/globalmenu/components/src/Makefile.in @@ -0,0 +1,103 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Chris Coulson +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +IS_COMPONENT = 1 +MODULE = globalmenu +LIBRARY_NAME = globalmenu +MODULE_NAME = uGlobalMenuModule +#USE_STATIC_LIBS = 1 +#EXPORT_LIBRARY = 1 + +XPI_NAME = globalmenu + +CPPSRCS = \ + uGlobalMenuModule.cpp \ + uGlobalMenuLoader.cpp \ + uGlobalMenuService.cpp \ + uGlobalMenuUtils.cpp \ + uGlobalMenuBar.cpp \ + uGlobalMenuSeparator.cpp \ + uGlobalMenuItem.cpp \ + uGlobalMenuDummy.cpp \ + uGlobalMenu.cpp \ + uGlobalMenuDocListener.cpp \ + uGlobalMenuObject.cpp \ + uWidgetAtoms.cpp \ + uDebug.cpp \ + $(NULL) + +ifneq (extensions, $(MOZ_BUILD_APP)) +# Support in-tree builds where we need to figure this out for ourselves +MOZILLA_BRANCH_MAJOR_VERSION=$(shell echo $(MOZILLA_VERSION) | sed -e 's/[ab].*//' -e 's/^\([0-9]*\)\.*\([0-9]*\)\.*\([0-9]*\).*/\1/;') +MOZILLA_BRANCH_MINOR_VERSION=$(shell echo $(MOZILLA_VERSION) | sed -e 's/[ab].*//' -e 's/^\([0-9]*\)\.*\([0-9]*\)\.*\([0-9]*\).*/\2/;') +MOZILLA_BRANCH_MICRO_VERSION=$(shell echo $(MOZILLA_VERSION) | sed -e 's/[ab].*//' -e 's/^\([0-9]*\)\.*\([0-9]*\)\.*\([0-9]*\).*/\3/;') + +ifeq (,$(MOZILLA_BRANCH_MINRO_VERSION)) +MOZILLA_BRANCH_MINOR_VERSION=0 +endif +ifeq (,$(MOZILLA_BRANCH_MICRO_VERSION)) +MOZILLA_BRANCH_MICRO_VERSION=0 +endif +endif + +EXTRA_DSO_LDOPTS += $(XPCOM_GLUE_LDOPTS) \ + $(NSPR_LIBS) \ + $(DBUSMENU_LIBS) \ + $(MOZ_GTK2_LIBS) \ + $(NULL) + +include $(topsrcdir)/config/rules.mk + +CXXFLAGS += $(DBUSMENU_CFLAGS) \ + $(MOZ_GTK2_CFLAGS) \ + $(NULL) + +ifneq (extensions, $(MOZ_BUILD_APP)) +CXXFLAGS += -DMOZILLA_BRANCH_MAJOR_VERSION="$(MOZILLA_BRANCH_MAJOR_VERSION)" \ + -DMOZILLA_BRANCH_MINOR_VERSION="$(MOZILLA_BRANCH_MINOR_VERSION)" \ + -DMOZILLA_BRANCH_MICRO_VERSION="$(MOZILLA_BRANCH_MICRO_VERSION)" +endif + +libs:: + @$(PYTHON) $(MOZILLA_DIR)/config/buildlist.py $(FINAL_TARGET)/components/components.manifest "category profile-after-change uGlobalMenuLoader @canonical.com/globalmenu-loader;1" --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/public/Makefile.in +++ thunderbird-10.0.2+build1/debian/globalmenu/components/public/Makefile.in @@ -0,0 +1,52 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Chris Coulson +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +MODULE = globalmenu +XPI_NAME = globalmenu + +XPIDLSRCS = \ + uIGlobalMenuService.idl \ + $(NULL) + +include $(topsrcdir)/config/rules.mk --- thunderbird-10.0.2+build1.orig/debian/globalmenu/components/public/uIGlobalMenuService.idl +++ thunderbird-10.0.2+build1/debian/globalmenu/components/public/uIGlobalMenuService.idl @@ -0,0 +1,71 @@ +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is globalmenu-extension. + * + * The Initial Developer of the Original Code is + * Canonical Ltd. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Chris Coulson + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +#include "nsISupports.idl" +#include "nsIObserver.idl" + +[ptr] native uGlobalMenuBarPtr(uGlobalMenuBar); +[ptr] native nsIWidgetPtr(nsIWidget); +[ptr] native nsIContentPtr(nsIContent); +[ptr] native uGlobalMenuRequestAutoCancellerPtr(uGlobalMenuRequestAutoCanceller); + +%{C++ +class uGlobalMenuBar; +class uGlobalMenuRequestAutoCanceller; +class nsIWidget; +class nsIContent; +%} + +[scriptable, uuid(92e2d4d4-84d6-400b-99ce-bb3b63639b5b)] +interface uIGlobalMenuService : nsISupports +{ + /* Create a menu bar from the specified DOM node and associate with the top-level + * window containing the specified DOM window */ + [noscript] void createGlobalMenuBar (in nsIWidgetPtr parent, in nsIContentPtr menuBarNode); + + /* Register a menu bar with the menu bar service */ + [noscript, notxpcom] void registerGlobalMenuBar (in uGlobalMenuBarPtr menuBar, in uGlobalMenuRequestAutoCancellerPtr canceller); + + /* Convenience functions to register to receive notification of the menu + * service online status changing */ + void registerNotification (in nsIObserver observer); + void unregisterNotification (in nsIObserver observer); + + /* Menu service online status */ + readonly attribute boolean online; +}; --- thunderbird-10.0.2+build1.orig/debian/globalmenu/chrome/jar.mn +++ thunderbird-10.0.2+build1/debian/globalmenu/chrome/jar.mn @@ -0,0 +1,8 @@ +globalmenu.jar: +% content globalmenu %content/ + content/firefoxOverlay.xul (content/firefoxOverlay.xul) + content/firefoxMenu.js (content/firefoxMenu.js) + content/thunderbirdOverlay.xul (content/thunderbirdOverlay.xul) + content/thunderbirdMenu.js (content/thunderbirdMenu.js) +% overlay chrome://browser/content/browser.xul chrome://globalmenu/content/firefoxOverlay.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} +% overlay chrome://messenger/content/messenger.xul chrome://globalmenu/content/thunderbirdOverlay.xul application={3550f703-e582-4d05-9a08-453d09bdfdc6} --- thunderbird-10.0.2+build1.orig/debian/globalmenu/chrome/Makefile.in +++ thunderbird-10.0.2+build1/debian/globalmenu/chrome/Makefile.in @@ -0,0 +1,49 @@ +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 2001 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Chris Coulson +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +MODULE = globalmenu +XPI_NAME = globalmenu +USE_EXTENSION_MANIFEST = 1 + +include $(topsrcdir)/config/rules.mk --- thunderbird-10.0.2+build1.orig/debian/globalmenu/chrome/content/thunderbirdOverlay.xul +++ thunderbird-10.0.2+build1/debian/globalmenu/chrome/content/thunderbirdOverlay.xul @@ -0,0 +1,41 @@ + + + + +