summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-im/gaim')
-rw-r--r--net-im/gaim/ChangeLog12
-rw-r--r--net-im/gaim/Manifest7
-rw-r--r--net-im/gaim/files/digest-gaim-0.78-r21
-rw-r--r--net-im/gaim/files/gaim-0.77-newtrayicon.patch493
-rw-r--r--net-im/gaim/files/gaim-0.78-jabber_disconnect.patch18
-rw-r--r--net-im/gaim/files/gaim-0.78-log_find_click.patch26
-rw-r--r--net-im/gaim/files/gaim-0.78-msn_disconnect_fix.patch39
-rw-r--r--net-im/gaim/files/gaim-0.78-paste_html_img_crash.patch17
-rw-r--r--net-im/gaim/gaim-0.78-r2.ebuild138
9 files changed, 750 insertions, 1 deletions
diff --git a/net-im/gaim/ChangeLog b/net-im/gaim/ChangeLog
index dfcecc1ffeff..21f0ee313557 100644
--- a/net-im/gaim/ChangeLog
+++ b/net-im/gaim/ChangeLog
@@ -1,6 +1,16 @@
# ChangeLog for net-im/gaim
# Copyright 2002-2004 Gentoo Technologies, Inc.; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-im/gaim/ChangeLog,v 1.186 2004/06/09 18:19:20 rizzo Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-im/gaim/ChangeLog,v 1.187 2004/06/09 18:53:55 rizzo Exp $
+
+*gaim-0.78-r2 (09 Jun 2004)
+
+ 09 Jun 2004; Don Seiler <rizzo@gentoo.org>
+ +files/gaim-0.77-newtrayicon.patch,
+ +files/gaim-0.78-jabber_disconnect.patch,
+ +files/gaim-0.78-log_find_click.patch,
+ +files/gaim-0.78-msn_disconnect_fix.patch,
+ +files/gaim-0.78-paste_html_img_crash.patch, +gaim-0.78-r2.ebuild:
+ Working in patches from Warren Togami's SRPMs. Also closes Bug #52890
09 Jun 2004; Don Seiler <rizzo@gentoo.org> -gaim-0.78.ebuild:
Obsolete
diff --git a/net-im/gaim/Manifest b/net-im/gaim/Manifest
index 0b0e9391aac5..574e2a0e1bc3 100644
--- a/net-im/gaim/Manifest
+++ b/net-im/gaim/Manifest
@@ -1,10 +1,12 @@
MD5 1d71939219c2a6f59a2ef1ef4ef16d86 ChangeLog 30033
MD5 bce07b7547c62d6265e31c5ab2deffa2 gaim-0.75-r10.ebuild 3677
+MD5 e320d2bf435a754f5c3f02aa7607a766 gaim-0.78-r2.ebuild 4482
MD5 965d2993a30aeb3ce3e38c843658f3d3 gaim-0.77.ebuild 4040
MD5 70296094d5e7719da4ae76b25e0483bb gaim-0.78-r1.ebuild 4218
MD5 19b3cafbbe380403d46cccc45a984b80 metadata.xml 481
MD5 8b152d59a54ab95627c4c0cd52758d75 files/digest-gaim-0.75-r10 63
MD5 4bc83ad48d260db208fcae372c2bb291 files/digest-gaim-0.77 63
+MD5 98cdf8cb3df34f23f2098df68bd5d06e files/gaim-0.77-newtrayicon.patch 13633
MD5 f07855631a1ef3f986568b772f335865 files/digest-gaim-0.78-r1 63
MD5 68525b8389e356a5d05d531b84fb1ada files/gaim-0.74-gnome-url-handler.patch 1854
MD5 53302cc68bb7bef9803723e977010339 files/gaim-0.74_cjk_gtkconv.patch 1128
@@ -14,3 +16,8 @@ MD5 afc682711efed5d09a9229bd06a7a13b files/gaim-0.76-xinput.patch 644
MD5 a4f3b00a7aa80e7fbc1e315b8c9306c8 files/gaim-0.76cvs-signals-varargs.diff 1753
MD5 e58ee6f06747da85a60cb9c13b91f805 files/gaim-0.76cvs-yahoo-login-fix.diff 4618
MD5 a714a5babbb4387f5a5516f75548528a files/gaim-0.76cvs-yahoo-misc-fixes-1.diff 3105
+MD5 926417f5b93b2716eb31f0ceb0d8ce74 files/gaim-0.78-jabber_disconnect.patch 745
+MD5 fa4c02c17e5d4096a6353342bed870ec files/gaim-0.78-log_find_click.patch 1049
+MD5 6c718f1614f3c6c352062b1d775e9242 files/gaim-0.78-msn_disconnect_fix.patch 1241
+MD5 29409b66a70d19d4ceca094de43978a2 files/gaim-0.78-paste_html_img_crash.patch 510
+MD5 f07855631a1ef3f986568b772f335865 files/digest-gaim-0.78-r2 63
diff --git a/net-im/gaim/files/digest-gaim-0.78-r2 b/net-im/gaim/files/digest-gaim-0.78-r2
new file mode 100644
index 000000000000..fb5c8eabe831
--- /dev/null
+++ b/net-im/gaim/files/digest-gaim-0.78-r2
@@ -0,0 +1 @@
+MD5 079f3286333ed51cc72c65b5efe1b989 gaim-0.78.tar.bz2 4219726
diff --git a/net-im/gaim/files/gaim-0.77-newtrayicon.patch b/net-im/gaim/files/gaim-0.77-newtrayicon.patch
new file mode 100644
index 000000000000..f6772d9969f3
--- /dev/null
+++ b/net-im/gaim/files/gaim-0.77-newtrayicon.patch
@@ -0,0 +1,493 @@
+--- gaim-0.71/plugins/docklet/eggtrayicon.h.foo 2002-09-14 19:27:26.000000000 -0400
++++ gaim-0.71/plugins/docklet/eggtrayicon.h 2003-10-17 11:55:33.000000000 -0400
+@@ -45,7 +45,10 @@
+ Atom selection_atom;
+ Atom manager_atom;
+ Atom system_tray_opcode_atom;
++ Atom orientation_atom;
+ Window manager_window;
++
++ GtkOrientation orientation;
+ };
+
+ struct _EggTrayIconClass
+@@ -55,10 +58,8 @@
+
+ GType egg_tray_icon_get_type (void);
+
+-#if EGG_TRAY_ENABLE_MULTIHEAD
+ EggTrayIcon *egg_tray_icon_new_for_screen (GdkScreen *screen,
+ const gchar *name);
+-#endif
+
+ EggTrayIcon *egg_tray_icon_new (const gchar *name);
+
+@@ -69,7 +70,7 @@
+ void egg_tray_icon_cancel_message (EggTrayIcon *icon,
+ guint id);
+
+-
++GtkOrientation egg_tray_icon_get_orientation (EggTrayIcon *icon);
+
+ G_END_DECLS
+
+--- gaim-0.71/plugins/docklet/eggtrayicon.c.foo 2003-01-08 20:48:04.000000000 -0500
++++ gaim-0.71/plugins/docklet/eggtrayicon.c 2003-10-17 11:54:16.000000000 -0400
+@@ -18,30 +18,64 @@
+ * Boston, MA 02111-1307, USA.
+ */
+
++#ifdef DV_CHANGE
++#include <config.h>
++#else
++#include <libintl.h>
++#define GETTEXT_PACKAGE "rhn-applet"
++#endif
+ #include <string.h>
+-#include <gdk/gdkx.h>
++#include <libintl.h>
++
+ #include "eggtrayicon.h"
+
++#include <gdk/gdkx.h>
++#include <X11/Xatom.h>
++
++#ifndef EGG_COMPILATION
++#ifndef _
++#define _(x) dgettext (GETTEXT_PACKAGE, x)
++#define N_(x) x
++#endif
++#else
++#define _(x) x
++#define N_(x) x
++#endif
++
+ #define SYSTEM_TRAY_REQUEST_DOCK 0
+ #define SYSTEM_TRAY_BEGIN_MESSAGE 1
+ #define SYSTEM_TRAY_CANCEL_MESSAGE 2
++
++#define SYSTEM_TRAY_ORIENTATION_HORZ 0
++#define SYSTEM_TRAY_ORIENTATION_VERT 1
++
++enum {
++ PROP_0,
++ PROP_ORIENTATION
++};
+
+ static GtkPlugClass *parent_class = NULL;
+
+ static void egg_tray_icon_init (EggTrayIcon *icon);
+ static void egg_tray_icon_class_init (EggTrayIconClass *klass);
+
++static void egg_tray_icon_get_property (GObject *object,
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec);
++
++static void egg_tray_icon_realize (GtkWidget *widget);
+ static void egg_tray_icon_unrealize (GtkWidget *widget);
+
+-static void egg_tray_icon_update_manager_window (EggTrayIcon *icon);
++static void egg_tray_icon_update_manager_window (EggTrayIcon *icon,
++ gboolean dock_if_realized);
++static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon);
+
+ GType
+ egg_tray_icon_get_type (void)
+ {
+ static GType our_type = 0;
+
+- our_type = g_type_from_name("EggTrayIcon");
+-
+ if (our_type == 0)
+ {
+ static const GTypeInfo our_info =
+@@ -59,10 +93,6 @@
+
+ our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0);
+ }
+- else if (parent_class == NULL) {
+- /* we're reheating the old class from a previous instance - engage ugly hack =( */
+- egg_tray_icon_class_init((EggTrayIconClass *)g_type_class_peek(our_type));
+- }
+
+ return our_type;
+ }
+@@ -71,6 +101,7 @@
+ egg_tray_icon_init (EggTrayIcon *icon)
+ {
+ icon->stamp = 1;
++ icon->orientation = GTK_ORIENTATION_HORIZONTAL;
+
+ gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);
+ }
+@@ -78,11 +109,95 @@
+ static void
+ egg_tray_icon_class_init (EggTrayIconClass *klass)
+ {
++ GObjectClass *gobject_class = (GObjectClass *)klass;
+ GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
+
+ parent_class = g_type_class_peek_parent (klass);
+
++ gobject_class->get_property = egg_tray_icon_get_property;
++
++ widget_class->realize = egg_tray_icon_realize;
+ widget_class->unrealize = egg_tray_icon_unrealize;
++
++ g_object_class_install_property (gobject_class,
++ PROP_ORIENTATION,
++ g_param_spec_enum ("orientation",
++ _("Orientation"),
++ _("The orientation of the tray."),
++ GTK_TYPE_ORIENTATION,
++ GTK_ORIENTATION_HORIZONTAL,
++ G_PARAM_READABLE));
++}
++
++static void
++egg_tray_icon_get_property (GObject *object,
++ guint prop_id,
++ GValue *value,
++ GParamSpec *pspec)
++{
++ EggTrayIcon *icon = EGG_TRAY_ICON (object);
++
++ switch (prop_id)
++ {
++ case PROP_ORIENTATION:
++ g_value_set_enum (value, icon->orientation);
++ break;
++ default:
++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++ break;
++ }
++}
++
++static void
++egg_tray_icon_get_orientation_property (EggTrayIcon *icon)
++{
++ Display *xdisplay;
++ Atom type;
++ int format;
++ union {
++ gulong *prop;
++ guchar *prop_ch;
++ } prop = { NULL };
++ gulong nitems;
++ gulong bytes_after;
++ int error, result;
++
++ g_assert (icon->manager_window != None);
++
++ xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
++
++ gdk_error_trap_push ();
++ type = None;
++ result = XGetWindowProperty (xdisplay,
++ icon->manager_window,
++ icon->orientation_atom,
++ 0, G_MAXLONG, FALSE,
++ XA_CARDINAL,
++ &type, &format, &nitems,
++ &bytes_after, &(prop.prop_ch));
++ error = gdk_error_trap_pop ();
++
++ if (error || result != Success)
++ return;
++
++ if (type == XA_CARDINAL)
++ {
++ GtkOrientation orientation;
++
++ orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ?
++ GTK_ORIENTATION_HORIZONTAL :
++ GTK_ORIENTATION_VERTICAL;
++
++ if (icon->orientation != orientation)
++ {
++ icon->orientation = orientation;
++
++ g_object_notify (G_OBJECT (icon), "orientation");
++ }
++ }
++
++ if (prop.prop)
++ XFree (prop.prop);
+ }
+
+ static GdkFilterReturn
+@@ -95,13 +210,18 @@
+ xev->xclient.message_type == icon->manager_atom &&
+ xev->xclient.data.l[1] == icon->selection_atom)
+ {
+- egg_tray_icon_update_manager_window (icon);
++ egg_tray_icon_update_manager_window (icon, TRUE);
+ }
+ else if (xev->xany.window == icon->manager_window)
+ {
++ if (xev->xany.type == PropertyNotify &&
++ xev->xproperty.atom == icon->orientation_atom)
++ {
++ egg_tray_icon_get_orientation_property (icon);
++ }
+ if (xev->xany.type == DestroyNotify)
+ {
+- egg_tray_icon_update_manager_window (icon);
++ egg_tray_icon_manager_window_destroyed (icon);
+ }
+ }
+
+@@ -118,21 +238,13 @@
+ {
+ GdkWindow *gdkwin;
+
+-#if HAVE_GTK_MULTIHEAD
+ gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget),
+ icon->manager_window);
+-#else
+- gdkwin = gdk_window_lookup (icon->manager_window);
+-#endif
+
+ gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+ }
+
+-#if HAVE_GTK_MULTIHEAD
+ root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));
+-#else
+- root_window = gdk_window_lookup (gdk_x11_get_default_root_xwindow ());
+-#endif
+
+ gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon);
+
+@@ -161,11 +273,7 @@
+ ev.data.l[3] = data2;
+ ev.data.l[4] = data3;
+
+-#if HAVE_GTK_MULTIHEAD
+ display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
+-#else
+- display = gdk_display;
+-#endif
+
+ gdk_error_trap_push ();
+ XSendEvent (display,
+@@ -185,29 +293,15 @@
+ }
+
+ static void
+-egg_tray_icon_update_manager_window (EggTrayIcon *icon)
++egg_tray_icon_update_manager_window (EggTrayIcon *icon,
++ gboolean dock_if_realized)
+ {
+ Display *xdisplay;
+
+-#if HAVE_GTK_MULTIHEAD
+- xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
+-#else
+- xdisplay = gdk_display;
+-#endif
+-
+ if (icon->manager_window != None)
+- {
+- GdkWindow *gdkwin;
++ return;
+
+-#if HAVE_GTK_MULTIHEAD
+- gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
+- icon->manager_window);
+-#else
+- gdkwin = gdk_window_lookup (icon->manager_window);
+-#endif
+-
+- gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+- }
++ xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
+
+ XGrabServer (xdisplay);
+
+@@ -216,7 +310,7 @@
+
+ if (icon->manager_window != None)
+ XSelectInput (xdisplay,
+- icon->manager_window, StructureNotifyMask);
++ icon->manager_window, StructureNotifyMask|PropertyChangeMask);
+
+ XUngrabServer (xdisplay);
+ XFlush (xdisplay);
+@@ -225,91 +319,103 @@
+ {
+ GdkWindow *gdkwin;
+
+-#if HAVE_GTK_MULTIHEAD
+ gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
+ icon->manager_window);
+-#else
+- gdkwin = gdk_window_lookup (icon->manager_window);
+-#endif
+
+ gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);
+
+- /* Send a request that we'd like to dock */
+- egg_tray_icon_send_dock_request (icon);
++ if (dock_if_realized && GTK_WIDGET_REALIZED (icon))
++ egg_tray_icon_send_dock_request (icon);
++
++ egg_tray_icon_get_orientation_property (icon);
+ }
+ }
+
+-EggTrayIcon *
+-egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name)
++static void
++egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon)
+ {
+- EggTrayIcon *icon;
++ GdkWindow *gdkwin;
++
++ g_return_if_fail (icon->manager_window != None);
++
++ gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
++ icon->manager_window);
++
++ gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
++
++ icon->manager_window = None;
++
++ egg_tray_icon_update_manager_window (icon, TRUE);
++}
++
++static void
++egg_tray_icon_realize (GtkWidget *widget)
++{
++ EggTrayIcon *icon = EGG_TRAY_ICON (widget);
++ GdkScreen *screen;
++ GdkDisplay *display;
++ Display *xdisplay;
+ char buffer[256];
+ GdkWindow *root_window;
+
+- g_return_val_if_fail (xscreen != NULL, NULL);
+-
+- icon = g_object_new (EGG_TYPE_TRAY_ICON, NULL);
+- gtk_window_set_title (GTK_WINDOW (icon), name);
++ if (GTK_WIDGET_CLASS (parent_class)->realize)
++ GTK_WIDGET_CLASS (parent_class)->realize (widget);
+
+-#if HAVE_GTK_MULTIHEAD
+- /* FIXME: this code does not compile, screen is undefined. Now try
+- * getting the GdkScreen from xscreen (:. Dunno how to solve this
+- * (there is probably some easy way I cant think of right now)
+- */
+- gtk_plug_construct_for_display (GTK_PLUG (icon),
+- gdk_screen_get_display (screen), 0);
+-#else
+- gtk_plug_construct (GTK_PLUG (icon), 0);
+-#endif
+-
+- gtk_widget_realize (GTK_WIDGET (icon));
++ screen = gtk_widget_get_screen (widget);
++ display = gdk_screen_get_display (screen);
++ xdisplay = gdk_x11_display_get_xdisplay (display);
+
+ /* Now see if there's a manager window around */
+ g_snprintf (buffer, sizeof (buffer),
+ "_NET_SYSTEM_TRAY_S%d",
+- XScreenNumberOfScreen (xscreen));
+-
+- icon->selection_atom = XInternAtom (DisplayOfScreen (xscreen),
+- buffer, False);
++ gdk_screen_get_number (screen));
++
++ icon->selection_atom = XInternAtom (xdisplay, buffer, False);
+
+- icon->manager_atom = XInternAtom (DisplayOfScreen (xscreen),
+- "MANAGER", False);
++ icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False);
+
+- icon->system_tray_opcode_atom = XInternAtom (DisplayOfScreen (xscreen),
+- "_NET_SYSTEM_TRAY_OPCODE", False);
++ icon->system_tray_opcode_atom = XInternAtom (xdisplay,
++ "_NET_SYSTEM_TRAY_OPCODE",
++ False);
+
+- egg_tray_icon_update_manager_window (icon);
++ icon->orientation_atom = XInternAtom (xdisplay,
++ "_NET_SYSTEM_TRAY_ORIENTATION",
++ False);
+
+-#if HAVE_GTK_MULTIHEAD
+- root_window = gdk_screen_get_root_window (gtk_widget_get_screen (screen));
+-#else
+- root_window = gdk_window_lookup (gdk_x11_get_default_root_xwindow ());
+-#endif
++ egg_tray_icon_update_manager_window (icon, FALSE);
++ egg_tray_icon_send_dock_request (icon);
++
++ root_window = gdk_screen_get_root_window (screen);
+
+ /* Add a root window filter so that we get changes on MANAGER */
+ gdk_window_add_filter (root_window,
+ egg_tray_icon_manager_filter, icon);
+-
+- return icon;
+ }
+
+-#if HAVE_GTK_MULTIHEAD
+ EggTrayIcon *
+-egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name)
++egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name)
+ {
+- EggTrayIcon *icon;
+- char buffer[256];
++ GdkDisplay *display;
++ GdkScreen *screen;
+
++ display = gdk_x11_lookup_xdisplay (DisplayOfScreen (xscreen));
++ screen = gdk_display_get_screen (display, XScreenNumberOfScreen (xscreen));
++
++ return egg_tray_icon_new_for_screen (screen, name);
++}
++
++EggTrayIcon *
++egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name)
++{
+ g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+
+- return egg_tray_icon_new_for_xscreen (GDK_SCREEN_XSCREEN (screen), name);
++ return g_object_new (EGG_TYPE_TRAY_ICON, "screen", screen, "title", name, NULL);
+ }
+-#endif
+
+ EggTrayIcon*
+ egg_tray_icon_new (const gchar *name)
+ {
+- return egg_tray_icon_new_for_xscreen (DefaultScreenOfDisplay (gdk_display), name);
++ return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL);
+ }
+
+ guint
+@@ -344,11 +450,7 @@
+ XClientMessageEvent ev;
+ Display *xdisplay;
+
+-#if HAVE_GTK_MULTIHEAD
+ xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
+-#else
+- xdisplay = gdk_display;
+-#endif
+
+ ev.type = ClientMessage;
+ ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon));
+@@ -387,3 +489,11 @@
+ (Window)gtk_plug_get_id (GTK_PLUG (icon)),
+ id, 0, 0);
+ }
++
++GtkOrientation
++egg_tray_icon_get_orientation (EggTrayIcon *icon)
++{
++ g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL);
++
++ return icon->orientation;
++}
diff --git a/net-im/gaim/files/gaim-0.78-jabber_disconnect.patch b/net-im/gaim/files/gaim-0.78-jabber_disconnect.patch
new file mode 100644
index 000000000000..6d6ccac35667
--- /dev/null
+++ b/net-im/gaim/files/gaim-0.78-jabber_disconnect.patch
@@ -0,0 +1,18 @@
+http://cvs.sourceforge.net/viewcvs.py/gaim/gaim/src/protocols/jabber/jabber.c?r1=1.260&r2=1.261&sortby=date&diff_format=u
+https://sourceforge.net/tracker/index.php?func=detail&aid=966125&group_id=235&atid=100235
+
+===================================================================
+RCS file: /cvsroot/gaim/gaim/src/protocols/jabber/jabber.c,v
+retrieving revision 1.260
+retrieving revision 1.261
+diff -u -r1.260 -r1.261
+--- gaim/gaim/src/protocols/jabber/jabber.c 2004/05/31 07:23:49 1.260
++++ gaim/gaim/src/protocols/jabber/jabber.c 2004/06/04 00:02:25 1.261
+@@ -740,6 +740,7 @@
+ {
+ JabberStream *js = gc->proto_data;
+
++ jabber_presence_send(gc, "unavailable", _("Logged out"));
+ jabber_send_raw(js, "</stream:stream>", -1);
+
+ if(js->gsc) {
diff --git a/net-im/gaim/files/gaim-0.78-log_find_click.patch b/net-im/gaim/files/gaim-0.78-log_find_click.patch
new file mode 100644
index 000000000000..faa7f1b052be
--- /dev/null
+++ b/net-im/gaim/files/gaim-0.78-log_find_click.patch
@@ -0,0 +1,26 @@
+Index: src/gtklog.c
+===================================================================
+RCS file: /cvsroot/gaim/gaim/src/gtklog.c,v
+retrieving revision 1.17
+diff -u -p -r1.17 gtklog.c
+--- src/gtklog.c 22 May 2004 16:38:54 -0000 1.17
++++ src/gtklog.c 5 Jun 2004 14:18:32 -0000
+@@ -331,6 +331,8 @@ void gaim_gtk_log_show(const char *scree
+ button = gtk_button_new_from_stock(GTK_STOCK_FIND);
+ g_signal_connect (GTK_BUTTON (button), "activate",
+ G_CALLBACK (search_cb), lv);
++ g_signal_connect (GTK_BUTTON (button), "clicked",
++ G_CALLBACK (search_cb), lv);
+ gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+ gaim_set_accessible_label (lv->treeview, label);
+
+@@ -440,6 +442,9 @@ void gaim_gtk_syslog_show()
+ g_signal_connect (GTK_BUTTON (button), "activate",
+ G_CALLBACK (search_cb),
+ syslog_viewer);
++ g_signal_connect (GTK_BUTTON (button), "clicked",
++ G_CALLBACK (search_cb),
++ syslog_viewer);
+ gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
+
+ gtk_widget_show_all(syslog_viewer->window);
diff --git a/net-im/gaim/files/gaim-0.78-msn_disconnect_fix.patch b/net-im/gaim/files/gaim-0.78-msn_disconnect_fix.patch
new file mode 100644
index 000000000000..1a89034d4cf9
--- /dev/null
+++ b/net-im/gaim/files/gaim-0.78-msn_disconnect_fix.patch
@@ -0,0 +1,39 @@
+-------- Original Message --------
+Subject: Gaim 0.78 MSN switchboard disconnect fix
+Date: Sat, 5 Jun 2004 22:45:26 -0700
+From: Christian Hammond <chipx86@gnupdate.org>
+
+This should have gotten into gaim 0.78, but another patch accidentally
+reverted it. Basically, sometimes there are harmless errors on MSN
+"switchboards," which is where conversations take place. We should
+just display the error but keep on going, because unlike errors on
+Notification or Nexus servers, these are not fatal. These are usually
+things like "The user is offline" and such. However, we were treating
+them as fatal, which this patch prevents.
+
+Christian
+
+diff -u -d -p -r1.37 -r1.38
+--- gaim/gaim/src/protocols/msn/servconn.c.orig 1 Jun 2004 06:42:20 -0000 1.37
++++ gaim/gaim/src/protocols/msn/servconn.c 2 Jun 2004 04:50:31 -0000 1.38
+@@ -58,7 +58,19 @@
+ break;
+ }
+
+- gaim_connection_error(gc, tmp);
++ if (servconn->type != MSN_SERVER_SB)
++ gaim_connection_error(gc, tmp);
++ else
++ {
++ GaimAccount *account = gaim_connection_get_account(gc);
++ char *primary = g_strdup_printf(_("MSN error for account %s"),
++ gaim_account_get_username(account));
++
++ gaim_notify_error(gc, NULL, primary, tmp);
++
++ g_free(primary);
++ }
++
+
+ g_free(tmp);
+ }
diff --git a/net-im/gaim/files/gaim-0.78-paste_html_img_crash.patch b/net-im/gaim/files/gaim-0.78-paste_html_img_crash.patch
new file mode 100644
index 000000000000..65e8e06dfaad
--- /dev/null
+++ b/net-im/gaim/files/gaim-0.78-paste_html_img_crash.patch
@@ -0,0 +1,17 @@
+===================================================================
+RCS file: /cvsroot/gaim/gaim/src/gtkimhtml.c,v
+retrieving revision 1.340
+retrieving revision 1.341
+diff -u -r1.340 -r1.341
+--- gaim/gaim/src/gtkimhtml.c 2004/05/27 02:02:47 1.340
++++ gaim/gaim/src/gtkimhtml.c 2004/06/06 01:20:25 1.341
+@@ -2197,7 +2197,8 @@
+ break;
+
+ id = gtk_imhtml_get_html_opt(tag, "ID=");
+-
++ if (!id)
++ break;
+ gtk_imhtml_insert_image_at_iter(imhtml, atoi(id), iter);
+ break;
+ }
diff --git a/net-im/gaim/gaim-0.78-r2.ebuild b/net-im/gaim/gaim-0.78-r2.ebuild
new file mode 100644
index 000000000000..c95e98fc71ae
--- /dev/null
+++ b/net-im/gaim/gaim-0.78-r2.ebuild
@@ -0,0 +1,138 @@
+# Copyright 1999-2004 Gentoo Technologies, Inc.
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-im/gaim/gaim-0.78-r2.ebuild,v 1.1 2004/06/09 18:53:55 rizzo Exp $
+
+inherit flag-o-matic eutils gcc
+use debug && inherit debug
+
+IUSE="nls perl spell nas debug crypt cjk gnutls silc"
+
+DESCRIPTION="GTK Instant Messenger client"
+HOMEPAGE="http://gaim.sourceforge.net/"
+SRC_URI="mirror://sourceforge/gaim/${P}.tar.bz2"
+
+SLOT="0"
+LICENSE="GPL-2"
+KEYWORDS="~x86 ~sparc ~amd64 ~ppc ~alpha ~ia64 ~mips ~hppa"
+
+DEPEND=">=x11-libs/gtk+-2.0
+ >=dev-libs/glib-2.0
+ nas? ( >=media-libs/nas-1.4.1-r1 )
+ sys-devel/gettext
+ media-libs/libao
+ >=media-libs/audiofile-0.2.0
+ perl? ( >=dev-lang/perl-5.8.2-r1
+ !<dev-perl/ExtUtils-MakeMaker-6.17 )
+ spell? ( >=app-text/gtkspell-2.0.2 )
+ dev-libs/nss
+ gnutls? ( net-libs/gnutls )
+ !mips? ( silc? ( >=net-im/silc-toolkit-0.9.12 ) )"
+PDEPEND="crypt? ( >=net-im/gaim-encryption-2.26 )"
+
+pkg_setup() {
+ ewarn
+ ewarn "If you are merging ${P} from an earlier version, you will need"
+ ewarn "to re-merge any plugins like gaim-encryption or gaim-snpp."
+ ewarn
+ ewarn "If you experience problems with gaim, file them as bugs with"
+ ewarn "Gentoo's bugzilla, http://bugs.gentoo.org. DO NOT report them"
+ ewarn "as bugs with gaim's sourceforge tracker, and by all means DO NOT"
+ ewarn "seek help in #gaim."
+ ewarn
+ ewarn "Be sure to USE=\"debug\" and include a backtrace for any seg"
+ ewarn "faults, see http://gaim.sourceforge.net/gdb.php for details on"
+ ewarn "backtraces."
+ ewarn
+ ewarn "Please read the gaim FAQ at http://gaim.sourceforge.net/faq.php"
+ ewarn
+ for TICKER in 1 2 3 4 5; do
+ # Double beep here.
+ echo -ne "\a" ; sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null
+ echo -ne "\a" ; sleep 1
+ done
+ sleep 8
+}
+
+src_unpack() {
+ unpack ${A}
+ cd ${S}
+ use cjk && epatch ${FILESDIR}/gaim-0.76-xinput.patch
+ epatch ${FILESDIR}/gaim-0.77-newtrayicon.patch
+ epatch ${FILESDIR}/gaim-0.78-jabber_disconnect.patch
+ epatch ${FILESDIR}/gaim-0.78-log_find_click.patch
+ epatch ${FILESDIR}/gaim-0.78-msn_disconnect_fix.patch
+ epatch ${FILESDIR}/gaim-0.78-paste_html_img_crash.patch
+}
+
+src_compile() {
+ einfo "Replacing -Os CFLAG with -O2"
+ replace-flags -Os -O2
+
+ # -msse2 doesn't play nice on gcc 3.2
+ [ "`gcc-version`" == "3.2" ] && filter-flags -msse2
+
+ local myconf
+ use perl || myconf="${myconf} --disable-perl"
+ use spell || myconf="${myconf} --disable-gtkspell"
+ use nls || myconf="${myconf} --disable-nls"
+ use nas && myconf="${myconf} --enable-nas" || myconf="${myconf} --disable-nas"
+
+ if use gnutls ; then
+ myconf="${myconf} --with-gnutls-includes=/usr/include/gnutls"
+ myconf="${myconf} --with-gnutls-libs=/usr/lib"
+ else
+ myconf="${myconf} --enable-gnutls=no"
+ fi
+
+ if ! use mips ; then
+ if use silc ; then
+ myconf="${myconf} --with-silc-includes=/usr/include/silc-toolkit"
+ myconf="${myconf} --with-silc-libs=/usr/lib"
+ fi
+ fi
+
+ myconf="${myconf} --with-nspr-includes=/usr/include/nspr"
+ myconf="${myconf} --with-nss-includes=/usr/include/nss"
+ myconf="${myconf} --with-nspr-libs=/usr/lib"
+ myconf="${myconf} --with-nss-libs=/usr/lib"
+
+ econf ${myconf} || die "Configuration failed"
+
+ emake || MAKEOPTS="${MAKEOPTS} -j1" emake || die "Make failed"
+}
+
+src_install() {
+ make install DESTDIR=${D} || die "Install failed"
+ dodoc ABOUT-NLS AUTHORS COPYING HACKING INSTALL NEWS PROGRAMMING_NOTES README ChangeLog VERSION
+
+ # Copy header files for gaim plugin use
+ dodir /usr/include/gaim/src
+ cp config.h ${D}/usr/include/gaim/
+ cd ${S}/src
+ tar cf - *.h | (cd ${D}/usr/include/gaim/src ; tar xvf -)
+ assert "Failed to install header files to /usr/include/gaim"
+}
+
+pkg_postinst() {
+ ewarn
+ ewarn "If you are merging ${P} from an earlier version, you will need"
+ ewarn "to re-merge any plugins like gaim-encryption or gaim-snpp."
+ ewarn
+ ewarn "If you experience problems with gaim, file them as bugs with"
+ ewarn "Gentoo's bugzilla, http://bugs.gentoo.org. DO NOT report them"
+ ewarn "as bugs with gaim's sourceforge tracker, and by all means DO NOT"
+ ewarn "seek help in #gaim."
+ ewarn
+ ewarn "Be sure to USE=\"debug\" and include a backtrace for any seg"
+ ewarn "faults, see http://gaim.sourceforge.net/gdb.php for details on"
+ ewarn "backtraces."
+ ewarn
+ ewarn "Please read the gaim FAQ at http://gaim.sourceforge.net/faq.php"
+ ewarn
+ for TICKER in 1 2 3 4 5; do
+ # Double beep here.
+ echo -ne "\a" ; sleep 0.1 &>/dev/null ; sleep 0,1 &>/dev/null
+ echo -ne "\a" ; sleep 1
+ done
+ sleep 8
+}