aboutsummaryrefslogtreecommitdiffstats
path: root/www/firefox/files
diff options
context:
space:
mode:
authormarcus <marcus@FreeBSD.org>2006-02-02 01:55:04 +0800
committermarcus <marcus@FreeBSD.org>2006-02-02 01:55:04 +0800
commitaa56eb26845bba0b900e55e9a57b8912191bf7c7 (patch)
treec9288a0d0e5efeff2789b4904d3ff96896946596 /www/firefox/files
parent96b20515548a02b392ff8c6edc7b7883f331fb5f (diff)
downloadfreebsd-ports-gnome-aa56eb26845bba0b900e55e9a57b8912191bf7c7.tar.gz
freebsd-ports-gnome-aa56eb26845bba0b900e55e9a57b8912191bf7c7.tar.zst
freebsd-ports-gnome-aa56eb26845bba0b900e55e9a57b8912191bf7c7.zip
Firefox may hang for some users for a few seconds at a time eating up all
of the CPU. This is triggered by a bug in Gecko/GTK+ interaction. This patch corrects the problem. See https://bugzilla.mozilla.org/show_bug.cgi?id=305970 for more details. PR: 92467 Obtained from: https://bugzilla.mozilla.org/show_bug.cgi?id=305970
Diffstat (limited to 'www/firefox/files')
-rw-r--r--www/firefox/files/patch-widget_src_gtk2_nsWindow.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/www/firefox/files/patch-widget_src_gtk2_nsWindow.cpp b/www/firefox/files/patch-widget_src_gtk2_nsWindow.cpp
new file mode 100644
index 000000000000..073eb34a3d74
--- /dev/null
+++ b/www/firefox/files/patch-widget_src_gtk2_nsWindow.cpp
@@ -0,0 +1,58 @@
+--- widget/src/gtk2/nsWindow.cpp.orig Thu Aug 18 10:11:23 2005
++++ widget/src/gtk2/nsWindow.cpp Sat Jan 28 18:34:03 2006
+@@ -148,9 +148,9 @@
+ GdkEventVisibility *event);
+ static gboolean window_state_event_cb (GtkWidget *widget,
+ GdkEventWindowState *event);
+-static void style_set_cb (GtkWidget *widget,
+- GtkStyle *previous_style,
+- gpointer data);
++static void theme_changed_cb (GtkSettings *settings,
++ GParamSpec *pspec,
++ nsWindow *data);
+ #ifdef __cplusplus
+ extern "C" {
+ #endif /* __cplusplus */
+@@ -372,6 +372,10 @@
+ mIsDestroyed = PR_TRUE;
+ mCreated = PR_FALSE;
+
++ g_signal_handlers_disconnect_by_func(gtk_settings_get_default(),
++ (gpointer)G_CALLBACK(theme_changed_cb),
++ this);
++
+ // ungrab if required
+ nsCOMPtr<nsIWidget> rollupWidget = do_QueryReferent(gRollupWindow);
+ if (NS_STATIC_CAST(nsIWidget *, this) == rollupWidget.get()) {
+@@ -2434,8 +2438,16 @@
+ G_CALLBACK(delete_event_cb), NULL);
+ g_signal_connect(G_OBJECT(mShell), "window_state_event",
+ G_CALLBACK(window_state_event_cb), NULL);
+- g_signal_connect(G_OBJECT(mShell), "style_set",
+- G_CALLBACK(style_set_cb), NULL);
++
++ g_signal_connect_after(gtk_settings_get_default(),
++ "notify::gtk-theme-name",
++ G_CALLBACK(theme_changed_cb), this);
++ g_signal_connect_after(gtk_settings_get_default(),
++ "notify::gtk-key-theme-name",
++ G_CALLBACK(theme_changed_cb), this);
++ g_signal_connect_after(gtk_settings_get_default(),
++ "notify::gtk-font-name",
++ G_CALLBACK(theme_changed_cb), this);
+ }
+
+ if (mContainer) {
+@@ -3916,11 +3928,9 @@
+
+ /* static */
+ void
+-style_set_cb (GtkWidget *widget, GtkStyle *previous_style, gpointer data)
++theme_changed_cb (GtkSettings *settings, GParamSpec *pspec, nsWindow *data)
+ {
+- nsWindow *window = get_window_for_gtk_widget(widget);
+- if (window)
+- window->ThemeChanged();
++ data->ThemeChanged();
+ }
+