summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--configure.in33
-rw-r--r--src/common/server.c3
-rw-r--r--src/fe-gtk/plugin-tray.c144
3 files changed, 65 insertions, 115 deletions
diff --git a/configure.in b/configure.in
index 1b8eede9..620268d2 100644
--- a/configure.in
+++ b/configure.in
@@ -35,10 +35,12 @@ AH_VERBATIM([XCHATLIBDIR],[#undef XCHATLIBDIR])
 AH_VERBATIM([XCHATSHAREDIR],[#undef XCHATSHAREDIR])
 AH_VERBATIM([SOCKS],[#undef SOCKS])
 AH_VERBATIM([USE_MSPROXY],[#undef USE_MSPROXY])
+AH_VERBATIM([USE_LIBPROXY],[#undef USE_LIBPROXY])
 dnl AH_VERBATIM([USE_GNOME],[#undef USE_GNOME])
 AH_VERBATIM([USE_SHM],[#undef USE_SHM])
 AH_VERBATIM([USE_GTKSPELL],[#undef USE_GTKSPELL])
 AH_VERBATIM([USE_LIBSEXY],[#undef USE_LIBSEXY])
+AH_VERBATIM([USE_LIBNOTIFY],[#undef USE_LIBNOTIFY])
 AH_VERBATIM([USE_IPV6],[#undef USE_IPV6])
 AH_VERBATIM([USE_MMX],[#undef USE_MMX])
 AH_VERBATIM([USE_OPENSSL],[#undef USE_OPENSSL])
@@ -131,6 +133,10 @@ AC_ARG_ENABLE(dbus,
 [  --disable-dbus          disable DBUS support],
         dbus=$enableval, dbus=yes)
 
+AC_ARG_ENABLE(libnotify,
+[  --disable-libnotify     disable libnotify support],
+        libnotify=$enableval, libnotify=yes)
+
 AC_ARG_ENABLE(mmx,
 [  --disable-mmx           disable MMX assembly routines],
         mmx=$enableval, mmx=yes)
@@ -434,8 +440,13 @@ dnl *********************************************************************
 dnl ** LIBPROXY *********************************************************
 dnl *********************************************************************
 
-PKG_CHECK_MODULES([LIBPROXY], [libproxy-1.0], [libproxy=1], [libproxy=0])
-AC_DEFINE_UNQUOTED([USE_LIBPROXY], [$libproxy], [Use libproxy])
+PKG_CHECK_MODULES([LIBPROXY], [libproxy-1.0], [libproxy=yes], [
+	AC_MSG_RESULT(no)
+	libproxy=no
+])
+if test "x$libproxy" = "xyes" ; then
+	AC_DEFINE(USE_LIBPROXY)
+fi
 
 dnl *********************************************************************
 dnl ** PLUGIN ***********************************************************
@@ -494,6 +505,22 @@ if test "x$dbus" = "xyes" ; then
 fi
 
 dnl *********************************************************************
+dnl ** LIBNOTIFY ********************************************************
+dnl *********************************************************************
+
+if test "x$libnotify" = "xyes" ; then
+	PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= 0.4, [], [
+		AC_MSG_RESULT(no)
+		libnotify=no
+	])
+	if test "$libnotify" != "no" ; then
+		GUI_LIBS="$GUI_LIBS $LIBNOTIFY_LIBS"
+		GUI_CFLAGS="$GUI_CFLAGS $LIBNOTIFY_CFLAGS"
+		AC_DEFINE(USE_LIBNOTIFY)
+	fi
+fi
+
+dnl *********************************************************************
 dnl ** SPELL ************************************************************
 dnl *********************************************************************
 
@@ -531,6 +558,7 @@ dnl *********************************************************************
 
 AM_CONDITIONAL(USE_OPENSSL, test "x$openssl" = "xyes")
 AM_CONDITIONAL(USE_LIBSEXY, test "x$spell" = "xstatic")
+AM_CONDITIONAL(USE_LIBNOTIFY, test "x$libnotify" = "xyes")
 AM_CONDITIONAL(DO_TEXT, test "x$textfe" = "xyes")
 AM_CONDITIONAL(DO_GTK, test "x$gtkfe" = "xyes")
 AM_CONDITIONAL(DO_PERL, test "x$perl" = "xyes")
@@ -819,6 +847,7 @@ else
 fi
 echo openssl support ..... : $openssl\	ipv6 support .......... : $ipv6
 echo dbus support ........ : $dbus\	msproxy ntlm \(ISA\) .... : $have_ntlm
+echo libnotify support ... : $libnotify
 echo
 echo The binary will be installed in $prefix/bin
 echo
diff --git a/src/common/server.c b/src/common/server.c
index dd43adff..99894687 100644
--- a/src/common/server.c
+++ b/src/common/server.c
@@ -1558,8 +1558,9 @@ server_child (server * serv)
 
 			g_strfreev (proxy_list);
 			g_free (url);
+		}
 #endif
-		} else if (prefs.proxy_host[0] &&
+		else if (prefs.proxy_host[0] &&
 			   prefs.proxy_type > 0 &&
 			   prefs.proxy_use != 2) /* proxy is NOT dcc-only */
 		{
diff --git a/src/fe-gtk/plugin-tray.c b/src/fe-gtk/plugin-tray.c
index 8603abf4..e46d9570 100644
--- a/src/fe-gtk/plugin-tray.c
+++ b/src/fe-gtk/plugin-tray.c
@@ -15,7 +15,17 @@
 #include "menu.h"
 #include <gtk/gtk.h>
 
-#define LIBNOTIFY
+#ifdef USE_LIBNOTIFY
+#include <libnotify/notify.h>
+#ifndef NOTIFY_CHECK_VERSION
+#define NOTIFY_CHECK_VERSION(x,y,z) 0
+#endif
+#if NOTIFY_CHECK_VERSION(0,7,0)
+#define XC_NOTIFY_NEW(a,b,c,d) notify_notification_new(a,b,c)
+#else
+#define XC_NOTIFY_NEW(a,b,c,d) notify_notification_new(a,b,c,d)
+#endif
+#endif
 
 typedef enum	/* current icon status */
 {
@@ -117,80 +127,6 @@ fe_tray_set_tooltip (const char *text)
 		gtk_status_icon_set_tooltip (sticon, text);
 }
 
-#ifdef LIBNOTIFY
-
-/* dynamic access to libnotify.so */
-
-static void *nn_mod = NULL;
-/* prototypes */
-static gboolean (*nn_init) (char *);
-static void (*nn_uninit) (void);
-/* recent versions of libnotify don't take the fourth GtkWidget argument, but passing an
- * extra NULL argument will be fine */
-static void *(*nn_new) (const gchar *summary, const gchar *message, const gchar *icon, gpointer dummy);
-static gboolean (*nn_show) (void *noti, GError **error);
-static void (*nn_set_timeout) (void *noti, gint timeout);
-
-static void
-libnotify_cleanup (void)
-{
-	if (nn_mod)
-	{
-		nn_uninit ();
-		g_module_close (nn_mod);
-		nn_mod = NULL;
-	}
-}
-
-static gboolean
-libnotify_notify_new (const char *title, const char *text, GtkStatusIcon *icon)
-{
-	void *noti;
-
-	if (!nn_mod)
-	{
-		nn_mod = g_module_open ("libnotify", G_MODULE_BIND_LAZY);
-		if (!nn_mod)
-		{
-			nn_mod = g_module_open ("libnotify.so.1", G_MODULE_BIND_LAZY);
-			if (!nn_mod)
-				return FALSE;
-		}
-
-		if (!g_module_symbol (nn_mod, "notify_init", (gpointer)&nn_init))
-			goto bad;
-		if (!g_module_symbol (nn_mod, "notify_uninit", (gpointer)&nn_uninit))
-			goto bad;
-		if (!g_module_symbol (nn_mod, "notify_notification_new", (gpointer)&nn_new))
-			goto bad;
-		if (!g_module_symbol (nn_mod, "notify_notification_show", (gpointer)&nn_show))
-			goto bad;
-		if (!g_module_symbol (nn_mod, "notify_notification_set_timeout", (gpointer)&nn_set_timeout))
-			goto bad;
-		if (!nn_init (PACKAGE_NAME))
-			goto bad;
-	}
-
-	text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP);
-	title = strip_color (title, -1, STRIP_ALL);
-	noti = nn_new (title, text, XCHATSHAREDIR"/pixmaps/xchat.png", NULL);
-	g_free ((char *)title);
-	g_free ((char *)text);
-
-	nn_set_timeout (noti, prefs.input_balloon_time*1000);
-	nn_show (noti, NULL);
-	g_object_unref (G_OBJECT (noti));
-
-	return TRUE;
-
-bad:
-	g_module_close (nn_mod);
-	nn_mod = NULL;
-	return FALSE;
-}
-
-#endif
-
 void
 fe_tray_set_balloon (const char *title, const char *text)
 {
@@ -213,42 +149,26 @@ fe_tray_set_balloon (const char *title, const char *text)
 	if (!text)
 		return;
 
-#ifdef LIBNOTIFY
-	/* try it via libnotify.so */
-	if (libnotify_notify_new (title, text, sticon))
-		return;	/* success */
-#endif
+#ifdef USE_LIBNOTIFY
+	NotifyNotification *notification;
+	char *notify_text, *notify_title;
 
-	/* try it the crude way */
-	path = g_find_program_in_path ("notify-send");
-	if (path)
-	{
-		sprintf(time, "%d000",prefs.input_balloon_time);
-		argv[0] = path;
-		argv[1] = "-i";
-		argv[2] = "gtk-dialog-info";
-		if (access (XCHATSHAREDIR"/pixmaps/xchat.png", R_OK) == 0)
-			argv[2] = XCHATSHAREDIR"/pixmaps/xchat.png";
-		argv[3] = "-t";
-		argv[4] = time;
-		argv[5] = title;
-		text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP);
-		argv[6] = text;
-		argv[7] = NULL;
-		xchat_execv (argv);
-		g_free ((char *)path);
-		g_free ((char *)text);
-	}
-	else
-	{
-		/* show this error only once */
-		static unsigned char said_it = FALSE;
-		if (!said_it)
-		{
-			said_it = TRUE;
-			fe_message (_("Cannot find 'notify-send' to open balloon alerts.\nPlease install libnotify."), FE_MSG_ERROR);
-		}
-	}
+	if (!notify_is_initted())
+		notify_init(PACKAGE_NAME);
+
+	notify_text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP);
+	notify_title = strip_color (title, -1, STRIP_ALL);
+
+	notification = XC_NOTIFY_NEW (notify_title, notify_text, XCHATSHAREDIR"/pixmaps/xchat.png", NULL);
+
+	g_free ((char *)notify_title);
+	g_free ((char *)notify_text);
+
+	notify_notification_set_timeout (notification, prefs.input_balloon_time*1000);
+	notify_notification_show (notification, NULL);
+
+	g_object_unref (notification);
+#endif
 #endif
 }
 
@@ -845,8 +765,8 @@ tray_plugin_deinit (xchat_plugin *plugin_handle)
 {
 #ifdef WIN32
 	tray_cleanup ();
-#elif defined(LIBNOTIFY)
-	libnotify_cleanup ();
+#elif defined(USE_LIBNOTIFY)
+	notify_uninit ();
 #endif
 	return 1;
 }