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 2010-08-26 04:18:04 +0200 +++ xchat-wdk/plugins/perl/perl.c 2010-10-05 03:55:26 +0200 @@ -22,12 +22,15 @@ #include #include #include -#include #ifdef ENABLE_NLS #include #endif #ifdef WIN32 #include +#define _INC_DIRENT +#include "../../src/common/dirent.h" +#else +#include #endif #undef PACKAGE @@ -1339,7 +1342,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"); @@ -1354,7 +1361,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-05-16 06:31:54 +0200 +++ xchat-wdk/plugins/python/python.c 2010-10-05 03:55:26 +0200 @@ -53,10 +53,10 @@ #include #include -#include #include #include -#include +#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.6" /* Linked to python26.dll */ #else #define VERSION "0.8" #endif @@ -1161,6 +1161,27 @@ PyObject_SetAttrString(m, "__version__", o); if (filename) { +#ifdef WIN32 + /* more info: + * http://bytes.com/topic/python/answers/840542-pyrun_simplefile-crashes#post3364174 + * http://effbot.org/pyfaq/pyrun-simplefile-crashes-on-windows-but-not-on-unix-why.htm + */ + PyObject* PyFileObject = PyFile_FromString(filename, "r"); + if (PyFileObject == NULL) { + xchat_printf(ph, "Can't open file %s: %s\n", + filename, strerror(errno)); + goto error; + } + + if (PyRun_SimpleFile(PyFile_AsFile(PyFileObject), filename) != 0) { + xchat_printf(ph, "Error loading module %s\n", + filename); + goto error; + } + + plugin->filename = filename; + filename = NULL; +#else FILE *fp; plugin->filename = filename; @@ -1184,7 +1205,7 @@ goto error; } fclose(fp); - +#endif m = PyDict_GetItemString(PyImport_GetModuleDict(), "__main__"); if (m == NULL) { 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 2010-10-05 03:55:26 +0200 @@ -32,8 +32,6 @@ #include #define bzero(mem, sz) memset((mem), 0, (sz)) #define bcopy(src, dest, count) memmove((dest), (src), (count)) -#else -#include #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 2010-10-05 03:55:26 +0200 @@ -2,11 +2,11 @@ #include #include -#include #include #include #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 2010-10-05 04:55:22 +0200 @@ -17,7 +17,6 @@ */ #include -#include #include #include #include @@ -30,10 +29,9 @@ #include "fe.h" #include "text.h" #include "xchatc.h" +#include "portable.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; } @@ -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,11 @@ {"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_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 +569,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}, @@ -648,6 +656,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 2010-10-05 03:55:26 +0200 @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include 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 2010-10-05 03:55:26 +0200 @@ -18,7 +18,6 @@ #include #include -#include #include #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" ("PACKAGE_TARNAME") %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 2010-10-05 03:55:27 +0200 @@ -31,7 +31,6 @@ #include #include #include -#include #include #define WANTSOCKET @@ -1984,7 +1983,7 @@ /* now handle case-insensitive Filesystems: HFS+, FAT */ #ifdef WIN32 -#warning no win32 implementation - behaviour may be unreliable +/* warning no win32 implementation - behaviour may be unreliable */ #else /* this fstat() shouldn't really fail */ if ((dcc->fp == -1 ? stat (dcc->destfile_fs, &st_a) : fstat (dcc->fp, &st_a)) == -1) 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 2010-10-05 03:55:27 +0200 @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include 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 2010-10-05 03:55:27 +0200 @@ -21,7 +21,6 @@ #include #include #include -#include #include #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 2010-10-05 03:55:27 +0200 @@ -24,9 +24,8 @@ #ifdef USE_IPV6 #include #include -#include #else -#include +#include #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 2010-10-05 03:55:27 +0200 @@ -26,7 +26,6 @@ #include #include #include -#include #include #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 2010-10-05 03:55:27 +0200 @@ -21,7 +21,6 @@ #include #include #include -#include #include #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 2010-10-05 03:55:27 +0200 @@ -22,7 +22,6 @@ #include #include #include -#include #include #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 2010-10-05 03:55:27 +0200 @@ -32,7 +32,6 @@ #include #endif -#include #include #include #include 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 2010-10-05 03:55:27 +0200 @@ -1,7 +1,7 @@ #include #include #include -#include "xchat-plugin.h" +#include #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-08-14 03:46:21 +0200 +++ xchat-wdk/src/common/plugin.c 2010-10-05 03:55:27 +0200 @@ -34,7 +34,7 @@ #include "text.h" #define PLUGIN_C typedef struct session xchat_context; -#include "xchat-plugin.h" +#include #include "plugin.h" @@ -1212,7 +1212,7 @@ static const char * const dcc_fields[] = { "iaddress32","icps", "sdestfile","sfile", "snick", "iport", - "ipos", "iposhigh", "iresume", "iresumehigh" "isize", "isizehigh", "istatus", "itype", NULL + "ipos", "iposhigh", "iresume", "iresumehigh", "isize", "isizehigh", "istatus", "itype", NULL }; static const char * const channels_fields[] = { 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 2010-10-05 03:55:27 +0200 @@ -18,7 +18,6 @@ /* IRC RFC1459(+commonly used extensions) protocol implementation */ -#include #include #include #include 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 2010-05-30 04:28:04 +0200 +++ xchat-wdk/src/common/server.c 2010-10-05 03:55:27 +0200 @@ -26,7 +26,6 @@ #include #include #include -#include #include #include @@ -1390,7 +1389,7 @@ { #ifdef WIN32 /* make sure waitline() uses recv() or it'll fail on win32 */ - len = waitline (sok, buf, len, FALSE); + len = waitline (sok, buf, len, TRUE); #else len = waitline (sok, buf, len, TRUE); #endif @@ -1738,7 +1737,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 2010-05-16 09:43:49 +0200 +++ xchat-wdk/src/common/servlist.c 2010-10-05 03:55:27 +0200 @@ -21,7 +21,6 @@ #include #include #include -#include #include "xchat.h" #include 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 2010-10-05 03:55:27 +0200 @@ -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 /* SSL_() */ #include /* ERR_() */ #include /* asctime() */ #include /* 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 2010-10-05 03:55:27 +0200 @@ -19,13 +19,11 @@ #include #include #include -#include #include #include #include #include #include -#include #include "xchat.h" #include @@ -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 2010-10-05 03:55:27 +0200 @@ -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 -#include #include #include #include @@ -35,7 +37,7 @@ #include #endif #include -#include +#include "dirent.h" #include #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 #endif @@ -54,9 +53,11 @@ #include #endif +#ifndef ENABLE_NLS #ifndef HAVE_SNPRINTF #define snprintf g_snprintf #endif +#endif #ifdef USE_DEBUG @@ -631,22 +632,32 @@ OSVERSIONINFO osvi; SYSTEM_INFO si; double mhz; + int cpu_arch; osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); GetVersionEx (&osvi); GetSystemInfo (&si); + if (si.wProcessorArchitecture == 9) + { + cpu_arch = 64; + } + else + { + cpu_arch = 86; + } + 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, + sprintf (verbuf, "Windows %ld.%ld [x%d/%.2f%s]", + osvi.dwMajorVersion, osvi.dwMinorVersion, cpu_arch, cpuspeed, cpuspeedstr); } else - sprintf (verbuf, "Windows %ld.%ld [i%d86]", - osvi.dwMajorVersion, osvi.dwMinorVersion, si.wProcessorLevel); + sprintf (verbuf, "Windows %ld.%ld [x%d]", + osvi.dwMajorVersion, osvi.dwMinorVersion, cpu_arch); return verbuf; } 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 2008-06-08 09:58:58 +0200 +++ xchat-wdk/src/common/xchat.c 2010-10-05 03:55:27 +0200 @@ -22,7 +22,6 @@ #include #include #include -#include #define WANTSOCKET #include "inet.h" @@ -38,7 +37,7 @@ #include "cfgfiles.h" #include "chanopt.h" #include "ignore.h" -#include "xchat-plugin.h" +#include #include "plugin.h" #include "plugin-timer.h" #include "notify.h" @@ -583,6 +582,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 2010-08-07 09:14:45 +0200 +++ xchat-wdk/src/common/xchat.h 2010-10-05 03:55:27 +0200 @@ -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 #define F_OK 0 #define X_OK 1 @@ -297,6 +299,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 2010-10-05 03:55:27 +0200 @@ -39,6 +39,7 @@ #include "../common/xchat.h" #include "../common/util.h" +#include "../common/portable.h" #include "palette.h" #include "pixmaps.h" #include "gtkutil.h" @@ -95,7 +96,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 +115,38 @@ g_get_charset (&locale); (snprintf) (buf, sizeof (buf), ""DISPLAY_NAME" "PACKAGE_VERSION"\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 + "XChat Base: 2.8.8\n\n" "%s\n" "Charset: %s " -#ifdef WIN32 "GTK+: %i.%i.%i\n" + "Compiled: "__DATE__"\n" + "Portable Mode: %s\n\n" + "This version is unofficial and comes with no support.\n" + "\302\251 1998-2010 Peter \305\275elezn\303\275 <zed@xchat.org>", + get_cpu_str (), + locale, + gtk_major_version, + gtk_minor_version, + gtk_micro_version, + (portable_mode () ? "Yes" : "No") #else + "%s\n\n" + "%s\n" + "Charset: %s " "Renderer: %s\n" -#endif "Compiled: "__DATE__"\n\n" "\302\251 1998-2010 Peter \305\275elezn\303\275 <zed@xchat.org>", - _("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 2010-10-05 03:55:27 +0200 @@ -19,7 +19,6 @@ #include #include #include -#include #include #include 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 2010-10-05 03:55:27 +0200 @@ -19,7 +19,6 @@ #include #include #include -#include #include #include 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 2010-10-05 03:55:27 +0200 @@ -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 2010-10-05 03:55:27 +0200 @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include 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 2010-10-05 03:55:27 +0200 @@ -19,7 +19,6 @@ #include #include #include -#include #include "fe-gtk.h" @@ -32,6 +31,8 @@ #include #include +#include + #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" @@ -330,7 +332,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 2010-10-05 03:55:27 +0200 @@ -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 2010-10-05 03:55:27 +0200 @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include 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 2010-10-05 05:22:28 +0200 @@ -22,7 +22,6 @@ #include #include #include -#include #include #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,196 @@ } } +#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) +{ + 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 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)); + + if (win32_savefile (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 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++; + } +} + +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 +372,54 @@ 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\000*.*\000" + "EXE files\000*.EXE\000" + "MP3 files\000*.MP3\000" + "MPEG files\000*.MPG;*.MPEG\000" + "RAR files\000*.RAR\000" + "ZIP files\000*.ZIP\000"; + 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 = "Text files\000*.TXT\000" + "All files\000*.*\000"; + 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 2010-10-05 03:55:27 +0200 @@ -9,7 +9,6 @@ #include #include -#include #include #include 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-05-16 05:20:22 +0200 +++ xchat-wdk/src/fe-gtk/maingui.c 2010-10-05 03:55:28 +0200 @@ -214,60 +214,10 @@ away_list = mg_attr_list_create (&colors[COL_AWAY], FALSE); } -#ifdef WIN32 -#define WINVER 0x0501 /* needed for vc6? */ -#include -#include - -/* 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 - 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 +231,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 */ @@ -1190,7 +1136,14 @@ "Close them all?"), i); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (mg_tab_close_cb), sess); - gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); + if (prefs.tab_layout) + { + gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); + } + else + { + gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ON_PARENT); + } gtk_widget_show (dialog); } } @@ -2489,7 +2442,7 @@ if (prefs.lagometer & 1) { gui->lagometer = wid = gtk_progress_bar_new (); - gtk_widget_set_size_request (wid, 1, 8); + gtk_widget_set_size_request (wid, 1, 10); wid = gtk_event_box_new (); gtk_container_add (GTK_CONTAINER (wid), gui->lagometer); @@ -2504,7 +2457,7 @@ if (prefs.throttlemeter & 1) { gui->throttlemeter = wid = gtk_progress_bar_new (); - gtk_widget_set_size_request (wid, 1, 8); + gtk_widget_set_size_request (wid, 1, 10); wid = gtk_event_box_new (); gtk_container_add (GTK_CONTAINER (wid), gui->throttlemeter); @@ -2957,11 +2910,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; } @@ -2972,11 +2921,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 2010-10-05 03:55:28 +0200 @@ -20,7 +20,6 @@ #include #include #include -#include #ifdef WIN32 #include 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 2010-10-05 03:55:28 +0200 @@ -18,7 +18,6 @@ #include #include -#include #include #include #include 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-08-14 03:46:21 +0200 +++ xchat-wdk/src/fe-gtk/plugin-tray.c 2010-10-05 03:55:28 +0200 @@ -1,8 +1,7 @@ /* Copyright (C) 2006-2007 Peter Zelezny. */ #include -#include -#include "../common/xchat-plugin.h" +#include #include "../common/xchat.h" #include "../common/xchatc.h" #include "../common/inbound.h" @@ -298,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) @@ -451,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 (); @@ -651,15 +650,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; @@ -677,14 +676,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; @@ -706,14 +705,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); } @@ -759,15 +758,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; @@ -803,7 +802,7 @@ } else { - if (prefs.gui_tray) + if (prefs.gui_tray && !((_access( "plugins/xtray.dll", 0 )) != -1)) tray_init (); } } @@ -835,7 +834,7 @@ xchat_hook_print (ph, "Focus Window", -1, tray_focus_cb, NULL); - if (prefs.gui_tray) + if (prefs.gui_tray && !((_access( "plugins/xtray.dll", 0 )) != -1)) 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 2010-10-05 02:53:43 +0200 @@ -35,7 +35,7 @@ #include "../common/xchat.h" #define PLUGIN_C typedef struct session xchat_context; -#include "../common/xchat-plugin.h" +#include #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\000" "*.dll;*.pl;*.tcl;*.py;*.lua\000" + "All files\000" "*.*\000", 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 2010-10-05 03:55:28 +0200 @@ -19,7 +19,6 @@ #include #include #include -#include #include #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 2010-10-05 03:55:28 +0200 @@ -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/servlistgui.c xchat-wdk/src/fe-gtk/servlistgui.c --- xchat-wdk.orig/src/fe-gtk/servlistgui.c 2010-08-07 09:14:45 +0200 +++ xchat-wdk/src/fe-gtk/servlistgui.c 2010-10-05 03:55:28 +0200 @@ -1782,7 +1782,7 @@ gtk_container_add (GTK_CONTAINER (hbox), checkbutton_fav); g_signal_connect (G_OBJECT (checkbutton_fav), "toggled", G_CALLBACK (fav_servlist), 0); - gtk_widget_show (checkbutton_fav); + /* gtk_widget_show (checkbutton_fav); don't show this until it's completed */ vbuttonbox2 = gtk_vbutton_box_new (); gtk_box_set_spacing (GTK_BOX (vbuttonbox2), 3); 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 2008-02-08 10:04:45 +0100 +++ xchat-wdk/src/fe-gtk/setup.c 2010-10-05 03:55:28 +0200 @@ -109,13 +109,13 @@ 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}, @@ -363,7 +363,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 +377,6 @@ {ST_END, 0, 0, 0, 0, 0} }; -#endif static const setting logging_settings[] = { @@ -1708,7 +1706,7 @@ N_("General"), N_("Logging"), N_("Sound"), -/* N_("Advanced"),*/ + N_("Advanced"), NULL, N_("Network"), N_("Network setup"), @@ -1733,6 +1731,7 @@ 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 2010-10-05 03:55:28 +0200 @@ -31,6 +31,20 @@ /*#include "gtkspell-iso-codes.h" #include "sexy-marshal.h"*/ +/* workaround for ssize_t in VS + from krb/include/win-mac.h */ +#ifndef SSIZE_T_DEFINED +#ifdef ssize_t +#undef ssize_t +#endif +#ifdef _WIN64 +typedef __int64 ssize_t; +#else +typedef _W64 int ssize_t; +#endif +#define SSIZE_T_DEFINED +#endif + /* * 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 +148,10 @@ GModule *enchant; gpointer funcptr; - enchant = g_module_open("libenchant", 0); + enchant = g_module_open("libenchant-1.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 2008-08-29 13:24:17 +0200 +++ xchat-wdk/src/fe-gtk/xtext.c 2010-10-05 03:55:28 +0200 @@ -42,7 +42,6 @@ #include #include #include -#include #include #include #include @@ -3834,7 +3833,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-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 2010-10-05 03:55:28 +0200 @@ -22,9 +22,13 @@ #ifdef HAVE_STRINGS_H #include #endif +#ifdef WIN32 +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#else #include +#endif #include -#include #include #include "../common/xchat.h" #include "../common/xchatc.h" @@ -339,7 +343,11 @@ te->callback = callback; te->userdata = userdata; - gettimeofday (&now, NULL); +#ifdef WIN32 + g_get_current_time (&now); +#else + gettimeofday (&now, NULL); +#endif te->next_call = now.tv_sec * 1000 + (now.tv_usec / 1000) + te->interval; tmr_list = g_slist_prepend (tmr_list, te); @@ -417,7 +425,12 @@ void fe_main (void) { - struct timeval timeout, now; + struct timeval timeout; +#ifdef WIN32 + GTimeVal now; +#else + struct timeval now; +#endif socketevent *se; timerevent *te; fd_set rd, wd, ex; @@ -428,7 +441,7 @@ new_ircwindow (NULL, NULL, SESS_SERVER, 0); #ifdef ENABLE_NLS - bindtextdomain (GETTEXT_PACKAGE, PREFIX"/share/locale"); + bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); #endif @@ -464,7 +477,11 @@ shortest = te->next_call; list = list->next; } +#ifdef WIN32 + g_get_current_time (&now); +#else gettimeofday (&now, NULL); +#endif delay = shortest - ((now.tv_sec * 1000) + (now.tv_usec / 1000)); timeout.tv_sec = delay / 1000; timeout.tv_usec = (delay % 1000) * 1000; @@ -514,7 +531,11 @@ } /* now check our list of timeout events, some might need to be called! */ +#ifdef WIN32 + g_get_current_time (&now); +#else gettimeofday (&now, NULL); +#endif list = tmr_list; while (list) {