diff options
Diffstat (limited to 'x11-libs/wxGTK/files/wxGTK-2.8.10.1-wxTimer-unbounded-hook.patch')
-rw-r--r-- | x11-libs/wxGTK/files/wxGTK-2.8.10.1-wxTimer-unbounded-hook.patch | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/x11-libs/wxGTK/files/wxGTK-2.8.10.1-wxTimer-unbounded-hook.patch b/x11-libs/wxGTK/files/wxGTK-2.8.10.1-wxTimer-unbounded-hook.patch new file mode 100644 index 000000000000..ab9e48419e4f --- /dev/null +++ b/x11-libs/wxGTK/files/wxGTK-2.8.10.1-wxTimer-unbounded-hook.patch @@ -0,0 +1,42 @@ +https://bugs.gentoo.org/301143 +http://trac.wxwidgets.org/ticket/11315 + +diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp +index c203f08..3ccf82f 100644 +--- a/src/gtk/app.cpp ++++ b/src/gtk/app.cpp +@@ -149,9 +149,11 @@ extern "C" + // One-shot emission hook for "event" signal, to install idle handler. + // This will be called when the "event" signal is issued on any GtkWidget object. + static gboolean +-event_emission_hook(GSignalInvocationHint*, guint, const GValue*, gpointer) ++event_emission_hook(GSignalInvocationHint*, guint, const GValue*, gpointer data) + { + wxapp_install_idle_handler(); ++ bool* hook_installed = (bool*)data; ++ *hook_installed = false; + // remove hook + return false; + } +@@ -159,12 +161,17 @@ event_emission_hook(GSignalInvocationHint*, guint, const GValue*, gpointer) + // add emission hook for "event" signal, to re-install idle handler when needed + static inline void wxAddEmissionHook() + { ++ static bool hook_installed; + GType widgetType = GTK_TYPE_WIDGET; +- // if GtkWidget type is loaded +- if (g_type_class_peek(widgetType) != NULL) ++ // if hook not installed and GtkWidget type is loaded ++ if (!hook_installed && g_type_class_peek(widgetType)) + { +- guint sig_id = g_signal_lookup("event", widgetType); +- g_signal_add_emission_hook(sig_id, 0, event_emission_hook, NULL, NULL); ++ static guint sig_id; ++ if (sig_id == 0) ++ sig_id = g_signal_lookup("event", widgetType); ++ hook_installed = true; ++ g_signal_add_emission_hook( ++ sig_id, 0, event_emission_hook, &hook_installed, NULL); + } + } + |