Re-enable system cairo for xul-1.9.2 based apps

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Re-enable system cairo for xul-1.9.2 based apps

David Coppa
Hi,

Now that we have cairo-1.10.2, that has fixed many annoying bugs
present in version 1.10.0,
we can safely re-enable system-cairo for mozilla-firefox and
mozilla-thunderbird.
The only remaining problem was with animated gifs, but this[1] patch,
backported from
the firefox-4 branch, fixes it:

[1] http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-libs/xulrunner/files/fix-animated-gifs.patch

Unfortunately, the above trick cannot be applied to firefox35,
seamonkey and sunbird, which will
remain with their in-tree cairo.

What about the following diff?

CIAO
David

Index: devel/xulrunner/1.9/Makefile
===================================================================
RCS file: /cvs/ports/devel/xulrunner/1.9/Makefile,v
retrieving revision 1.36
diff -u -p -r1.36 Makefile
--- devel/xulrunner/1.9/Makefile 18 Jan 2011 12:37:44 -0000 1.36
+++ devel/xulrunner/1.9/Makefile 19 Jan 2011 14:01:13 -0000
@@ -5,7 +5,7 @@ FFX_VERSION = 3.6.13
 MOZILLA_BRANCH = 1.9.2
 MOZILLA_PROJECT = xulrunner1.9
 DISTNAME = firefox-${FFX_VERSION}.source
-REVISION-main = 2
+REVISION-main = 3
 REVISION-devel = 1

 MASTER_SITES = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/${FFX_VERSION}/source/
@@ -26,6 +26,8 @@ PKG_ARGS+= -Djit=0 -Damd64=0
 # use files and patches from www/mozilla-firefox
 PATCHDIR = ${PORTSDIR}/www/mozilla-firefox/patches
 FILESDIR = ${PORTSDIR}/www/mozilla-firefox/files
+
+CONFIGURE_ARGS += --enable-system-cairo

 MOZILLA_DATADIRS = chrome components defaults dictionaries greprefs \
  icons modules plugins res
Index: mail/mozilla-thunderbird/Makefile
===================================================================
RCS file: /cvs/ports/mail/mozilla-thunderbird/Makefile,v
retrieving revision 1.116
diff -u -p -r1.116 Makefile
--- mail/mozilla-thunderbird/Makefile 18 Jan 2011 12:37:44 -0000 1.116
+++ mail/mozilla-thunderbird/Makefile 19 Jan 2011 13:57:47 -0000
@@ -12,7 +12,7 @@ MOZILLA_CODENAME = mail

 MULTI_PACKAGES = -main -lightning
 PKGNAME-main = ${PKGNAME}
-REVISION-main = 2
+REVISION-main = 3
 PKGNAME-lightning = lightning-1.0beta2
 EPOCH-lightning = 0
 REVISION-lightning = 13
@@ -69,6 +69,8 @@ BUILD_DEPENDS += archivers/unzip #to unz
 # build lightning xpi
 CONFIGURE_ARGS += --enable-calendar \
  --enable-official-branding
+
+CONFIGURE_ARGS += --enable-system-cairo

 ALL_TARGET = default

Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
===================================================================
RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp 19
Jan 2011 13:57:47 -0000
@@ -0,0 +1,20 @@
+$OpenBSD$
+--- mozilla/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp.orig Tue
Dec  7 17:35:50 2010
++++ mozilla/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp Wed Jan 19
11:28:20 2011
+@@ -202,7 +202,7 @@ static NS_METHOD ReadDataOut(nsIInputStream* in,
+ nsresult
+ nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint32 rows)
+ {
+-  nsIntRect r(0, fromRow, mGIFStruct.width, rows);
++  nsIntRect r(mGIFStruct.x_offset, mGIFStruct.y_offset + fromRow,
mGIFStruct.width, rows);
+
+   // Update image
+   nsresult rv = mImageContainer->FrameUpdated(mGIFStruct.images_decoded, r);
+@@ -215,7 +215,6 @@ nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint
+   if (!mGIFStruct.images_decoded && mObserver) {
+     PRUint32 imgCurFrame;
+     mImageContainer->GetCurrentFrameIndex(&imgCurFrame);
+-    r.y += mGIFStruct.y_offset;
+     mObserver->OnDataAvailable(nsnull, imgCurFrame ==
PRUint32(mGIFStruct.images_decoded), &r);
+   }
+   return NS_OK;
Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp
===================================================================
RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp
diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp 19
Jan 2011 13:57:47 -0000
@@ -0,0 +1,24 @@
+$OpenBSD$
+--- mozilla/modules/libpr0n/src/imgContainer.cpp.orig Tue Dec  7 17:35:50 2010
++++ mozilla/modules/libpr0n/src/imgContainer.cpp Wed Jan 19 11:28:20 2011
+@@ -420,6 +420,8 @@ nsresult imgContainer::InternalAddFrameHelper(PRUint32
+
+   frame->GetImageData(imageData, imageLength);
+
++  frame->LockImageData();
++
+   mFrames.InsertElementAt(framenum, frame.forget());
+   mNumFrames++;
+
+@@ -444,6 +446,11 @@ nsresult imgContainer::InternalAddFrame(PRUint32 frame
+
+   nsresult rv = frame->Init(aX, aY, aWidth, aHeight, aFormat, aPaletteDepth);
+   NS_ENSURE_SUCCESS(rv, rv);
++
++  if (mFrames.Length() > 0) {
++    imgFrame *prevframe = mFrames.ElementAt(mFrames.Length() - 1);
++    prevframe->UnlockImageData();
++  }
+
+   if (mFrames.Length() == 0) {
+     return InternalAddFrameHelper(framenum, frame.forget(),
imageData, imageLength,
Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp
===================================================================
RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp
diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp 19
Jan 2011 13:57:47 -0000
@@ -0,0 +1,83 @@
+$OpenBSD$
+--- mozilla/modules/libpr0n/src/imgFrame.cpp.orig Tue Dec  7 17:35:50 2010
++++ mozilla/modules/libpr0n/src/imgFrame.cpp Wed Jan 19 11:28:20 2011
+@@ -157,6 +157,7 @@ imgFrame::imgFrame() :
+ #ifdef USE_WIN_SURFACE
+   , mIsDDBSurface(PR_FALSE)
+ #endif
++  , mLocked(PR_FALSE)
+ {
+   static PRBool hasCheckedOptimize = PR_FALSE;
+   if (!hasCheckedOptimize) {
+@@ -418,8 +419,7 @@ void imgFrame::Draw(gfxContext *aContext, gfxPattern::
+
+   PRBool doTile = !imageRect.Contains(sourceRect);
+   if (doPadding || doPartialDecode) {
+-    gfxRect available = gfxRect(mDecoded.x, mDecoded.y,
mDecoded.width, mDecoded.height) +
+-      gfxPoint(aPadding.left, aPadding.top);
++    gfxRect available = gfxRect(mDecoded.x, mDecoded.y,
mDecoded.width, mDecoded.height);
+
+     if (!doTile && !mSinglePixel) {
+       // Not tiling, and we have a surface, so we can account for
+@@ -713,7 +713,7 @@ nsresult imgFrame::ImageUpdated(const nsIntRect &aUpda
+
+   // clamp to bounds, in case someone sends a bogus updateRect (I'm looking at
+   // you, gif decoder)
+-  nsIntRect boundsRect(0, 0, mSize.width, mSize.height);
++  nsIntRect boundsRect(mOffset, mSize);
+   mDecoded.IntersectRect(mDecoded, boundsRect);
+
+ #ifdef XP_MACOSX
+@@ -811,8 +811,14 @@ void imgFrame::GetPaletteData(PRUint32 **aPalette, PRU
+ nsresult imgFrame::LockImageData()
+ {
+   if (mPalettedImageData)
+-    return NS_OK;
++    return NS_ERROR_NOT_AVAILABLE;
+
++  NS_ABORT_IF_FALSE(!mLocked, "Trying to lock already locked image data.");
++  if (mLocked) {
++    return NS_ERROR_FAILURE;
++  }
++  mLocked = PR_TRUE;
++
+   if ((mOptSurface || mSinglePixel) && !mImageSurface) {
+     // Recover the pixels
+     mImageSurface = new gfxImageSurface(gfxIntSize(mSize.width, mSize.height),
+@@ -837,14 +843,26 @@ nsresult imgFrame::LockImageData()
+ #endif
+   }
+
++  if (mImageSurface)
++    mImageSurface->Flush();
++
+   return NS_OK;
+ }
+
+ nsresult imgFrame::UnlockImageData()
+ {
+   if (mPalettedImageData)
+-    return NS_OK;
++    return NS_ERROR_NOT_AVAILABLE;
+
++  NS_ABORT_IF_FALSE(mLocked, "Unlocking an unlocked image!");
++  if (!mLocked) {
++    return NS_ERROR_FAILURE;
++  }
++  mLocked = PR_FALSE;
++
++  if (mImageSurface)
++    mImageSurface->MarkDirty();
++
+ #ifdef XP_MACOSX
+   if (mQuartzSurface)
+     mQuartzSurface->Flush();
+@@ -900,7 +918,7 @@ void imgFrame::SetBlendMethod(PRInt32 aBlendMethod)
+
+ PRBool imgFrame::ImageComplete() const
+ {
+-  return mDecoded == nsIntRect(0, 0, mSize.width, mSize.height);
++  return mDecoded == nsIntRect(mOffset, mSize);
+ }
+
+ // A hint from the image decoders that this image has no alpha, even
Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h
===================================================================
RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h
diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h 19
Jan 2011 13:57:47 -0000
@@ -0,0 +1,11 @@
+$OpenBSD$
+--- mozilla/modules/libpr0n/src/imgFrame.h.orig Tue Dec  7 17:35:50 2010
++++ mozilla/modules/libpr0n/src/imgFrame.h Wed Jan 19 11:28:20 2011
+@@ -172,6 +172,7 @@ class imgFrame (private)
+   PRPackedBool mNeverUseDeviceSurface;
+   PRPackedBool mFormatChanged;
+   PRPackedBool mCompositingFailed;
++  PRPackedBool mLocked;
+
+ #ifdef XP_WIN
+   PRPackedBool mIsDDBSurface;
Index: www/mozilla-firefox/Makefile
===================================================================
RCS file: /cvs/ports/www/mozilla-firefox/Makefile,v
retrieving revision 1.165
diff -u -p -r1.165 Makefile
--- www/mozilla-firefox/Makefile 18 Jan 2011 12:33:38 -0000 1.165
+++ www/mozilla-firefox/Makefile 19 Jan 2011 13:57:48 -0000
@@ -7,7 +7,7 @@ MOZILLA_VERSION = 3.6.13
 MOZILLA_BRANCH = 1.9.2
 MOZILLA_PROJECT = mozilla-firefox
 MOZILLA_CODENAME = browser
-REVISION = 2
+REVISION = 3

 SO_VERSION = 22.2
 # NOTE: Must bump minor version if any shlib's are removed from the
@@ -39,6 +39,8 @@ CONFIGURE_STYLE = autoconf no-autoheader
 CONFIGURE_ARGS += --enable-official-branding
 # --with-system-png=${LOCALBASE}
 # no system png : apng support not bundled in
+
+CONFIGURE_ARGS += --enable-system-cairo

 MOZILLA_DATADIRS = chrome components defaults dictionaries extensions \
  greprefs icons modules plugins res searchplugins
Index: www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
===================================================================
RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp 19
Jan 2011 13:57:48 -0000
@@ -0,0 +1,20 @@
+$OpenBSD$
+--- modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp.orig Fri Dec  3
16:48:47 2010
++++ modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp Wed Jan 19 11:07:31 2011
+@@ -202,7 +202,7 @@ static NS_METHOD ReadDataOut(nsIInputStream* in,
+ nsresult
+ nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint32 rows)
+ {
+-  nsIntRect r(0, fromRow, mGIFStruct.width, rows);
++  nsIntRect r(mGIFStruct.x_offset, mGIFStruct.y_offset + fromRow,
mGIFStruct.width, rows);
+
+   // Update image
+   nsresult rv = mImageContainer->FrameUpdated(mGIFStruct.images_decoded, r);
+@@ -215,7 +215,6 @@ nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint
+   if (!mGIFStruct.images_decoded && mObserver) {
+     PRUint32 imgCurFrame;
+     mImageContainer->GetCurrentFrameIndex(&imgCurFrame);
+-    r.y += mGIFStruct.y_offset;
+     mObserver->OnDataAvailable(nsnull, imgCurFrame ==
PRUint32(mGIFStruct.images_decoded), &r);
+   }
+   return NS_OK;
Index: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp
===================================================================
RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp
diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp 19
Jan 2011 13:57:48 -0000
@@ -0,0 +1,24 @@
+$OpenBSD$
+--- modules/libpr0n/src/imgContainer.cpp.orig Fri Dec  3 16:48:47 2010
++++ modules/libpr0n/src/imgContainer.cpp Wed Jan 19 11:07:31 2011
+@@ -420,6 +420,8 @@ nsresult imgContainer::InternalAddFrameHelper(PRUint32
+
+   frame->GetImageData(imageData, imageLength);
+
++  frame->LockImageData();
++
+   mFrames.InsertElementAt(framenum, frame.forget());
+   mNumFrames++;
+
+@@ -444,6 +446,11 @@ nsresult imgContainer::InternalAddFrame(PRUint32 frame
+
+   nsresult rv = frame->Init(aX, aY, aWidth, aHeight, aFormat, aPaletteDepth);
+   NS_ENSURE_SUCCESS(rv, rv);
++
++  if (mFrames.Length() > 0) {
++    imgFrame *prevframe = mFrames.ElementAt(mFrames.Length() - 1);
++    prevframe->UnlockImageData();
++  }
+
+   if (mFrames.Length() == 0) {
+     return InternalAddFrameHelper(framenum, frame.forget(),
imageData, imageLength,
Index: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp
===================================================================
RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp
diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp 19
Jan 2011 13:57:48 -0000
@@ -0,0 +1,83 @@
+$OpenBSD$
+--- modules/libpr0n/src/imgFrame.cpp.orig Fri Dec  3 16:48:47 2010
++++ modules/libpr0n/src/imgFrame.cpp Wed Jan 19 11:07:31 2011
+@@ -157,6 +157,7 @@ imgFrame::imgFrame() :
+ #ifdef USE_WIN_SURFACE
+   , mIsDDBSurface(PR_FALSE)
+ #endif
++  , mLocked(PR_FALSE)
+ {
+   static PRBool hasCheckedOptimize = PR_FALSE;
+   if (!hasCheckedOptimize) {
+@@ -418,8 +419,7 @@ void imgFrame::Draw(gfxContext *aContext, gfxPattern::
+
+   PRBool doTile = !imageRect.Contains(sourceRect);
+   if (doPadding || doPartialDecode) {
+-    gfxRect available = gfxRect(mDecoded.x, mDecoded.y,
mDecoded.width, mDecoded.height) +
+-      gfxPoint(aPadding.left, aPadding.top);
++    gfxRect available = gfxRect(mDecoded.x, mDecoded.y,
mDecoded.width, mDecoded.height);
+
+     if (!doTile && !mSinglePixel) {
+       // Not tiling, and we have a surface, so we can account for
+@@ -713,7 +713,7 @@ nsresult imgFrame::ImageUpdated(const nsIntRect &aUpda
+
+   // clamp to bounds, in case someone sends a bogus updateRect (I'm looking at
+   // you, gif decoder)
+-  nsIntRect boundsRect(0, 0, mSize.width, mSize.height);
++  nsIntRect boundsRect(mOffset, mSize);
+   mDecoded.IntersectRect(mDecoded, boundsRect);
+
+ #ifdef XP_MACOSX
+@@ -811,8 +811,14 @@ void imgFrame::GetPaletteData(PRUint32 **aPalette, PRU
+ nsresult imgFrame::LockImageData()
+ {
+   if (mPalettedImageData)
+-    return NS_OK;
++    return NS_ERROR_NOT_AVAILABLE;
+
++  NS_ABORT_IF_FALSE(!mLocked, "Trying to lock already locked image data.");
++  if (mLocked) {
++    return NS_ERROR_FAILURE;
++  }
++  mLocked = PR_TRUE;
++
+   if ((mOptSurface || mSinglePixel) && !mImageSurface) {
+     // Recover the pixels
+     mImageSurface = new gfxImageSurface(gfxIntSize(mSize.width, mSize.height),
+@@ -837,14 +843,26 @@ nsresult imgFrame::LockImageData()
+ #endif
+   }
+
++  if (mImageSurface)
++    mImageSurface->Flush();
++
+   return NS_OK;
+ }
+
+ nsresult imgFrame::UnlockImageData()
+ {
+   if (mPalettedImageData)
+-    return NS_OK;
++    return NS_ERROR_NOT_AVAILABLE;
+
++  NS_ABORT_IF_FALSE(mLocked, "Unlocking an unlocked image!");
++  if (!mLocked) {
++    return NS_ERROR_FAILURE;
++  }
++  mLocked = PR_FALSE;
++
++  if (mImageSurface)
++    mImageSurface->MarkDirty();
++
+ #ifdef XP_MACOSX
+   if (mQuartzSurface)
+     mQuartzSurface->Flush();
+@@ -900,7 +918,7 @@ void imgFrame::SetBlendMethod(PRInt32 aBlendMethod)
+
+ PRBool imgFrame::ImageComplete() const
+ {
+-  return mDecoded == nsIntRect(0, 0, mSize.width, mSize.height);
++  return mDecoded == nsIntRect(mOffset, mSize);
+ }
+
+ // A hint from the image decoders that this image has no alpha, even
Index: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h
===================================================================
RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h
diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h 19
Jan 2011 13:57:48 -0000
@@ -0,0 +1,11 @@
+$OpenBSD$
+--- modules/libpr0n/src/imgFrame.h.orig Fri Dec  3 16:48:47 2010
++++ modules/libpr0n/src/imgFrame.h Wed Jan 19 11:07:31 2011
+@@ -172,6 +172,7 @@ class imgFrame (private)
+   PRPackedBool mNeverUseDeviceSurface;
+   PRPackedBool mFormatChanged;
+   PRPackedBool mCompositingFailed;
++  PRPackedBool mLocked;
+
+ #ifdef XP_WIN
+   PRPackedBool mIsDDBSurface;

moz_sys_cairo.patch (21K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Re-enable system cairo for xul-1.9.2 based apps

David Coppa
On Wed, Jan 19, 2011 at 3:18 PM, David Coppa <[hidden email]> wrote:

> Hi,
>
> Now that we have cairo-1.10.2, that has fixed many annoying bugs
> present in version 1.10.0,
> we can safely re-enable system-cairo for mozilla-firefox and
> mozilla-thunderbird.
> The only remaining problem was with animated gifs, but this[1] patch,
> backported from
> the firefox-4 branch, fixes it:
>
> [1] http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-libs/xulrunner/files/fix-animated-gifs.patch
>
> Unfortunately, the above trick cannot be applied to firefox35,
> seamonkey and sunbird, which will
> remain with their in-tree cairo.
>
> What about the following diff?
Formatting has been fucked up.
Fortunately, I've attached the original diff.

I'm sorry,
david

moz_sys_cairo.patch (21K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Re-enable system cairo for xul-1.9.2 based apps

Stuart Henderson
In reply to this post by David Coppa
this looks like post-unlock material to me.



On 2011/01/19 15:18, David Coppa wrote:

> Hi,
>
> Now that we have cairo-1.10.2, that has fixed many annoying bugs
> present in version 1.10.0,
> we can safely re-enable system-cairo for mozilla-firefox and
> mozilla-thunderbird.
> The only remaining problem was with animated gifs, but this[1] patch,
> backported from
> the firefox-4 branch, fixes it:
>
> [1] http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/net-libs/xulrunner/files/fix-animated-gifs.patch
>
> Unfortunately, the above trick cannot be applied to firefox35,
> seamonkey and sunbird, which will
> remain with their in-tree cairo.
>
> What about the following diff?
>
> CIAO
> David
>
> Index: devel/xulrunner/1.9/Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/xulrunner/1.9/Makefile,v
> retrieving revision 1.36
> diff -u -p -r1.36 Makefile
> --- devel/xulrunner/1.9/Makefile 18 Jan 2011 12:37:44 -0000 1.36
> +++ devel/xulrunner/1.9/Makefile 19 Jan 2011 14:01:13 -0000
> @@ -5,7 +5,7 @@ FFX_VERSION = 3.6.13
>  MOZILLA_BRANCH = 1.9.2
>  MOZILLA_PROJECT = xulrunner1.9
>  DISTNAME = firefox-${FFX_VERSION}.source
> -REVISION-main = 2
> +REVISION-main = 3
>  REVISION-devel = 1
>
>  MASTER_SITES = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/${FFX_VERSION}/source/
> @@ -26,6 +26,8 @@ PKG_ARGS+= -Djit=0 -Damd64=0
>  # use files and patches from www/mozilla-firefox
>  PATCHDIR = ${PORTSDIR}/www/mozilla-firefox/patches
>  FILESDIR = ${PORTSDIR}/www/mozilla-firefox/files
> +
> +CONFIGURE_ARGS += --enable-system-cairo
>
>  MOZILLA_DATADIRS = chrome components defaults dictionaries greprefs \
>   icons modules plugins res
> Index: mail/mozilla-thunderbird/Makefile
> ===================================================================
> RCS file: /cvs/ports/mail/mozilla-thunderbird/Makefile,v
> retrieving revision 1.116
> diff -u -p -r1.116 Makefile
> --- mail/mozilla-thunderbird/Makefile 18 Jan 2011 12:37:44 -0000 1.116
> +++ mail/mozilla-thunderbird/Makefile 19 Jan 2011 13:57:47 -0000
> @@ -12,7 +12,7 @@ MOZILLA_CODENAME = mail
>
>  MULTI_PACKAGES = -main -lightning
>  PKGNAME-main = ${PKGNAME}
> -REVISION-main = 2
> +REVISION-main = 3
>  PKGNAME-lightning = lightning-1.0beta2
>  EPOCH-lightning = 0
>  REVISION-lightning = 13
> @@ -69,6 +69,8 @@ BUILD_DEPENDS += archivers/unzip #to unz
>  # build lightning xpi
>  CONFIGURE_ARGS += --enable-calendar \
>   --enable-official-branding
> +
> +CONFIGURE_ARGS += --enable-system-cairo
>
>  ALL_TARGET = default
>
> Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
> ===================================================================
> RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
> diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp 19
> Jan 2011 13:57:47 -0000
> @@ -0,0 +1,20 @@
> +$OpenBSD$
> +--- mozilla/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp.orig Tue
> Dec  7 17:35:50 2010
> ++++ mozilla/modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp Wed Jan 19
> 11:28:20 2011
> +@@ -202,7 +202,7 @@ static NS_METHOD ReadDataOut(nsIInputStream* in,
> + nsresult
> + nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint32 rows)
> + {
> +-  nsIntRect r(0, fromRow, mGIFStruct.width, rows);
> ++  nsIntRect r(mGIFStruct.x_offset, mGIFStruct.y_offset + fromRow,
> mGIFStruct.width, rows);
> +
> +   // Update image
> +   nsresult rv = mImageContainer->FrameUpdated(mGIFStruct.images_decoded, r);
> +@@ -215,7 +215,6 @@ nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint
> +   if (!mGIFStruct.images_decoded && mObserver) {
> +     PRUint32 imgCurFrame;
> +     mImageContainer->GetCurrentFrameIndex(&imgCurFrame);
> +-    r.y += mGIFStruct.y_offset;
> +     mObserver->OnDataAvailable(nsnull, imgCurFrame ==
> PRUint32(mGIFStruct.images_decoded), &r);
> +   }
> +   return NS_OK;
> Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp
> ===================================================================
> RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp
> diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgContainer_cpp 19
> Jan 2011 13:57:47 -0000
> @@ -0,0 +1,24 @@
> +$OpenBSD$
> +--- mozilla/modules/libpr0n/src/imgContainer.cpp.orig Tue Dec  7 17:35:50 2010
> ++++ mozilla/modules/libpr0n/src/imgContainer.cpp Wed Jan 19 11:28:20 2011
> +@@ -420,6 +420,8 @@ nsresult imgContainer::InternalAddFrameHelper(PRUint32
> +
> +   frame->GetImageData(imageData, imageLength);
> +
> ++  frame->LockImageData();
> ++
> +   mFrames.InsertElementAt(framenum, frame.forget());
> +   mNumFrames++;
> +
> +@@ -444,6 +446,11 @@ nsresult imgContainer::InternalAddFrame(PRUint32 frame
> +
> +   nsresult rv = frame->Init(aX, aY, aWidth, aHeight, aFormat, aPaletteDepth);
> +   NS_ENSURE_SUCCESS(rv, rv);
> ++
> ++  if (mFrames.Length() > 0) {
> ++    imgFrame *prevframe = mFrames.ElementAt(mFrames.Length() - 1);
> ++    prevframe->UnlockImageData();
> ++  }
> +
> +   if (mFrames.Length() == 0) {
> +     return InternalAddFrameHelper(framenum, frame.forget(),
> imageData, imageLength,
> Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp
> ===================================================================
> RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp
> diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_cpp 19
> Jan 2011 13:57:47 -0000
> @@ -0,0 +1,83 @@
> +$OpenBSD$
> +--- mozilla/modules/libpr0n/src/imgFrame.cpp.orig Tue Dec  7 17:35:50 2010
> ++++ mozilla/modules/libpr0n/src/imgFrame.cpp Wed Jan 19 11:28:20 2011
> +@@ -157,6 +157,7 @@ imgFrame::imgFrame() :
> + #ifdef USE_WIN_SURFACE
> +   , mIsDDBSurface(PR_FALSE)
> + #endif
> ++  , mLocked(PR_FALSE)
> + {
> +   static PRBool hasCheckedOptimize = PR_FALSE;
> +   if (!hasCheckedOptimize) {
> +@@ -418,8 +419,7 @@ void imgFrame::Draw(gfxContext *aContext, gfxPattern::
> +
> +   PRBool doTile = !imageRect.Contains(sourceRect);
> +   if (doPadding || doPartialDecode) {
> +-    gfxRect available = gfxRect(mDecoded.x, mDecoded.y,
> mDecoded.width, mDecoded.height) +
> +-      gfxPoint(aPadding.left, aPadding.top);
> ++    gfxRect available = gfxRect(mDecoded.x, mDecoded.y,
> mDecoded.width, mDecoded.height);
> +
> +     if (!doTile && !mSinglePixel) {
> +       // Not tiling, and we have a surface, so we can account for
> +@@ -713,7 +713,7 @@ nsresult imgFrame::ImageUpdated(const nsIntRect &aUpda
> +
> +   // clamp to bounds, in case someone sends a bogus updateRect (I'm looking at
> +   // you, gif decoder)
> +-  nsIntRect boundsRect(0, 0, mSize.width, mSize.height);
> ++  nsIntRect boundsRect(mOffset, mSize);
> +   mDecoded.IntersectRect(mDecoded, boundsRect);
> +
> + #ifdef XP_MACOSX
> +@@ -811,8 +811,14 @@ void imgFrame::GetPaletteData(PRUint32 **aPalette, PRU
> + nsresult imgFrame::LockImageData()
> + {
> +   if (mPalettedImageData)
> +-    return NS_OK;
> ++    return NS_ERROR_NOT_AVAILABLE;
> +
> ++  NS_ABORT_IF_FALSE(!mLocked, "Trying to lock already locked image data.");
> ++  if (mLocked) {
> ++    return NS_ERROR_FAILURE;
> ++  }
> ++  mLocked = PR_TRUE;
> ++
> +   if ((mOptSurface || mSinglePixel) && !mImageSurface) {
> +     // Recover the pixels
> +     mImageSurface = new gfxImageSurface(gfxIntSize(mSize.width, mSize.height),
> +@@ -837,14 +843,26 @@ nsresult imgFrame::LockImageData()
> + #endif
> +   }
> +
> ++  if (mImageSurface)
> ++    mImageSurface->Flush();
> ++
> +   return NS_OK;
> + }
> +
> + nsresult imgFrame::UnlockImageData()
> + {
> +   if (mPalettedImageData)
> +-    return NS_OK;
> ++    return NS_ERROR_NOT_AVAILABLE;
> +
> ++  NS_ABORT_IF_FALSE(mLocked, "Unlocking an unlocked image!");
> ++  if (!mLocked) {
> ++    return NS_ERROR_FAILURE;
> ++  }
> ++  mLocked = PR_FALSE;
> ++
> ++  if (mImageSurface)
> ++    mImageSurface->MarkDirty();
> ++
> + #ifdef XP_MACOSX
> +   if (mQuartzSurface)
> +     mQuartzSurface->Flush();
> +@@ -900,7 +918,7 @@ void imgFrame::SetBlendMethod(PRInt32 aBlendMethod)
> +
> + PRBool imgFrame::ImageComplete() const
> + {
> +-  return mDecoded == nsIntRect(0, 0, mSize.width, mSize.height);
> ++  return mDecoded == nsIntRect(mOffset, mSize);
> + }
> +
> + // A hint from the image decoders that this image has no alpha, even
> Index: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h
> ===================================================================
> RCS file: mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h
> diff -N mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ mail/mozilla-thunderbird/patches/patch-mozilla_modules_libpr0n_src_imgFrame_h 19
> Jan 2011 13:57:47 -0000
> @@ -0,0 +1,11 @@
> +$OpenBSD$
> +--- mozilla/modules/libpr0n/src/imgFrame.h.orig Tue Dec  7 17:35:50 2010
> ++++ mozilla/modules/libpr0n/src/imgFrame.h Wed Jan 19 11:28:20 2011
> +@@ -172,6 +172,7 @@ class imgFrame (private)
> +   PRPackedBool mNeverUseDeviceSurface;
> +   PRPackedBool mFormatChanged;
> +   PRPackedBool mCompositingFailed;
> ++  PRPackedBool mLocked;
> +
> + #ifdef XP_WIN
> +   PRPackedBool mIsDDBSurface;
> Index: www/mozilla-firefox/Makefile
> ===================================================================
> RCS file: /cvs/ports/www/mozilla-firefox/Makefile,v
> retrieving revision 1.165
> diff -u -p -r1.165 Makefile
> --- www/mozilla-firefox/Makefile 18 Jan 2011 12:33:38 -0000 1.165
> +++ www/mozilla-firefox/Makefile 19 Jan 2011 13:57:48 -0000
> @@ -7,7 +7,7 @@ MOZILLA_VERSION = 3.6.13
>  MOZILLA_BRANCH = 1.9.2
>  MOZILLA_PROJECT = mozilla-firefox
>  MOZILLA_CODENAME = browser
> -REVISION = 2
> +REVISION = 3
>
>  SO_VERSION = 22.2
>  # NOTE: Must bump minor version if any shlib's are removed from the
> @@ -39,6 +39,8 @@ CONFIGURE_STYLE = autoconf no-autoheader
>  CONFIGURE_ARGS += --enable-official-branding
>  # --with-system-png=${LOCALBASE}
>  # no system png : apng support not bundled in
> +
> +CONFIGURE_ARGS += --enable-system-cairo
>
>  MOZILLA_DATADIRS = chrome components defaults dictionaries extensions \
>   greprefs icons modules plugins res searchplugins
> Index: www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
> ===================================================================
> RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
> diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ www/mozilla-firefox/patches/patch-modules_libpr0n_decoders_gif_nsGIFDecoder2_cpp 19
> Jan 2011 13:57:48 -0000
> @@ -0,0 +1,20 @@
> +$OpenBSD$
> +--- modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp.orig Fri Dec  3
> 16:48:47 2010
> ++++ modules/libpr0n/decoders/gif/nsGIFDecoder2.cpp Wed Jan 19 11:07:31 2011
> +@@ -202,7 +202,7 @@ static NS_METHOD ReadDataOut(nsIInputStream* in,
> + nsresult
> + nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint32 rows)
> + {
> +-  nsIntRect r(0, fromRow, mGIFStruct.width, rows);
> ++  nsIntRect r(mGIFStruct.x_offset, mGIFStruct.y_offset + fromRow,
> mGIFStruct.width, rows);
> +
> +   // Update image
> +   nsresult rv = mImageContainer->FrameUpdated(mGIFStruct.images_decoded, r);
> +@@ -215,7 +215,6 @@ nsGIFDecoder2::FlushImageData(PRUint32 fromRow, PRUint
> +   if (!mGIFStruct.images_decoded && mObserver) {
> +     PRUint32 imgCurFrame;
> +     mImageContainer->GetCurrentFrameIndex(&imgCurFrame);
> +-    r.y += mGIFStruct.y_offset;
> +     mObserver->OnDataAvailable(nsnull, imgCurFrame ==
> PRUint32(mGIFStruct.images_decoded), &r);
> +   }
> +   return NS_OK;
> Index: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp
> ===================================================================
> RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp
> diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgContainer_cpp 19
> Jan 2011 13:57:48 -0000
> @@ -0,0 +1,24 @@
> +$OpenBSD$
> +--- modules/libpr0n/src/imgContainer.cpp.orig Fri Dec  3 16:48:47 2010
> ++++ modules/libpr0n/src/imgContainer.cpp Wed Jan 19 11:07:31 2011
> +@@ -420,6 +420,8 @@ nsresult imgContainer::InternalAddFrameHelper(PRUint32
> +
> +   frame->GetImageData(imageData, imageLength);
> +
> ++  frame->LockImageData();
> ++
> +   mFrames.InsertElementAt(framenum, frame.forget());
> +   mNumFrames++;
> +
> +@@ -444,6 +446,11 @@ nsresult imgContainer::InternalAddFrame(PRUint32 frame
> +
> +   nsresult rv = frame->Init(aX, aY, aWidth, aHeight, aFormat, aPaletteDepth);
> +   NS_ENSURE_SUCCESS(rv, rv);
> ++
> ++  if (mFrames.Length() > 0) {
> ++    imgFrame *prevframe = mFrames.ElementAt(mFrames.Length() - 1);
> ++    prevframe->UnlockImageData();
> ++  }
> +
> +   if (mFrames.Length() == 0) {
> +     return InternalAddFrameHelper(framenum, frame.forget(),
> imageData, imageLength,
> Index: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp
> ===================================================================
> RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp
> diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_cpp 19
> Jan 2011 13:57:48 -0000
> @@ -0,0 +1,83 @@
> +$OpenBSD$
> +--- modules/libpr0n/src/imgFrame.cpp.orig Fri Dec  3 16:48:47 2010
> ++++ modules/libpr0n/src/imgFrame.cpp Wed Jan 19 11:07:31 2011
> +@@ -157,6 +157,7 @@ imgFrame::imgFrame() :
> + #ifdef USE_WIN_SURFACE
> +   , mIsDDBSurface(PR_FALSE)
> + #endif
> ++  , mLocked(PR_FALSE)
> + {
> +   static PRBool hasCheckedOptimize = PR_FALSE;
> +   if (!hasCheckedOptimize) {
> +@@ -418,8 +419,7 @@ void imgFrame::Draw(gfxContext *aContext, gfxPattern::
> +
> +   PRBool doTile = !imageRect.Contains(sourceRect);
> +   if (doPadding || doPartialDecode) {
> +-    gfxRect available = gfxRect(mDecoded.x, mDecoded.y,
> mDecoded.width, mDecoded.height) +
> +-      gfxPoint(aPadding.left, aPadding.top);
> ++    gfxRect available = gfxRect(mDecoded.x, mDecoded.y,
> mDecoded.width, mDecoded.height);
> +
> +     if (!doTile && !mSinglePixel) {
> +       // Not tiling, and we have a surface, so we can account for
> +@@ -713,7 +713,7 @@ nsresult imgFrame::ImageUpdated(const nsIntRect &aUpda
> +
> +   // clamp to bounds, in case someone sends a bogus updateRect (I'm looking at
> +   // you, gif decoder)
> +-  nsIntRect boundsRect(0, 0, mSize.width, mSize.height);
> ++  nsIntRect boundsRect(mOffset, mSize);
> +   mDecoded.IntersectRect(mDecoded, boundsRect);
> +
> + #ifdef XP_MACOSX
> +@@ -811,8 +811,14 @@ void imgFrame::GetPaletteData(PRUint32 **aPalette, PRU
> + nsresult imgFrame::LockImageData()
> + {
> +   if (mPalettedImageData)
> +-    return NS_OK;
> ++    return NS_ERROR_NOT_AVAILABLE;
> +
> ++  NS_ABORT_IF_FALSE(!mLocked, "Trying to lock already locked image data.");
> ++  if (mLocked) {
> ++    return NS_ERROR_FAILURE;
> ++  }
> ++  mLocked = PR_TRUE;
> ++
> +   if ((mOptSurface || mSinglePixel) && !mImageSurface) {
> +     // Recover the pixels
> +     mImageSurface = new gfxImageSurface(gfxIntSize(mSize.width, mSize.height),
> +@@ -837,14 +843,26 @@ nsresult imgFrame::LockImageData()
> + #endif
> +   }
> +
> ++  if (mImageSurface)
> ++    mImageSurface->Flush();
> ++
> +   return NS_OK;
> + }
> +
> + nsresult imgFrame::UnlockImageData()
> + {
> +   if (mPalettedImageData)
> +-    return NS_OK;
> ++    return NS_ERROR_NOT_AVAILABLE;
> +
> ++  NS_ABORT_IF_FALSE(mLocked, "Unlocking an unlocked image!");
> ++  if (!mLocked) {
> ++    return NS_ERROR_FAILURE;
> ++  }
> ++  mLocked = PR_FALSE;
> ++
> ++  if (mImageSurface)
> ++    mImageSurface->MarkDirty();
> ++
> + #ifdef XP_MACOSX
> +   if (mQuartzSurface)
> +     mQuartzSurface->Flush();
> +@@ -900,7 +918,7 @@ void imgFrame::SetBlendMethod(PRInt32 aBlendMethod)
> +
> + PRBool imgFrame::ImageComplete() const
> + {
> +-  return mDecoded == nsIntRect(0, 0, mSize.width, mSize.height);
> ++  return mDecoded == nsIntRect(mOffset, mSize);
> + }
> +
> + // A hint from the image decoders that this image has no alpha, even
> Index: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h
> ===================================================================
> RCS file: www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h
> diff -N www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ www/mozilla-firefox/patches/patch-modules_libpr0n_src_imgFrame_h 19
> Jan 2011 13:57:48 -0000
> @@ -0,0 +1,11 @@
> +$OpenBSD$
> +--- modules/libpr0n/src/imgFrame.h.orig Fri Dec  3 16:48:47 2010
> ++++ modules/libpr0n/src/imgFrame.h Wed Jan 19 11:07:31 2011
> +@@ -172,6 +172,7 @@ class imgFrame (private)
> +   PRPackedBool mNeverUseDeviceSurface;
> +   PRPackedBool mFormatChanged;
> +   PRPackedBool mCompositingFailed;
> ++  PRPackedBool mLocked;
> +
> + #ifdef XP_WIN
> +   PRPackedBool mIsDDBSurface;


Reply | Threaded
Open this post in threaded view
|

Re: Re-enable system cairo for xul-1.9.2 based apps

David Coppa
On Wed, Jan 19, 2011 at 5:16 PM, Stuart Henderson <[hidden email]> wrote:
> this looks like post-unlock material to me.

I agree. I was just pushing it to your attention.

ciao,
david

Reply | Threaded
Open this post in threaded view
|

Re: Re-enable system cairo for xul-1.9.2 based apps

Landry Breuil-5
In reply to this post by Stuart Henderson
On Wed, Jan 19, 2011 at 04:16:28PM +0000, Stuart Henderson wrote:
> this looks like post-unlock material to me.

Definitely for post-unlock. Too late for such 'invasive changes'
touching too many files. reading the comments on the bz, it looks like
the patch may land into the tree at some point.
Did you actually tested it ?

Oh, and btw i'd prefer the --enable-system-cairo to go in
mozilla.port.mk, within an .if MOZILLA_BRANCH = 1.9.2 check..

Landry

Reply | Threaded
Open this post in threaded view
|

Re: Re-enable system cairo for xul-1.9.2 based apps

David Coppa
On Wed, Jan 19, 2011 at 5:54 PM, Landry Breuil <[hidden email]> wrote:
> On Wed, Jan 19, 2011 at 04:16:28PM +0000, Stuart Henderson wrote:
>> this looks like post-unlock material to me.
>
> Definitely for post-unlock. Too late for such 'invasive changes'
> touching too many files. reading the comments on the bz, it looks like
> the patch may land into the tree at some point.
> Did you actually tested it ?

Yes, using it since some days and no problems appeared (animated gifs
are working, of course)...

> Oh, and btw i'd prefer the --enable-system-cairo to go in
> mozilla.port.mk, within an .if MOZILLA_BRANCH = 1.9.2 check..

Ok, I'll redo the diff using your suggestion

ciao,
david