summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firefox-1.5-embedwindow-visibility.patch23
-rw-r--r--firefox-1.5-gtk-key-theme-crash.patch27
-rw-r--r--firefox-1.5-theme-change.patch263
-rw-r--r--firefox.spec44
4 files changed, 350 insertions, 7 deletions
diff --git a/firefox-1.5-embedwindow-visibility.patch b/firefox-1.5-embedwindow-visibility.patch
new file mode 100644
index 0000000..a52c8a1
--- /dev/null
+++ b/firefox-1.5-embedwindow-visibility.patch
@@ -0,0 +1,23 @@
+Index: embedding/browser/gtk/src/EmbedWindow.cpp
+===================================================================
+RCS file: /cvsroot/mozilla/embedding/browser/gtk/src/EmbedWindow.cpp,v
+retrieving revision 1.31
+diff -d -u -p -r1.31 EmbedWindow.cpp
+--- embedding/browser/gtk/src/EmbedWindow.cpp 17 Jan 2005 17:19:39 -0000 1.31
++++ embedding/browser/gtk/src/EmbedWindow.cpp 27 Sep 2006 00:41:38 -0000
+@@ -359,7 +359,14 @@ EmbedWindow::GetSiteWindow(void **aSiteW
+ NS_IMETHODIMP
+ EmbedWindow::GetVisibility(PRBool *aVisibility)
+ {
+- *aVisibility = mVisibility;
++ // XXX See bug 312998
++ // Work around the problem that sometimes the window
++ // is already visible even though mVisibility isn't true
++ // yet.
++ *aVisibility = mVisibility ||
++ (!mOwner->mIsChrome &&
++ mOwner->mOwningWidget &&
++ GTK_WIDGET_MAPPED(mOwner->mOwningWidget));
+ return NS_OK;
+ }
+
diff --git a/firefox-1.5-gtk-key-theme-crash.patch b/firefox-1.5-gtk-key-theme-crash.patch
new file mode 100644
index 0000000..a9175cd
--- /dev/null
+++ b/firefox-1.5-gtk-key-theme-crash.patch
@@ -0,0 +1,27 @@
+Index: widget/src/gtk2/nsWindow.cpp
+===================================================================
+RCS file: /cvsroot/mozilla/widget/src/gtk2/nsWindow.cpp,v
+retrieving revision 1.185
+diff -u -8 -p -r1.185 nsWindow.cpp
+--- widget/src/gtk2/nsWindow.cpp 20 Sep 2006 19:16:19 -0000 1.185
++++ widget/src/gtk2/nsWindow.cpp 22 Sep 2006 05:07:04 -0000
+@@ -2859,19 +2859,16 @@ nsWindow::NativeCreate(nsIWidget
+ g_signal_connect(G_OBJECT(mShell), "window_state_event",
+ G_CALLBACK(window_state_event_cb), NULL);
+
+ GtkSettings* default_settings = gtk_settings_get_default();
+ g_signal_connect_after(default_settings,
+ "notify::gtk-theme-name",
+ G_CALLBACK(theme_changed_cb), this);
+ g_signal_connect_after(default_settings,
+- "notify::gtk-key-theme-name",
+- G_CALLBACK(theme_changed_cb), this);
+- g_signal_connect_after(default_settings,
+ "notify::gtk-font-name",
+ G_CALLBACK(theme_changed_cb), this);
+ }
+
+ if (mContainer) {
+ g_signal_connect_after(G_OBJECT(mContainer), "size_allocate",
+ G_CALLBACK(size_allocate_cb), NULL);
+ g_signal_connect(G_OBJECT(mContainer), "expose_event",
diff --git a/firefox-1.5-theme-change.patch b/firefox-1.5-theme-change.patch
new file mode 100644
index 0000000..375f06f
--- /dev/null
+++ b/firefox-1.5-theme-change.patch
@@ -0,0 +1,263 @@
+Index: layout/base/nsPresContext.cpp
+===================================================================
+RCS file: /cvsroot/mozilla/layout/base/nsPresContext.cpp,v
+retrieving revision 3.288.12.2.4.1
+diff -d -u -p -r3.288.12.2.4.1 nsPresContext.cpp
+--- layout/base/nsPresContext.cpp 21 Apr 2006 23:30:50 -0000 3.288.12.2.4.1
++++ layout/base/nsPresContext.cpp 26 Sep 2006 19:26:40 -0000
+@@ -73,6 +73,9 @@
+ #include "nsIDOMDocument.h"
+ #include "nsAutoPtr.h"
+ #include "nsEventStateManager.h"
++#include "nsIEventQueue.h"
++#include "nsIEventQueueService.h"
++
+ #ifdef IBMBIDI
+ #include "nsBidiPresUtils.h"
+ #endif // IBMBIDI
+@@ -267,6 +270,7 @@ nsPresContext::~nsPresContext()
+ NS_IF_RELEASE(mDeviceContext);
+ NS_IF_RELEASE(mLookAndFeel);
+ NS_IF_RELEASE(mLangGroup);
++ NS_IF_RELEASE(mEventQueueService);
+ }
+
+ NS_IMPL_ISUPPORTS2(nsPresContext, nsPresContext, nsIObserver)
+@@ -285,6 +289,17 @@ static const char* const kGenericFont[]
+ ".fantasy."
+ };
+
++// Set to true when LookAndFeelChanged needs to be called. This is used
++// because the look and feel is a service, so there's no need to notify it from
++// more than one prescontext.
++static PRBool sLookAndFeelChanged;
++
++// Set to true when ThemeChanged needs to be called on mTheme. This is used
++// because mTheme is a service, so there's no need to notify it from more than
++// one prescontext.
++static PRBool sThemeChanged;
++
++
+ void
+ nsPresContext::GetFontPreferences()
+ {
+@@ -709,6 +724,9 @@ nsPresContext::Init(nsIDeviceContext* aD
+ this);
+ #endif
+
++ rv = CallGetService(NS_EVENTQUEUESERVICE_CONTRACTID, &mEventQueueService);
++ NS_ENSURE_SUCCESS(rv, rv);
++
+ // Initialize our state from the user preferences
+ GetUserPreferences();
+
+@@ -1180,33 +1198,126 @@ nsPresContext::GetTheme()
+ void
+ nsPresContext::ThemeChanged()
+ {
++ if (!mPendingThemeChanged) {
++ sLookAndFeelChanged = PR_TRUE;
++ sThemeChanged = PR_TRUE;
++
++ nsCOMPtr<nsIEventQueue> eventQ;
++ mEventQueueService->
++ GetSpecialEventQueue(nsIEventQueueService::UI_THREAD_EVENT_QUEUE,
++ getter_AddRefs(eventQ));
++ if (!eventQ) {
++ return;
++ }
++
++ PLEvent* evt = new PLEvent();
++ if (!evt) {
++ return;
++ }
++
++ PL_InitEvent(evt, this, nsPresContext::ThemeChangedInternal,
++ nsPresContext::DestroyThemeChangeEvt);
++
++ // After this point, event destruction will release |this|
++ NS_ADDREF_THIS();
++
++ nsresult rv = eventQ->PostEvent(evt);
++ if (NS_FAILED(rv)) {
++ PL_DestroyEvent(evt);
++ } else {
++ mPendingThemeChanged = PR_TRUE;
++ }
++ }
++}
++
++void* PR_CALLBACK
++nsPresContext::ThemeChangedInternal(PLEvent *aEvent)
++{
++ nsPresContext* pc = NS_STATIC_CAST(nsPresContext*, aEvent->owner);
++
++ pc->mPendingThemeChanged = PR_FALSE;
++
+ // Tell the theme that it changed, so it can flush any handles to stale theme
+ // data.
+- if (mTheme)
+- mTheme->ThemeChanged();
++ if (pc->mTheme && sThemeChanged) {
++ pc->mTheme->ThemeChanged();
++ sThemeChanged = PR_FALSE;
++ }
+
+ // Clear all cached nsILookAndFeel colors.
+- if (mLookAndFeel)
+- mLookAndFeel->LookAndFeelChanged();
++ if (pc->mLookAndFeel && sLookAndFeelChanged) {
++ pc->mLookAndFeel->LookAndFeelChanged();
++ sLookAndFeelChanged = PR_FALSE;
++ }
+
+ // We have to clear style data because the assumption of style rule
+ // immutability has been violated since any style rule that uses
+ // system colors or fonts (and probably -moz-appearance as well) has
+ // changed.
+- nsPresContext::ClearStyleDataAndReflow();
++ pc->ClearStyleDataAndReflow();
++
++ return nsnull;
++}
++
++
++void PR_CALLBACK
++nsPresContext::DestroyThemeChangeEvt(PLEvent* aEvent)
++{
++ nsPresContext* pc = NS_STATIC_CAST(nsPresContext*, aEvent->owner);
++ NS_RELEASE(pc);
++ delete aEvent;
+ }
+
+ void
+ nsPresContext::SysColorChanged()
+ {
+- if (mLookAndFeel) {
++ if (!mPendingSysColorChanged) {
++ sLookAndFeelChanged = PR_TRUE;
++
++ nsCOMPtr<nsIEventQueue> eventQ;
++ mEventQueueService->
++ GetSpecialEventQueue(nsIEventQueueService::UI_THREAD_EVENT_QUEUE,
++ getter_AddRefs(eventQ));
++ if (!eventQ) {
++ return;
++ }
++
++ PLEvent* evt = new PLEvent();
++ if (!evt) {
++ return;
++ }
++
++ PL_InitEvent(evt, this, nsPresContext::SysColorChangedInternal,
++ nsPresContext::DestroySysColorChangeEvt);
++
++ // After this point, event destruction will release |this|
++ NS_ADDREF_THIS();
++
++ nsresult rv = eventQ->PostEvent(evt);
++ if (NS_FAILED(rv)) {
++ PL_DestroyEvent(evt);
++ } else {
++ mPendingSysColorChanged = PR_TRUE;
++ }
++ }
++}
++
++void* PR_CALLBACK
++nsPresContext::SysColorChangedInternal(PLEvent *aEvent)
++{
++ nsPresContext* pc = NS_STATIC_CAST(nsPresContext*, aEvent->owner);
++
++ pc->mPendingSysColorChanged = PR_FALSE;
++
++ if (pc->mLookAndFeel && sLookAndFeelChanged) {
+ // Don't use the cached values for the system colors
+- mLookAndFeel->LookAndFeelChanged();
++ pc->mLookAndFeel->LookAndFeelChanged();
++ sLookAndFeelChanged = PR_FALSE;
+ }
+-
++
+ // Reset default background and foreground colors for the document since
+ // they may be using system colors
+- GetDocumentColorPreferences();
++ pc->GetDocumentColorPreferences();
+
+ // Clear out all of the style data since it may contain RGB values
+ // which originated from system colors.
+@@ -1222,7 +1333,17 @@ nsPresContext::SysColorChanged()
+ // data without reflowing/updating views will lead to incorrect change hints
+ // later, because when generating change hints, any style structs which have
+ // been cleared and not reread are assumed to not be used at all.
+- ClearStyleDataAndReflow();
++ pc->ClearStyleDataAndReflow();
++
++ return nsnull;
++}
++
++void PR_CALLBACK
++nsPresContext::DestroySysColorChangeEvt(PLEvent* aEvent)
++{
++ nsPresContext* pc = NS_STATIC_CAST(nsPresContext*, aEvent->owner);
++ NS_RELEASE(pc);
++ delete aEvent;
+ }
+
+ void
+Index: layout/base/nsPresContext.h
+===================================================================
+RCS file: /cvsroot/mozilla/layout/base/nsPresContext.h,v
+retrieving revision 3.150.4.2
+diff -d -u -p -r3.150.4.2 nsPresContext.h
+--- layout/base/nsPresContext.h 29 Aug 2005 16:15:39 -0000 3.150.4.2
++++ layout/base/nsPresContext.h 26 Sep 2006 19:26:40 -0000
+@@ -56,6 +56,7 @@
+ #include "nsCRT.h"
+ #include "nsIPrintSettings.h"
+ #include "nsPropertyTable.h"
++#include "plevent.h"
+ #ifdef IBMBIDI
+ class nsBidiPresUtils;
+ #endif // IBMBIDI
+@@ -76,6 +77,7 @@ class nsIAtom;
+ class nsIEventStateManager;
+ class nsIURI;
+ class nsILookAndFeel;
++class nsIEventQueueService;
+ class nsICSSPseudoComparator;
+ class nsIAtom;
+ struct nsStyleStruct;
+@@ -627,6 +629,14 @@ public:
+ const nscoord* GetBorderWidthTable() { return mBorderWidthTable; }
+
+ protected:
++ static NS_HIDDEN_(void*) PR_CALLBACK ThemeChangedInternal(PLEvent* aEvent);
++ static NS_HIDDEN_(void*) PR_CALLBACK SysColorChangedInternal(PLEvent* aEvent);
++ static NS_HIDDEN_(void) PR_CALLBACK DestroyThemeChangeEvt(PLEvent* aEvent);
++ static NS_HIDDEN_(void) PR_CALLBACK DestroySysColorChangeEvt(PLEvent* aEvent);
++
++ friend void* PR_CALLBACK ThemeChangedInternal(PLEvent* aEvent);
++ friend void* PR_CALLBACK SysColorChangedInternal(PLEvent* aEvent);
++
+ NS_HIDDEN_(void) SetImgAnimations(nsIContent *aParent, PRUint16 aMode);
+ NS_HIDDEN_(void) GetDocumentColorPreferences();
+
+@@ -654,6 +664,7 @@ protected:
+ // from gfx back to layout.
+ nsIEventStateManager* mEventManager; // [STRONG]
+ nsILookAndFeel* mLookAndFeel; // [STRONG]
++ nsIEventQueueService *mEventQueueService; // [STRONG]
+ nsIAtom* mMedium; // initialized by subclass ctors;
+ // weak pointer to static atom
+
+@@ -724,6 +735,8 @@ protected:
+ unsigned mCanPaginatedScroll : 1;
+ unsigned mDoScaledTwips : 1;
+ unsigned mEnableJapaneseTransform : 1;
++ unsigned mPendingSysColorChanged : 1;
++ unsigned mPendingThemeChanged : 1;
+ #ifdef IBMBIDI
+ unsigned mIsVisual : 1;
+ unsigned mIsBidiSystem : 1;
diff --git a/firefox.spec b/firefox.spec
index 70f63fa..b5e7815 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -11,7 +11,7 @@
Summary: Mozilla Firefox Web browser.
Name: firefox
Version: 1.5.0.7
-Release: 4%{?dist}
+Release: 5%{?dist}
URL: http://www.mozilla.org/projects/firefox/
License: MPL/LGPL
Group: Applications/Internet
@@ -56,9 +56,20 @@ Patch81: firefox-1.5-nopangoxft.patch
Patch82: firefox-1.5-pango-mathml.patch
Patch83: firefox-1.5-pango-cursor-position.patch
-# patches from upstream (Patch100+)
-Patch101: firefox-1.5-pango-ua.patch
-Patch102: firefox-1.5-pango-about.patch
+# Other
+Patch100: firefox-1.5-gtk-key-theme-crash.patch
+Patch101: firefox-1.5-embedwindow-visibility.patch
+Patch102: firefox-1.5-theme-change.patch
+
+%if %{official_branding}
+# Required by Mozilla Corporation
+
+
+%else
+# Not yet approved by Mozillla Corporation
+
+
+%endif
# ---------------------------------------------------
@@ -134,8 +145,21 @@ removed in favor of xulrunner-devel.
%patch82 -p1
%patch83 -p1
-%patch101 -p0 -b .pango-ua
-%patch102 -p0 -b .pango-about
+%patch100 -p0 -b .gtk-key-theme-crash
+%patch101 -p0 -b .embedwindow-visibility
+%patch102 -p0 -b .theme-change
+
+# For branding specific patches.
+
+%if %{official_branding}
+# Required by Mozilla Corporation
+
+
+%else
+# Not yet approved by Mozilla Corporation
+
+
+%endif
%{__rm} -f .mozconfig
%{__cp} %{SOURCE10} .mozconfig
@@ -280,7 +304,7 @@ install -c -m 644 build/unix/*.pc \
%endif
%{__mkdir_p} $RPM_BUILD_ROOT/etc/gre.d/
-cat > $RPM_BUILD_ROOT/etc/gre.d/%{gre_conf_file} << EOF
+%{__cat} > $RPM_BUILD_ROOT/etc/gre.d/%{gre_conf_file} << EOF
[%{version}]
GRE_PATH=%{mozappdir}
EOF
@@ -371,6 +395,12 @@ fi
#---------------------------------------------------------------------
%changelog
+* Tue Sep 26 2006 Christopher Aillon <caillon@redhat.com> 1.5.0.7-5
+- Fix crash when changing gtk key theme
+- Fix gtkmozembed window visibility
+- Prevent UI freezes while changing GNOME theme
+- Remove verbiage about pango; no longer required by upstream.
+
* Tue Sep 19 2006 Christopher Aillon <caillon@redhat/com> 1.5.0.7-4
- Arrrr! Add Obsoletes: mozilla to avoid GRE conflicts, me hearties!
bgstack15