diff options
author | berkeviktor@aol.com <berkeviktor@aol.com> | 2011-02-24 04:13:14 +0100 |
---|---|---|
committer | berkeviktor@aol.com <berkeviktor@aol.com> | 2011-02-24 04:13:14 +0100 |
commit | f16af8be941b596dedac3bf4e371ee2d21f4b598 (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /xchat-wdk.patch | |
parent | c6a031659b54230099c863b7ccdc03de4a4c7a2d (diff) |
nuke the repo
Diffstat (limited to 'xchat-wdk.patch')
-rw-r--r-- | xchat-wdk.patch | 2834 |
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 <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 <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; |