diff options
author | marcus <marcus@FreeBSD.org> | 2006-02-02 01:55:04 +0800 |
---|---|---|
committer | marcus <marcus@FreeBSD.org> | 2006-02-02 01:55:04 +0800 |
commit | aa56eb26845bba0b900e55e9a57b8912191bf7c7 (patch) | |
tree | c9288a0d0e5efeff2789b4904d3ff96896946596 /www/firefox/files | |
parent | 96b20515548a02b392ff8c6edc7b7883f331fb5f (diff) | |
download | freebsd-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.cpp | 58 |
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(); + } + |