summary refs log tree commit diff stats
path: root/xchat-wdk.patch
diff options
context:
space:
mode:
authorberkeviktor@aol.com <berkeviktor@aol.com>2011-02-24 04:13:14 +0100
committerberkeviktor@aol.com <berkeviktor@aol.com>2011-02-24 04:13:14 +0100
commitf16af8be941b596dedac3bf4e371ee2d21f4b598 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /xchat-wdk.patch
parentc6a031659b54230099c863b7ccdc03de4a4c7a2d (diff)
nuke the repo
Diffstat (limited to 'xchat-wdk.patch')
-rw-r--r--xchat-wdk.patch2834
1 files changed, 0 insertions, 2834 deletions
diff --git a/xchat-wdk.patch b/xchat-wdk.patch
deleted file mode 100644
index 91b7fb0c..00000000
--- a/xchat-wdk.patch
+++ /dev/null
@@ -1,2834 +0,0 @@
-diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/perl/perl.c xchat-wdk/plugins/perl/perl.c
---- xchat-wdk.orig/plugins/perl/perl.c	2011-01-14 00:56:00 +0100
-+++ xchat-wdk/plugins/perl/perl.c	2011-01-25 23:56:28 +0100
-@@ -22,12 +22,15 @@
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
--#include <dirent.h>
- #ifdef ENABLE_NLS
- #include <locale.h>
- #endif
- #ifdef WIN32
- #include <windows.h>
-+#define  _INC_DIRENT
-+#include "../../src/common/dirent.h"
-+#else
-+#include <dirent.h>
- #endif
- 
- #undef PACKAGE
-@@ -1342,7 +1345,11 @@
- 			if (GetLastError () == ERROR_BAD_EXE_FORMAT)
- 				/* http://forum.xchat.org/viewtopic.php?t=3277 */
- 				thread_mbox ("Cannot use this " PERL_DLL "\n\n"
-+#ifdef _WIN64
-+								 "64-bit ActivePerl is required.");
-+#else
- 								 "32-bit ActivePerl is required.");
-+#endif
- 			else {
- 				/* a lot of people install this old version */
- 				lib = LoadLibraryA ("perl56.dll");
-@@ -1357,7 +1364,7 @@
- 					thread_mbox ("Cannot open " PERL_DLL "\n\n"
- 									 "You must have ActivePerl " PERL_REQUIRED_VERSION " installed in order to\n"
- 									 "run perl scripts.\n\n"
--									 "http://www.activestate.com/ActivePerl/\n\n"
-+									 "http://www.activestate.com/activeperl/downloads\n\n"
- 									 "Make sure perl's bin directory is in your PATH.");
- 				}
- 			}
-diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/python/python.c xchat-wdk/plugins/python/python.c
---- xchat-wdk.orig/plugins/python/python.c	2010-12-28 03:50:24 +0100
-+++ xchat-wdk/plugins/python/python.c	2011-01-25 23:56:28 +0100
-@@ -53,10 +53,10 @@
- 
- #include <glib.h>
- #include <string.h>
--#include <unistd.h>
- #include <stdlib.h>
- #include <sys/types.h>
--#include <dirent.h>
-+#include "../../src/common/dirent.h"
-+#include "../../config.h"
- 
- #include "xchat-plugin.h"
- #include "Python.h"
-@@ -68,7 +68,7 @@
- 
- #ifdef WIN32
- #undef WITH_THREAD /* Thread support locks up xchat on Win32. */
--#define VERSION "0.8/2.4"	/* Linked to python24.dll */
-+#define VERSION "0.8/2.7"	/* Linked to python27.dll */
- #else
- #define VERSION "0.8"
- #endif
-diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/tcl/tclplugin.c xchat-wdk/plugins/tcl/tclplugin.c
---- xchat-wdk.orig/plugins/tcl/tclplugin.c	2010-03-21 01:49:42 +0100
-+++ xchat-wdk/plugins/tcl/tclplugin.c	2011-01-25 23:56:28 +0100
-@@ -32,8 +32,6 @@
- #include <windows.h>
- #define bzero(mem, sz) memset((mem), 0, (sz))
- #define bcopy(src, dest, count) memmove((dest), (src), (count))
--#else
--#include <unistd.h>
- #endif
- 
- #include "xchat-plugin.h"
-@@ -2221,7 +2219,7 @@
- #ifdef WIN32
-     lib = LoadLibraryA(TCL_DLL);
-     if (!lib) {
--        xchat_print(ph, "You must have ActiveTCL installed in order to run Tcl scripts.\n" "http://aspn.activestate.com/ASPN/Tcl/\n" "Make sure Tcl's bin directory is in your PATH.\n\n");
-+        xchat_print(ph, "You must have ActiveTCL 8.5 installed in order to run Tcl scripts.\n" "http://www.activestate.com/activetcl/downloads\n" "Make sure Tcl's bin directory is in your PATH.\n\n");
-         return 0;
-     }
-     FreeLibrary(lib);
-diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xdcc/xdcc.c xchat-wdk/plugins/xdcc/xdcc.c
---- xchat-wdk.orig/plugins/xdcc/xdcc.c	2002-12-26 04:35:09 +0100
-+++ xchat-wdk/plugins/xdcc/xdcc.c	2011-01-25 23:56:28 +0100
-@@ -2,11 +2,11 @@
- 
- #include <glib.h>
- #include <string.h>
--#include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- 
- #include "xchat-plugin.h"
-+#include "../../src/common/xchat.h"
- 
- static xchat_plugin *ph;	/* plugin handle */
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/cfgfiles.c xchat-wdk/src/common/cfgfiles.c
---- xchat-wdk.orig/src/common/cfgfiles.c	2010-08-07 09:14:45 +0200
-+++ xchat-wdk/src/common/cfgfiles.c	2011-01-25 23:56:28 +0100
-@@ -17,7 +17,6 @@
-  */
- 
- #include <fcntl.h>
--#include <unistd.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
-@@ -30,10 +29,9 @@
- #include "fe.h"
- #include "text.h"
- #include "xchatc.h"
-+#include "wdkutil.h"
- 
--#ifdef WIN32
--#define XCHAT_DIR "X-Chat 2"
--#else
-+#ifndef WIN32
- #define XCHAT_DIR ".xchat2"
- #endif
- #define DEF_FONT "Monospace 9"
-@@ -308,12 +306,19 @@
- {
- 	if (!xdir_fs)
- 	{
--		char out[256];
-+		if (portable_mode ())
-+		{
-+			xdir_fs = ".\\config";
-+		}
-+		else
-+		{
-+			char out[256];
- 
--		if (!get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\"
--				"Explorer\\Shell Folders", "AppData", out, sizeof (out)))
--			return "./config";
--		xdir_fs = g_strdup_printf ("%s\\" XCHAT_DIR, out);
-+			if (!get_reg_str ("Software\\Microsoft\\Windows\\CurrentVersion\\"
-+					"Explorer\\Shell Folders", "AppData", out, sizeof (out)))
-+				return "./config";
-+			xdir_fs = g_strdup_printf ("%s\\" "X-Chat 2", out);
-+		}
- 	}
- 	return xdir_fs;
- }
-@@ -393,7 +398,7 @@
- 	{"dcc_blocksize", P_OFFINT (dcc_blocksize), TYPE_INT},
- 	{"dcc_completed_dir", P_OFFSET (dcc_completed_dir), TYPE_STR},
- 	{"dcc_dir", P_OFFSET (dccdir), TYPE_STR},
--	{"dcc_fast_send", P_OFFINT (fastdccsend), TYPE_BOOL},
-+	/* {"dcc_fast_send", P_OFFINT (fastdccsend), TYPE_BOOL}, */
- 	{"dcc_global_max_get_cps", P_OFFINT (dcc_global_max_get_cps), TYPE_INT},
- 	{"dcc_global_max_send_cps", P_OFFINT (dcc_global_max_send_cps), TYPE_INT},
- 	{"dcc_ip", P_OFFSET (dcc_ip_str), TYPE_STR},
-@@ -536,6 +541,7 @@
- 
- 	{"tab_chans", P_OFFINT (tabchannels), TYPE_BOOL},
- 	{"tab_dialogs", P_OFFINT (privmsgtab), TYPE_BOOL},
-+	{"tab_icons", P_OFFINT (tab_icons), TYPE_BOOL},
- 	{"tab_layout", P_OFFINT (tab_layout), TYPE_INT},
- 	{"tab_new_to_front", P_OFFINT (newtabstofront), TYPE_INT},
- 	{"tab_notices", P_OFFINT (notices_tabs), TYPE_BOOL},
-@@ -546,9 +552,14 @@
- 	{"tab_sort", P_OFFINT (tab_sort), TYPE_BOOL},
- 	{"tab_trunc", P_OFFINT (truncchans), TYPE_INT},
- 	{"tab_utils", P_OFFINT (windows_as_tabs), TYPE_BOOL},
-+	{"tab_xp", P_OFFINT (tab_xp), TYPE_BOOL},
- 
-+	{"text_auto_copy_text", P_OFFINT (autocopy_text), TYPE_BOOL},
-+	{"text_auto_copy_stamp", P_OFFINT (autocopy_stamp), TYPE_BOOL},
-+	{"text_auto_copy_color", P_OFFINT (autocopy_color), TYPE_BOOL},
- 	{"text_background", P_OFFSET (background), TYPE_STR},
- 	{"text_color_nicks", P_OFFINT (colorednicks), TYPE_BOOL},
-+	{"text_emoticons", P_OFFINT (emoticons), TYPE_BOOL},
- 	{"text_font", P_OFFSET (font_normal), TYPE_STR},
- 	{"text_indent", P_OFFINT (indent_nicks), TYPE_BOOL},
- 	{"text_max_indent", P_OFFINT (max_auto_indent), TYPE_INT},
-@@ -561,7 +572,7 @@
- 	{"text_tint_blue", P_OFFINT (tint_blue), TYPE_INT},
- 	{"text_tint_green", P_OFFINT (tint_green), TYPE_INT},
- 	{"text_tint_red", P_OFFINT (tint_red), TYPE_INT},
--	{"text_transparent", P_OFFINT (transparent), TYPE_BOOL},
-+	/* {"text_transparent", P_OFFINT (transparent), TYPE_BOOL}, */
- 	{"text_wordwrap", P_OFFINT (wordwrap), TYPE_BOOL},
- 
- 	{0, 0, 0},
-@@ -624,13 +635,14 @@
- 	prefs.indent_nicks = 1;
- 	prefs.thin_separator = 1;
- 	prefs._tabs_position = 2; /* 2 = left */
--	prefs.fastdccsend = 1;
-+	/* prefs.fastdccsend = 1; */
- 	prefs.wordwrap = 1;
- 	prefs.autosave = 1;
- 	prefs.autodialog = 1;
- 	prefs.gui_input_spell = 1;
- 	prefs.autoreconnect = 1;
- 	prefs.recon_delay = 10;
-+	prefs.autocopy_text = 1;
- 	prefs.text_replay = 1;
- 	prefs.tabchannels = 1;
- 	prefs.tab_layout = 2;	/* 0=Tabs 1=Reserved 2=Tree */
-@@ -648,6 +660,7 @@
- 	prefs.dialog_height = 256;
- 	prefs.gui_join_dialog = 1;
- 	prefs.gui_quit_dialog = 1;
-+	prefs.slist_skip = 1;
- 	prefs.dcctimeout = 180;
- 	prefs.dccstalltimeout = 60;
- 	prefs.notify_timeout = 15;
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/chanopt.c xchat-wdk/src/common/chanopt.c
---- xchat-wdk.orig/src/common/chanopt.c	2008-06-15 06:40:29 +0200
-+++ xchat-wdk/src/common/chanopt.c	2011-01-25 23:56:28 +0100
-@@ -3,7 +3,6 @@
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
--#include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/ctcp.c xchat-wdk/src/common/ctcp.c
---- xchat-wdk.orig/src/common/ctcp.c	2010-05-30 04:28:04 +0200
-+++ xchat-wdk/src/common/ctcp.c	2011-01-25 23:56:28 +0100
-@@ -18,7 +18,6 @@
- 
- #include <stdio.h>
- #include <string.h>
--#include <unistd.h>
- #include <stdlib.h>
- 
- #include "xchat.h"
-@@ -134,7 +133,7 @@
- 
- 	if (!strcasecmp (msg, "VERSION") && !prefs.hidever)
- 	{
--		snprintf (outbuf, sizeof (outbuf), "VERSION xchat "PACKAGE_VERSION" %s",
-+		snprintf (outbuf, sizeof (outbuf), "VERSION XChat-WDK "PACKAGE_VERSION" / %s",
- 					 get_cpu_str ());
- 		serv->p_nctcp (serv, nick, outbuf);
- 	}
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/dcc.c xchat-wdk/src/common/dcc.c
---- xchat-wdk.orig/src/common/dcc.c	2010-05-30 04:28:04 +0200
-+++ xchat-wdk/src/common/dcc.c	2011-01-25 23:56:28 +0100
-@@ -31,7 +31,6 @@
- #include <time.h>
- #include <errno.h>
- #include <sys/stat.h>
--#include <unistd.h>
- #include <fcntl.h>
- 
- #define WANTSOCKET
-@@ -57,6 +56,7 @@
- 
- #ifdef USE_DCC64
- #define BIG_STR_TO_INT(x) strtoull(x,NULL,10)
-+#define stat _stat64
- #else
- #define BIG_STR_TO_INT(x) strtoul(x,NULL,10)
- #endif
-@@ -1983,9 +1983,7 @@
- 		return TRUE;
- 
- 	/* now handle case-insensitive Filesystems: HFS+, FAT */
--#ifdef WIN32
--#warning no win32 implementation - behaviour may be unreliable
--#else
-+#ifndef WIN32
- 	/* this fstat() shouldn't really fail */
- 	if ((dcc->fp == -1 ? stat (dcc->destfile_fs, &st_a) : fstat (dcc->fp, &st_a)) == -1)
- 		return FALSE;
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/ignore.c xchat-wdk/src/common/ignore.c
---- xchat-wdk.orig/src/common/ignore.c	2006-04-15 09:00:39 +0200
-+++ xchat-wdk/src/common/ignore.c	2011-01-25 23:56:28 +0100
-@@ -19,7 +19,6 @@
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
--#include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/inbound.c xchat-wdk/src/common/inbound.c
---- xchat-wdk.orig/src/common/inbound.c	2010-05-30 04:28:04 +0200
-+++ xchat-wdk/src/common/inbound.c	2011-01-25 23:56:28 +0100
-@@ -21,7 +21,6 @@
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/types.h>
--#include <unistd.h>
- #include <time.h>
- 
- #define WANTARPA
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/inet.h xchat-wdk/src/common/inet.h
---- xchat-wdk.orig/src/common/inet.h	2005-09-03 12:57:48 +0200
-+++ xchat-wdk/src/common/inet.h	2011-01-25 23:56:28 +0100
-@@ -24,9 +24,8 @@
- #ifdef USE_IPV6
- #include <winsock2.h>
- #include <ws2tcpip.h>
--#include <tpipv6.h>
- #else
--#include <winsock.h>
-+#include <winsock2.h>
- #endif
- 
- #define set_blocking(sok)	{ \
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/msproxy.c xchat-wdk/src/common/msproxy.c
---- xchat-wdk.orig/src/common/msproxy.c	2006-04-16 17:32:17 +0200
-+++ xchat-wdk/src/common/msproxy.c	2011-01-25 23:56:28 +0100
-@@ -26,7 +26,6 @@
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
--#include <unistd.h>
- #include <fcntl.h>
- 
- #define WANTSOCKET
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/network.c xchat-wdk/src/common/network.c
---- xchat-wdk.orig/src/common/network.c	2006-04-16 10:11:26 +0200
-+++ xchat-wdk/src/common/network.c	2011-01-25 23:56:28 +0100
-@@ -21,7 +21,6 @@
- #include <stdlib.h>
- #include <string.h>
- #include <stdio.h>
--#include <unistd.h>
- #include <glib.h>
- 
- #include "../../config.h"				  /* grab USE_IPV6 and LOOKUPD defines */
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/notify.c xchat-wdk/src/common/notify.c
---- xchat-wdk.orig/src/common/notify.c	2008-06-08 09:58:58 +0200
-+++ xchat-wdk/src/common/notify.c	2011-01-25 23:56:28 +0100
-@@ -22,7 +22,6 @@
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
--#include <unistd.h>
- #include <time.h>
- 
- #include "xchat.h"
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/outbound.c xchat-wdk/src/common/outbound.c
---- xchat-wdk.orig/src/common/outbound.c	2010-05-30 04:28:04 +0200
-+++ xchat-wdk/src/common/outbound.c	2011-01-25 23:56:28 +0100
-@@ -32,7 +32,6 @@
- #include <sys/wait.h>
- #endif
- 
--#include <unistd.h>
- #include <time.h>
- #include <signal.h>
- #include <sys/stat.h>
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/plugin-timer.c xchat-wdk/src/common/plugin-timer.c
---- xchat-wdk.orig/src/common/plugin-timer.c	2005-02-02 11:03:51 +0100
-+++ xchat-wdk/src/common/plugin-timer.c	2011-01-25 23:56:28 +0100
-@@ -1,7 +1,7 @@
- #include <stdlib.h>
- #include <string.h>
- #include <glib.h>
--#include "xchat-plugin.h"
-+#include "../../plugins/xchat-plugin.h"
- 
- #ifdef WIN32
- #define strcasecmp stricmp
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/plugin.c xchat-wdk/src/common/plugin.c
---- xchat-wdk.orig/src/common/plugin.c	2010-12-28 03:56:42 +0100
-+++ xchat-wdk/src/common/plugin.c	2011-01-25 23:56:28 +0100
-@@ -34,7 +34,7 @@
- #include "text.h"
- #define PLUGIN_C
- typedef struct session xchat_context;
--#include "xchat-plugin.h"
-+#include "../../plugins/xchat-plugin.h"
- #include "plugin.h"
- 
- 
-@@ -996,13 +996,16 @@
- 		return XCHATLIBDIR;
- 
- 	case 0x14f51cd8: /* version */
--		return PACKAGE_VERSION;
-+		return XCHAT_RELEASE;
- 
- 	case 0xdd9b1abd:	/* xchatdir */
- 		return get_xdir_utf8 ();
- 
- 	case 0xe33f6c4a:	/* xchatdirfs */
- 		return get_xdir_fs ();
-+
-+	case 0x3d1e70d7:	/* wdk_version */
-+		return PACKAGE_VERSION;
- 	}
- 
- 	sess = ph->context;
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/proto-irc.c xchat-wdk/src/common/proto-irc.c
---- xchat-wdk.orig/src/common/proto-irc.c	2010-05-30 04:28:04 +0200
-+++ xchat-wdk/src/common/proto-irc.c	2011-01-25 23:56:28 +0100
-@@ -18,7 +18,6 @@
- 
- /* IRC RFC1459(+commonly used extensions) protocol implementation */
- 
--#include <unistd.h>
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/server.c xchat-wdk/src/common/server.c
---- xchat-wdk.orig/src/common/server.c	2011-01-25 11:46:54 +0100
-+++ xchat-wdk/src/common/server.c	2011-01-26 00:04:22 +0100
-@@ -26,7 +26,6 @@
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
--#include <unistd.h>
- #include <errno.h>
- #include <fcntl.h>
- 
-@@ -845,33 +844,6 @@
- 	fe_set_throttle (serv);
- }
- 
--#ifdef WIN32
--
--static int
--waitline2 (GIOChannel *source, char *buf, int bufsize)
--{
--	int i = 0;
--	int len;
--
--	while (1)
--	{
--		if (g_io_channel_read (source, &buf[i], 1, &len) != G_IO_ERROR_NONE)
--			return -1;
--		if (buf[i] == '\n' || bufsize == i + 1)
--		{
--			buf[i] = 0;
--			return i;
--		}
--		i++;
--	}
--}
--
--#else
--
--#define waitline2(source,buf,size) waitline(serv->childread,buf,size,0)
--
--#endif
--
- /* connect() successed */
- 
- static void
-@@ -1395,12 +1367,7 @@
- static int
- http_read_line (int print_fd, int sok, char *buf, int len)
- {
--#ifdef WIN32
--	/* make sure waitline() uses recv() or it'll fail on win32 */
--	len = waitline (sok, buf, len, FALSE);
--#else
- 	len = waitline (sok, buf, len, TRUE);
--#endif
- 	if (len >= 1)
- 	{
- 		/* print the message out (send it to the parent process) */
-@@ -1524,9 +1491,10 @@
- 	if (!serv->dont_use_proxy) /* blocked in serverlist? */
- 	{
- 		if (FALSE)
-+		{
- 			;
- #ifdef USE_LIBPROXY
--		else if (prefs.proxy_type == 5)
-+		} else if (prefs.proxy_type == 5)
- 		{
- 			char **proxy_list;
- 			char *url, *proxy;
-@@ -1795,7 +1763,7 @@
- 	}
- #endif
- 	serv->childpid = pid;
--	serv->iotag = fe_input_add (serv->childread, FIA_READ, server_read_child,
-+	serv->iotag = fe_input_add (serv->childread, FIA_READ|FIA_FD, server_read_child,
- 										 serv);
- }
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/servlist.c xchat-wdk/src/common/servlist.c
---- xchat-wdk.orig/src/common/servlist.c	2011-01-25 11:26:25 +0100
-+++ xchat-wdk/src/common/servlist.c	2011-01-25 23:56:28 +0100
-@@ -21,7 +21,6 @@
- #include <string.h>
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <unistd.h>
- 
- #include "xchat.h"
- #include <glib/ghash.h>
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/ssl.c xchat-wdk/src/common/ssl.c
---- xchat-wdk.orig/src/common/ssl.c	2007-03-28 10:35:06 +0200
-+++ xchat-wdk/src/common/ssl.c	2011-01-25 23:56:28 +0100
-@@ -17,12 +17,12 @@
-  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-  */
- 
-+#include "inet.h"				  /* make it first to avoid macro redefinitions */
- #include <openssl/ssl.h>		  /* SSL_() */
- #include <openssl/err.h>		  /* ERR_() */
- #include <time.h>					  /* asctime() */
- #include <string.h>				  /* strncpy() */
- #include "ssl.h"					  /* struct cert_info */
--#include "inet.h"
- #include "../../config.h"		  /* HAVE_SNPRINTF */
- 
- #ifndef HAVE_SNPRINTF
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/text.c xchat-wdk/src/common/text.c
---- xchat-wdk.orig/src/common/text.c	2010-05-30 04:28:04 +0200
-+++ xchat-wdk/src/common/text.c	2011-01-25 23:56:28 +0100
-@@ -19,13 +19,11 @@
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
--#include <unistd.h>
- #include <ctype.h>
- #include <time.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #include <sys/stat.h>
--#include <sys/mman.h>
- 
- #include "xchat.h"
- #include <glib/ghash.h>
-@@ -271,9 +269,6 @@
- 	char *text;
- 	time_t stamp;
- 	int lines;
--	char *map, *end_map;
--	struct stat statbuf;
--	const char *begin, *eol;
- 
- 	if (sess->text_scrollback == SET_DEFAULT)
- 	{
-@@ -293,32 +288,9 @@
- 	if (fh == -1)
- 		return;
- 
--	if (fstat (fh, &statbuf) < 0)
--		return;
--
--	map = mmap (NULL, statbuf.st_size, PROT_READ, MAP_PRIVATE, fh, 0);
--	if (map == MAP_FAILED)
--		return;
--
--	end_map = map + statbuf.st_size;
--	
- 	lines = 0;
--	begin = map;
--	while (begin < end_map)
-+	while (waitline (fh, buf, sizeof buf, FALSE) != -1)
- 	{
--		int n_bytes;
--
--		eol = memchr (begin, '\n', end_map - begin);
--
--		if (!eol)
--			eol = end_map;
--
--		n_bytes = MIN (eol - begin, sizeof (buf) - 1);
--		
--		strncpy (buf, begin, n_bytes);
--
--		buf[n_bytes] = 0;
--		
- 		if (buf[0] == 'T')
- 		{
- 			if (sizeof (time_t) == 4)
-@@ -334,8 +306,6 @@
- 			}
- 			lines++;
- 		}
--
--		begin = eol + 1;
- 	}
- 
- 	sess->scrollwritten = lines;
-@@ -349,7 +319,6 @@
- 		/*EMIT_SIGNAL (XP_TE_GENMSG, sess, "*", buf, NULL, NULL, NULL, 0);*/
- 	}
- 
--	munmap (map, statbuf.st_size);
- 	close (fh);
- }
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/util.c xchat-wdk/src/common/util.c
---- xchat-wdk.orig/src/common/util.c	2008-02-07 02:50:37 +0100
-+++ xchat-wdk/src/common/util.c	2011-01-25 23:56:28 +0100
-@@ -16,11 +16,13 @@
-  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-  */
- 
-+#define WANTSOCKET
-+#include "inet.h"				/* make it first to avoid macro redefinitions */
-+
- #define __APPLE_API_STRICT_CONFORMANCE
- 
- #define _FILE_OFFSET_BITS 64
- #include <stdio.h>
--#include <unistd.h>
- #include <string.h>
- #include <stdlib.h>
- #include <sys/types.h>
-@@ -35,7 +37,7 @@
- #include <sys/utsname.h>
- #endif
- #include <fcntl.h>
--#include <dirent.h>
-+#include "dirent.h"
- #include <errno.h>
- #include "xchat.h"
- #include "xchatc.h"
-@@ -44,9 +46,6 @@
- #include "util.h"
- #include "../../config.h"
- 
--#define WANTSOCKET
--#include "inet.h"
--
- #if defined (USING_FREEBSD) || defined (__APPLE__)
- #include <sys/sysctl.h>
- #endif
-@@ -54,9 +53,11 @@
- #include <socks.h>
- #endif
- 
-+#ifndef ENABLE_NLS
- #ifndef HAVE_SNPRINTF
- #define snprintf g_snprintf
- #endif
-+#endif
- 
- #ifdef USE_DEBUG
- 
-@@ -383,6 +384,28 @@
- 	}
- }
- 
-+#ifdef WIN32
-+/* waitline2 using win32 file descriptor and glib instead of _read. win32 can't _read() sok! */
-+int
-+waitline2 (GIOChannel *source, char *buf, int bufsize)
-+{
-+	int i = 0;
-+	int len;
-+
-+	while (1)
-+	{
-+		if (g_io_channel_read (source, &buf[i], 1, &len) != G_IO_ERROR_NONE)
-+			return -1;
-+		if (buf[i] == '\n' || bufsize == i + 1)
-+		{
-+			buf[i] = 0;
-+			return i;
-+		}
-+		i++;
-+	}
-+}
-+#endif
-+
- /* checks for "~" in a file and expands */
- 
- char *
-@@ -628,26 +651,79 @@
- get_cpu_str (void)
- {
- 	static char verbuf[64];
--	OSVERSIONINFO osvi;
--	SYSTEM_INFO si;
-+	static char winver[20];
-+	OSVERSIONINFOEX osvi;
- 	double mhz;
- 
--	osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
-+	osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
- 	GetVersionEx (&osvi);
--	GetSystemInfo (&si);
-+
-+	switch (osvi.dwMajorVersion)
-+	{
-+		case 5:
-+			switch (osvi.dwMinorVersion)
-+			{
-+				case 1:
-+					strcpy (winver, "XP");
-+					break;
-+				case 2:
-+					if (osvi.wProductType == VER_NT_WORKSTATION)
-+					{
-+						strcpy (winver, "XP x64 Edition");
-+					}
-+					else
-+					{
-+						if (GetSystemMetrics(SM_SERVERR2) == 0)
-+						{
-+							strcpy (winver, "Server 2003");
-+						}
-+						else
-+						{
-+							strcpy (winver, "Server 2003 R2");
-+						}
-+					}
-+					break;
-+			}
-+			break;
-+		case 6:
-+			switch (osvi.dwMinorVersion)
-+			{
-+				case 0:
-+					if (osvi.wProductType == VER_NT_WORKSTATION)
-+					{
-+						strcpy (winver, "Vista");
-+					}
-+					else
-+					{
-+						strcpy (winver, "Server 2008");
-+					}
-+					break;
-+				case 1:
-+					if (osvi.wProductType == VER_NT_WORKSTATION)
-+					{
-+						strcpy (winver, "7");
-+					}
-+					else
-+					{
-+						strcpy (winver, "Server 2008 R2");
-+					}
-+					break;
-+			}
-+			break;
-+	}
- 
- 	mhz = get_mhz ();
- 	if (mhz)
- 	{
- 		double cpuspeed = ( mhz > 1000 ) ? mhz / 1000 : mhz;
- 		const char *cpuspeedstr = ( mhz > 1000 ) ? "GHz" : "MHz";
--		sprintf (verbuf, "Windows %ld.%ld [i%d86/%.2f%s]",
--					osvi.dwMajorVersion, osvi.dwMinorVersion, si.wProcessorLevel, 
--					cpuspeed, cpuspeedstr);
--	} else
--		sprintf (verbuf, "Windows %ld.%ld [i%d86]",
--			osvi.dwMajorVersion, osvi.dwMinorVersion, si.wProcessorLevel);
--
-+		sprintf (verbuf, "Windows %s [%.2f%s]",	winver, cpuspeed, cpuspeedstr);
-+	}
-+	else
-+	{
-+		sprintf (verbuf, "Windows %s", winver);
-+	}
-+	
- 	return verbuf;
- }
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/util.h xchat-wdk/src/common/util.h
---- xchat-wdk.orig/src/common/util.h	2008-02-07 02:50:37 +0100
-+++ xchat-wdk/src/common/util.h	2011-01-25 23:56:28 +0100
-@@ -43,6 +43,11 @@
- int strip_hidden_attribute (char *src, char *dst);
- char *errorstring (int err);
- int waitline (int sok, char *buf, int bufsize, int);
-+#ifdef WIN32
-+int waitline2 (GIOChannel *source, char *buf, int bufsize);
-+#else
-+#define waitline2(source,buf,size) waitline(serv->childread,buf,size,0)
-+#endif
- unsigned long make_ping_time (void);
- void move_file_utf8 (char *src_dir, char *dst_dir, char *fname, int dccpermissions);
- int mkdir_utf8 (char *dir);
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/xchat.c xchat-wdk/src/common/xchat.c
---- xchat-wdk.orig/src/common/xchat.c	2011-01-25 11:46:54 +0100
-+++ xchat-wdk/src/common/xchat.c	2011-01-25 23:56:28 +0100
-@@ -22,7 +22,6 @@
- #include <time.h>
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <unistd.h>
- 
- #define WANTSOCKET
- #include "inet.h"
-@@ -38,7 +37,7 @@
- #include "cfgfiles.h"
- #include "chanopt.h"
- #include "ignore.h"
--#include "xchat-plugin.h"
-+#include "../../plugins/xchat-plugin.h"
- #include "plugin.h"
- #include "plugin-timer.h"
- #include "notify.h"
-@@ -590,6 +589,7 @@
- 	"NAME DMSG\n"			"CMD msg =%2 &3\n\n"\
- 	"NAME EXIT\n"			"CMD quit\n\n"\
- 	"NAME GREP\n"			"CMD lastlog -r &2\n\n"\
-+	"NAME IGNALL\n"			"CMD ignore %2!*@* ALL\n\n"\
- 	"NAME J\n"				"CMD join &2\n\n"\
- 	"NAME KILL\n"			"CMD quote KILL %2 :&3\n\n"\
- 	"NAME LEAVE\n"			"CMD part &2\n\n"\
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/xchat.h xchat-wdk/src/common/xchat.h
---- xchat-wdk.orig/src/common/xchat.h	2011-01-25 11:46:54 +0100
-+++ xchat-wdk/src/common/xchat.h	2011-01-25 23:56:28 +0100
-@@ -12,12 +12,14 @@
- 
- #include "history.h"
- 
-+#ifndef ENABLE_NLS
- #ifndef HAVE_SNPRINTF
- #define snprintf g_snprintf
- #endif
- 
- #ifndef HAVE_VSNPRINTF
--#define vsnprintf g_vsnprintf
-+#define vsnprintf _vsnprintf
-+#endif
- #endif
- 
- #ifdef USE_DEBUG
-@@ -58,7 +60,7 @@
- 
- #ifdef WIN32						/* for win32 */
- #define OFLAGS O_BINARY
--#define sleep(t) _sleep(t*1000)
-+#define sleep(t) Sleep(t*1000)
- #include <direct.h>
- #define	F_OK	0
- #define	X_OK	1
-@@ -209,6 +211,9 @@
- 	unsigned int wallops;
- 	unsigned int skipmotd;
- 	unsigned int autorejoin;
-+	unsigned int autocopy_text;
-+	unsigned int autocopy_stamp;
-+	unsigned int autocopy_color;
- 	unsigned int colorednicks;
- 	unsigned int chanmodebuttons;
- 	unsigned int userlistbuttons;
-@@ -297,6 +302,9 @@
- 	unsigned int confmode;
- 	unsigned int utf8_locale;
- 	unsigned int identd;
-+	unsigned int emoticons;
-+	unsigned int tab_icons;
-+	unsigned int tab_xp;
- 
- 	unsigned int ctcp_number_limit;	/*flood */
- 	unsigned int ctcp_time_limit;	/*seconds of floods */
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/about.c xchat-wdk/src/fe-gtk/about.c
---- xchat-wdk.orig/src/fe-gtk/about.c	2010-05-16 09:43:49 +0200
-+++ xchat-wdk/src/fe-gtk/about.c	2011-01-25 23:56:28 +0100
-@@ -39,6 +39,7 @@
- 
- #include "../common/xchat.h"
- #include "../common/util.h"
-+#include "../common/wdkutil.h"
- #include "palette.h"
- #include "pixmaps.h"
- #include "gtkutil.h"
-@@ -87,6 +88,19 @@
- 	char buf[512];
- 	const char *locale = NULL;
- 	extern GtkWindow *parent_window;      /* maingui.c */
-+	SYSTEM_INFO si;
-+	unsigned short int cpu_arch;
-+
-+	GetSystemInfo (&si);
-+
-+	if (si.wProcessorArchitecture == 9)
-+	{
-+		cpu_arch = 64;
-+	}
-+	else
-+	{
-+		cpu_arch = 86;
-+	}
- 
- 	if (about)
- 	{
-@@ -95,7 +109,7 @@
- 	}
- 
- 	about = gtk_dialog_new ();
--	gtk_window_set_position (GTK_WINDOW (about), GTK_WIN_POS_CENTER);
-+	gtk_window_set_position (GTK_WINDOW (about), GTK_WIN_POS_CENTER_ON_PARENT);
- 	gtk_window_set_resizable (GTK_WINDOW (about), FALSE);
- 	gtk_window_set_title (GTK_WINDOW (about), _("About "DISPLAY_NAME));
- 	if (parent_window)
-@@ -114,35 +128,42 @@
- 	g_get_charset (&locale);
- 	(snprintf) (buf, sizeof (buf),
- 				"<span size=\"x-large\"><b>"DISPLAY_NAME" "PACKAGE_VERSION"</b></span>\n\n"
--				"%s\n\n"
- #ifdef WIN32
--				/* leave this message to avoid time wasting bug reports! */
--				"This version is unofficial and comes with no support.\n\n"
--#endif
--				"%s\n"
-+				"<b>XChat Release</b>: "XCHAT_RELEASE"\n\n"
-+				"<b>OS</b>: %s\n"
- 				"<b>Charset</b>: %s "
--#ifdef WIN32 
- 				"<b>GTK+</b>: %i.%i.%i\n"
-+				"<b>Compiled</b>: "__DATE__"\n"
-+				"<b>Portable Mode</b>: %s\n"
-+				"<b>Build Type</b>: x%d\n\n"
-+				"<small>This version is unofficial and comes with no support.\n"
-+				"\302\251 1998-2010 Peter \305\275elezn\303\275 &lt;zed@xchat.org>"
-+				/* "\n<a href=\"http://code.google.com/p/xchat-wdk/\">http://code.google.com/p/xchat-wdk/</a>" this is broken in gtk ATM */
-+				"</small>",
-+				get_cpu_str (),
-+				locale,
-+				gtk_major_version,
-+				gtk_minor_version,
-+				gtk_micro_version,
-+				(portable_mode () ? "Yes" : "No"),
-+				cpu_arch
- #else
-+				"%s\n\n"
-+				"%s\n"
-+				"<b>Charset</b>: %s "
- 				"<b>Renderer</b>: %s\n"
--#endif
- 				"<b>Compiled</b>: "__DATE__"\n\n"
- 				"<small>\302\251 1998-2010 Peter \305\275elezn\303\275 &lt;zed@xchat.org></small>",
--					_("A multiplatform IRC Client"),
--					get_cpu_str(),
--					locale,
--#ifdef WIN32
--					gtk_major_version,
--					gtk_minor_version,
--					gtk_micro_version
--#else
-+				_("A multiplatform IRC Client"),
-+				get_cpu_str (),
-+				locale,
- #ifdef USE_XFT
--					"Xft"
-+				"Xft"
- #else
--					"Pango"
-+				"Pango"
- #endif
- #endif
--					);
-+				);
- 	gtk_label_set_markup (GTK_LABEL (label), buf);
- 	gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/banlist.c xchat-wdk/src/fe-gtk/banlist.c
---- xchat-wdk.orig/src/fe-gtk/banlist.c	2010-05-16 05:20:22 +0200
-+++ xchat-wdk/src/fe-gtk/banlist.c	2011-01-25 23:56:28 +0100
-@@ -19,7 +19,6 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
--#include <unistd.h>
- #include <fcntl.h>
- #include <time.h>
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/chanlist.c xchat-wdk/src/fe-gtk/chanlist.c
---- xchat-wdk.orig/src/fe-gtk/chanlist.c	2008-02-24 04:46:02 +0100
-+++ xchat-wdk/src/fe-gtk/chanlist.c	2011-01-25 23:56:28 +0100
-@@ -19,7 +19,6 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
--#include <unistd.h>
- #include <fcntl.h>
- #include <time.h>
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/chanview-tabs.c xchat-wdk/src/fe-gtk/chanview-tabs.c
---- xchat-wdk.orig/src/fe-gtk/chanview-tabs.c	2005-11-21 06:25:39 +0100
-+++ xchat-wdk/src/fe-gtk/chanview-tabs.c	2011-01-25 23:56:28 +0100
-@@ -144,8 +144,8 @@
- 		for (i = adj->value; ((i > new_value) && (tab_left_is_moving)); i -= 0.1)
- 		{
- 			gtk_adjustment_set_value (adj, i);
--			while (g_main_pending ())
--				g_main_iteration (TRUE);
-+			while (g_main_context_pending (NULL))
-+				g_main_context_iteration (NULL, TRUE);
- 		}
- 
- 		gtk_adjustment_set_value (adj, new_value);
-@@ -191,8 +191,8 @@
- 		for (i = adj->value; ((i < new_value) && (tab_right_is_moving)); i += 0.1)
- 		{
- 			gtk_adjustment_set_value (adj, i);
--			while (g_main_pending ())
--				g_main_iteration (TRUE);
-+			while (g_main_context_pending (NULL))
-+				g_main_context_iteration (NULL, TRUE);
- 		}
- 
- 		gtk_adjustment_set_value (adj, new_value);
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/editlist.c xchat-wdk/src/fe-gtk/editlist.c
---- xchat-wdk.orig/src/fe-gtk/editlist.c	2006-03-13 09:33:45 +0100
-+++ xchat-wdk/src/fe-gtk/editlist.c	2011-01-25 23:56:28 +0100
-@@ -19,7 +19,6 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
--#include <unistd.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/fe-gtk/fe-gtk.c
---- xchat-wdk.orig/src/fe-gtk/fe-gtk.c	2010-08-14 03:46:21 +0200
-+++ xchat-wdk/src/fe-gtk/fe-gtk.c	2011-01-25 23:56:28 +0100
-@@ -19,7 +19,6 @@
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
--#include <unistd.h>
- 
- #include "fe-gtk.h"
- 
-@@ -32,6 +31,8 @@
- #include <gtk/gtkmessagedialog.h>
- #include <gtk/gtkversion.h>
- 
-+#include <gdk/gdkwin32.h>
-+
- #include "../common/xchat.h"
- #include "../common/fe.h"
- #include "../common/util.h"
-@@ -39,6 +40,7 @@
- #include "../common/cfgfiles.h"
- #include "../common/xchatc.h"
- #include "../common/plugin.h"
-+#include "../common/server.h"
- #include "gtkutil.h"
- #include "maingui.h"
- #include "pixmaps.h"
-@@ -136,11 +138,26 @@
-  {NULL}
- };
- 
-+#ifdef WIN32
-+static void
-+create_msg_dialog (gchar *title, gchar *message)
-+{
-+	GtkWidget *dialog;
-+	dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, message);
-+	gtk_window_set_title (GTK_WINDOW (dialog), title);
-+	gtk_dialog_run (GTK_DIALOG (dialog));
-+	gtk_widget_destroy (dialog);
-+}
-+#endif
-+
- int
- fe_args (int argc, char *argv[])
- {
- 	GError *error = NULL;
- 	GOptionContext *context;
-+#ifdef WIN32
-+	char *buffer[2048];
-+#endif
- 
- #ifdef ENABLE_NLS
- 	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-@@ -149,22 +166,67 @@
- #endif
- 
- 	context = g_option_context_new (NULL);
-+#ifdef WIN32
-+	g_option_context_set_help_enabled (context, FALSE);	/* disable stdout help as stdout is unavailable for subsystem:windows */
-+#endif
- 	g_option_context_add_main_entries (context, gopt_entries, GETTEXT_PACKAGE);
- 	g_option_context_add_group (context, gtk_get_option_group (FALSE));
- 	g_option_context_parse (context, &argc, &argv, &error);
- 
-+#ifdef WIN32
-+	if (error)											/* workaround for argv not being available when using subsystem:windows */
-+	{
-+		if (error->message)								/* the error message contains argv so search for patterns in that */
-+		{
-+			if (strstr (error->message, "--help-all") != NULL)
-+			{
-+				if (snprintf (buffer, 2048, g_option_context_get_help (context, FALSE, NULL)))
-+				{
-+					gtk_init (&argc, &argv);
-+					create_msg_dialog ("Long Help", buffer);
-+				}
-+				return 0;
-+			} else if (strstr (error->message, "--help") != NULL || strstr (error->message, "-?") != NULL)
-+			{
-+				if (snprintf (buffer, 2048, g_option_context_get_help (context, TRUE, NULL)))
-+				{
-+					gtk_init (&argc, &argv);
-+					create_msg_dialog ("Help", buffer);
-+				}
-+				return 0;
-+			} else 
-+			{
-+				if (snprintf (buffer, 2048, "%s\n", error->message))
-+				{
-+					gtk_init (&argc, &argv);
-+					create_msg_dialog ("Error", buffer);
-+				}
-+				return 1;
-+			}
-+		}
-+	}
-+#else
- 	if (error)
- 	{
- 		if (error->message)
- 			printf ("%s\n", error->message);
- 		return 1;
- 	}
-+#endif
- 
- 	g_option_context_free (context);
- 
- 	if (arg_show_version)
- 	{
-+#ifdef WIN32
-+		if (snprintf (buffer, 2048, DISPLAY_NAME" "PACKAGE_VERSION"\n"))
-+		{
-+			gtk_init (&argc, &argv);
-+			create_msg_dialog ("Version Information", buffer);
-+		}
-+#else
- 		printf (PACKAGE_TARNAME" "PACKAGE_VERSION"\n");
-+#endif
- 		return 0;
- 	}
- 
-@@ -177,7 +239,18 @@
- 		if (sl)
- 		{
- 			*sl = 0;
--			printf ("%s\\plugins\n", exe);
-+			if (snprintf (buffer, 2048, "%s\\plugins\n", exe))
-+			{
-+				gtk_init (&argc, &argv);
-+				create_msg_dialog ("Plugin Auto-load Directory", buffer);
-+			}
-+		} else
-+		{
-+			if (snprintf (buffer, 2048, ".\\plugins\n"))
-+			{
-+				gtk_init (&argc, &argv);
-+				create_msg_dialog ("Plugin Auto-load Directory", buffer);
-+			}
- 		}
- #else
- 		printf ("%s\n", XCHATLIBDIR"/plugins");
-@@ -187,7 +260,15 @@
- 
- 	if (arg_show_config)
- 	{
-+#ifdef WIN32
-+		if (snprintf (buffer, 2048, "%s\n", get_xdir_fs ()))
-+		{
-+			gtk_init (&argc, &argv);
-+			create_msg_dialog ("User Config Directory", buffer);
-+		}
-+#else
- 		printf ("%s\n", get_xdir_fs ());
-+#endif
- 		return 0;
- 	}
- 
-@@ -330,7 +411,7 @@
- {
- 	session *sess;
- 
--	if (getenv ("XCHAT_WARNING_IGNORE"))
-+	/* if (getenv ("XCHAT_WARNING_IGNORE")) */
- 		return;
- 
- 	sess = find_dialog (serv_list->data, "(warnings)");
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fe-gtk.h xchat-wdk/src/fe-gtk/fe-gtk.h
---- xchat-wdk.orig/src/fe-gtk/fe-gtk.h	2010-05-30 08:31:29 +0200
-+++ xchat-wdk/src/fe-gtk/fe-gtk.h	2011-01-25 23:56:28 +0100
-@@ -4,7 +4,7 @@
- /* If you're compiling this for Windows, your release is un-official
-  * and not condoned. Please don't use the XChat name. Make up your
-  * own name! */
--#define DISPLAY_NAME "XChat-Unofficial"
-+#define DISPLAY_NAME "XChat-WDK"
- #else
- #define DISPLAY_NAME "XChat"
- #endif
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/fkeys.c xchat-wdk/src/fe-gtk/fkeys.c
---- xchat-wdk.orig/src/fe-gtk/fkeys.c	2008-02-24 06:09:34 +0100
-+++ xchat-wdk/src/fe-gtk/fkeys.c	2011-01-25 23:56:28 +0100
-@@ -20,7 +20,6 @@
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <unistd.h>
- #include <string.h>
- #include <fcntl.h>
- #include <ctype.h>
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/gtkutil.c xchat-wdk/src/fe-gtk/gtkutil.c
---- xchat-wdk.orig/src/fe-gtk/gtkutil.c	2009-07-18 14:38:10 +0200
-+++ xchat-wdk/src/fe-gtk/gtkutil.c	2011-01-25 23:56:28 +0100
-@@ -22,7 +22,6 @@
- #include <stdarg.h>
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <unistd.h>
- #include <fcntl.h>
- #include "fe-gtk.h"
- 
-@@ -51,6 +50,10 @@
- #include "../common/util.h"
- #include "gtkutil.h"
- #include "pixmaps.h"
-+#ifdef WIN32
-+#include "../common/fe.h"
-+#include "../common/thread.h"
-+#endif
- 
- /* gtkutil.c, just some gtk wrappers */
- 
-@@ -63,6 +66,13 @@
- 	void *userdata;
- 	filereqcallback callback;
- 	int flags;		/* FRF_* flags */
-+
-+#ifdef WIN32
-+	int multiple;
-+	thread *th;
-+	char *title;	/* native locale */
-+	char *filter;
-+#endif
- };
- 
- static char last_dir[256] = "";
-@@ -164,6 +174,190 @@
- 	}
- }
- 
-+#ifdef WIN32
-+static int
-+win32_openfile (char *file_buf, int file_buf_len, char *title_text, char *filter,
-+			   int multiple)
-+{
-+	OPENFILENAME o;
-+
-+	memset (&o, 0, sizeof (o));
-+
-+	o.lStructSize = sizeof (o);
-+	o.lpstrFilter = filter;
-+	o.lpstrFile = file_buf;
-+	o.nMaxFile = file_buf_len;
-+	o.lpstrTitle = title_text;
-+	o.Flags = 0x02000000 | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
-+				OFN_NOCHANGEDIR | OFN_EXPLORER | OFN_LONGNAMES | OFN_NONETWORKBUTTON;
-+	if (multiple)
-+	{
-+		o.Flags |= OFN_ALLOWMULTISELECT;
-+	}
-+
-+	return GetOpenFileName (&o);
-+}
-+
-+static int
-+win32_savefile (char *file_buf, int file_buf_len, char *title_text, char *filter,
-+               int multiple)
-+{
-+	/* we need the filter to get the default filename. it is from fe-gtk.c (fe_confirm);
-+	 * but that filter is actually the whole filename, so apply an empty filter and all good.
-+	 * in win32_thread2 we copy the filter ( = the filename) after the last dir into our
-+	 * LPTSTR file buffer to make it actually work. the docs for this amazingly retard api:
-+	 *
-+	 * http://msdn.microsoft.com/en-us/library/ms646839%28VS.85%29.aspx
-+	 */
-+
-+	OPENFILENAME o;
-+
-+	memset (&o, 0, sizeof (o));
-+
-+	o.lStructSize = sizeof (o);
-+	o.lpstrFilter = "All files\0*.*\0\0";
-+	o.lpstrFile = file_buf;
-+	o.nMaxFile = file_buf_len;
-+	o.lpstrTitle = title_text;
-+	o.Flags = 0x02000000 | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
-+				OFN_NOCHANGEDIR | OFN_EXPLORER | OFN_LONGNAMES | OFN_NONETWORKBUTTON;
-+	if (multiple)
-+	{
-+		o.Flags |= OFN_ALLOWMULTISELECT;
-+	}
-+
-+	return GetSaveFileName (&o);
-+}
-+
-+static void *
-+win32_thread (struct file_req *freq)
-+{
-+	char buf[1024 + 32];
-+	char file[1024];
-+
-+	memset (file, 0, sizeof (file));
-+	safe_strcpy (file, last_dir, sizeof (file));
-+
-+	if (win32_openfile (file, sizeof (file), freq->title, freq->filter, freq->multiple))
-+	{
-+		if (freq->multiple)
-+		{
-+			char *f = file;
-+
-+			if (f[strlen (f) + 1] == 0)	/* only selected one file */
-+			{
-+				snprintf (buf, sizeof (buf), "1\n%s\n", file);
-+				write (freq->th->pipe_fd[1], buf, strlen (buf));
-+			} else
-+			{
-+				f += strlen (f) + 1; /* skip first, it's only the dir */
-+				while (f[0])
-+				{
-+					snprintf (buf, sizeof (buf), "1\n%s\\%s\n", /*dir!*/file, f);
-+					write (freq->th->pipe_fd[1], buf, strlen (buf));
-+					f += strlen (f) + 1;
-+				}
-+			}
-+
-+		} else
-+		{
-+			snprintf (buf, sizeof (buf), "1\n%s\n", file);
-+			write (freq->th->pipe_fd[1], buf, strlen (buf));
-+		}
-+	}
-+
-+	write (freq->th->pipe_fd[1], "0\n", 2);
-+	Sleep (2000);
-+
-+	return NULL;
-+}
-+
-+static void *
-+win32_thread2 (struct file_req *freq)
-+{
-+	char buf[1024 + 32];
-+	char file[1024];
-+
-+	memset (file, 0, sizeof (file));
-+	safe_strcpy (file, last_dir, sizeof (file));
-+	safe_strcpy (file, freq->filter, sizeof (file));
-+
-+	if (win32_savefile (file, sizeof (file), freq->title, NULL, freq->multiple))
-+	{
-+		if (freq->multiple)
-+		{
-+			char *f = file;
-+
-+			if (f[strlen (f) + 1] == 0)    /* only selected one file */
-+			{
-+				snprintf (buf, sizeof (buf), "1\n%s\n", file);
-+				write (freq->th->pipe_fd[1], buf, strlen (buf));
-+			} else
-+			{
-+				f += strlen (f) + 1; /* skip first, it's only the dir */
-+				while (f[0])
-+				{
-+					snprintf (buf, sizeof (buf), "1\n%s\\%s\n", /*dir!*/file, f);
-+					write (freq->th->pipe_fd[1], buf, strlen (buf));
-+					f += strlen (f) + 1;
-+				}
-+			}
-+
-+		} else
-+		{
-+			snprintf (buf, sizeof (buf), "1\n%s\n", file);
-+			write (freq->th->pipe_fd[1], buf, strlen (buf));
-+		}
-+	}
-+
-+	write (freq->th->pipe_fd[1], "0\n", 2);
-+	Sleep (2000);
-+
-+	return NULL;
-+}
-+
-+static gboolean
-+win32_close_pipe (int fd)
-+{
-+	close (fd);
-+	return 0;
-+}
-+
-+static gboolean
-+win32_read_thread (GIOChannel *source, GIOCondition cond, struct file_req *freq)
-+{
-+	char buf[512];
-+	char *file;
-+
-+	waitline2 (source, buf, sizeof buf);
-+
-+	switch (buf[0])
-+	{
-+	case '0':	/* filedialog has closed */
-+		freq->callback (freq->userdata, NULL);
-+		break;
-+
-+	case '1':	/* got a filename! */
-+		waitline2 (source, buf, sizeof buf);
-+		file = g_filename_to_utf8 (buf, -1, 0, 0, 0);
-+		freq->callback (freq->userdata, file);
-+		g_free (file);
-+		return TRUE;
-+	}
-+
-+	/* it doesn't work to close them here, because of the weird
-+		way giowin32 works. We must _return_ before closing them */
-+	g_timeout_add(3000, (GSourceFunc)win32_close_pipe, freq->th->pipe_fd[0]);
-+	g_timeout_add(2000, (GSourceFunc)win32_close_pipe, freq->th->pipe_fd[1]);
-+
-+	g_free (freq->title);
-+	free (freq->th);
-+	free (freq);
-+
-+	return FALSE;
-+}
-+#endif
-+
- void
- gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter,
- 						int flags)
-@@ -172,6 +366,58 @@
- 	GtkWidget *dialog;
- 	extern char *get_xdir_fs (void);
- 
-+#ifdef WIN32
-+	if (!(flags & FRF_WRITE))
-+	{
-+		freq = malloc (sizeof (struct file_req));
-+		freq->th = thread_new ();
-+		freq->flags = 0;
-+		freq->multiple = (flags & FRF_MULTIPLE);
-+		freq->callback = callback;
-+		freq->userdata = userdata;
-+		freq->title = g_locale_from_utf8 (title, -1, 0, 0, 0);
-+		if (!filter)
-+		{
-+			freq->filter =	"All files\0*.*\0"
-+							"Executables\0*.exe\0"
-+							"ZIP files\0*.zip\0\0";
-+		}
-+		else
-+		{
-+			freq->filter = filter;
-+		}
-+
-+		thread_start (freq->th, win32_thread, freq);
-+		fe_input_add (freq->th->pipe_fd[0], FIA_FD|FIA_READ, win32_read_thread, freq);
-+
-+		return;
-+
-+	}
-+	
-+	else {
-+		freq = malloc (sizeof (struct file_req));
-+		freq->th = thread_new ();
-+		freq->flags = 0;
-+		freq->multiple = (flags & FRF_MULTIPLE);
-+		freq->callback = callback;
-+		freq->userdata = userdata;
-+		freq->title = g_locale_from_utf8 (title, -1, 0, 0, 0);
-+		if (!filter)
-+		{
-+			freq->filter = "All files\0*.*\0\0";
-+		}
-+		else
-+		{
-+			freq->filter = filter;
-+		}
-+
-+		thread_start (freq->th, win32_thread2, freq);
-+		fe_input_add (freq->th->pipe_fd[0], FIA_FD|FIA_READ, win32_read_thread, freq);
-+
-+	return;
-+	}
-+#endif
-+
- 	if (flags & FRF_WRITE)
- 	{
- 		dialog = gtk_file_chooser_dialog_new (title, NULL,
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/joind.c xchat-wdk/src/fe-gtk/joind.c
---- xchat-wdk.orig/src/fe-gtk/joind.c	2006-12-26 05:56:55 +0100
-+++ xchat-wdk/src/fe-gtk/joind.c	2011-01-25 23:56:28 +0100
-@@ -9,7 +9,6 @@
- 
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <unistd.h>
- #include <string.h>
- #include <stdio.h>
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/maingui.c xchat-wdk/src/fe-gtk/maingui.c
---- xchat-wdk.orig/src/fe-gtk/maingui.c	2010-12-28 04:16:34 +0100
-+++ xchat-wdk/src/fe-gtk/maingui.c	2011-01-25 23:56:28 +0100
-@@ -53,6 +53,7 @@
- #include "../common/plugin.h"
- #include "../common/modes.h"
- #include "../common/url.h"
-+#include "../common/wdkutil.h"
- #include "fe-gtk.h"
- #include "banlist.h"
- #include "gtkutil.h"
-@@ -214,60 +215,10 @@
- 	away_list = mg_attr_list_create (&colors[COL_AWAY], FALSE);
- }
- 
--#ifdef WIN32
--#define WINVER 0x0501	/* needed for vc6? */
--#include <windows.h>
--#include <gdk/gdkwin32.h>
--
--/* Flash the taskbar button on Windows when there's a highlight event. */
--
--static void
--flash_window (GtkWidget *win)
--{
--	FLASHWINFO fi;
--	static HMODULE user = NULL;
--	static BOOL (*flash) (PFLASHWINFO) = NULL;
--
--	if (!user)
--	{
--		user = GetModuleHandleA ("USER32");
--		if (!user)
--			return;	/* this should never fail */
--	}
--
--	if (!flash)
--	{
--		flash = (void *)GetProcAddress (user, "FlashWindowEx");
--		if (!flash)
--			return;	/* this fails on NT4.0 and Win95 */
--	}
--
--	fi.cbSize = sizeof (fi);
--	fi.hwnd = GDK_WINDOW_HWND (win->window);
--	fi.dwFlags = FLASHW_ALL | FLASHW_TIMERNOFG;
--	fi.uCount = 0;
--	fi.dwTimeout = 500;
--	flash (&fi);
--	/*FlashWindowEx (&fi);*/
--}
--#else
--
--#ifdef USE_XLIB
--#include <gdk/gdkx.h>
--
- static void
- set_window_urgency (GtkWidget *win, gboolean set)
- {
--	XWMHints *hints;
--
--	hints = XGetWMHints(GDK_WINDOW_XDISPLAY(win->window), GDK_WINDOW_XWINDOW(win->window));
--	if (set)
--		hints->flags |= XUrgencyHint;
--	else
--		hints->flags &= ~XUrgencyHint;
--	XSetWMHints(GDK_WINDOW_XDISPLAY(win->window),
--	            GDK_WINDOW_XWINDOW(win->window), hints);
--	XFree(hints);
-+	gtk_window_set_urgency_hint (GTK_WINDOW (win), set);
- }
- 
- static void
-@@ -281,18 +232,14 @@
- {
- 	set_window_urgency (win, FALSE);
- }
--#endif
--#endif
- 
- /* flash the taskbar button */
- 
- void
- fe_flash_window (session *sess)
- {
--#if defined(WIN32) || defined(USE_XLIB)
- 	if (fe_gui_info (sess, 0) != 1)	/* only do it if not focused */
- 		flash_window (sess->gui->window);
--#endif
- }
- 
- /* set a tab plain, red, light-red, or blue */
-@@ -1334,7 +1281,7 @@
- 	gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1),
- 										GTK_BUTTONBOX_END);
- 
--	if (minimize_button)
-+	if (minimize_button && !xtray_mode ())
- 	{
- 		button = gtk_button_new_with_mnemonic (_("_Minimize to Tray"));
- 		gtk_widget_show (button);
-@@ -2972,11 +2919,7 @@
- 		gtk_xtext_check_marker_visibility (GTK_XTEXT (current_sess->gui->xtext));
- 		plugin_emit_dummy_print (current_sess, "Focus Window");
- 	}
--#ifndef WIN32
--#ifdef USE_XLIB
- 	unflash_window (GTK_WIDGET (win));
--#endif
--#endif
- 	return FALSE;
- }
- 
-@@ -2987,11 +2930,7 @@
- 	if (!sess->server->server_session)
- 		sess->server->server_session = sess;
- 	gtk_xtext_check_marker_visibility(GTK_XTEXT (current_sess->gui->xtext));
--#ifndef WIN32
--#ifdef USE_XLIB
- 	unflash_window (GTK_WIDGET (win));
--#endif
--#endif
- 	plugin_emit_dummy_print (sess, "Focus Window");
- 	return FALSE;
- }
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/menu.c xchat-wdk/src/fe-gtk/menu.c
---- xchat-wdk.orig/src/fe-gtk/menu.c	2010-05-16 06:24:24 +0200
-+++ xchat-wdk/src/fe-gtk/menu.c	2011-01-25 23:56:28 +0100
-@@ -20,7 +20,6 @@
- #include <stdlib.h>
- #include <fcntl.h>
- #include <string.h>
--#include <unistd.h>
- 
- #ifdef WIN32
- #include <windows.h>
-@@ -1204,6 +1203,12 @@
- }
- 
- static void
-+menu_copy_selection (GtkWidget * wid, gpointer none)
-+{
-+	gtk_xtext_copy_selection (GTK_XTEXT (current_sess->gui->xtext));
-+}
-+
-+static void
- menu_flushbuffer (GtkWidget * wid, gpointer none)
- {
- 	fe_text_clear (current_sess, 0);
-@@ -1645,6 +1650,7 @@
- 	{N_("URL Grabber..."), url_opengui, 0, M_MENUITEM, 0, 0, 1},
- 	{0, 0, 0, M_SEP, 0, 0, 0},
- 	{N_("Reset Marker Line"), menu_resetmarker, 0, M_MENUITEM, 0, 0, 1, GDK_m},
-+	{N_("_Copy Selection"), menu_copy_selection, 0, M_MENUITEM, 0, 0, 1, GDK_C},
- 	{N_("C_lear Text"), menu_flushbuffer, GTK_STOCK_CLEAR, M_MENUSTOCK, 0, 0, 1, GDK_l},
- #define SEARCH_OFFSET 67
- 	{N_("Search Text..."), menu_search, GTK_STOCK_FIND, M_MENUSTOCK, 0, 0, 1, GDK_f},
-@@ -2188,7 +2194,9 @@
- 										mymenu[i].key,
- 										mymenu[i].key == GDK_F1 ? 0 :
- 										mymenu[i].key == GDK_w ? close_mask :
--										GDK_CONTROL_MASK,
-+										(g_ascii_isupper (mymenu[i].key)) ?
-+											GDK_SHIFT_MASK | GDK_CONTROL_MASK :
-+											GDK_CONTROL_MASK,
- 										GTK_ACCEL_VISIBLE);
- 			if (mymenu[i].callback)
- 				g_signal_connect (G_OBJECT (item), "activate",
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/palette.c xchat-wdk/src/fe-gtk/palette.c
---- xchat-wdk.orig/src/fe-gtk/palette.c	2010-05-16 05:20:22 +0200
-+++ xchat-wdk/src/fe-gtk/palette.c	2011-01-25 23:56:28 +0100
-@@ -18,7 +18,6 @@
- 
- #include <stdio.h>
- #include <stdlib.h>
--#include <unistd.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/plugin-tray.c xchat-wdk/src/fe-gtk/plugin-tray.c
---- xchat-wdk.orig/src/fe-gtk/plugin-tray.c	2010-11-16 09:26:23 +0100
-+++ xchat-wdk/src/fe-gtk/plugin-tray.c	2011-01-25 23:56:28 +0100
-@@ -1,14 +1,14 @@
- /* Copyright (C) 2006-2007 Peter Zelezny. */
- 
- #include <string.h>
--#include <unistd.h>
--#include "../common/xchat-plugin.h"
-+#include "../../plugins/xchat-plugin.h"
- #include "../common/xchat.h"
- #include "../common/xchatc.h"
- #include "../common/inbound.h"
- #include "../common/server.h"
- #include "../common/fe.h"
- #include "../common/util.h"
-+#include "../common/wdkutil.h"
- #include "fe-gtk.h"
- #include "pixmaps.h"
- #include "maingui.h"
-@@ -297,10 +297,10 @@
- 		nets = tray_count_networks ();
- 		chans = tray_count_channels ();
- 		if (nets)
--			tray_set_tipf (_("XChat: Connected to %u networks and %u channels"),
-+			tray_set_tipf (_("XChat-WDK: Connected to %u networks and %u channels"),
- 								nets, chans);
- 		else
--			tray_set_tipf ("XChat: %s", _("Not connected."));
-+			tray_set_tipf ("XChat-WDK: %s", _("Not connected."));
- 	}
- 
- 	if (custom_icon1)
-@@ -450,7 +450,7 @@
- 	/* ph may have an invalid context now */
- 	xchat_set_context (ph, xchat_find_context (ph, NULL, NULL));
- 
--	win = (GtkWindow *)xchat_get_info (ph, "win_ptr");
-+	win = xchat_get_info (ph, "gtkwin_ptr");
- 
- 	tray_stop_flash ();
- 	tray_reset_counts ();
-@@ -585,11 +585,12 @@
- 	/*gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (widget));*/
- 
- 	if (tray_get_window_status () == WS_HIDDEN)
--		tray_make_item (menu, _("_Restore"), tray_menu_restore_cb, NULL);
-+		tray_make_item (menu, _("_Restore Window"), tray_menu_restore_cb, NULL);
- 	else
--		tray_make_item (menu, _("_Hide"), tray_menu_restore_cb, NULL);
-+		tray_make_item (menu, _("_Hide Window"), tray_menu_restore_cb, NULL);
- 	tray_make_item (menu, NULL, tray_menu_quit_cb, NULL);
- 
-+#if 0
- 	submenu = mg_submenu (menu, _("_Blink on"));
- 	blink_item (&prefs.input_tray_chans, submenu, _("Channel Message"));
- 	blink_item (&prefs.input_tray_priv, submenu, _("Private Message"));
-@@ -606,6 +607,7 @@
- 		gtk_widget_set_sensitive (item, FALSE);
- 
- 	tray_make_item (menu, NULL, tray_menu_quit_cb, NULL);
-+#endif
- 	mg_create_icon_item (_("_Quit"), GTK_STOCK_QUIT, menu, tray_menu_quit_cb, NULL);
- 
- 	menu_add_plugin_items (menu, "\x5$TRAY", NULL);
-@@ -631,8 +633,8 @@
- 	sticon = gtk_status_icon_new_from_pixbuf (ICON_NORMAL);
- 	if (!sticon)
- 		return;
--	g_signal_connect (G_OBJECT (sticon), "popup-menu",
--							G_CALLBACK (tray_menu_cb), sticon);
-+	/* g_signal_connect (G_OBJECT (sticon), "popup-menu",
-+							G_CALLBACK (tray_menu_cb), sticon); */
- 	g_signal_connect (G_OBJECT (sticon), "activate",
- 							G_CALLBACK (tray_menu_restore_cb), NULL);
- }
-@@ -650,15 +652,15 @@
- 		/* FIXME: hides any previous private messages */
- 		tray_hilight_count++;
- 		if (tray_hilight_count == 1)
--			tray_set_tipf (_("XChat: Highlighted message from: %s (%s)"),
-+			tray_set_tipf (_("XChat-WDK: Highlighted message from: %s (%s)"),
- 								word[1], xchat_get_info (ph, "channel"));
- 		else
--			tray_set_tipf (_("XChat: %u highlighted messages, latest from: %s (%s)"),
-+			tray_set_tipf (_("XChat-WDK: %u highlighted messages, latest from: %s (%s)"),
- 								tray_hilight_count, word[1], xchat_get_info (ph, "channel"));
- 	}
- 
- 	if (prefs.input_balloon_hilight)
--		tray_set_balloonf (word[2], _("XChat: Highlighted message from: %s (%s)"),
-+		tray_set_balloonf (word[2], _("XChat-WDK: Highlighted message from: %s (%s)"),
- 								 word[1], xchat_get_info (ph, "channel"));
- 
- 	return XCHAT_EAT_NONE;
-@@ -676,14 +678,14 @@
- 
- 		tray_pub_count++;
- 		if (tray_pub_count == 1)
--			tray_set_tipf (_("XChat: New public message from: %s (%s)"),
-+			tray_set_tipf (_("XChat-WDK: New public message from: %s (%s)"),
- 								word[1], xchat_get_info (ph, "channel"));
- 		else
--			tray_set_tipf (_("XChat: %u new public messages."), tray_pub_count);
-+			tray_set_tipf (_("XChat-WDK: %u new public messages."), tray_pub_count);
- 	}
- 
- 	if (prefs.input_balloon_chans)
--		tray_set_balloonf (word[2], _("XChat: New public message from: %s (%s)"),
-+		tray_set_balloonf (word[2], _("XChat-WDK: New public message from: %s (%s)"),
- 								 word[1], xchat_get_info (ph, "channel"));
- 
- 	return XCHAT_EAT_NONE;
-@@ -705,14 +707,14 @@
- 
- 	tray_priv_count++;
- 	if (tray_priv_count == 1)
--		tray_set_tipf (_("XChat: Private message from: %s (%s)"),
-+		tray_set_tipf (_("XChat-WDK: Private message from: %s (%s)"),
- 							from, network);
- 	else
--		tray_set_tipf (_("XChat: %u private messages, latest from: %s (%s)"),
-+		tray_set_tipf (_("XChat-WDK: %u private messages, latest from: %s (%s)"),
- 							tray_priv_count, from, network);
- 
- 	if (prefs.input_balloon_priv)
--		tray_set_balloonf (text, _("XChat: Private message from: %s (%s)"),
-+		tray_set_balloonf (text, _("XChat-WDK: Private message from: %s (%s)"),
- 								 from, network);
- }
- 
-@@ -758,15 +760,15 @@
- 
- 		tray_file_count++;
- 		if (tray_file_count == 1)
--			tray_set_tipf (_("XChat: File offer from: %s (%s)"),
-+			tray_set_tipf (_("XChat-WDK: File offer from: %s (%s)"),
- 								word[1], network);
- 		else
--			tray_set_tipf (_("XChat: %u file offers, latest from: %s (%s)"),
-+			tray_set_tipf (_("XChat-WDK: %u file offers, latest from: %s (%s)"),
- 								tray_file_count, word[1], network);
- 	}
- 
- 	if (prefs.input_balloon_priv)
--		tray_set_balloonf ("", _("XChat: File offer from: %s (%s)"),
-+		tray_set_balloonf ("", _("XChat-WDK: File offer from: %s (%s)"),
- 								word[1], network);
- 
- 	return XCHAT_EAT_NONE;
-@@ -802,7 +804,7 @@
- 	}
- 	else
- 	{
--		if (prefs.gui_tray)
-+		if (prefs.gui_tray && !xtray_mode ())
- 			tray_init ();
- 	}
- }
-@@ -834,7 +836,7 @@
- 
- 	xchat_hook_print (ph, "Focus Window", -1, tray_focus_cb, NULL);
- 
--	if (prefs.gui_tray)
-+	if (prefs.gui_tray && !xtray_mode ())
- 		tray_init ();
- 
- 	return 1;       /* return 1 for success */
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/plugingui.c xchat-wdk/src/fe-gtk/plugingui.c
---- xchat-wdk.orig/src/fe-gtk/plugingui.c	2010-05-16 05:20:22 +0200
-+++ xchat-wdk/src/fe-gtk/plugingui.c	2011-01-25 23:56:29 +0100
-@@ -35,7 +35,7 @@
- #include "../common/xchat.h"
- #define PLUGIN_C
- typedef struct session xchat_context;
--#include "../common/xchat-plugin.h"
-+#include "../../plugins/xchat-plugin.h"
- #include "../common/plugin.h"
- #include "../common/util.h"
- #include "../common/outbound.h"
-@@ -147,7 +147,9 @@
- plugingui_load (void)
- {
- 	gtkutil_file_req (_("Select a Plugin or Script to load"), plugingui_load_cb,
--							current_sess, NULL, FRF_ADDFOLDER);
-+							current_sess,
-+							"Plugins and Scripts\0*.dll;*.lua;*.pl;*.py;*.tcl\0"
-+							"All files\0*.*\0\0", 0);
- }
- 
- static void
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/rawlog.c xchat-wdk/src/fe-gtk/rawlog.c
---- xchat-wdk.orig/src/fe-gtk/rawlog.c	2010-05-16 05:20:22 +0200
-+++ xchat-wdk/src/fe-gtk/rawlog.c	2011-01-25 23:56:29 +0100
-@@ -19,7 +19,6 @@
- #include <stdio.h>
- #include <string.h>
- #include <fcntl.h>
--#include <unistd.h>
- #include <stdlib.h>
- 
- #include "fe-gtk.h"
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/search.c xchat-wdk/src/fe-gtk/search.c
---- xchat-wdk.orig/src/fe-gtk/search.c	2010-05-16 05:20:22 +0200
-+++ xchat-wdk/src/fe-gtk/search.c	2011-01-25 23:56:29 +0100
-@@ -153,7 +153,7 @@
- 								_("_Find"));
- 	g_object_set_data (G_OBJECT (wid), "e", entry);
- 
--	g_signal_connect (G_OBJECT (win), "key-press-event", G_CALLBACK (search_key_cb), win);
-+	g_signal_connect (G_OBJECT (win), "key_press_event", G_CALLBACK (search_key_cb), win);
- 
- 	gtk_widget_show (win);
- }
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/setup.c xchat-wdk/src/fe-gtk/setup.c
---- xchat-wdk.orig/src/fe-gtk/setup.c	2011-01-25 11:46:54 +0100
-+++ xchat-wdk/src/fe-gtk/setup.c	2011-01-25 23:56:29 +0100
-@@ -109,19 +109,32 @@
- 					N_("Give each person on IRC a different color"),0,0},
- 	{ST_TOGGLR, N_("Indent nick names"), P_OFFINTNL(indent_nicks),
- 					N_("Make nick names right-justified"),0,0},
--	{ST_TOGGLE, N_("Transparent background"), P_OFFINTNL(transparent),0,0,0},
--	{ST_TOGGLR, N_("Show marker line"), P_OFFINTNL(show_marker),
-+	/* {ST_TOGGLE, N_("Transparent background"), P_OFFINTNL(transparent),0,0,0}, */
-+	{ST_TOGGLE, N_("Show marker line"), P_OFFINTNL(show_marker),
- 					N_("Insert a red line after the last read text."),0,0},
--	{ST_HEADER, N_("Transparency Settings"), 0,0,0},
-+	/* {ST_HEADER, N_("Transparency Settings"), 0,0,0},
- 	{ST_HSCALE, N_("Red:"), P_OFFINTNL(tint_red),0,0,0},
- 	{ST_HSCALE, N_("Green:"), P_OFFINTNL(tint_green),0,0,0},
--	{ST_HSCALE, N_("Blue:"), P_OFFINTNL(tint_blue),0,0,0},
-+	{ST_HSCALE, N_("Blue:"), P_OFFINTNL(tint_blue),0,0,0}, */
- 
- 	{ST_HEADER,	N_("Time Stamps"),0,0,0},
- 	{ST_TOGGLE, N_("Enable time stamps"), P_OFFINTNL(timestamp),0,0,2},
- 	{ST_ENTRY,  N_("Time stamp format:"), P_OFFSETNL(stamp_format),
- 					N_("See strftime manpage for details."),0,sizeof prefs.stamp_format},
- 
-+	{ST_HEADER,	N_("Auto-Copy Behavior"),0,0,0},
-+	{ST_TOGGLE, N_("Automatically copy selected text"), P_OFFINTNL(autocopy_text),
-+					N_("Copy selected text to clipboard when left mouse button is released. "
-+						"Otherwise, CONTROL-SHIFT-C will copy the "
-+						"selected text to the clipboard."), 0, 0},
-+	{ST_TOGGLE, N_("Automatically include time stamps"), P_OFFINTNL(autocopy_stamp),
-+					N_("Automatically include time stamps in copied lines of text. Otherwise, "
-+						"include time stamps if the SHIFT key is held down while selecting."), 0, 0},
-+	{ST_TOGGLE, N_("Automatically include color information"), P_OFFINTNL(autocopy_color),
-+					N_("Automatically include color information in copied lines of text.  "
-+						"Otherwise, include color information if the CONTROL key is held down "
-+						"while selecting."), 0, 0},
-+
- 	{ST_END, 0, 0, 0, 0, 0}
- };
- 
-@@ -348,6 +361,24 @@
- 	{ST_END, 0, 0, 0, 0, 0}
- };
- 
-+static const setting alert_settings_xtray[] =
-+{
-+	{ST_HEADER,	N_("Alerts"),0,0,0},
-+
-+	{ST_ALERTHEAD},
-+	{ST_3OGGLE, N_("Blink task bar on:"), 0, 0, (void *)taskbarlist, 0},
-+	{ST_3OGGLE, N_("Make a beep sound on:"), 0, 0, (void *)beeplist, 0},
-+
-+	{ST_HEADER,	N_("Highlighted Messages"),0,0,0},
-+	{ST_LABEL,	N_("Highlighted messages are ones where your nickname is mentioned, but also:"), 0, 0, 0, 1},
-+
-+	{ST_ENTRY,	N_("Extra words to highlight:"), P_OFFSETNL(irc_extra_hilight), 0, 0, sizeof prefs.irc_extra_hilight},
-+	{ST_ENTRY,	N_("Nick names not to highlight:"), P_OFFSETNL(irc_no_hilight), 0, 0, sizeof prefs.irc_no_hilight},
-+	{ST_ENTRY,	N_("Nick names to always highlight:"), P_OFFSETNL(irc_nick_hilight), 0, 0, sizeof prefs.irc_nick_hilight},
-+	{ST_LABEL,	N_("Separate multiple words with commas.\nWildcards are accepted.")},
-+	{ST_END, 0, 0, 0, 0, 0}
-+};
-+
- static const setting general_settings[] =
- {
- 	{ST_HEADER,	N_("Default Messages"),0,0,0},
-@@ -363,7 +394,6 @@
- 	{ST_END, 0, 0, 0, 0, 0}
- };
- 
--#if 0
- static const setting advanced_settings[] =
- {
- 	{ST_HEADER,	N_("Advanced Settings"),0,0,0},
-@@ -378,7 +408,6 @@
- 
- 	{ST_END, 0, 0, 0, 0, 0}
- };
--#endif
- 
- static const setting logging_settings[] =
- {
-@@ -1711,7 +1740,7 @@
- 		N_("General"),
- 		N_("Logging"),
- 		N_("Sound"),
--/*		N_("Advanced"),*/
-+		N_("Advanced"),
- 		NULL,
- 	N_("Network"),
- 		N_("Network setup"),
-@@ -1732,10 +1761,19 @@
- 	setup_add_page (cata[3], book, setup_create_page (userlist_settings));
- 	setup_add_page (cata[4], book, setup_create_page (tabs_settings));
- 	setup_add_page (cata[5], book, setup_create_color_page ());
--	setup_add_page (cata[8], book, setup_create_page (alert_settings));
-+
-+	if (xtray_mode ())
-+	{
-+		setup_add_page (cata[8], book, setup_create_page (alert_settings_xtray));
-+	} else
-+	{
-+		setup_add_page (cata[8], book, setup_create_page (alert_settings));
-+	}
-+
- 	setup_add_page (cata[9], book, setup_create_page (general_settings));
- 	setup_add_page (cata[10], book, setup_create_page (logging_settings));
- 	setup_add_page (cata[11], book, setup_create_sound_page ());
-+	setup_add_page (cata[12], book, setup_create_page (advanced_settings));
- 	setup_add_page (cata[14], book, setup_create_page (network_settings));
- 	setup_add_page (cata[15], book, setup_create_page (filexfer_settings));
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/sexy-spell-entry.c xchat-wdk/src/fe-gtk/sexy-spell-entry.c
---- xchat-wdk.orig/src/fe-gtk/sexy-spell-entry.c	2006-07-17 07:51:02 +0200
-+++ xchat-wdk/src/fe-gtk/sexy-spell-entry.c	2011-01-25 23:56:29 +0100
-@@ -31,6 +31,8 @@
- /*#include "gtkspell-iso-codes.h"
- #include "sexy-marshal.h"*/
- 
-+#include "typedef.h"
-+
- /*
-  * Bunch of poop to make enchant into a runtime dependency rather than a
-  * compile-time dependency.  This makes it so I don't have to hear the
-@@ -134,12 +136,10 @@
- 	GModule *enchant;
- 	gpointer funcptr;
- 
--	enchant = g_module_open("libenchant", 0);
-+	enchant = g_module_open("libenchant.dll", 0);
- 	if (enchant == NULL)
- 	{
--		enchant = g_module_open("libenchant.so.1", 0);
--		if (enchant == NULL)
--			return;
-+		return;
- 	}
- 
- 	have_enchant = TRUE;
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/xtext.c xchat-wdk/src/fe-gtk/xtext.c
---- xchat-wdk.orig/src/fe-gtk/xtext.c	2010-12-17 08:58:17 +0100
-+++ xchat-wdk/src/fe-gtk/xtext.c	2011-01-25 23:56:29 +0100
-@@ -42,7 +42,6 @@
- #include <ctype.h>
- #include <stdlib.h>
- #include <time.h>
--#include <unistd.h>
- #include <gtk/gtkmain.h>
- #include <gtk/gtksignal.h>
- #include <gtk/gtkselection.h>
-@@ -67,6 +66,8 @@
- #endif
- 
- #include "xtext.h"
-+#include "../common/xchat.h"
-+#include "../common/xchatc.h"
- 
- #define charlen(str) g_utf8_skip[*(guchar *)(str)]
- 
-@@ -1941,7 +1942,7 @@
- {
- 	gboolean redraw = FALSE;
- 
--	if ((mask & GDK_SHIFT_MASK))
-+	if (mask & GDK_SHIFT_MASK || prefs.autocopy_stamp)
- 	{
- 		if (!xtext->mark_stamp)
- 		{
-@@ -2106,7 +2107,16 @@
- 		free (str);
- 	}
- 
--	gtk_selection_owner_set (xtext, GDK_SELECTION_PRIMARY, event->time);
-+	if (event)
-+	{
-+		gtk_selection_owner_set (xtext, GDK_SELECTION_PRIMARY, event->time);
-+	}
-+}
-+
-+void
-+gtk_xtext_copy_selection (GtkXText *xtext)
-+{
-+	gtk_xtext_set_clip_owner (xtext, NULL);
- }
- 
- static void
-@@ -2182,9 +2192,12 @@
- 		if (xtext->buffer->last_ent_start)
- 		{
- 			xtext->color_paste = FALSE;
--			if (event->state & GDK_CONTROL_MASK)
-+			if (event->state & GDK_CONTROL_MASK || prefs.autocopy_color)
- 				xtext->color_paste = TRUE;
--			gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
-+			if (prefs.autocopy_text)
-+			{
-+				gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
-+			}
- 		}
- 
- 		if (xtext->select_start_x == event->x &&
-@@ -2249,7 +2262,10 @@
- 			ent->mark_end = offset + len;
- 			gtk_xtext_selection_render (xtext, ent, offset, ent, offset + len);
- 			xtext->word_or_line_select = TRUE;
--			gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
-+			if (prefs.autocopy_text)
-+			{
-+				gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
-+			}
- 		}
- 
- 		return FALSE;
-@@ -2265,7 +2281,10 @@
- 			ent->mark_end = ent->str_len;
- 			gtk_xtext_selection_render (xtext, ent, 0, ent, ent->str_len);
- 			xtext->word_or_line_select = TRUE;
--			gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
-+			if (prefs.autocopy_text)
-+			{
-+				gtk_xtext_set_clip_owner (GTK_WIDGET (xtext), event);
-+			}
- 		}
- 
- 		return FALSE;
-@@ -3836,7 +3855,7 @@
- 	PaintDesktop (hdc);
- 	ReleaseDC (hwnd, hdc);
- 
--	gdk_window_get_size (GTK_WIDGET (xtext)->window, &width, &height);
-+	gdk_drawable_get_size (GTK_WIDGET (xtext)->window, &width, &height);
- 	img = gdk_image_get (GTK_WIDGET (xtext)->window, 0, 0, width+128, height);
- 	xtext->pixmap = win32_tint (xtext, img, img->width, img->height);
- 
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/xtext.h xchat-wdk/src/fe-gtk/xtext.h
---- xchat-wdk.orig/src/fe-gtk/xtext.h	2010-12-17 08:58:17 +0100
-+++ xchat-wdk/src/fe-gtk/xtext.h	2011-01-25 23:56:29 +0100
-@@ -270,6 +270,7 @@
- xtext_buffer *gtk_xtext_buffer_new (GtkXText *xtext);
- void gtk_xtext_buffer_free (xtext_buffer *buf);
- void gtk_xtext_buffer_show (GtkXText *xtext, xtext_buffer *buf, int render);
-+void gtk_xtext_copy_selection (GtkXText *xtext);
- GType gtk_xtext_get_type (void);
- 
- #endif
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-text/fe-text.c xchat-wdk/src/fe-text/fe-text.c
---- xchat-wdk.orig/src/fe-text/fe-text.c	2008-08-29 13:24:17 +0200
-+++ xchat-wdk/src/fe-text/fe-text.c	2011-01-25 23:56:29 +0100
-@@ -22,60 +22,51 @@
- #ifdef HAVE_STRINGS_H
- #include <strings.h>
- #endif
-+#ifdef WIN32
-+#define STDIN_FILENO 0
-+#define STDOUT_FILENO 1
-+#else
-+#include <unistd.h>
- #include <sys/time.h>
-+#endif
- #include <sys/types.h>
--#include <unistd.h>
- #include <ctype.h>
-+#include <glib.h>
- #include "../common/xchat.h"
- #include "../common/xchatc.h"
-+#include "../common/cfgfiles.h"
- #include "../common/outbound.h"
- #include "../common/util.h"
- #include "../common/fe.h"
- #include "fe-text.h"
- 
- 
--static GSList *tmr_list;		  /* timer list */
--static int tmr_list_count;
--static GSList *se_list;			  /* socket event list */
--static int se_list_count;
- static int done = FALSE;		  /* finished ? */
- 
- 
- static void
- send_command (char *cmd)
- {
--	handle_multiline (sess_list->data, cmd, TRUE, FALSE);
-+	handle_multiline (current_tab, cmd, TRUE, FALSE);
- }
- 
--static void
--read_stdin (void)
-+static gboolean
-+handle_line (GIOChannel *channel, GIOCondition cond, gpointer data)
- {
--	int len, i = 0;
--	static int pos = 0;
--	static char inbuf[1024];
--	char tmpbuf[512];
--
--	len = read (STDIN_FILENO, tmpbuf, sizeof tmpbuf - 1);
- 
--	while (i < len)
--	{
--		switch (tmpbuf[i])
--		{
--		case '\r':
--			break;
--
--		case '\n':
--			inbuf[pos] = 0;
--			pos = 0;
--			send_command (inbuf);
--			break;
-+	gchar *str_return;
-+	gsize length, terminator_pos;
-+	GError *error = NULL;
-+	GIOStatus result;
- 
--		default:
--			inbuf[pos] = tmpbuf[i];
--			if (pos < (sizeof inbuf - 2))
--				pos++;
--		}
--		i++;
-+	result = g_io_channel_read_line(channel, &str_return, &length, &terminator_pos, &error);
-+	if (result == G_IO_STATUS_ERROR) {
-+		return FALSE;
-+	}
-+	else {
-+		send_command(str_return);
-+		g_free(str_return);
-+		return TRUE;
- 	}
- }
- 
-@@ -87,12 +78,13 @@
- 	char buf[512];
- 
- 	sess->gui = malloc (4);
-+	current_sess = sess;
- 
- 	if (!sess->server->front_session)
- 		sess->server->front_session = sess;
- 	if (!sess->server->server_session)
- 		sess->server->server_session = sess;
--	if (!current_tab)
-+	if (!current_tab || focus)
- 		current_tab = sess;
- 
- 	if (done_intro)
-@@ -101,7 +93,7 @@
- 
- 	snprintf (buf, sizeof (buf),
- 				"\n"
--				" \017xchat \00310"PACKAGE_VERSION"\n"
-+				" \017XChat-Text \00310"PACKAGE_VERSION"\n"
- 				" \017Running on \00310%s \017glib \00310%d.%d.%d\n"
- 				" \017This binary compiled \00310"__DATE__"\017\n",
- 				get_cpu_str(),
-@@ -133,15 +125,21 @@
- }
- 
- static int
--timecat (char *buf)
-+timecat (char *buf, time_t stamp)
- {
- 	char stampbuf[64];
- 
--	get_stamp_str (time (0), stampbuf, sizeof (stampbuf));
-+	/* set the stamp to the current time if not provided */
-+	if (!stamp)
-+		stamp = time (0);
-+
-+	get_stamp_str (stamp, stampbuf, sizeof (stampbuf));
- 	strcat (buf, stampbuf);
- 	return strlen (stampbuf);
- }
- 
-+/* Windows doesn't handle ANSI codes in cmd.exe, need to not display them */
-+#ifndef WIN32
- /*                       0  1  2  3  4  5  6  7   8   9   10 11  12  13  14 15 */
- static const short colconv[] = { 0, 7, 4, 2, 1, 3, 5, 11, 13, 12, 6, 16, 14, 15, 10, 7 };
- 
-@@ -157,7 +155,7 @@
- 	if (prefs.timestamp)
- 	{
- 		newtext[0] = 0;
--		j += timecat (newtext);
-+		j += timecat (newtext, stamp);
- 	}
- 	while (i < len)
- 	{
-@@ -165,7 +163,7 @@
- 		{
- 			dotime = FALSE;
- 			newtext[j] = 0;
--			j += timecat (newtext);
-+			j += timecat (newtext, stamp);
- 		}
- 		switch (text[i])
- 		{
-@@ -179,8 +177,7 @@
- 				j++;
- 				newtext[j] = 'm';
- 				j++;
--				i--;
--				goto jump2;
-+				goto endloop;
- 			}
- 			k = 0;
- 			comma = FALSE;
-@@ -226,13 +223,16 @@
- 						comma = TRUE;
- 						break;
- 					default:
--						goto jump;
-+						goto endloop;
- 					}
- 					k = 0;
- 				}
- 				i++;
- 			}
- 			break;
-+		/* don't actually want hidden text */
-+		case '\010':				  /* hidden */
-+			break;
- 		case '\026':				  /* REVERSE */
- 			if (reverse)
- 			{
-@@ -296,120 +296,246 @@
- 			newtext[j] = text[i];
- 			j++;
- 		}
--	 jump2:
- 		i++;
--	 jump:
--		i += 0;
-+		endloop:
-+			;
- 	}
-+
-+	/* make sure last character is a new line */
-+	if (text[i-1] != '\n')
-+		newtext[j++] = '\n';
-+
- 	newtext[j] = 0;
- 	write (STDOUT_FILENO, newtext, j);
- 	free (newtext);
- }
--
-+#else
-+/* The win32 version for cmd.exe */
- void
--fe_timeout_remove (int tag)
-+fe_print_text (struct session *sess, char *text, time_t stamp)
- {
--	timerevent *te;
--	GSList *list;
-+	int dotime = FALSE;
-+	int comma, k, i = 0, j = 0, len = strlen (text);
-+
-+	unsigned char *newtext = malloc (len + 1024);
- 
--	list = tmr_list;
--	while (list)
-+	if (prefs.timestamp)
- 	{
--		te = (timerevent *) list->data;
--		if (te->tag == tag)
-+		newtext[0] = 0;
-+		j += timecat (newtext, stamp);
-+	}
-+	while (i < len)
-+	{
-+		if (dotime && text[i] != 0)
- 		{
--			tmr_list = g_slist_remove (tmr_list, te);
--			free (te);
--			return;
-+			dotime = FALSE;
-+			newtext[j] = 0;
-+			j += timecat (newtext, stamp);
-+		}
-+		switch (text[i])
-+		{
-+		case 3:
-+			i++;
-+			if (!isdigit (text[i]))
-+			{
-+				goto endloop;
-+			}
-+			k = 0;
-+			comma = FALSE;
-+			while (i < len)
-+			{
-+				if (text[i] >= '0' && text[i] <= '9' && k < 2)
-+				{
-+					k++;
-+				} else
-+				{
-+					switch (text[i])
-+					{
-+					case ',':
-+						comma = TRUE;
-+						break;
-+					default:
-+						goto endloop;
-+					}
-+					k = 0;
-+
-+				}
-+				i++;
-+			}
-+			break;
-+		/* don't actually want hidden text */
-+		case '\010':				  /* hidden */
-+		case '\026':				  /* REVERSE */
-+		case '\037':				  /* underline */
-+		case '\002':				  /* bold */
-+		case '\017':				  /* reset all */
-+			break;
-+		case '\007':
-+			if (!prefs.filterbeep)
-+			{
-+				newtext[j] = text[i];
-+				j++;
-+			}
-+			break;
-+		case '\t':
-+			newtext[j] = ' ';
-+			j++;
-+			break;
-+		case '\n':
-+			newtext[j] = '\r';
-+			j++;
-+			if (prefs.timestamp)
-+				dotime = TRUE;
-+		default:
-+			newtext[j] = text[i];
-+			j++;
- 		}
--		list = list->next;
-+		i++;
-+		endloop:
-+			;
- 	}
-+
-+	/* make sure last character is a new line */
-+	if (text[i-1] != '\n')
-+		newtext[j++] = '\n';
-+
-+	newtext[j] = 0;
-+	write (STDOUT_FILENO, newtext, j);
-+	free (newtext);
-+}
-+#endif
-+
-+void
-+fe_timeout_remove (int tag)
-+{
-+	g_source_remove (tag);
- }
- 
- int
- fe_timeout_add (int interval, void *callback, void *userdata)
- {
--	struct timeval now;
--	timerevent *te = malloc (sizeof (timerevent));
--
--	tmr_list_count++;				  /* this overflows at 2.2Billion, who cares!! */
--
--	te->tag = tmr_list_count;
--	te->interval = interval;
--	te->callback = callback;
--	te->userdata = userdata;
--
--	gettimeofday (&now, NULL);
--	te->next_call = now.tv_sec * 1000 + (now.tv_usec / 1000) + te->interval;
--
--	tmr_list = g_slist_prepend (tmr_list, te);
--
--	return te->tag;
-+	return g_timeout_add (interval, (GSourceFunc) callback, userdata);
- }
- 
- void
- fe_input_remove (int tag)
- {
--	socketevent *se;
--	GSList *list;
--
--	list = se_list;
--	while (list)
--	{
--		se = (socketevent *) list->data;
--		if (se->tag == tag)
--		{
--			se_list = g_slist_remove (se_list, se);
--			free (se);
--			return;
--		}
--		list = list->next;
--	}
-+	g_source_remove (tag);
- }
- 
- int
- fe_input_add (int sok, int flags, void *func, void *data)
- {
--	socketevent *se = malloc (sizeof (socketevent));
--
--	se_list_count++;				  /* this overflows at 2.2Billion, who cares!! */
-+	int tag, type = 0;
-+	GIOChannel *channel;
- 
--	se->tag = se_list_count;
--	se->sok = sok;
--	se->rread = flags & FIA_READ;
--	se->wwrite = flags & FIA_WRITE;
--	se->eexcept = flags & FIA_EX;
--	se->callback = func;
--	se->userdata = data;
--	se_list = g_slist_prepend (se_list, se);
-+	channel = g_io_channel_unix_new (sok);
- 
--	return se->tag;
--}
-+	if (flags & FIA_READ)
-+		type |= G_IO_IN | G_IO_HUP | G_IO_ERR;
-+	if (flags & FIA_WRITE)
-+		type |= G_IO_OUT | G_IO_ERR;
-+	if (flags & FIA_EX)
-+		type |= G_IO_PRI;
-+
-+	tag = g_io_add_watch (channel, type, (GIOFunc) func, data);
-+	g_io_channel_unref (channel);
-+
-+	return tag;
-+}
-+
-+/* === command-line parameter parsing : requires glib 2.6 === */
-+
-+static char *arg_cfgdir = NULL;
-+static gint arg_show_autoload = 0;
-+static gint arg_show_config = 0;
-+static gint arg_show_version = 0;
-+
-+static const GOptionEntry gopt_entries[] = 
-+{
-+ {"no-auto",	'a', 0, G_OPTION_ARG_NONE,	&arg_dont_autoconnect, N_("Don't auto connect to servers"), NULL},
-+ {"cfgdir",	'd', 0, G_OPTION_ARG_STRING,	&arg_cfgdir, N_("Use a different config directory"), "PATH"},
-+ {"no-plugins",	'n', 0, G_OPTION_ARG_NONE,	&arg_skip_plugins, N_("Don't auto load any plugins"), NULL},
-+ {"plugindir",	'p', 0, G_OPTION_ARG_NONE,	&arg_show_autoload, N_("Show plugin auto-load directory"), NULL},
-+ {"configdir",	'u', 0, G_OPTION_ARG_NONE,	&arg_show_config, N_("Show user config directory"), NULL},
-+ {"url",	 0,  0, G_OPTION_ARG_STRING,	&arg_url, N_("Open an irc://server:port/channel URL"), "URL"},
-+ {"version",	'v', 0, G_OPTION_ARG_NONE,	&arg_show_version, N_("Show version information"), NULL},
-+ {NULL}
-+};
- 
- int
- fe_args (int argc, char *argv[])
- {
--	if (argc > 1)
-+	GError *error = NULL;
-+	GOptionContext *context;
-+
-+#ifdef ENABLE_NLS
-+	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
-+	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-+	textdomain (GETTEXT_PACKAGE);
-+#endif
-+
-+	context = g_option_context_new (NULL);
-+	g_option_context_add_main_entries (context, gopt_entries, GETTEXT_PACKAGE);
-+	g_option_context_parse (context, &argc, &argv, &error);
-+
-+	if (error)
- 	{
--		if (!strcasecmp (argv[1], "--version") || !strcasecmp (argv[1], "-v"))
-+		if (error->message)
-+			printf ("%s\n", error->message);
-+		return 1;
-+	}
-+
-+	g_option_context_free (context);
-+
-+	if (arg_show_version)
-+	{
-+		printf (PACKAGE_TARNAME" "PACKAGE_VERSION"\n");
-+		return 0;
-+	}
-+
-+	if (arg_show_autoload)
-+	{
-+#ifdef WIN32
-+		/* see the chdir() below */
-+		char *sl, *exe = strdup (argv[0]);
-+		sl = strrchr (exe, '\\');
-+		if (sl)
- 		{
--			puts (PACKAGE_VERSION);
--			return 0;
-+			*sl = 0;
-+			printf ("%s\\plugins\n", exe);
- 		}
-+#else
-+		printf ("%s\n", XCHATLIBDIR"/plugins");
-+#endif
-+		return 0;
-+	}
-+
-+	if (arg_show_config)
-+	{
-+		printf ("%s\n", get_xdir_fs ());
-+		return 0;
-+	}
-+
-+	if (arg_cfgdir)	/* we want filesystem encoding */
-+	{
-+		xdir_fs = strdup (arg_cfgdir);
-+		if (xdir_fs[strlen (xdir_fs) - 1] == '/')
-+			xdir_fs[strlen (xdir_fs) - 1] = 0;
-+		g_free (arg_cfgdir);
- 	}
-+
- 	return -1;
- }
- 
- void
- fe_init (void)
- {
--	se_list = 0;
--	se_list_count = 0;
--	tmr_list = 0;
--	tmr_list_count = 0;
-+	/* the following should be default generated, not enfoced in binary */
- 	prefs.autosave = 0;
- 	prefs.use_server_tab = 0;
- 	prefs.autodialog = 0;
-+	/* except for these, there is no lag meter, there is no server list */
- 	prefs.lagometer = 0;
- 	prefs.slist_skip = 1;
- }
-@@ -417,129 +543,29 @@
- void
- fe_main (void)
- {
--	struct timeval timeout, now;
--	socketevent *se;
--	timerevent *te;
--	fd_set rd, wd, ex;
--	GSList *list;
--	guint64 shortest, delay;
-+	GIOChannel *keyboard_input;
- 
--	if (!sess_list)
--		new_ircwindow (NULL, NULL, SESS_SERVER, 0);
-+	main_loop = g_main_loop_new(NULL, FALSE);
- 
--#ifdef ENABLE_NLS
--	bindtextdomain (GETTEXT_PACKAGE, PREFIX"/share/locale");
--	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
--	textdomain (GETTEXT_PACKAGE);
-+	/* Keyboard Entry Setup */
-+#ifdef G_OS_WIN32
-+	keyboard_input = g_io_channel_win32_new_fd(STDIN_FILENO);
-+#else
-+	keyboard_input = g_io_channel_unix_new(STDIN_FILENO);
- #endif
- 
--	while (!done)
--	{
--		FD_ZERO (&rd);
--		FD_ZERO (&wd);
--		FD_ZERO (&ex);
--
--		list = se_list;
--		while (list)
--		{
--			se = (socketevent *) list->data;
--			if (se->rread)
--				FD_SET (se->sok, &rd);
--			if (se->wwrite)
--				FD_SET (se->sok, &wd);
--			if (se->eexcept)
--				FD_SET (se->sok, &ex);
--			list = list->next;
--		}
--
--		FD_SET (STDIN_FILENO, &rd);	/* for reading keyboard */
-+	g_io_add_watch(keyboard_input, G_IO_IN, handle_line, NULL);
- 
--		/* find the shortest timeout event */
--		shortest = 0;
--		list = tmr_list;
--		while (list)
--		{
--			te = (timerevent *) list->data;
--			if (te->next_call < shortest || shortest == 0)
--				shortest = te->next_call;
--			list = list->next;
--		}
--		gettimeofday (&now, NULL);
--		delay = shortest - ((now.tv_sec * 1000) + (now.tv_usec / 1000));
--		timeout.tv_sec = delay / 1000;
--		timeout.tv_usec = (delay % 1000) * 1000;
--
--		select (FD_SETSIZE, &rd, &wd, &ex, &timeout);
--
--		if (FD_ISSET (STDIN_FILENO, &rd))
--			read_stdin ();
--
--		/* set all checked flags to false */
--		list = se_list;
--		while (list)
--		{
--			se = (socketevent *) list->data;
--			se->checked = 0;
--			list = list->next;
--		}
-+	g_main_loop_run(main_loop);
- 
--		/* check all the socket callbacks */
--		list = se_list;
--		while (list)
--		{
--			se = (socketevent *) list->data;
--			se->checked = 1;
--			if (se->rread && FD_ISSET (se->sok, &rd))
--			{
--				se->callback (NULL, 1, se->userdata);
--			} else if (se->wwrite && FD_ISSET (se->sok, &wd))
--			{
--				se->callback (NULL, 2, se->userdata);
--			} else if (se->eexcept && FD_ISSET (se->sok, &ex))
--			{
--				se->callback (NULL, 4, se->userdata);
--			}
--			list = se_list;
--			if (list)
--			{
--				se = (socketevent *) list->data;
--				while (se->checked)
--				{
--					list = list->next;
--					if (!list)
--						break;
--					se = (socketevent *) list->data;
--				}
--			}
--		}
--
--		/* now check our list of timeout events, some might need to be called! */
--		gettimeofday (&now, NULL);
--		list = tmr_list;
--		while (list)
--		{
--			te = (timerevent *) list->data;
--			list = list->next;
--			if (now.tv_sec * 1000 + (now.tv_usec / 1000) >= te->next_call)
--			{
--				/* if the callback returns 0, it must be removed */
--				if (te->callback (te->userdata) == 0)
--				{
--					fe_timeout_remove (te->tag);
--				} else
--				{
--					te->next_call = now.tv_sec * 1000 + (now.tv_usec / 1000) + te->interval;
--				}
--			}
--		}
--
--	}
-+	return;
- }
- 
- void
- fe_exit (void)
- {
- 	done = TRUE;
-+	g_main_loop_quit(main_loop);
- }
- 
- void
-@@ -793,10 +819,23 @@
- void
- fe_idle_add (void *func, void *data)
- {
-+	g_idle_add (func, data);
- }
- void
- fe_ctrl_gui (session *sess, fe_gui_action action, int arg)
- {
-+	/* only one action type handled for now, but could add more */
-+	switch (action)
-+	{
-+	/* gui focus is really the only case xchat-text needs to wory about */
-+	case FE_GUI_FOCUS:
-+		current_sess = sess;
-+		current_tab = sess;
-+		sess->server->front_session = sess;
-+		break;
-+	default:
-+		break;
-+	}
- }
- int
- fe_gui_info (session *sess, int info_type)
-diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-text/fe-text.h xchat-wdk/src/fe-text/fe-text.h
---- xchat-wdk.orig/src/fe-text/fe-text.h	2002-11-28 11:41:32 +0100
-+++ xchat-wdk/src/fe-text/fe-text.h	2011-01-25 23:56:29 +0100
-@@ -1,29 +1 @@
--
--typedef int (*socket_callback) (void *source, int condition, void *user_data);
--typedef int (*timer_callback) (void *user_data);
--
--struct socketeventRec
--{
--	socket_callback callback;
--	void *userdata;
--	int sok;
--	int tag;
--	int rread:1;
--	int wwrite:1;
--	int eexcept:1;
--	int checked:1;
--};
--
--typedef struct socketeventRec socketevent;
--
--
--struct timerRec
--{
--	timer_callback callback;
--	void *userdata;
--	int interval;
--	int tag;
--	guint64 next_call;	/* miliseconds */
--};
--
--typedef struct timerRec timerevent;
-+GMainLoop *main_loop;