From 33c5928a1aa6ea9d9ead3efe17c3364467c0a20d Mon Sep 17 00:00:00 2001 From: Brian Pepple Date: Sep 14 2009 23:45:54 +0000 Subject: - Back-port patch to prevent video widget from crashing. --- diff --git a/empathy-video-widget.patch b/empathy-video-widget.patch new file mode 100644 index 0000000..f59a5fd --- /dev/null +++ b/empathy-video-widget.patch @@ -0,0 +1,53 @@ +From ddcb7848002b70bc8950d45a9079582a8787c394 Mon Sep 17 00:00:00 2001 +From: Danielle Madeley +Date: Mon, 14 Sep 2009 11:33:06 +1000 +Subject: [PATCH] [EmpathyVideoWidget] fix X crash when using Empathy with GTK+ c-s-w + +In client-side-windows enabled GTK+, a call to GDK_WINDOW_XID() implicitly calls +gdk_window_ensure_native() so that a native X11 window exists serverside to +have an XID for. + +Calling gdk_window_ensure_native() from a thread is not awesome and causes +Empathy to abort with one of several X errors. The fix is to call +GDK_WINDOW_XID() as soon as the widget is realized, before the XID is requested +from a thread (it would be neater to call gdk_window_ensure_native() here, +but that would force us to require GTK+ 2.18, which we don't want to do). + +Fixes gnome bug #594890 +--- + libempathy-gtk/empathy-video-widget.c | 13 +++++++++++++ + 1 files changed, 13 insertions(+), 0 deletions(-) + +diff --git a/libempathy-gtk/empathy-video-widget.c b/libempathy-gtk/empathy-video-widget.c +index 0f62496..915aa33 100644 +--- a/libempathy-gtk/empathy-video-widget.c ++++ b/libempathy-gtk/empathy-video-widget.c +@@ -100,12 +100,25 @@ empathy_video_widget_init (EmpathyVideoWidget *obj) + } + + static void ++empathy_video_widget_realized (GtkWidget *widget, gpointer user_data) ++{ ++ /* requesting the XID forces the GdkWindow to be native in GTK+ 2.18 ++ * onwards, requesting the native window in a thread causes a BadWindowID, ++ * so we need to request it now. We could call gdk_window_ensure_native(), ++ * but that would mean we require GTK+ 2.18, so instead we call this */ ++ GDK_WINDOW_XID (gtk_widget_get_window (GTK_WIDGET (widget))); ++} ++ ++static void + empathy_video_widget_constructed (GObject *object) + { + EmpathyVideoWidgetPriv *priv = GET_PRIV (object); + GstElement *colorspace, *videoscale, *sink; + GstPad *pad; + ++ g_signal_connect (object, "realize", ++ G_CALLBACK (empathy_video_widget_realized), NULL); ++ + priv->videosink = gst_bin_new (NULL); + + gst_object_ref (priv->videosink); +-- +1.6.4.2 + diff --git a/empathy.spec b/empathy.spec index 91d8512..48f6c74 100644 --- a/empathy.spec +++ b/empathy.spec @@ -15,7 +15,7 @@ Name: empathy Version: 2.27.92 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Instant Messaging Client for GNOME Group: Applications/Communications @@ -33,6 +33,9 @@ Source1: %{name}-README.ConnectionManagers Patch1: %{name}-broken-pkgconfig.patch # http://bugzilla.gnome.org/show_bug.cgi?id=592853 Patch3: presence-icons.patch +# Backported patch to fix crash with video widget. +# http://bugzilla.gnome.org/show_bug.cgi?id=594890 +Patch4: %{name}-video-widget.patch Patch5: %{name}-broken-nm.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -136,6 +139,7 @@ bindings to the libempathy and libempathy-gtk libraries, respectively. %setup -q %patch1 -p1 -b .pkgconfig %patch3 -p1 -b .presence-icons +%patch4 -p1 -b .video %patch5 -p1 -b .nm # force these to be regenerated @@ -245,6 +249,9 @@ fi %{python_sitearch}/empathy*.so %changelog +* Mon Sep 14 2009 Brian Pepple - 2.27.92-2 +- Back-port patch to prevent video widget from crashing. + * Tue Sep 8 2009 Brian Pepple - 2.27.92-1 - Update to 2.27.92. - Drop desktop category patch. Fixed upstream.