Fix drag and drop problem in mozilla products, bug 162362
authorMart Raudsepp <leio@gentoo.org>
Tue, 16 Jan 2007 20:51:15 +0000 (20:51 +0000)
committerMart Raudsepp <leio@gentoo.org>
Tue, 16 Jan 2007 20:51:15 +0000 (20:51 +0000)
Package-Manager: portage-2.1.2

x11-libs/gtk+/ChangeLog
x11-libs/gtk+/files/digest-gtk+-2.10.7-r1 [new file with mode: 0644]
x11-libs/gtk+/files/gtk+-2.10.7-mozilla-dnd-fix.patch [new file with mode: 0644]
x11-libs/gtk+/gtk+-2.10.7-r1.ebuild [new file with mode: 0644]

index 7f8050fd81ddccaafd22320eead77c5b80f9950d..c211e5895f139a63e3b0894b759e528af9708a64 100644 (file)
@@ -1,6 +1,13 @@
 # ChangeLog for x11-libs/gtk+
 # Copyright 2002-2007 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/x11-libs/gtk+/ChangeLog,v 1.296 2007/01/14 17:22:40 leio Exp $
+# $Header: /var/cvsroot/gentoo-x86/x11-libs/gtk+/ChangeLog,v 1.297 2007/01/16 20:51:15 leio Exp $
+
+*gtk+-2.10.7-r1 (16 Jan 2007)
+
+  16 Jan 2007; Mart Raudsepp <leio@gentoo.org>
+  +files/gtk+-2.10.7-mozilla-dnd-fix.patch, -gtk+-2.10.7.ebuild,
+  +gtk+-2.10.7-r1.ebuild:
+  Fix drag and drop problem in mozilla products, bug 162362
 
 *gtk+-2.10.7 (14 Jan 2007)
 
diff --git a/x11-libs/gtk+/files/digest-gtk+-2.10.7-r1 b/x11-libs/gtk+/files/digest-gtk+-2.10.7-r1
new file mode 100644 (file)
index 0000000..7f6d663
--- /dev/null
@@ -0,0 +1,3 @@
+MD5 acb0c10be4495928db68d2279e34f20c gtk+-2.10.7.tar.bz2 14955229
+RMD160 130af39787b146166846f44b104ea0c3683d0578 gtk+-2.10.7.tar.bz2 14955229
+SHA256 3daead5f578ec2a3752997e6048eb3ecdce208cee560f7289dd9d069ca623276 gtk+-2.10.7.tar.bz2 14955229
diff --git a/x11-libs/gtk+/files/gtk+-2.10.7-mozilla-dnd-fix.patch b/x11-libs/gtk+/files/gtk+-2.10.7-mozilla-dnd-fix.patch
new file mode 100644 (file)
index 0000000..9188972
--- /dev/null
@@ -0,0 +1,72 @@
+This patch is applied upstream to fix http://bugzilla.gnome.org/show_bug.cgi?id=122688
+As this regresses mozilla products drag-and-drop (bug 162362) we are reverse applying
+it as what it fixed is a corner case while mozilla case is a big problem.
+The real problem is inside mozilla code, see http://bugzilla.gnome.org/show_bug.cgi?id=394525
+but we can't fix this for binary thunderbird/firefox/seamonkey packages
+
+--- /branches/gtk-2-10/gtk/gtkdnd.c    2006/11/05 08:55:47     16711
++++ branches/gtk-2-10/gtk/gtkdnd.c     2006/11/06 17:16:37     16712
+@@ -285,6 +285,9 @@
+ static gboolean gtk_drag_grab_broken_event_cb  (GtkWidget          *widget,
+                                               GdkEventGrabBroken *event,
+                                               gpointer            data);
++static void     gtk_drag_grab_notify_cb        (GtkWidget         *widget,
++                                              gboolean           was_grabbed,
++                                              gpointer           data);
+ static gboolean gtk_drag_button_release_cb     (GtkWidget         *widget, 
+                                               GdkEventButton    *event, 
+                                               gpointer           data);
+@@ -2331,6 +2334,8 @@
+   g_signal_connect (info->ipc_widget, "grab_broken_event",
+                   G_CALLBACK (gtk_drag_grab_broken_event_cb), info);
++  g_signal_connect (info->ipc_widget, "grab_notify",
++                  G_CALLBACK (gtk_drag_grab_notify_cb), info);
+   g_signal_connect (info->ipc_widget, "button_release_event",
+                   G_CALLBACK (gtk_drag_button_release_cb), info);
+   g_signal_connect (info->ipc_widget, "motion_notify_event",
+@@ -3762,6 +3767,9 @@
+                                       gtk_drag_grab_broken_event_cb,
+                                       info);
+   g_signal_handlers_disconnect_by_func (info->ipc_widget,
++                                      gtk_drag_grab_notify_cb,
++                                      info);
++  g_signal_handlers_disconnect_by_func (info->ipc_widget,
+                                       gtk_drag_button_release_cb,
+                                       info);
+   g_signal_handlers_disconnect_by_func (info->ipc_widget,
+@@ -3926,6 +3934,9 @@
+                                       gtk_drag_grab_broken_event_cb,
+                                       info);
+   g_signal_handlers_disconnect_by_func (info->ipc_widget,
++                                      gtk_drag_grab_notify_cb,
++                                      info);
++  g_signal_handlers_disconnect_by_func (info->ipc_widget,
+                                       gtk_drag_button_release_cb,
+                                       info);
+   g_signal_handlers_disconnect_by_func (info->ipc_widget,
+@@ -4117,6 +4128,24 @@
+   return TRUE;
+ }
++static void
++gtk_drag_grab_notify_cb (GtkWidget        *widget,
++                       gboolean          was_grabbed,
++                       gpointer          data)
++{
++  GtkDragSourceInfo *info = (GtkDragSourceInfo *)data;
++
++  if (!was_grabbed)
++    {
++      /* We have to block callbacks to avoid recursion here, because
++       gtk_drag_cancel calls gtk_grab_remove (via gtk_drag_end) */
++      g_signal_handlers_block_by_func (widget, gtk_drag_grab_notify_cb, data);
++      gtk_drag_cancel (info, gtk_get_current_event_time ());
++      g_signal_handlers_unblock_by_func (widget, gtk_drag_grab_notify_cb, data);
++    }
++}
++
++
+ /*************************************************************
+  * gtk_drag_button_release_cb:
+  *     "button_release_event" callback during drag.
diff --git a/x11-libs/gtk+/gtk+-2.10.7-r1.ebuild b/x11-libs/gtk+/gtk+-2.10.7-r1.ebuild
new file mode 100644 (file)
index 0000000..75dee1d
--- /dev/null
@@ -0,0 +1,161 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/x11-libs/gtk+/gtk+-2.10.7-r1.ebuild,v 1.1 2007/01/16 20:51:15 leio Exp $
+
+inherit gnome.org flag-o-matic eutils autotools virtualx
+
+DESCRIPTION="Gimp ToolKit +"
+HOMEPAGE="http://www.gtk.org/"
+
+LICENSE="LGPL-2"
+SLOT="2"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86 ~x86-fbsd"
+IUSE="debug doc jpeg tiff xinerama"
+
+RDEPEND="x11-libs/libXrender
+       x11-libs/libX11
+       x11-libs/libXi
+       x11-libs/libXt
+       x11-libs/libXext
+       x11-libs/libXcursor
+       x11-libs/libXrandr
+       x11-libs/libXfixes
+       xinerama? ( x11-libs/libXinerama )
+       >=dev-libs/glib-2.12.1
+       >=x11-libs/pango-1.12.0
+       >=dev-libs/atk-1.10.1
+       >=x11-libs/cairo-1.2.0
+       media-libs/fontconfig
+       x11-misc/shared-mime-info
+       >=media-libs/libpng-1.2.1
+       jpeg? ( >=media-libs/jpeg-6b-r2 )
+       tiff? ( >=media-libs/tiff-3.5.7 )"
+
+DEPEND="${RDEPEND}
+       sys-devel/autoconf
+       >=dev-util/pkgconfig-0.9
+       =sys-devel/automake-1.7*
+       x11-proto/xextproto
+       x11-proto/xproto
+       x11-proto/inputproto
+       xinerama? ( x11-proto/xineramaproto )
+       doc? (
+                       >=dev-util/gtk-doc-1.4
+                       ~app-text/docbook-xml-dtd-4.1.2
+                )"
+
+RESTRICT="confcache"
+
+pkg_setup() {
+       if ! built_with_use x11-libs/cairo X; then
+               einfo "Please re-emerge x11-libs/cairo with the X USE flag set"
+               die "cairo needs the X flag set"
+       fi
+}
+
+set_gtk2_confdir() {
+       # An arch specific config directory is used on multilib systems
+       has_multilib_profile && GTK2_CONFDIR="/etc/gtk-2.0/${CHOST}"
+       use x86 && [ "$(get_libdir)" == "lib32" ] && GTK2_CONFDIR="/etc/gtk-2.0/${CHOST}"
+       GTK2_CONFDIR=${GTK2_CONFDIR:=/etc/gtk-2.0}
+}
+
+src_unpack() {
+       unpack ${A}
+       cd "${S}"
+
+       # Optionalize xinerama support
+       epatch "${FILESDIR}"/${PN}-2.8.10-xinerama.patch
+
+       # use an arch-specific config directory so that 32bit and 64bit versions
+       # dont clash on multilib systems
+       has_multilib_profile && epatch "${FILESDIR}"/${PN}-2.8.0-multilib.patch
+
+       # and this line is just here to make building emul-linux-x86-gtklibs a bit
+       # easier, so even this should be amd64 specific.
+       if use x86 && [ "$(get_libdir)" == "lib32" ]; then
+               epatch "${FILESDIR}"/${PN}-2.8.0-multilib.patch
+       fi
+
+       # Don't crash in GtkSourceView/gedit with "Display line numbers"
+       epatch "${FILESDIR}/${P}-textview-fix.patch"
+
+       # Revert DND change that makes mozilla products DND broken
+       EPATCH_OPTS="-R" epatch "${FILESDIR}/${P}-mozilla-dnd-fix.patch"
+
+       # -O3 and company cause random crashes in applications. Bug #133469
+       replace-flags -O3 -O2
+       strip-flags
+
+       use ppc64 && append-flags -mminimal-toc
+
+       # remember, eautoreconf applies elibtoolize.
+       # if you remove this, you should manually run elibtoolize
+       export WANT_AUTOMAKE=1.7
+       cp aclocal.m4 old_macros.m4
+       AT_M4DIR="."
+       eautoreconf
+
+       epunt_cxx
+}
+
+src_compile() {
+       # png always on to display icons (foser)
+       local myconf="$(use_enable doc gtk-doc) \
+               $(use_with jpeg libjpeg) \
+               $(use_with tiff libtiff) \
+               $(use_enable xinerama) \
+               --with-libpng \
+               --with-gdktarget=x11 \
+               --with-xinput"
+
+       # Passing --disable-debug is not recommended for production use
+       use debug && myconf="${myconf} --enable-debug=yes"
+
+       econf ${myconf} || die "configure failed"
+
+       emake || die "compile failed"
+}
+
+src_test() {
+       Xmake check || die
+}
+
+src_install() {
+       make DESTDIR="${D}" install || die "Installation failed"
+
+       set_gtk2_confdir
+       dodir ${GTK2_CONFDIR}
+       keepdir ${GTK2_CONFDIR}
+
+       # see bug #133241
+       echo 'gtk-fallback-icon-theme = "gnome"' > ${D}/${GTK2_CONFDIR}/gtkrc
+
+       # Enable xft in environment as suggested by <utx@gentoo.org>
+       dodir /etc/env.d
+       echo "GDK_USE_XFT=1" > ${D}/etc/env.d/50gtk2
+
+       dodoc AUTHORS ChangeLog* HACKING NEWS* README*
+}
+
+pkg_postinst() {
+       set_gtk2_confdir
+
+       if [ -d "${ROOT}${GTK2_CONFDIR}" ]; then
+               gtk-query-immodules-2.0  > ${ROOT}${GTK2_CONFDIR}/gtk.immodules
+               gdk-pixbuf-query-loaders > ${ROOT}${GTK2_CONFDIR}/gdk-pixbuf.loaders
+       else
+               ewarn "The destination path ${ROOT}${GTK2_CONFDIR} doesn't exist;"
+               ewarn "to complete the installation of GTK+, please create the"
+               ewarn "directory and then manually run:"
+               ewarn "  cd ${ROOT}${GTK2_CONFDIR}"
+               ewarn "  gtk-query-immodules-2.0  > gtk.immodules"
+               ewarn "  gdk-pixbuf-query-loaders > gdk-pixbuf.loaders"
+       fi
+
+       if [ -e /usr/lib/gtk-2.0/2.[^1]* ]; then
+               elog "You need to rebuild ebuilds that installed into" /usr/lib/gtk-2.0/2.[^1]*
+               elog "to do that you can use qfile from portage-utils:"
+               elog "emerge -va1 \$(qfile -qC /usr/lib/gtk-2.0/2.[^1]*)"
+       fi
+}