diff options
-rw-r--r-- | firefox-1.5-embedwindow-visibility.patch | 23 | ||||
-rw-r--r-- | firefox-1.5-gtk-key-theme-crash.patch | 27 | ||||
-rw-r--r-- | firefox-1.5-theme-change.patch | 263 | ||||
-rw-r--r-- | firefox.spec | 44 |
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! |