summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorberkeviktor@aol.com <berkeviktor@aol.com>2010-03-30 13:17:54 +0200
committerberkeviktor@aol.com <berkeviktor@aol.com>2010-03-30 13:17:54 +0200
commitec117f17b72b96652122d1314dde0c6731177bbb (patch)
treefc72a19948570d08a9a1f4a1419cf4355f0c5d24
parentbc5292f98c1eb89e803e581171ff6ece00f1e841 (diff)
add xtray support. graphics are in hg.
-rw-r--r--COPYING340
-rw-r--r--plugins/xtray/bitmaps/sd.bmpbin0 -> 32824 bytes
-rw-r--r--plugins/xtray/icons/banned.icobin0 -> 1406 bytes
-rw-r--r--plugins/xtray/icons/chan_msg.icobin0 -> 1406 bytes
-rw-r--r--plugins/xtray/icons/disconnected.icobin0 -> 1406 bytes
-rw-r--r--plugins/xtray/icons/highlight-1-3.icobin0 -> 1406 bytes
-rw-r--r--plugins/xtray/icons/highlight.icobin0 -> 1406 bytes
-rw-r--r--plugins/xtray/icons/kicked.icobin0 -> 1406 bytes
-rw-r--r--plugins/xtray/icons/priv_msg-1-2-2.icobin0 -> 1406 bytes
-rw-r--r--plugins/xtray/icons/sd.icobin0 -> 24358 bytes
-rw-r--r--plugins/xtray/icons/server_notice.icobin0 -> 1406 bytes
-rw-r--r--plugins/xtray/icons/xchat.icobin0 -> 25670 bytes
-rw-r--r--xchat-wdk.patch3395
13 files changed, 3661 insertions, 74 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 00000000..eeb586b3
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/plugins/xtray/bitmaps/sd.bmp b/plugins/xtray/bitmaps/sd.bmp
new file mode 100644
index 00000000..9d6b7f95
--- /dev/null
+++ b/plugins/xtray/bitmaps/sd.bmp
Binary files differdiff --git a/plugins/xtray/icons/banned.ico b/plugins/xtray/icons/banned.ico
new file mode 100644
index 00000000..fef8df8c
--- /dev/null
+++ b/plugins/xtray/icons/banned.ico
Binary files differdiff --git a/plugins/xtray/icons/chan_msg.ico b/plugins/xtray/icons/chan_msg.ico
new file mode 100644
index 00000000..793d050e
--- /dev/null
+++ b/plugins/xtray/icons/chan_msg.ico
Binary files differdiff --git a/plugins/xtray/icons/disconnected.ico b/plugins/xtray/icons/disconnected.ico
new file mode 100644
index 00000000..9063e7e3
--- /dev/null
+++ b/plugins/xtray/icons/disconnected.ico
Binary files differdiff --git a/plugins/xtray/icons/highlight-1-3.ico b/plugins/xtray/icons/highlight-1-3.ico
new file mode 100644
index 00000000..a759145b
--- /dev/null
+++ b/plugins/xtray/icons/highlight-1-3.ico
Binary files differdiff --git a/plugins/xtray/icons/highlight.ico b/plugins/xtray/icons/highlight.ico
new file mode 100644
index 00000000..625cca9a
--- /dev/null
+++ b/plugins/xtray/icons/highlight.ico
Binary files differdiff --git a/plugins/xtray/icons/kicked.ico b/plugins/xtray/icons/kicked.ico
new file mode 100644
index 00000000..845a74e1
--- /dev/null
+++ b/plugins/xtray/icons/kicked.ico
Binary files differdiff --git a/plugins/xtray/icons/priv_msg-1-2-2.ico b/plugins/xtray/icons/priv_msg-1-2-2.ico
new file mode 100644
index 00000000..7941ff77
--- /dev/null
+++ b/plugins/xtray/icons/priv_msg-1-2-2.ico
Binary files differdiff --git a/plugins/xtray/icons/sd.ico b/plugins/xtray/icons/sd.ico
new file mode 100644
index 00000000..ca179621
--- /dev/null
+++ b/plugins/xtray/icons/sd.ico
Binary files differdiff --git a/plugins/xtray/icons/server_notice.ico b/plugins/xtray/icons/server_notice.ico
new file mode 100644
index 00000000..ff765d87
--- /dev/null
+++ b/plugins/xtray/icons/server_notice.ico
Binary files differdiff --git a/plugins/xtray/icons/xchat.ico b/plugins/xtray/icons/xchat.ico
new file mode 100644
index 00000000..73247fd0
--- /dev/null
+++ b/plugins/xtray/icons/xchat.ico
Binary files differdiff --git a/xchat-wdk.patch b/xchat-wdk.patch
index b108dc95..d638a362 100644
--- a/xchat-wdk.patch
+++ b/xchat-wdk.patch
@@ -1,10 +1,10 @@
-diff -Naur xchat-wdk.orig/build/build-x64.bat xchat-wdk/build/build-x64.bat
+diff -ruN --strip-trailing-cr xchat-wdk.orig/build/build-x64.bat xchat-wdk/build/build-x64.bat
 --- xchat-wdk.orig/build/build-x64.bat	1970-01-01 01:00:00 +0100
-+++ xchat-wdk/build/build-x64.bat	2010-03-30 05:39:29 +0200
-@@ -0,0 +1,20 @@
++++ xchat-wdk/build/build-x64.bat	2010-03-30 12:22:22 +0200
+@@ -0,0 +1,24 @@
 +@echo off
-+set INCLUDE=c:\WinDDK\7600.16385.1\inc\api;c:\WinDDK\7600.16385.1\inc\crt;c:\mozilla-build\build\xchat-dev64\include;c:\mozilla-build\build\openssl-0.9.8n-wdk-xchat-x64\include
-+set LIB=c:\WinDDK\7600.16385.1\lib\wnet\amd64;c:\WinDDK\7600.16385.1\lib\Crt\amd64;c:\mozilla-build\build\openssl-0.9.8n-wdk-xchat-x64\lib
++set INCLUDE=c:\WinDDK\7600.16385.1\inc\api;c:\WinDDK\7600.16385.1\inc\crt;c:\WinDDK\7600.16385.1\inc\api\crt\stl70;c:\mozilla-build\build\xchat-dev64\include;c:\mozilla-build\build\openssl-1.0.0-wdk-x64\include
++set LIB=c:\WinDDK\7600.16385.1\lib\wnet\amd64;c:\WinDDK\7600.16385.1\lib\Crt\amd64;c:\mozilla-build\build\openssl-1.0.0-wdk-x64\lib
 +set PATH=c:\WinDDK\7600.16385.1\bin\x86\amd64;c:\WinDDK\7600.16385.1\bin\x86;c:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin;c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin;c:\mozilla-build\build\xchat-dev64\bin;c:\mozilla-build\perl-5.10-x64\bin
 +cd ..\src
 +nmake -f makefile.mak clean
@@ -18,17 +18,21 @@ diff -Naur xchat-wdk.orig/build/build-x64.bat xchat-wdk/build/build-x64.bat
 +::cd ..\tcl
 +::nmake -f makefile.mak clean
 +::nmake -f makefile.mak
++cd ..\xtray
++nmake -f makefile.mak clean
++nmake -f makefile.mak
 +cd ..\..\build
 +set PATH=%PATH%;c:\mozilla-build\build\xchat-dev32\bin
 +call compile-po-files.bat
++cd ..\build
 +pause
-diff -Naur xchat-wdk.orig/build/build-x86.bat xchat-wdk/build/build-x86.bat
+diff -ruN --strip-trailing-cr xchat-wdk.orig/build/build-x86.bat xchat-wdk/build/build-x86.bat
 --- xchat-wdk.orig/build/build-x86.bat	1970-01-01 01:00:00 +0100
-+++ xchat-wdk/build/build-x86.bat	2010-03-30 03:29:13 +0200
-@@ -0,0 +1,19 @@
++++ xchat-wdk/build/build-x86.bat	2010-03-30 12:22:25 +0200
+@@ -0,0 +1,23 @@
 +@echo off
-+set INCLUDE=c:\WinDDK\7600.16385.1\inc\api;c:\WinDDK\7600.16385.1\inc\crt;c:\mozilla-build\build\xchat-dev32\include;c:\mozilla-build\build\openssl-0.9.8n-wdk-xchat-x86\include
-+set LIB=c:\WinDDK\7600.16385.1\lib\wxp\i386;c:\WinDDK\7600.16385.1\lib\Crt\i386;c:\mozilla-build\build\openssl-0.9.8n-wdk-xchat-x86\lib
++set INCLUDE=c:\WinDDK\7600.16385.1\inc\api;c:\WinDDK\7600.16385.1\inc\crt;c:\WinDDK\7600.16385.1\inc\api\crt\stl70;c:\mozilla-build\build\xchat-dev32\include;c:\mozilla-build\build\openssl-1.0.0-wdk-x86\include
++set LIB=c:\WinDDK\7600.16385.1\lib\wxp\i386;c:\WinDDK\7600.16385.1\lib\Crt\i386;c:\mozilla-build\build\openssl-1.0.0-wdk-x86\lib
 +set PATH=c:\WinDDK\7600.16385.1\bin\x86\x86;c:\WinDDK\7600.16385.1\bin\x86;c:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin;c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin;c:\mozilla-build\build\xchat-dev32\bin;c:\mozilla-build\mingw\bin;c:\mozilla-build\perl-5.10-x86\bin
 +cd ..\src
 +nmake -f makefile.mak clean
@@ -42,10 +46,14 @@ diff -Naur xchat-wdk.orig/build/build-x86.bat xchat-wdk/build/build-x86.bat
 +cd ..\tcl
 +nmake -f makefile.mak clean
 +nmake -f makefile.mak
++cd ..\xtray
++nmake -f makefile.mak clean
++nmake -f makefile.mak
 +cd ..\..\build
 +call compile-po-files.bat
++cd ..\build
 +pause
-diff -Naur xchat-wdk.orig/build/compile-po-files.bat xchat-wdk/build/compile-po-files.bat
+diff -ruN --strip-trailing-cr xchat-wdk.orig/build/compile-po-files.bat xchat-wdk/build/compile-po-files.bat
 --- xchat-wdk.orig/build/compile-po-files.bat	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/build/compile-po-files.bat	2010-03-30 05:01:54 +0200
 @@ -0,0 +1,87 @@
@@ -136,7 +144,7 @@ diff -Naur xchat-wdk.orig/build/compile-po-files.bat xchat-wdk/build/compile-po-
 +
 +mkdir locale\zh_TW\LC_MESSAGES
 +msgfmt -cvo locale\zh_TW\LC_MESSAGES\xchat.mo zh_TW.po
-diff -Naur xchat-wdk.orig/build/etc/gtk-2.0/gtkrc xchat-wdk/build/etc/gtk-2.0/gtkrc
+diff -ruN --strip-trailing-cr xchat-wdk.orig/build/etc/gtk-2.0/gtkrc xchat-wdk/build/etc/gtk-2.0/gtkrc
 --- xchat-wdk.orig/build/etc/gtk-2.0/gtkrc	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/build/etc/gtk-2.0/gtkrc	2010-03-29 21:26:48 +0200
 @@ -0,0 +1,68 @@
@@ -208,10 +216,10 @@ diff -Naur xchat-wdk.orig/build/etc/gtk-2.0/gtkrc xchat-wdk/build/etc/gtk-2.0/gt
 +
 +widget_class "*TreeView*ComboBox*" style "msw-combobox-thickness"
 +widget_class "*ComboBox*GtkFrame*" style "msw-combobox-thickness" 
-diff -Naur xchat-wdk.orig/build/release-x64.bat xchat-wdk/build/release-x64.bat
+diff -ruN --strip-trailing-cr xchat-wdk.orig/build/release-x64.bat xchat-wdk/build/release-x64.bat
 --- xchat-wdk.orig/build/release-x64.bat	1970-01-01 01:00:00 +0100
-+++ xchat-wdk/build/release-x64.bat	2010-03-30 03:29:41 +0200
-@@ -0,0 +1,37 @@
++++ xchat-wdk/build/release-x64.bat	2010-03-30 12:13:32 +0200
+@@ -0,0 +1,38 @@
 +@echo off
 +set GTK_BIN=c:\mozilla-build\build\xchat-dev64\bin
 +set SSL_BIN=c:\mozilla-build\build\openssl-0.9.8n-wdk-xchat-x64\bin
@@ -247,12 +255,13 @@ diff -Naur xchat-wdk.orig/build/release-x64.bat xchat-wdk/build/release-x64.bat
 +xcopy /S /I ..\plugins\perl\xcperl.dll %XCHAT_DEST%\plugins\
 +::xcopy /S /I ..\plugins\python\xcpython.dll %XCHAT_DEST%\plugins\
 +::xcopy /S /I ..\plugins\tcl\xctcl.dll %XCHAT_DEST%\plugins\
++xcopy /S /I ..\plugins\xtray\xtray.dll %XCHAT_DEST%\plugins\
 +xcopy /S /I ..\po\locale %XCHAT_DEST%\locale
 +pause
-diff -Naur xchat-wdk.orig/build/release-x86.bat xchat-wdk/build/release-x86.bat
+diff -ruN --strip-trailing-cr xchat-wdk.orig/build/release-x86.bat xchat-wdk/build/release-x86.bat
 --- xchat-wdk.orig/build/release-x86.bat	1970-01-01 01:00:00 +0100
-+++ xchat-wdk/build/release-x86.bat	2010-03-30 03:29:45 +0200
-@@ -0,0 +1,37 @@
++++ xchat-wdk/build/release-x86.bat	2010-03-30 12:13:37 +0200
+@@ -0,0 +1,38 @@
 +@echo off
 +set GTK_BIN=c:\mozilla-build\build\xchat-dev32\bin
 +set SSL_BIN=c:\mozilla-build\build\openssl-0.9.8n-wdk-xchat-x86\bin
@@ -288,23 +297,24 @@ diff -Naur xchat-wdk.orig/build/release-x86.bat xchat-wdk/build/release-x86.bat
 +xcopy /S /I ..\plugins\perl\xcperl.dll %XCHAT_DEST%\plugins\
 +::xcopy /S /I ..\plugins\python\xcpython.dll %XCHAT_DEST%\plugins\
 +xcopy /S /I ..\plugins\tcl\xctcl.dll %XCHAT_DEST%\plugins\
++xcopy /S /I ..\plugins\xtray\xtray.dll %XCHAT_DEST%\plugins\
 +xcopy /S /I ..\po\locale %XCHAT_DEST%\locale
 +pause
-diff -Naur xchat-wdk.orig/build/test-x64.bat xchat-wdk/build/test-x64.bat
+diff -ruN --strip-trailing-cr xchat-wdk.orig/build/test-x64.bat xchat-wdk/build/test-x64.bat
 --- xchat-wdk.orig/build/test-x64.bat	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/build/test-x64.bat	2010-03-30 02:24:01 +0200
 @@ -0,0 +1,3 @@
 +@echo off
 +set PATH=c:\mozilla-build\build\xchat-dev64\bin;c:\mozilla-build\perl-5.10-x64\bin;c:\mozilla-build\python-2.6-x64
 +..\src\fe-gtk\xchat.exe
-diff -Naur xchat-wdk.orig/build/test-x86.bat xchat-wdk/build/test-x86.bat
+diff -ruN --strip-trailing-cr xchat-wdk.orig/build/test-x86.bat xchat-wdk/build/test-x86.bat
 --- xchat-wdk.orig/build/test-x86.bat	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/build/test-x86.bat	2010-03-30 02:24:19 +0200
 @@ -0,0 +1,3 @@
 +@echo off
 +set PATH=c:\mozilla-build\build\xchat-dev32\bin;c:\mozilla-build\perl-5.10-x86\bin;c:\mozilla-build\python-2.6-x86
 +..\src\fe-gtk\xchat.exe
-diff -Naur xchat-wdk.orig/config.h xchat-wdk/config.h
+diff -ruN --strip-trailing-cr xchat-wdk.orig/config.h xchat-wdk/config.h
 --- xchat-wdk.orig/config.h	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/config.h	2010-03-30 03:18:35 +0200
 @@ -0,0 +1,14 @@
@@ -322,7 +332,7 @@ diff -Naur xchat-wdk.orig/config.h xchat-wdk/config.h
 +#endif
 +#define GETTEXT_PACKAGE "xchat"
 +#define PACKAGE_TARNAME "xchat-2.8.6"
-diff -Naur xchat-wdk.orig/config.h.w32 xchat-wdk/config.h.w32
+diff -ruN --strip-trailing-cr xchat-wdk.orig/config.h.w32 xchat-wdk/config.h.w32
 --- xchat-wdk.orig/config.h.w32	2008-06-12 10:37:44 +0200
 +++ xchat-wdk/config.h.w32	1970-01-01 01:00:00 +0100
 @@ -1,12 +0,0 @@
@@ -338,7 +348,7 @@ diff -Naur xchat-wdk.orig/config.h.w32 xchat-wdk/config.h.w32
 -#ifndef USE_IPV6
 -#define socklen_t int
 -#endif
-diff -Naur xchat-wdk.orig/plugins/perl/makefile.mak xchat-wdk/plugins/perl/makefile.mak
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/perl/makefile.mak xchat-wdk/plugins/perl/makefile.mak
 --- xchat-wdk.orig/plugins/perl/makefile.mak	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/plugins/perl/makefile.mak	2010-03-30 07:45:47 +0200
 @@ -0,0 +1,29 @@
@@ -371,7 +381,7 @@ diff -Naur xchat-wdk.orig/plugins/perl/makefile.mak xchat-wdk/plugins/perl/makef
 +	del perl.def
 +	del *.lib
 +	del *.exp
-diff -Naur xchat-wdk.orig/plugins/perl/perl.c xchat-wdk/plugins/perl/perl.c
+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-03-23 01:06:59 +0100
 +++ xchat-wdk/plugins/perl/perl.c	2010-03-30 01:17:15 +0200
 @@ -16,13 +16,14 @@
@@ -390,7 +400,7 @@ diff -Naur xchat-wdk.orig/plugins/perl/perl.c xchat-wdk/plugins/perl/perl.c
  #ifdef ENABLE_NLS
  #include <locale.h>
  #endif
-diff -Naur xchat-wdk.orig/plugins/python/makefile.mak xchat-wdk/plugins/python/makefile.mak
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/python/makefile.mak xchat-wdk/plugins/python/makefile.mak
 --- xchat-wdk.orig/plugins/python/makefile.mak	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/plugins/python/makefile.mak	2010-03-30 07:46:04 +0200
 @@ -0,0 +1,24 @@
@@ -418,7 +428,7 @@ diff -Naur xchat-wdk.orig/plugins/python/makefile.mak xchat-wdk/plugins/python/m
 +	del python.def
 +	del *.lib
 +	del *.exp
-diff -Naur xchat-wdk.orig/plugins/python/python.c xchat-wdk/plugins/python/python.c
+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-03-17 09:07:51 +0100
 +++ xchat-wdk/plugins/python/python.c	2010-03-30 02:59:44 +0200
 @@ -51,12 +51,13 @@
@@ -446,7 +456,7 @@ diff -Naur xchat-wdk.orig/plugins/python/python.c xchat-wdk/plugins/python/pytho
  #else
  #define VERSION "0.8"
  #endif
-diff -Naur xchat-wdk.orig/plugins/tcl/makefile.mak xchat-wdk/plugins/tcl/makefile.mak
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/tcl/makefile.mak xchat-wdk/plugins/tcl/makefile.mak
 --- xchat-wdk.orig/plugins/tcl/makefile.mak	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/plugins/tcl/makefile.mak	2010-03-30 07:46:20 +0200
 @@ -0,0 +1,22 @@
@@ -472,7 +482,7 @@ diff -Naur xchat-wdk.orig/plugins/tcl/makefile.mak xchat-wdk/plugins/tcl/makefil
 +	del $(TARGET)
 +	del *.obj
 +	del tcl.def
-diff -Naur xchat-wdk.orig/plugins/tcl/tclplugin.c xchat-wdk/plugins/tcl/tclplugin.c
+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-03-29 12:57:17 +0200
 @@ -32,8 +32,6 @@
@@ -484,7 +494,3225 @@ diff -Naur xchat-wdk.orig/plugins/tcl/tclplugin.c xchat-wdk/plugins/tcl/tclplugi
  #endif
  
  #include "xchat-plugin.h"
-diff -Naur xchat-wdk.orig/src/common/cfgfiles.c xchat-wdk/src/common/cfgfiles.c
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/callbacks.cpp xchat-wdk/plugins/xtray/callbacks.cpp
+--- xchat-wdk.orig/plugins/xtray/callbacks.cpp	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/callbacks.cpp	2005-11-06 13:24:08 +0100
+@@ -0,0 +1,729 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#define _WIN32_IE 0x0601
++
++#include <windows.h>
++#include <stdio.h>
++#include <commctrl.h>
++#include <tchar.h>
++#include "utility.h"
++#include "plugin.h"
++#include "xtray.h"
++#include "xchat.h"
++#include "callbacks.h"
++#include "resource.h"
++#include "sdTray.h"
++#include "sdAlerts.h"
++
++HWND	g_hPrefTabEvents;
++HWND	g_hPrefTabSettings;
++HWND	g_hPrefTabAlerts;
++HWND	g_hPrefTabAbout;
++bool	g_bCanQuit;
++int		g_iIsActive = 1;
++
++
++BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
++{
++	TCHAR szTitle[10];
++	GetWindowText(hWnd, szTitle, 9);
++
++	if(_tcsstr(szTitle, _T("X-Chat [")))
++	{
++		g_hXchatWnd = hWnd;
++		return false;
++	}
++	
++	return true;
++}
++
++/***********************************************************************************************/
++/******* our xchat event call back, get the name and info for each event and save it ***********/
++/******* for our alerts later														***********/
++/***********************************************************************************************/
++int event_cb(char *word[], void *userdata)
++{
++	int iEvent = (int)userdata;
++
++	if(iEvent > 10)
++		return XCHAT_EAT_NONE;
++
++	/***************************************************************************************/
++	/***** if the window is minimized or if we're allowed to show alerts when its not	 **/
++	/***** and if the option to show the specified alert is true and if we're even		**/
++	/***** allowed to show alerts at all then we show them (a bit confusing but it works) **/
++	/***************************************************************************************/
++	if(((g_iIsActive == 0) || !(g_dwPrefs & (1<<PREF_OSBWM))) && (g_dwPrefs & (1<<PREF_AMAE)) && (g_dwPrefs & (1<<iEvent)))
++	{	
++		/*********************************/
++		/*********** Our Buffers *********/
++		/*********************************/
++		char			szInfo[512];
++		char			szName[64];
++		DWORD			dwInfoFlags;
++		int iTime		= g_iTime*1000;
++		char *szTemp	= NULL;
++
++		if(g_dwPrefs & (1<<PREF_KAOI))
++		{
++			iTime = 0;
++		}
++
++		switch(iEvent)
++		{
++		case CHAN_HILIGHT:
++			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]);
++			_snprintf(szName, 64, "Hilight");
++			dwInfoFlags = NIIF_INFO;
++			break;
++		case CHAN_TOPIC_CHANGE:
++			_snprintf(szInfo, 512, "%s has changed the topic to %s", word[1], word[2]);
++			_snprintf(szName, 64, "Topic Change: %s", word[3]);
++			dwInfoFlags = NIIF_INFO;
++			break;
++		case CHAN_INVITE:
++			_snprintf(szInfo, 512, "%s has invited you into %s", word[1], word[2]);
++			_snprintf(szName, 64, "Invite");
++			dwInfoFlags = NIIF_INFO;
++			break;
++		case CHAN_KICKED:
++			_snprintf(szInfo, 512, "Kicked from %s by %s:\r\n%s", word[2], word[3], word[4]);
++			_snprintf(szName, 64, "Kick");
++			dwInfoFlags = NIIF_WARNING;
++			break;
++		case CHAN_BANNED:
++			_snprintf(szInfo, 512, "Cannot join #%s You are banned.", word[1]);
++			_snprintf(szName, 64, "Banned");
++			dwInfoFlags = NIIF_WARNING;
++			break;
++		case CTCP_GENERIC:
++			_snprintf(szInfo, 512, "%s:\r\nCTCP %s", word[2], word[1]);
++			_snprintf(szName, 64, "CTCP");
++			dwInfoFlags = NIIF_INFO;
++			break;
++		case PMSG_RECEIVE:
++			_snprintf(szInfo, 512, "%s:\r\n%s", word[1], word[2]);
++			_snprintf(szName, 64, "Private Message");
++			dwInfoFlags = NIIF_INFO;
++			break;
++		case SERV_DISCONNECT:
++			_snprintf(szInfo, 512, "Disconnected\r\nError: %s", word[1]);
++			_snprintf(szName, 64, "Disconnect");
++			dwInfoFlags = NIIF_ERROR;
++			break;
++		case SERV_KILLED:
++			_snprintf(szInfo, 512, "Killed(%s(%s))", word[1], word[2]);
++			_snprintf(szName, 64, "Server Admin has killed you");
++			dwInfoFlags = NIIF_ERROR;
++			break;
++		case SERV_NOTICE:
++			_snprintf(szInfo, 512, "Notice:\r\n%s: %s", word[1], word[2]);
++			_snprintf(szName, 64, "Notice");
++			dwInfoFlags = NIIF_INFO;
++			break;
++		case 11:
++			_snprintf(szInfo, 512, ":\r\n%s: %s", word[1], word[2]);
++			_snprintf(szName, 64, "Notice");
++			dwInfoFlags = NIIF_INFO;
++			break;
++		}
++
++		/**************************************************************************************/
++		/***** Use windows instead of balloons, and if its a window should we keep it open ****/
++		/***** indefinately?															   ****/
++		/**************************************************************************************/
++		szTemp = xchat_strip_color(szInfo);
++
++		if(g_dwPrefs & (1<<PREF_UWIOB))
++		{
++			sdSystemAlert((HINSTANCE)g_hInstance, IDD_ALERT, szTemp, szName, iTime);
++		}
++		else
++		{
++			ShowBalloon(g_hXchatWnd, 1, szTemp, szName, iTime, dwInfoFlags);
++		}
++
++		free(szTemp);
++	}
++
++	if(g_dwPrefs & (1<<PREF_BLINK))
++	{
++		BlinkIcon(g_hXchatWnd, 1, g_hIcons[0], g_hIcons[(iEvent+1)], 700, 5);
++		
++	}
++
++	/***********************************/
++	/***** pass the events to xchat ****/
++	/***********************************/
++	return XCHAT_EAT_NONE;
++}
++
++int command_cb(char *word[], char *word_eol[], void *userdata)
++{
++	char szInfo[512];
++	char *szTemp	= NULL;
++	int iTime		= g_iTime*1000;
++
++	_snprintf(szInfo, 512, word_eol[2]);
++	szTemp = xchat_strip_color(szInfo);
++
++	if(g_dwPrefs & (1<<PREF_KAOI))
++	{
++		iTime = 0;
++	}
++
++	if(((g_iIsActive == 0) || !(g_dwPrefs & (1<<PREF_OSBWM))) && (g_dwPrefs & (1<<PREF_AMAE)))
++	{
++		if(g_dwPrefs & (1<<PREF_UWIOB))
++		{
++			sdSystemAlert((HINSTANCE)g_hInstance, IDD_ALERT, szTemp, "Alert", iTime);
++		}
++		else
++		{
++			ShowBalloon(g_hXchatWnd, 1, szTemp, "Alert", iTime, NIIF_INFO);
++		}
++	}
++
++	free(szTemp);
++
++	return XCHAT_EAT_ALL;
++}
++
++LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
++{
++	switch(msg)
++	{
++	case WM_CLOSE:
++		{
++			if((g_dwPrefs & (1<<PREF_MIOC)) && (g_bCanQuit == false))
++			{
++				/*******************************************/
++				/**** to autoaway or not to autoaway...  ***/
++				/*******************************************/
++				if(g_dwPrefs & (1<<PREF_AOM))
++				{
++					xchat_globally_away(g_szAway);
++				}
++
++				/**************************************************/
++				/**** Win32 API call to hide the window and	     **/
++				/**** save the fact that its minimized for later **/
++				/**************************************************/
++				g_iIsActive = 0;
++				ShowWindow(hWnd, SW_HIDE);
++
++				return 0;
++			}
++			else
++			{
++				if(g_hPrefDlg != NULL)
++				{
++					DestroyWindow(g_hPrefDlg);
++				}
++
++				StopBlink(hWnd, 1, g_hIcons[0]);
++				
++				if(sdAlertNum())
++				{
++					sdCloseAlerts();
++					HoldClose();
++					return 0;
++				}
++			}
++		}
++		break;
++	case WM_SIZE:
++		{
++			/******************************************/
++			/***** User wants to minimize xChat, ******/
++			/***** are we allowed to go to tray? ******/
++			/******************************************/
++			if((g_dwPrefs & (1<<PREF_TOT)) && (wparam == SIZE_MINIMIZED))
++			{
++				/*******************************************/
++				/**** to autoaway or not to autoaway...  ***/
++				/*******************************************/
++				if(g_dwPrefs & (1<<PREF_AOM))
++				{
++					xchat_globally_away(g_szAway);
++				}
++
++				/**************************************************/
++				/**** Win32 API call to hide the window and	     **/
++				/**** save the fact that its minimized for later **/
++				/**************************************************/
++				g_iIsActive = 0;
++				ShowWindow(hWnd, SW_HIDE);
++			}
++		}
++		break;
++	/**********************************/
++	/*** user clicked the tray icon ***/
++	/**********************************/
++	case WM_TRAYMSG:
++		{
++			switch(lparam)
++			{
++			case WM_LBUTTONDOWN:
++				{
++					if(!g_iIsActive)
++					{
++						/*********************************************************/
++						/*** 0: its hiden, restore it and show it, if autoaway ***/
++						/*** is on, set us as back							 ***/
++						/*********************************************************/
++						SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
++						SetForegroundWindow(hWnd);
++						g_iIsActive = 1;
++
++						if(g_dwPrefs & (1<<PREF_AOM))
++						{
++							xchat_globally_back();
++						}
++					}
++					else
++					{
++						SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
++					}
++				}
++				break;
++			case WM_RBUTTONDOWN:
++				{
++					/******************************************/
++					/*** user wants to see the menu find out **/
++					/*** where the mouse is and show it	  **/
++					/******************************************/
++					POINT pt;
++					int iRet;
++
++					GetCursorPos(&pt);
++					SetForegroundWindow(hWnd);
++
++					ModifyMenu(g_hTrayMenu, 2, (MF_POPUP | MF_BYPOSITION), (UINT)setServerMenu(), _T("Away"));
++
++					Sleep(175);
++
++					iRet = TrackPopupMenuEx(g_hTrayMenu, (TPM_RETURNCMD | TPM_LEFTALIGN), pt.x, pt.y, hWnd, NULL);
++
++					/***********************************/
++					/*** nRet is the users selection, **/
++					/*** process it				   **/
++					/***********************************/
++					sdTrayProc(hWnd, iRet);
++				}
++				break;
++			}
++		}
++		break;
++	default:
++		{
++			/*****************************************************/
++			/*** the taskbar has been restarted, re-add our icon */
++			/*****************************************************/
++			if(msg == RegisterWindowMessage(_T("TaskbarCreated")))
++			{
++				char szVersion[64];
++				_snprintf(szVersion, 64, "X-Chat [%s]", xchat_get_info(ph, "version"));
++				AddIcon(g_hXchatWnd, 1, g_hIcons[0], szVersion, (NIF_ICON | NIF_MESSAGE | NIF_TIP), WM_TRAYMSG);
++			}
++		}
++		break;
++	}
++
++	return CallWindowProc(g_hOldProc, hWnd, msg, wparam, lparam);
++}
++
++/****************************************************/
++/*** process messages from the tray menu ************/
++/****************************************************/
++LRESULT CALLBACK sdTrayProc(HWND hWnd, int msg)
++{
++	switch(msg)
++	{
++	case ACT_EXIT:
++		{
++			g_bCanQuit = true;
++			PostMessage(hWnd, WM_CLOSE, 0, 0);
++		}
++		break;
++	case ACT_RESTORE:
++		{
++			/***********************************************/
++			/** user wants us to restore the xchat window **/
++			/** and of autoaway is on, set as back		**/
++			/***********************************************/
++			SendMessage(g_hXchatWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
++			SetForegroundWindow(hWnd);
++			
++			if((!g_iIsActive) && (g_dwPrefs & (1<<PREF_AOM)))
++			{
++				xchat_globally_back();
++				g_iIsActive = 1;
++			}
++		}
++		break;
++	case ACT_SETTINGS:
++		{
++			ShowWindow(g_hPrefDlg, SW_SHOW);
++		}
++		break;
++	case ACT_AWAY:
++		{
++			xchat_globally_away(g_szAway);
++		}
++		break;
++	case ACT_BACK:
++		{
++			xchat_globally_back();
++		}
++		break;
++	default:
++		{
++			if(msg > 0)
++			{
++				xchat_set_context(ph, xchat_find_server(msg-1));
++
++				if(!xchat_get_info(ph, "away"))
++				{
++					xchat_away(g_szAway);
++				}
++				else
++				{
++					xchat_back();
++				}
++			}
++		}
++		break;
++	}
++
++	return 1;
++}
++
++int CALLBACK PrefProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
++{
++	switch(msg)
++	{
++	case WM_INITDIALOG:
++		{
++			TCITEM tci1;
++			TCITEM tci2;
++			TCITEM tci3;
++			TCITEM tci4;
++
++			tci1.mask		= TCIF_TEXT;
++			tci1.pszText	= _T("Settings");
++			tci1.cchTextMax	= strlen("Settings");
++			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 0, (LPARAM)&tci1);
++
++			tci2.mask		= TCIF_TEXT;
++			tci2.pszText	= _T("Alerts");
++			tci2.cchTextMax	= strlen("Alerts");
++			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 1, (LPARAM)&tci2);
++
++			tci3.mask		= TCIF_TEXT;
++			tci3.pszText	= _T("Events");
++			tci3.cchTextMax	= strlen("Events");
++			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 2, (LPARAM)&tci3);
++
++			tci4.mask		= TCIF_TEXT;
++			tci4.pszText	= _T("About");
++			tci4.cchTextMax	= strlen("About");
++			SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_INSERTITEM, 3, (LPARAM)&tci4);
++
++
++			/***********************************************************************************/
++			/***********************************************************************************/
++			/***********************************************************************************/
++
++			g_hPrefTabSettings	= CreateDialog((HINSTANCE)g_hInstance,
++									MAKEINTRESOURCE(IDD_SETTINGS),
++									hWnd,		
++									(DLGPROC)SettingsProc);
++			SetDialog(g_hPrefTabSettings,	IDD_SETTINGS);
++
++			g_hPrefTabAlerts	= CreateDialog((HINSTANCE)g_hInstance,
++									MAKEINTRESOURCE(IDD_ALERTS),
++									hWnd,
++									(DLGPROC)AlertsProc);
++			SetDialog(g_hPrefTabAlerts,		IDD_ALERTS);
++
++			g_hPrefTabEvents	= CreateDialog((HINSTANCE)g_hInstance,
++									MAKEINTRESOURCE(IDD_EVENTS),
++									hWnd,		
++									(DLGPROC)EventsProc);
++			SetDialog(g_hPrefTabEvents,		IDD_EVENTS);
++
++			g_hPrefTabAbout		= CreateDialog((HINSTANCE)g_hInstance,
++									MAKEINTRESOURCE(IDD_ABOUT),
++									hWnd,
++									(DLGPROC)AboutProc);
++		}
++		break;
++	case WM_SHOWWINDOW:
++		{
++			if(wparam)
++			{
++				SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_SETCURSEL, 0, 0);
++				ShowWindow(g_hPrefTabSettings,	SW_SHOW);
++				ShowWindow(g_hPrefTabAlerts,	SW_HIDE);
++				ShowWindow(g_hPrefTabEvents,	SW_HIDE);
++				ShowWindow(g_hPrefTabAbout,		SW_HIDE);
++			}
++		}
++		break;
++	case WM_NOTIFY:
++		{
++			NMHDR *pData = (NMHDR *)lparam;
++
++			switch(pData->code)
++			{
++			case TCN_SELCHANGE:
++				{
++					switch(SendDlgItemMessage(hWnd, IDC_TAB_CONTROL, TCM_GETCURSEL, 0, 0))
++					{
++					case 0:
++						{
++							ShowWindow(g_hPrefTabSettings,	SW_SHOW);
++							ShowWindow(g_hPrefTabAlerts,	SW_HIDE);
++							ShowWindow(g_hPrefTabEvents,	SW_HIDE);
++							ShowWindow(g_hPrefTabAbout,		SW_HIDE);
++						}
++						break;
++					case 1:
++						{
++							ShowWindow(g_hPrefTabSettings,	SW_HIDE);
++							ShowWindow(g_hPrefTabAlerts,	SW_SHOW);
++							ShowWindow(g_hPrefTabEvents,	SW_HIDE);
++							ShowWindow(g_hPrefTabAbout,		SW_HIDE);
++						}
++						break;
++					case 2:
++						{
++							ShowWindow(g_hPrefTabSettings,	SW_HIDE);
++							ShowWindow(g_hPrefTabAlerts,	SW_HIDE);
++							ShowWindow(g_hPrefTabEvents,	SW_SHOW);
++							ShowWindow(g_hPrefTabAbout,		SW_HIDE);
++						}
++						break;
++					case 3:
++						{
++							ShowWindow(g_hPrefTabSettings,	SW_HIDE);
++							ShowWindow(g_hPrefTabAlerts,	SW_HIDE);
++							ShowWindow(g_hPrefTabEvents,	SW_HIDE);
++							ShowWindow(g_hPrefTabAbout,		SW_SHOW);
++						}
++						break;
++					}
++				}
++				break;
++			}
++		}
++		break;
++	case WM_CLOSE:
++		{
++			ShowWindow(g_hPrefTabEvents,	SW_HIDE);
++			ShowWindow(g_hPrefTabSettings,	SW_HIDE);
++			ShowWindow(g_hPrefTabAlerts,	SW_HIDE);
++			ShowWindow(g_hPrefTabAbout,		SW_HIDE);
++			ShowWindow(hWnd,				SW_HIDE);
++			return TRUE;
++		}
++		break;
++	case WM_COMMAND:
++		{
++			switch(wparam)
++			{
++			case IDC_PREF_OK:
++				{
++					CheckPrefs(g_hPrefTabEvents,	IDD_EVENTS);
++					CheckPrefs(g_hPrefTabSettings,	IDD_SETTINGS);
++					CheckPrefs(g_hPrefTabAlerts,	IDD_ALERTS);
++
++					SavePrefs(0);
++
++					ShowWindow(g_hPrefTabEvents,	SW_HIDE);
++					ShowWindow(g_hPrefTabSettings,	SW_HIDE);
++					ShowWindow(g_hPrefTabAlerts,	SW_HIDE);
++					ShowWindow(g_hPrefTabAbout,		SW_HIDE);
++					ShowWindow(hWnd,				SW_HIDE);
++					return TRUE;
++				}
++				break;
++			case IDC_PREF_CANCEL:
++				{
++					ShowWindow(g_hPrefTabEvents,	SW_HIDE);
++					ShowWindow(g_hPrefTabSettings,	SW_HIDE);
++					ShowWindow(g_hPrefTabAlerts,	SW_HIDE);
++					ShowWindow(g_hPrefTabAbout,		SW_HIDE);
++					ShowWindow(hWnd,				SW_HIDE);
++					return TRUE;
++				}
++				break;
++			case IDC_PREF_APPLY:
++				{
++					CheckPrefs(g_hPrefTabEvents,	IDD_EVENTS);
++					CheckPrefs(g_hPrefTabSettings,	IDD_SETTINGS);
++					CheckPrefs(g_hPrefTabAlerts,	IDD_ALERTS);
++
++					SavePrefs(0);
++					return FALSE;
++				}
++				break;
++			}
++		}
++		break;
++	case WM_DESTROY:
++		{
++			SendMessage(g_hPrefTabEvents,	WM_CLOSE, 0, 0);
++			SendMessage(g_hPrefTabSettings,	WM_CLOSE, 0, 0);
++			SendMessage(g_hPrefTabAbout,	WM_CLOSE, 0, 0);
++			SendMessage(g_hPrefTabAlerts,	WM_CLOSE, 0, 0);
++		}
++		break;
++	}
++
++	return FALSE;
++}
++
++/****************************************************/
++/****************************************************/
++/****************************************************/
++LRESULT CALLBACK AlertsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
++{
++	switch(msg)
++	{
++	case WM_CLOSE:
++		{
++			DestroyWindow(hWnd);
++			return TRUE;
++			break;
++		}
++		break;
++	case WM_COMMAND:
++		{
++			switch(LOWORD(wparam))
++			{
++			case PREF_AMAE:
++				{
++					SetToggle(hWnd, PREF_OSBWM,			PREF_AMAE, TRUE);
++					SetToggle(hWnd, PREF_UWIOB,			PREF_AMAE, TRUE);
++					SetToggle(hWnd, PREF_KAOI,			PREF_AMAE, TRUE);
++					
++					if(IsDlgButtonChecked(hWnd, PREF_AMAE))
++					{
++						SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE);
++						SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE);
++						SetToggle(hWnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE);
++						SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE);
++					}
++					else
++					{
++						SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_AMAE, TRUE);
++						SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_AMAE, TRUE);
++						SetToggle(hWnd, IDC_ALERT_TIME,			PREF_AMAE, TRUE);
++						SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_AMAE, TRUE);
++					}
++				}
++				break;
++			case PREF_UWIOB:
++				{
++					SetToggle(hWnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE);
++					SetToggle(hWnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE);
++				}
++				break;
++			case PREF_KAOI:
++				{
++					SetToggle(hWnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE);
++					SetToggle(hWnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE);
++				}
++				break;
++			}
++			break;
++		}
++	}
++
++	return FALSE;
++}
++
++/****************************************************/
++/****************************************************/
++/****************************************************/
++LRESULT CALLBACK AboutProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
++{
++	if(msg == WM_CLOSE)
++	{
++		DestroyWindow(hWnd);
++		return true;
++	}
++
++	return FALSE;
++}
++
++/*****************************************************/
++/** Process the events for our event dialog **********/
++/*****************************************************/
++LRESULT CALLBACK EventsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
++{
++	if(msg == WM_CLOSE)
++	{
++		DestroyWindow(hWnd);
++		return true;
++	}
++
++	return FALSE;
++}
++
++/*****************************************************/
++/** Process the events for our settings dialog this **/
++/** is alot more complicated because options are	**/
++/** enabled/disabled based on the state of others   **/
++/*****************************************************/
++LRESULT CALLBACK SettingsProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
++{
++	if(msg == WM_CLOSE)
++	{
++		DestroyWindow(hWnd);
++		return true;
++	}
++
++	return FALSE;
++}
++
++/*****************************************************/
++/** this is the hotkey message  processing function **/
++/** this window is always open and ready to be told **/
++/** if someone has hit the hotkey, if they did, we  **/
++/** need to close out all of the tray alerts, for   **/
++/** this I wrote sdCloseAlerts, more info there	 **/
++/*****************************************************/
++LRESULT CALLBACK HotKeyProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
++{
++	if(msg == WM_CLOSE)
++	{
++		DestroyWindow(hWnd);
++		return true;
++	}
++	else if(msg == WM_HOTKEY)
++	{
++		sdCloseAlerts();
++	}
++
++	return FALSE;
++}
++
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/callbacks.h xchat-wdk/plugins/xtray/callbacks.h
+--- xchat-wdk.orig/plugins/xtray/callbacks.h	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/callbacks.h	2005-10-25 15:08:30 +0200
+@@ -0,0 +1,37 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#ifndef _H_CALLBACKS_H
++#define _H_CALLBACKS_H
++
++int					event_cb		(char *word[], void *userdata);
++int					command_cb		(char *word[], char *word_eol[], void *userdata);
++
++LRESULT CALLBACK	WindowProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
++BOOL	CALLBACK	EnumWindowsProc	(HWND hWnd, LPARAM lParam);
++LRESULT CALLBACK	sdTrayProc		(HWND hwnd, int msg);
++
++LRESULT CALLBACK	AlertProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
++LRESULT CALLBACK	HotKeyProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
++LRESULT CALLBACK	EventsProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
++LRESULT CALLBACK	AboutProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
++LRESULT CALLBACK	AlertsProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
++LRESULT CALLBACK	SettingsProc	(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
++int		CALLBACK	PrefProc		(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
++
++#endif
+\ No newline at end of file
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/makefile.mak xchat-wdk/plugins/xtray/makefile.mak
+--- xchat-wdk.orig/plugins/xtray/makefile.mak	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/makefile.mak	2010-03-30 12:32:58 +0200
+@@ -0,0 +1,37 @@
++include "..\..\src\makeinc.mak"
++
++TARGET = xtray.dll
++
++TRAY_OBJECTS = \
++callbacks.obj \
++sdAlerts.obj \
++sdTray.obj \
++utility.obj \
++xchat.obj \
++xtray.obj
++
++CPPFLAGS = $(CPPFLAGS) /c /MD /nologo /DWIN32 /D_STL70_ /D_STATIC_CPPLIB /EHsc
++
++all: $(TRAY_OBJECTS) $(TARGET)
++
++xtray.def:
++	echo EXPORTS > xtray.def
++	echo xchat_plugin_init >> xtray.def
++	echo xchat_plugin_deinit >> xtray.def
++
++.cpp.obj:
++	$(CC) $(CPPFLAGS) /c $<
++
++res:
++	rc resource.rc
++	
++$(TARGET): $(TRAY_OBJECTS) xtray.def res
++	$(LINK) /DLL /out:$(TARGET) $(LDFLAGS) $(TRAY_OBJECTS) ntstc_msvcrt.lib $(LIBS) /def:xtray.def resource.res
++
++clean:
++	del $(TARGET)
++	del *.obj
++	del xtray.def
++	del resource.res
++	del *.lib
++	del *.exp
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/plugin.h xchat-wdk/plugins/xtray/plugin.h
+--- xchat-wdk.orig/plugins/xtray/plugin.h	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/plugin.h	2005-03-22 17:20:36 +0100
+@@ -0,0 +1,335 @@
++/* You can distribute this header with your plugins for easy compilation */
++#ifndef XCHAT_PLUGIN_H
++#define XCHAT_PLUGIN_H
++
++#include <time.h>
++
++#define XCHAT_IFACE_MAJOR	1
++#define XCHAT_IFACE_MINOR	9
++#define XCHAT_IFACE_MICRO	11
++#define XCHAT_IFACE_VERSION	((XCHAT_IFACE_MAJOR * 10000) + \
++				 (XCHAT_IFACE_MINOR * 100) + \
++				 (XCHAT_IFACE_MICRO))
++
++#define XCHAT_PRI_HIGHEST	127
++#define XCHAT_PRI_HIGH		64
++#define XCHAT_PRI_NORM		0
++#define XCHAT_PRI_LOW		(-64)
++#define XCHAT_PRI_LOWEST	(-128)
++
++#define XCHAT_FD_READ		1
++#define XCHAT_FD_WRITE		2
++#define XCHAT_FD_EXCEPTION	4
++#define XCHAT_FD_NOTSOCKET	8
++
++#define XCHAT_EAT_NONE		0	/* pass it on through! */
++#define XCHAT_EAT_XCHAT		1	/* don't let xchat see this event */
++#define XCHAT_EAT_PLUGIN	2	/* don't let other plugins see this event */
++#define XCHAT_EAT_ALL		(XCHAT_EAT_XCHAT|XCHAT_EAT_PLUGIN)	/* don't let anything see this event */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++typedef struct _xchat_plugin xchat_plugin;
++typedef struct _xchat_list xchat_list;
++typedef struct _xchat_hook xchat_hook;
++#ifndef PLUGIN_C
++typedef struct _xchat_context xchat_context;
++#endif
++
++#ifndef PLUGIN_C
++struct _xchat_plugin
++{
++	/* these are only used on win32 */
++	xchat_hook *(*xchat_hook_command) (xchat_plugin *ph,
++		    const char *name,
++		    int pri,
++		    int (*callback) (char *word[], char *word_eol[], void *user_data),
++		    const char *help_text,
++		    void *userdata);
++	xchat_hook *(*xchat_hook_server) (xchat_plugin *ph,
++		   const char *name,
++		   int pri,
++		   int (*callback) (char *word[], char *word_eol[], void *user_data),
++		   void *userdata);
++	xchat_hook *(*xchat_hook_print) (xchat_plugin *ph,
++		  const char *name,
++		  int pri,
++		  int (*callback) (char *word[], void *user_data),
++		  void *userdata);
++	xchat_hook *(*xchat_hook_timer) (xchat_plugin *ph,
++		  int timeout,
++		  int (*callback) (void *user_data),
++		  void *userdata);
++	xchat_hook *(*xchat_hook_fd) (xchat_plugin *ph,
++		   int fd,
++		   int flags,
++		   int (*callback) (int fd, int flags, void *user_data),
++		   void *userdata);
++	void *(*xchat_unhook) (xchat_plugin *ph,
++	      xchat_hook *hook);
++	void (*xchat_print) (xchat_plugin *ph,
++	     const char *text);
++	void (*xchat_printf) (xchat_plugin *ph,
++	      const char *format, ...);
++	void (*xchat_command) (xchat_plugin *ph,
++	       const char *command);
++	void (*xchat_commandf) (xchat_plugin *ph,
++		const char *format, ...);
++	int (*xchat_nickcmp) (xchat_plugin *ph,
++	       const char *s1,
++	       const char *s2);
++	int (*xchat_set_context) (xchat_plugin *ph,
++		   xchat_context *ctx);
++	xchat_context *(*xchat_find_context) (xchat_plugin *ph,
++		    const char *servname,
++		    const char *channel);
++	xchat_context *(*xchat_get_context) (xchat_plugin *ph);
++	const char *(*xchat_get_info) (xchat_plugin *ph,
++		const char *id);
++	int (*xchat_get_prefs) (xchat_plugin *ph,
++		 const char *name,
++		 const char **string,
++		 int *integer);
++	xchat_list * (*xchat_list_get) (xchat_plugin *ph,
++		const char *name);
++	void (*xchat_list_free) (xchat_plugin *ph,
++		 xchat_list *xlist);
++	const char * const * (*xchat_list_fields) (xchat_plugin *ph,
++		   const char *name);
++	int (*xchat_list_next) (xchat_plugin *ph,
++		 xchat_list *xlist);
++	const char * (*xchat_list_str) (xchat_plugin *ph,
++		xchat_list *xlist,
++		const char *name);
++	int (*xchat_list_int) (xchat_plugin *ph,
++		xchat_list *xlist,
++		const char *name);
++	void * (*xchat_plugingui_add) (xchat_plugin *ph,
++		     const char *filename,
++		     const char *name,
++		     const char *desc,
++		     const char *version,
++		     char *reserved);
++	void (*xchat_plugingui_remove) (xchat_plugin *ph,
++			void *handle);
++	int (*xchat_emit_print) (xchat_plugin *ph,
++			const char *event_name, ...);
++	int (*xchat_read_fd) (xchat_plugin *ph,
++			void *src,
++			char *buf,
++			int *len);
++	time_t (*xchat_list_time) (xchat_plugin *ph,
++		xchat_list *xlist,
++		const char *name);
++	char *(*xchat_gettext) (xchat_plugin *ph,
++		const char *msgid);
++	void (*xchat_send_modes) (xchat_plugin *ph,
++		  const char **targets,
++		  int ntargets,
++		  int modes_per_line,
++		  char sign,
++		  char mode);
++	char *(*xchat_strip) (xchat_plugin *ph,
++	     const char *str,
++	     int len,
++	     int flags);
++	void (*xchat_free) (xchat_plugin *ph,
++	    void *ptr);
++};
++#endif
++
++
++
++xchat_hook *
++xchat_hook_command (xchat_plugin *ph,
++		    const char *name,
++		    int pri,
++		    int (*callback) (char *word[], char *word_eol[], void *user_data),
++		    const char *help_text,
++		    void *userdata);
++
++xchat_hook *
++xchat_hook_server (xchat_plugin *ph,
++		   const char *name,
++		   int pri,
++		   int (*callback) (char *word[], char *word_eol[], void *user_data),
++		   void *userdata);
++
++xchat_hook *
++xchat_hook_print (xchat_plugin *ph,
++		  const char *name,
++		  int pri,
++		  int (*callback) (char *word[], void *user_data),
++		  void *userdata);
++
++xchat_hook *
++xchat_hook_timer (xchat_plugin *ph,
++		  int timeout,
++		  int (*callback) (void *user_data),
++		  void *userdata);
++
++xchat_hook *
++xchat_hook_fd (xchat_plugin *ph,
++		int fd,
++		int flags,
++		int (*callback) (int fd, int flags, void *user_data),
++		void *userdata);
++
++void *
++xchat_unhook (xchat_plugin *ph,
++	      xchat_hook *hook);
++
++void
++xchat_print (xchat_plugin *ph,
++	     const char *text);
++
++void
++xchat_printf (xchat_plugin *ph,
++	      const char *format, ...);
++
++void
++xchat_command (xchat_plugin *ph,
++	       const char *command);
++
++void
++xchat_commandf (xchat_plugin *ph,
++		const char *format, ...);
++
++int
++xchat_nickcmp (xchat_plugin *ph,
++	       const char *s1,
++	       const char *s2);
++
++int
++xchat_set_context (xchat_plugin *ph,
++		   xchat_context *ctx);
++
++xchat_context *
++xchat_find_context (xchat_plugin *ph,
++		    const char *servname,
++		    const char *channel);
++
++xchat_context *
++xchat_get_context (xchat_plugin *ph);
++
++const char *
++xchat_get_info (xchat_plugin *ph,
++		const char *id);
++
++int
++xchat_get_prefs (xchat_plugin *ph,
++		 const char *name,
++		 const char **string,
++		 int *integer);
++
++xchat_list *
++xchat_list_get (xchat_plugin *ph,
++		const char *name);
++
++void
++xchat_list_free (xchat_plugin *ph,
++		 xchat_list *xlist);
++
++const char * const *
++xchat_list_fields (xchat_plugin *ph,
++		   const char *name);
++
++int
++xchat_list_next (xchat_plugin *ph,
++		 xchat_list *xlist);
++
++const char *
++xchat_list_str (xchat_plugin *ph,
++		xchat_list *xlist,
++		const char *name);
++
++int
++xchat_list_int (xchat_plugin *ph,
++		xchat_list *xlist,
++		const char *name);
++
++time_t
++xchat_list_time (xchat_plugin *ph,
++		 xchat_list *xlist,
++		 const char *name);
++
++void *
++xchat_plugingui_add (xchat_plugin *ph,
++		     const char *filename,
++		     const char *name,
++		     const char *desc,
++		     const char *version,
++		     char *reserved);
++
++void
++xchat_plugingui_remove (xchat_plugin *ph,
++			void *handle);
++
++int 
++xchat_emit_print (xchat_plugin *ph,
++		  const char *event_name, ...);
++
++char *
++xchat_gettext (xchat_plugin *ph,
++	       const char *msgid);
++
++void
++xchat_send_modes (xchat_plugin *ph,
++		  const char **targets,
++		  int ntargets,
++		  int modes_per_line,
++		  char sign,
++		  char mode);
++
++char *
++xchat_strip (xchat_plugin *ph,
++	     const char *str,
++	     int len,
++	     int flags);
++
++void
++xchat_free (xchat_plugin *ph,
++	    void *ptr);
++
++#if !defined(PLUGIN_C) && defined(WIN32)
++#ifndef XCHAT_PLUGIN_HANDLE
++#define XCHAT_PLUGIN_HANDLE (ph)
++#endif
++#define xchat_hook_command ((XCHAT_PLUGIN_HANDLE)->xchat_hook_command)
++#define xchat_hook_server ((XCHAT_PLUGIN_HANDLE)->xchat_hook_server)
++#define xchat_hook_print ((XCHAT_PLUGIN_HANDLE)->xchat_hook_print)
++#define xchat_hook_timer ((XCHAT_PLUGIN_HANDLE)->xchat_hook_timer)
++#define xchat_hook_fd ((XCHAT_PLUGIN_HANDLE)->xchat_hook_fd)
++#define xchat_unhook ((XCHAT_PLUGIN_HANDLE)->xchat_unhook)
++#define xchat_print ((XCHAT_PLUGIN_HANDLE)->xchat_print)
++#define xchat_printf ((XCHAT_PLUGIN_HANDLE)->xchat_printf)
++#define xchat_command ((XCHAT_PLUGIN_HANDLE)->xchat_command)
++#define xchat_commandf ((XCHAT_PLUGIN_HANDLE)->xchat_commandf)
++#define xchat_nickcmp ((XCHAT_PLUGIN_HANDLE)->xchat_nickcmp)
++#define xchat_set_context ((XCHAT_PLUGIN_HANDLE)->xchat_set_context)
++#define xchat_find_context ((XCHAT_PLUGIN_HANDLE)->xchat_find_context)
++#define xchat_get_context ((XCHAT_PLUGIN_HANDLE)->xchat_get_context)
++#define xchat_get_info ((XCHAT_PLUGIN_HANDLE)->xchat_get_info)
++#define xchat_get_prefs ((XCHAT_PLUGIN_HANDLE)->xchat_get_prefs)
++#define xchat_list_get ((XCHAT_PLUGIN_HANDLE)->xchat_list_get)
++#define xchat_list_free ((XCHAT_PLUGIN_HANDLE)->xchat_list_free)
++#define xchat_list_fields ((XCHAT_PLUGIN_HANDLE)->xchat_list_fields)
++#define xchat_list_str ((XCHAT_PLUGIN_HANDLE)->xchat_list_str)
++#define xchat_list_int ((XCHAT_PLUGIN_HANDLE)->xchat_list_int)
++#define xchat_list_time ((XCHAT_PLUGIN_HANDLE)->xchat_list_time)
++#define xchat_list_next ((XCHAT_PLUGIN_HANDLE)->xchat_list_next)
++#define xchat_plugingui_add ((XCHAT_PLUGIN_HANDLE)->xchat_plugingui_add)
++#define xchat_plugingui_remove ((XCHAT_PLUGIN_HANDLE)->xchat_plugingui_remove)
++#define xchat_emit_print ((XCHAT_PLUGIN_HANDLE)->xchat_emit_print)
++#define xchat_gettext ((XCHAT_PLUGIN_HANDLE)->xchat_gettext)
++#define xchat_send_modes ((XCHAT_PLUGIN_HANDLE)->xchat_send_modes)
++#define xchat_strip ((XCHAT_PLUGIN_HANDLE)->xchat_strip)
++#define xchat_free ((XCHAT_PLUGIN_HANDLE)->xchat_free)
++#endif
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/resource.h xchat-wdk/plugins/xtray/resource.h
+--- xchat-wdk.orig/plugins/xtray/resource.h	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/resource.h	2005-03-22 18:54:44 +0100
+@@ -0,0 +1,47 @@
++//{{NO_DEPENDENCIES}}
++// Microsoft Visual C++ generated include file.
++// Used by resource.rc
++//
++#define IDD_ALERTS                      104
++#define IDD_EVENTS                      105
++#define IDD_SETTINGS                    106
++#define IDD_ALERT                       107
++#define IDD_PREF                        108
++#define IDD_ABOUT                       109
++#define IDR_TRAY_MENU                   110
++#define ICO_XCHAT                       111
++#define ICO_BANNED                      112
++#define ICO_CHANMSG                     113
++#define ICO_DISCONNECTED                114
++#define ICO_HIGHLIGHT                   115
++#define ICO_KICKED                      116
++#define ICO_PMSG                        117
++#define ICO_SNOTICE                     118
++#define IDB_SD_LOGO                     119
++#define IDC_PREF_OK                     1014
++#define IDC_PREF_CANCEL                 1015
++#define IDC_PREF_APPLY                  1016
++#define IDC_AWAY_MSG                    1017
++#define IDC_ALERT_TIME                  1018
++#define IDC_TAB_CONTROL                 1019
++#define IDC_ALERT_HOTKEY                1020
++#define IDC_ALERT_MSG                   1021
++#define IDC_ALERT_HOTKEY_TEXT           1022
++#define IDC_ALERT_TIME_TEXT             1023
++#define ACT_EXIT                        40001
++#define ACT_SETTINGS                    40002
++#define ACT_AWAY                        40003
++#define ACT_BACK                        40004
++#define ACT_RESTORE                     40005
++#define IDC_STATIC                      -1
++
++// Next default values for new objects
++// 
++#ifdef APSTUDIO_INVOKED
++#ifndef APSTUDIO_READONLY_SYMBOLS
++#define _APS_NEXT_RESOURCE_VALUE        120
++#define _APS_NEXT_COMMAND_VALUE         40006
++#define _APS_NEXT_CONTROL_VALUE         1024
++#define _APS_NEXT_SYMED_VALUE           101
++#endif
++#endif
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/resource.rc xchat-wdk/plugins/xtray/resource.rc
+--- xchat-wdk.orig/plugins/xtray/resource.rc	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/resource.rc	2010-03-30 11:32:11 +0200
+@@ -0,0 +1,318 @@
++// Microsoft Visual C++ generated resource script.
++//
++#include "resource.h"
++
++#define APSTUDIO_READONLY_SYMBOLS
++/////////////////////////////////////////////////////////////////////////////
++//
++// Generated from the TEXTINCLUDE 2 resource.
++//
++#define APSTUDIO_HIDDEN_SYMBOLS
++#include "windows.h"
++#undef APSTUDIO_HIDDEN_SYMBOLS
++
++/////////////////////////////////////////////////////////////////////////////
++#undef APSTUDIO_READONLY_SYMBOLS
++
++/////////////////////////////////////////////////////////////////////////////
++// English (U.S.) resources
++
++#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
++#ifdef _WIN32
++LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
++#pragma code_page(1252)
++#endif //_WIN32
++
++/////////////////////////////////////////////////////////////////////////////
++//
++// Dialog
++//
++
++IDD_EVENTS DIALOGEX 8, 20, 216, 143
++STYLE DS_SETFONT | DS_SETFOREGROUND | WS_CHILD
++FONT 8, "Tahoma", 0, 0, 0x0
++BEGIN
++    GROUPBOX        "X-Chat Events",IDC_STATIC,5,5,205,77
++    CONTROL         "Server Notice",9,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
++                    145,32,55,10
++    CONTROL         "Topic Change",3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
++                    145,18,55,10
++    CONTROL         "Banned",4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,18,
++                    49,10
++    CONTROL         "Kicked",5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,32,
++                    49,10
++    CONTROL         "Killed",8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,46,
++                    49,10
++    CONTROL         "Disconnect",10,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,
++                    60,49,10
++    CONTROL         "Private Message",7,"Button",BS_AUTOCHECKBOX | 
++                    WS_TABSTOP,70,18,69,10
++    CONTROL         "CTCP",6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,32,69,
++                    10
++    CONTROL         "Invite",2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,46,
++                    69,10
++    CONTROL         "Highlight",1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,70,
++                    60,69,10
++END
++
++IDD_SETTINGS DIALOGEX 8, 20, 216, 143
++STYLE DS_SETFONT | WS_CHILD
++FONT 8, "Tahoma", 0, 0, 0x0
++BEGIN
++    GROUPBOX        "Options",IDC_STATIC,5,5,205,135
++    CONTROL         "Auto away on minimize",11,"Button",BS_AUTOCHECKBOX | 
++                    WS_TABSTOP,16,60,100,10
++    CONTROL         "Minimize X-Chat to the system tray",12,"Button",
++                    BS_AUTOCHECKBOX | WS_TABSTOP,16,18,133,10
++    CONTROL         "Minimize to the tray instead of closing",17,"Button",
++                    BS_AUTOCHECKBOX | WS_TABSTOP,16,32,174,9
++    EDITTEXT        IDC_AWAY_MSG,33,86,169,50,ES_AUTOHSCROLL
++    LTEXT           "Away Msg:",IDC_STATIC,27,72,35,8
++    CONTROL         "Remove X-Chat from the taskbar ( Only show in tray )",
++                    20,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,46,191,9
++END
++
++IDD_ALERT DIALOGEX 0, 0, 151, 28
++STYLE DS_LOCALEDIT | DS_SETFONT | DS_NOIDLEMSG | DS_CENTER | WS_CAPTION | 
++    WS_SYSMENU
++EXSTYLE WS_EX_NOPARENTNOTIFY | WS_EX_ACCEPTFILES | WS_EX_TOOLWINDOW
++CAPTION "Event Name"
++FONT 8, "Tahoma", 0, 0, 0x1
++BEGIN
++    LTEXT           "Event Text",IDC_ALERT_MSG,3,0,147,27
++END
++
++IDD_PREF DIALOGEX 0, 0, 233, 190
++STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | 
++    WS_SYSMENU
++CAPTION "X-Tray Preferences"
++FONT 8, "Tahoma", 0, 0, 0x0
++BEGIN
++    DEFPUSHBUTTON   "Ok",IDC_PREF_OK,57,173,50,14
++    PUSHBUTTON      "Cancel",IDC_PREF_CANCEL,115,173,50,14
++    PUSHBUTTON      "Apply",IDC_PREF_APPLY,175,173,50,14
++    CONTROL         "Tab1",IDC_TAB_CONTROL,"SysTabControl32",0x0,7,7,218,159
++END
++
++IDD_ABOUT DIALOGEX 8, 20, 216, 143
++STYLE DS_SETFONT | WS_CHILD
++FONT 8, "Tahoma", 0, 0, 0x0
++BEGIN
++    CONTROL         119,IDC_STATIC,"Static",SS_BITMAP | SS_SUNKEN | 
++                    WS_BORDER,3,6,88,81
++    CTEXT           "X-Tray\r\nBy: Michael Hotaling\r\n www.SinisterDevelopments.com",
++                    IDC_STATIC,95,33,118,30
++    LTEXT           "Folken\r\nBasket\r\nDonatzsky\r\nDaemon404",IDC_STATIC,
++                    15,103,64,33
++    GROUPBOX        "Special Thanks To:",IDC_STATIC,3,91,89,50
++    GROUPBOX        "Version Information:",IDC_STATIC,101,92,109,49
++    LTEXT           "1.2.3 PR",IDC_STATIC,170,105,33,8,0,WS_EX_RIGHT
++    LTEXT           "Compiled On: ",IDC_STATIC,110,116,46,8
++    LTEXT           "11/06/05",IDC_STATIC,174,117,30,8
++    LTEXT           "Version Number:",IDC_STATIC,110,105,54,8
++END
++
++IDD_ALERTS DIALOGEX 8, 20, 216, 143
++STYLE DS_SETFONT | WS_CHILD
++FONT 8, "Tahoma", 0, 0, 0x0
++BEGIN
++    GROUPBOX        "Alerts",IDC_STATIC,5,5,205,117
++    CONTROL         "Only show alerts while minimized",14,"Button",
++                    BS_AUTOCHECKBOX | WS_TABSTOP,27,46,117,10
++    CONTROL         "Use tray alerts to notify me about events",13,"Button",
++                    BS_AUTOCHECKBOX | WS_TABSTOP,16,32,152,10
++    CONTROL         "Use window instead of balloons",15,"Button",
++                    BS_AUTOCHECKBOX | WS_TABSTOP,27,60,141,11
++    EDITTEXT        IDC_ALERT_TIME,137,101,61,12,ES_AUTOHSCROLL | ES_NUMBER,
++                    WS_EX_RIGHT
++    LTEXT           "Show alert for x seconds:",IDC_ALERT_TIME_TEXT,40,103,
++                    83,9
++    CONTROL         "Alert Hotkey",IDC_ALERT_HOTKEY,"msctls_hotkey32",
++                    WS_BORDER | WS_TABSTOP,137,74,61,13
++    LTEXT           "Close all alerts hotkey:",IDC_ALERT_HOTKEY_TEXT,39,75,
++                    76,10
++    CONTROL         "Leave alerts open indefinately",16,"Button",
++                    BS_AUTOCHECKBOX | WS_TABSTOP,27,88,115,11
++    CONTROL         "Blink Icon to alert me about events",18,"Button",
++                    BS_AUTOCHECKBOX | WS_TABSTOP,16,18,127,10
++END
++
++
++/////////////////////////////////////////////////////////////////////////////
++//
++// DESIGNINFO
++//
++
++#ifdef APSTUDIO_INVOKED
++GUIDELINES DESIGNINFO 
++BEGIN
++    IDD_EVENTS, DIALOG
++    BEGIN
++        BOTTOMMARGIN, 56
++    END
++
++    IDD_SETTINGS, DIALOG
++    BEGIN
++        BOTTOMMARGIN, 66
++    END
++
++    IDD_ALERT, DIALOG
++    BEGIN
++        RIGHTMARGIN, 150
++        BOTTOMMARGIN, 26
++    END
++
++    IDD_PREF, DIALOG
++    BEGIN
++        LEFTMARGIN, 7
++        RIGHTMARGIN, 232
++        TOPMARGIN, 7
++        BOTTOMMARGIN, 176
++    END
++
++    IDD_ABOUT, DIALOG
++    BEGIN
++        LEFTMARGIN, 7
++        RIGHTMARGIN, 209
++        TOPMARGIN, 7
++        BOTTOMMARGIN, 136
++    END
++
++    IDD_ALERTS, DIALOG
++    BEGIN
++        LEFTMARGIN, 7
++        RIGHTMARGIN, 208
++        TOPMARGIN, 7
++        BOTTOMMARGIN, 136
++    END
++END
++#endif    // APSTUDIO_INVOKED
++
++
++#ifdef APSTUDIO_INVOKED
++/////////////////////////////////////////////////////////////////////////////
++//
++// TEXTINCLUDE
++//
++
++1 TEXTINCLUDE 
++BEGIN
++    "resource.h\0"
++END
++
++2 TEXTINCLUDE 
++BEGIN
++    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
++    "#include ""windows.h""\r\n"
++    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
++    "\0"
++END
++
++3 TEXTINCLUDE 
++BEGIN
++    "xtray.h\0"
++END
++
++4 TEXTINCLUDE 
++BEGIN
++    "\r\n"
++    "\0"
++END
++
++#endif    // APSTUDIO_INVOKED
++
++
++/////////////////////////////////////////////////////////////////////////////
++//
++// Version
++//
++
++VS_VERSION_INFO VERSIONINFO
++ FILEVERSION 1,2,3,0
++ PRODUCTVERSION 1,2,3,0
++ FILEFLAGSMASK 0x3fL
++#ifdef _DEBUG
++ FILEFLAGS 0x1L
++#else
++ FILEFLAGS 0x0L
++#endif
++ FILEOS 0x40004L
++ FILETYPE 0x2L
++ FILESUBTYPE 0x0L
++BEGIN
++    BLOCK "StringFileInfo"
++    BEGIN
++        BLOCK "040904b0"
++        BEGIN
++            VALUE "CompanyName", "SinisterDevelopments"
++            VALUE "FileDescription", "X-Tray"
++            VALUE "FileVersion", "1, 2, 3, 0"
++            VALUE "InternalName", "X-Tray"
++            VALUE "LegalCopyright", "Copyright © 2005"
++            VALUE "OriginalFilename", "X-Tray.dll"
++            VALUE "ProductName", "X-Tray - X-Chat Win32 System Tray Plugin"
++            VALUE "ProductVersion", "1, 2, 3, 0"
++        END
++    END
++    BLOCK "VarFileInfo"
++    BEGIN
++        VALUE "Translation", 0x409, 1200
++    END
++END
++
++
++/////////////////////////////////////////////////////////////////////////////
++//
++// Menu
++//
++
++IDR_TRAY_MENU MENU 
++BEGIN
++    POPUP "TRAY"
++    BEGIN
++        MENUITEM "Restore",                     ACT_RESTORE
++        MENUITEM SEPARATOR
++        MENUITEM "Away",                        65535
++        MENUITEM "Settings",                    ACT_SETTINGS
++        MENUITEM SEPARATOR
++        MENUITEM "Exit",                        ACT_EXIT
++    END
++END
++
++
++/////////////////////////////////////////////////////////////////////////////
++//
++// Icon
++//
++
++// Icon with lowest ID value placed first to ensure application icon
++// remains consistent on all systems.
++ICO_XCHAT               ICON                    "icons\\xchat.ico"
++ICO_BANNED              ICON                    "icons\\banned.ico"
++ICO_CHANMSG             ICON                    "icons\\chan_msg.ico"
++ICO_HIGHLIGHT           ICON                    "icons\\highlight.ico"
++ICO_KICKED              ICON                    "icons\\kicked.ico"
++ICO_PMSG                ICON                    "icons\\priv_msg-1-2-2.ico"
++ICO_SNOTICE             ICON                    "icons\\server_notice.ico"
++ICO_DISCONNECTED        ICON                    "icons\\disconnected.ico"
++
++/////////////////////////////////////////////////////////////////////////////
++//
++// Bitmap
++//
++
++IDB_SD_LOGO             BITMAP                  "bitmaps\\sd.bmp"
++#endif    // English (U.S.) resources
++/////////////////////////////////////////////////////////////////////////////
++
++
++
++#ifndef APSTUDIO_INVOKED
++/////////////////////////////////////////////////////////////////////////////
++//
++// Generated from the TEXTINCLUDE 3 resource.
++//
++xtray.h
++/////////////////////////////////////////////////////////////////////////////
++#endif    // not APSTUDIO_INVOKED
++
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/sdAlerts.cpp xchat-wdk/plugins/xtray/sdAlerts.cpp
+--- xchat-wdk.orig/plugins/xtray/sdAlerts.cpp	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/sdAlerts.cpp	2005-07-16 20:57:08 +0200
+@@ -0,0 +1,109 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#include <windows.h>
++#include <winuser.h>
++#include <stdio.h>
++#include "utility.h"
++#include "resource.h"
++#include "sdAlerts.h"
++
++int g_iAlerts = 0;
++
++void sdSystemAlert(HINSTANCE hModule, UINT uiDialog, char *szMsg, char *szName, unsigned int iTime)
++{
++	TCHAR wszMsg[256];
++	TCHAR wszName[64];
++
++	HWND hDialog;
++	RECT rcWorkArea, rcDlg;
++	int ixPos, iyPos;
++	int iNumPerCol;
++	
++	hDialog = CreateDialog(hModule, MAKEINTRESOURCE(uiDialog), NULL, (DLGPROC)sdAlertProc);
++
++	SystemParametersInfo(SPI_GETWORKAREA, 0, &rcWorkArea, 0);
++	GetWindowRect(hDialog, &rcDlg);
++
++	iNumPerCol = ((rcWorkArea.bottom - rcWorkArea.top) / (rcDlg.bottom - rcDlg.top));
++	ixPos = rcWorkArea.right - (rcDlg.right - rcDlg.left) + 1;
++	iyPos = rcWorkArea.bottom - (rcDlg.bottom - rcDlg.top);
++
++	if((g_iAlerts >= iNumPerCol) && (iNumPerCol > 0))
++	{
++		ixPos -= ((g_iAlerts / iNumPerCol) * (rcDlg.right - rcDlg.left));
++		iyPos -= ((g_iAlerts - (iNumPerCol * (g_iAlerts / iNumPerCol))) * (rcDlg.bottom - rcDlg.top));
++	}
++	else
++	{
++		iyPos -= (g_iAlerts * (rcDlg.bottom - rcDlg.top));
++	}
++	SetWindowPos(hDialog, HWND_TOPMOST, ixPos, iyPos, 0, 0, SWP_NOSIZE | SWP_NOACTIVATE);
++	
++	ConvertString(szName, wszName, 64);
++	ConvertString(szMsg, wszMsg, 256);
++
++	SetWindowText(hDialog, wszName);
++	SetDlgItemText(hDialog, IDC_ALERT_MSG, wszMsg);
++	ShowWindow(hDialog, SW_SHOWNA);
++
++	if(iTime > 0)
++	{
++		SetTimer(hDialog, 1, iTime, NULL);
++	}
++
++	g_iAlerts++;
++}
++
++void sdCloseAlerts()
++{
++	PostMessage(HWND_BROADCAST, RegisterWindowMessage(TEXT("xTray:CloseAllAlertWindows")), 0, 0);
++}
++
++LRESULT CALLBACK sdAlertProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
++{
++	switch(msg)
++	{
++	case WM_CLOSE:
++		if(g_iAlerts > 0){ g_iAlerts--; }
++		DestroyWindow(hwnd);
++		return TRUE;
++		break;
++	case WM_TIMER:
++		if(g_iAlerts > 0){ g_iAlerts--; }
++		AnimateWindow(hwnd, 600, AW_SLIDE | AW_HIDE | AW_VER_POSITIVE);
++		DestroyWindow(hwnd);
++		return TRUE;
++		break;
++	default:
++		if(msg == RegisterWindowMessage(TEXT("xTray:CloseAllAlertWindows")))
++		{
++			if(g_iAlerts > 0){ g_iAlerts--; }
++			DestroyWindow(hwnd);
++			return TRUE;
++		}
++		break;
++	}
++
++	return FALSE;
++}
++
++int sdAlertNum()
++{
++	return g_iAlerts;
++}
+\ No newline at end of file
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/sdAlerts.h xchat-wdk/plugins/xtray/sdAlerts.h
+--- xchat-wdk.orig/plugins/xtray/sdAlerts.h	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/sdAlerts.h	2005-05-28 18:38:16 +0200
+@@ -0,0 +1,26 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#ifndef _H_SDALERTS_H
++#define _H_SDALERTS_H
++
++void				sdSystemAlert	(HINSTANCE, UINT, char *, char *, UINT);
++LRESULT CALLBACK	sdAlertProc		(HWND, UINT, WPARAM, LPARAM);
++int					sdAlertNum		();
++void				sdCloseAlerts	();
++#endif
+\ No newline at end of file
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/sdTray.cpp xchat-wdk/plugins/xtray/sdTray.cpp
+--- xchat-wdk.orig/plugins/xtray/sdTray.cpp	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/sdTray.cpp	2005-07-16 20:58:58 +0200
+@@ -0,0 +1,207 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++#define _WIN32_IE 0x601
++#include <windows.h>
++#include <stdio.h>
++#include <tchar.h>
++#include "sdTray.h"
++#include "utility.h"
++
++HANDLE hThread;
++iBlink *tData	= NULL;
++
++int AddIcon(HWND hwnd, UINT id, HICON hicon, char *szTip, unsigned short flags, unsigned int cbMsg)
++{
++	NOTIFYICONDATA nidata;
++
++	nidata.cbSize			= NOTIFYICONDATA_V2_SIZE;
++	nidata.hIcon			= hicon;
++	nidata.hWnd				= hwnd;
++	nidata.uCallbackMessage = cbMsg;
++	nidata.uFlags			= flags;
++	nidata.uID				= id;
++
++	if(szTip != NULL)
++	{
++		TCHAR *szTemp = new TCHAR[64];
++
++		ConvertString(szTip, szTemp, 64);
++		_tcsncpy(nidata.szTip, szTemp, 64);
++
++		delete[] szTemp;
++	}
++
++	return Shell_NotifyIcon(NIM_ADD, &nidata);
++}
++
++int RemoveIcon(HWND hwnd, UINT id)
++{
++	if(hThread != NULL)
++	{
++		TerminateThread(hThread, 0);
++		hThread = NULL;
++
++		delete tData;
++	}
++
++	NOTIFYICONDATA nidata;
++
++	nidata.cbSize = NOTIFYICONDATA_V2_SIZE;
++	nidata.hWnd   = hwnd;
++	nidata.uID    = id;
++
++	return Shell_NotifyIcon(NIM_DELETE, &nidata);
++}
++
++int SetIcon(HWND hwnd, UINT id, HICON hicon)
++{
++	NOTIFYICONDATA nidata;
++
++	nidata.cbSize = NOTIFYICONDATA_V2_SIZE;
++	nidata.hWnd   = hwnd;
++	nidata.uID    = id;
++	nidata.hIcon  = hicon;
++	nidata.uFlags = NIF_ICON;
++
++	return Shell_NotifyIcon(NIM_MODIFY, &nidata);
++}
++
++int SetTooltip(HWND hwnd, UINT id, char *szTip)
++{
++	NOTIFYICONDATA nidata;
++
++	nidata.cbSize = NOTIFYICONDATA_V2_SIZE;
++	nidata.hWnd   = hwnd;
++	nidata.uID    = id;
++	nidata.uFlags = NIF_TIP;
++
++	if(szTip != NULL)
++	{
++		TCHAR *szTemp = new TCHAR[64];
++		ConvertString(szTip, szTemp, 64);
++		_tcsncpy(nidata.szTip, szTemp, 64);
++		delete[] szTemp;
++	}
++
++	return Shell_NotifyIcon(NIM_MODIFY, &nidata);
++}
++
++int ShowBalloon(HWND hwnd, UINT id, char *szInfo, char *szTitle, UINT time, UINT infoFlags)
++{
++	NOTIFYICONDATA nidata;
++
++	nidata.cbSize	= NOTIFYICONDATA_V2_SIZE;
++	nidata.hWnd		= hwnd;
++	nidata.uID		= id;
++	nidata.uFlags	= NIF_INFO;
++	nidata.dwInfoFlags = infoFlags;
++
++	if(time > 0)
++		nidata.uTimeout = time;
++	else
++		nidata.uTimeout = 500000;
++
++	if(szInfo != NULL)
++	{
++		TCHAR *szTemp = new TCHAR[255];
++
++		ConvertString(szInfo, szTemp, 251);
++		szTemp[250] = 0;
++		
++		if(strlen(szInfo) > 255)
++		{
++			_sntprintf(szTemp, 255, _T("%s..."), szTemp);
++		}
++		_tcsncpy(nidata.szInfo, szTemp, 255);
++
++		delete[] szTemp;
++	}
++	if(szTitle != NULL)
++	{
++		TCHAR *wszTitle = new TCHAR[64];
++		ConvertString(szTitle, wszTitle, 64);
++		_tcsncpy(nidata.szInfoTitle, wszTitle, 64);
++		delete[] wszTitle;
++	}
++
++	return Shell_NotifyIcon(NIM_MODIFY, &nidata);
++}
++
++
++DWORD WINAPI BlinkThread(LPVOID lpParam)
++{
++	NOTIFYICONDATA nidata;
++
++	nidata.cbSize = NOTIFYICONDATA_V2_SIZE;
++	nidata.hWnd   = tData->hwnd;
++	nidata.uID    = tData->id;
++	nidata.uFlags = NIF_ICON;
++
++	for(UINT i = 0; i < tData->num; i++)
++	{
++		nidata.hIcon = tData->hBlink;
++		Shell_NotifyIcon(NIM_MODIFY, &nidata);
++
++		Sleep(tData->time);
++
++		nidata.hIcon = tData->hBase;
++		Shell_NotifyIcon(NIM_MODIFY, &nidata);
++
++		Sleep(tData->time);
++	}
++
++	delete tData;
++	hThread = NULL;
++
++	return 0;
++}
++
++int BlinkIcon(HWND hwnd, UINT id, HICON hBase, HICON hBlink, UINT time, UINT num)
++{
++	if(hThread != NULL)
++	{
++		StopBlink(hwnd, id, hBase);
++	}
++
++	DWORD dwThreadID;
++	tData = new iBlink;
++
++	tData->hwnd		= hwnd;
++	tData->id		= id;
++	tData->hBase	= hBase;
++	tData->hBlink	= hBlink;
++	tData->time		= time;
++	tData->num		= num;
++
++	hThread = CreateThread(NULL, 0, BlinkThread, tData, 0, &dwThreadID);
++
++	return 0;
++}
++
++void StopBlink(HWND hwnd, UINT id, HICON hBase)
++{
++	if(hThread != NULL)
++	{
++		TerminateThread(hThread, 0);
++		hThread = NULL;
++
++		delete tData;
++	}
++
++	SetIcon(hwnd, id, hBase);
++}
+\ No newline at end of file
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/sdTray.h xchat-wdk/plugins/xtray/sdTray.h
+--- xchat-wdk.orig/plugins/xtray/sdTray.h	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/sdTray.h	2005-05-28 19:37:18 +0200
+@@ -0,0 +1,39 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#ifndef _H_SDTRAY_H
++#define _H_SDTRAY_H
++
++int				AddIcon		(HWND, UINT, HICON, char *, unsigned short, UINT);
++int				ShowBalloon	(HWND, UINT, char *, char *, UINT, UINT);
++int				BlinkIcon	(HWND, UINT, HICON, HICON, UINT, UINT);
++int				SetTooltip	(HWND, UINT, char *);
++int				SetIcon		(HWND, UINT, HICON);
++void			StopBlink	(HWND, UINT, HICON);
++int				RemoveIcon	(HWND, UINT);
++
++typedef struct IBLINK
++{
++	HICON hBase;
++	HICON hBlink;
++	HWND hwnd;
++	UINT id;
++	UINT time;
++	UINT num;
++}iBlink;
++#endif
+\ No newline at end of file
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/utility.cpp xchat-wdk/plugins/xtray/utility.cpp
+--- xchat-wdk.orig/plugins/xtray/utility.cpp	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/utility.cpp	2010-03-30 12:39:21 +0200
+@@ -0,0 +1,568 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#include <windows.h>
++#include <stdio.h>
++#include <commctrl.h>
++#include <tchar.h>
++#include "utility.h"
++#include "plugin.h"
++#include "xtray.h"
++#include "callbacks.h"
++#include "resource.h"
++
++TCHAR BACKUP_INI_FILE[] = _T(".\\plugins\\config\\xTray.ini");
++struct HOTKEY g_hHotKey;
++
++void SavePrefs(int iDlg)
++{
++	/**************************************************************************************************/
++	/********** allocate space for our string, and then set it to the currently logged on user ********/
++	/**************************************************************************************************/
++	DWORD dBuff = 257;
++	TCHAR szUser[257];
++
++	GetUserName(szUser, &dBuff);
++
++	/**************************************************************************************************/
++	/*********************** Test if the file exists, If it doesn't, Create It ************************/
++	/**************************************************************************************************/
++	TCHAR XTRAY_INI_FILE[1024];
++	
++#ifdef UNICODE
++	char temp[1024];
++    TCHAR TEMP_INI_FILE[1024];
++	
++	_snprintf(temp, 1024, "%s\\xtray.ini", xchat_get_info(ph, "xchatdir"));
++	ConvertString(temp, TEMP_INI_FILE, 1024);
++
++	// ok this one is really ugly
++	// it checks to see if the file exists in two locations
++	// X-Chat default config dir, if that fails it trys xchat\plugins\config
++	// if neither one exists it tries to create it in
++	// X-Chat default config dir, if that fails it trys xchat\plugins\config
++	// In either case it writes \xFF\xFE to the file ( on creation )
++	// so that we can save unicode away messages WritePrivateProfile doesn't 
++	// do this for us, though I think it really should
++
++	if(FileExists(TEMP_INI_FILE))
++	{
++		_tcscpy(XTRAY_INI_FILE, TEMP_INI_FILE);
++	}
++	else
++	{
++		if(FileExists(BACKUP_INI_FILE))
++		{
++			_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);
++		}
++		else
++		{
++			HANDLE xTemp;
++			DWORD dwBytesTemp;
++
++			if(xTemp = CreateFile(TEMP_INI_FILE, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL))
++			{
++				if(GetLastError() != ERROR_ALREADY_EXISTS)
++				{
++					WriteFile(xTemp, _T("\xFF\xFE"), 4, &dwBytesTemp, NULL);
++				}
++				CloseHandle(xTemp);
++			}
++
++			if(FileExists(TEMP_INI_FILE))
++			{
++				_tcscpy(XTRAY_INI_FILE, TEMP_INI_FILE);
++			}
++			else
++			{
++				HANDLE xBackup;
++				DWORD dwBytesBackup;
++
++				if(xBackup = CreateFile(TEMP_INI_FILE, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL))
++				{
++					if(GetLastError() != ERROR_ALREADY_EXISTS)
++					{
++						WriteFile(xBackup, _T("\xFF\xFE"), 4, &dwBytesBackup, NULL);
++					}
++
++					CloseHandle(xBackup);
++				}
++
++				if(FileExists(BACKUP_INI_FILE))
++				{
++					_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);
++				}
++			}
++		}
++	}
++
++#else
++	_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);
++#endif
++
++	WritePrivateProfileInt(szUser, _T("SETTINGS"),		g_dwPrefs,		XTRAY_INI_FILE);
++	WritePrivateProfileInt(szUser, _T("AOT"),			g_iTime,		XTRAY_INI_FILE);
++	WritePrivateProfileInt(szUser, _T("KEY"),			g_hHotKey.key,	XTRAY_INI_FILE);
++	WritePrivateProfileInt(szUser, _T("MOD"),			g_hHotKey.mod,	XTRAY_INI_FILE);
++	WritePrivateProfileString(szUser, _T("AWAY"),		g_szAway,		XTRAY_INI_FILE);
++}
++
++void LoadPrefs()
++{
++	/**************************************************************************************************/
++	/*********************** Our Settings Section *****************************************************/
++	/**************************************************************************************************/
++	DWORD dBuff = 257;
++	TCHAR szUser[257];
++
++	GetUserName(szUser, &dBuff);
++
++	/**************************************************************************************************/
++	/*********************** Test if the file exists, If it doesn't, Create It ************************/
++	/**************************************************************************************************/
++	TCHAR XTRAY_INI_FILE[1024];
++
++#ifdef UNICODE
++	char temp[1024];
++	TCHAR TEMP_INI_FILE[1024];
++
++	_snprintf(temp, 1024, "%s\\xtray.ini", xchat_get_info(ph, "xchatdir"));
++	ConvertString(temp, TEMP_INI_FILE, 1024);
++
++	if(FileExists(TEMP_INI_FILE))
++	{
++		_tcscpy(XTRAY_INI_FILE, TEMP_INI_FILE);
++	}
++	else
++	{
++		if(FileExists(BACKUP_INI_FILE))
++		{
++			_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);
++		}
++		else
++		{
++			HANDLE xTemp;
++			DWORD dwBytesTemp;
++
++			if(xTemp = CreateFile(TEMP_INI_FILE, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL))
++			{
++				if(GetLastError() != ERROR_ALREADY_EXISTS)
++				{
++					WriteFile(xTemp, _T("\xFF\xFE"), 4, &dwBytesTemp, NULL);
++				}
++
++				CloseHandle(xTemp);
++			}
++
++			if(FileExists(TEMP_INI_FILE))
++			{
++				_tcscpy(XTRAY_INI_FILE, TEMP_INI_FILE);
++			}
++			else
++			{
++				HANDLE xBackup;
++				DWORD dwBytesBackup;
++
++				if(xBackup = CreateFile(TEMP_INI_FILE, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL))
++				{
++					if(GetLastError() != ERROR_ALREADY_EXISTS)
++					{
++						WriteFile(xBackup, _T("\xFF\xFE"), 4, &dwBytesBackup, NULL);
++					}
++
++					CloseHandle(xBackup);
++				}
++
++				if(FileExists(BACKUP_INI_FILE))
++				{
++					_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);
++				}
++			}
++		}
++	}
++
++#else
++	_tcscpy(XTRAY_INI_FILE, BACKUP_INI_FILE);
++#endif
++
++	/**************************************************************************************************/
++	/*************************** Get the value for each of our preferances ****************************/
++	/**************************************************************************************************/
++	g_dwPrefs = GetPrivateProfileInt(szUser, _T("SETTINGS"),	0,  XTRAY_INI_FILE);
++
++	// backwards compatability
++	// also allows us to set defaults if its a new installation
++	if(g_dwPrefs == 0)
++	{
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("HILIGHT"),		1,  XTRAY_INI_FILE)<<1);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("INVITE"),		1,  XTRAY_INI_FILE)<<2);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("TOPIC"),		1,  XTRAY_INI_FILE)<<3);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("BANNED"),		1,  XTRAY_INI_FILE)<<4);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("KICKED"),		1,  XTRAY_INI_FILE)<<5);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("CTCP"),		1,  XTRAY_INI_FILE)<<6);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("PMSG"),		1,  XTRAY_INI_FILE)<<7);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("KILLED"),		1,  XTRAY_INI_FILE)<<8);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("NOTICE"),		1,  XTRAY_INI_FILE)<<9);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("DISCONNECT"),	1,  XTRAY_INI_FILE)<<10);
++
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("AOM"),			0,  XTRAY_INI_FILE)<<11);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("TOT"),			1,  XTRAY_INI_FILE)<<12);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("AMAE"),		1,  XTRAY_INI_FILE)<<13);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("OSBWM"),		0,  XTRAY_INI_FILE)<<14);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("UWIOB"),		0,  XTRAY_INI_FILE)<<15);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("KAOI"),		0,  XTRAY_INI_FILE)<<16);
++		g_dwPrefs	|= (GetPrivateProfileInt(szUser, _T("MIOC"),		0,  XTRAY_INI_FILE)<<17);
++	}
++	
++	g_hHotKey.key	= GetPrivateProfileInt(szUser, _T("KEY"),	84, XTRAY_INI_FILE);
++	g_hHotKey.mod	= GetPrivateProfileInt(szUser, _T("MOD"),	(MOD_CONTROL | MOD_SHIFT),  XTRAY_INI_FILE);
++	g_iTime			= GetPrivateProfileInt(szUser, _T("AOT"),	5,  XTRAY_INI_FILE);
++
++	GetPrivateProfileString(szUser, _T("AWAY"), _T(""),	g_szAway, 1024, XTRAY_INI_FILE);
++	
++	/**************************************************************************************************/
++	/******************************** Register our hotkey with windows ********************************/
++	/**************************************************************************************************/
++	if(g_dwPrefs & (1<<PREF_UWIOB))
++	{
++		RegisterHotKey(g_hHotkeyWnd, 1, g_hHotKey.mod, g_hHotKey.key);
++	}
++}
++
++void CheckPrefs(HWND hwnd, int iDlg)
++{
++	/**************************************************************************************************/
++	/**************** save the preferances based on the checkmarks/options ****************************/
++	/**************************************************************************************************/
++	switch(iDlg)
++	{
++	case IDD_EVENTS:
++		{
++			SetOption(hwnd, CHAN_HILIGHT,		CHAN_HILIGHT);
++			SetOption(hwnd, CHAN_INVITE,		CHAN_INVITE);
++			SetOption(hwnd, CHAN_TOPIC_CHANGE,	CHAN_TOPIC_CHANGE);
++			SetOption(hwnd, CHAN_BANNED,		CHAN_BANNED);
++			SetOption(hwnd, CHAN_KICKED,		CHAN_KICKED);
++			SetOption(hwnd, CTCP_GENERIC,		CTCP_GENERIC);
++			SetOption(hwnd, PMSG_RECEIVE,		PMSG_RECEIVE);
++			SetOption(hwnd, SERV_KILLED,		SERV_KILLED);
++			SetOption(hwnd, SERV_NOTICE,		SERV_NOTICE);
++			SetOption(hwnd, SERV_DISCONNECT,	SERV_DISCONNECT);
++		}
++		break;
++	case IDD_ALERTS:
++		{
++			SetOption(hwnd, PREF_AMAE,	PREF_AMAE);
++			SetOption(hwnd, PREF_OSBWM,	PREF_OSBWM);
++			SetOption(hwnd, PREF_UWIOB,	PREF_UWIOB);
++			SetOption(hwnd, PREF_KAOI,	PREF_KAOI);
++			SetOption(hwnd, PREF_BLINK,	PREF_BLINK);
++
++			/**************************************************************************/
++			/**************************************************************************/
++			/**************************************************************************/
++			TCHAR tTime[512];
++
++			GetWindowText(GetDlgItem(hwnd, IDC_ALERT_TIME), tTime, 511);
++			
++			g_iTime = _tstoi(tTime);
++			
++			/**************************************************************************/
++			/**************** Get our Hotkey and save it                     **********/
++			/**************** then remove the old hotkey and add the new one **********/
++			/**************************************************************************/
++			DWORD hHotkey;
++			hHotkey = SendDlgItemMessage(hwnd, IDC_ALERT_HOTKEY, HKM_GETHOTKEY, 0, 0);
++			
++			g_hHotKey.key = LOBYTE(hHotkey);
++			g_hHotKey.mod = HIBYTE(hHotkey);
++			
++			if(IsDlgButtonChecked(hwnd, PREF_UWIOB) == BST_CHECKED)
++			{
++				UnregisterHotKey(g_hHotkeyWnd, 1);
++				RegisterHotKey(g_hHotkeyWnd, 1, g_hHotKey.mod, g_hHotKey.key);
++			}
++			else
++			{
++				UnregisterHotKey(g_hHotkeyWnd, 1);
++			}
++
++			/*************************************************************************/
++			/*********** Get and save the away msg and alert time ********************/
++			/*************************************************************************/
++		}
++		break;
++	case IDD_SETTINGS:
++		{
++			SetOption(hwnd, PREF_AOM, PREF_AOM);
++			SetOption(hwnd, PREF_TOT, PREF_TOT);
++			SetOption(hwnd, PREF_MIOC, PREF_MIOC);
++			SetOption(hwnd, PREF_DNSIT, PREF_DNSIT);
++
++			GetDlgItemText(hwnd, IDC_AWAY_MSG, g_szAway, 511);
++
++			if(g_dwPrefs & (1<<PREF_DNSIT))
++			{
++				DWORD dwStyle;
++				dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE);
++				dwStyle |= (1<<WS_CHILD);
++				SetWindowLong(g_hXchatWnd, GWL_STYLE, dwStyle);
++#ifdef _WIN64
++				SetWindowLong(g_hXchatWnd, GWLP_HWNDPARENT, (long)g_hHotkeyWnd);
++#else
++				SetWindowLong(g_hXchatWnd, GWL_HWNDPARENT, (long)g_hHotkeyWnd);
++#endif
++			}
++			else
++			{
++				DWORD dwStyle;
++				dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE);
++				dwStyle &= ~(1<<WS_CHILD);
++				SetWindowLong(g_hXchatWnd, GWL_STYLE, dwStyle);
++#ifdef _WIN64
++				SetWindowLong(g_hXchatWnd, GWLP_HWNDPARENT, NULL);
++#else
++				SetWindowLong(g_hXchatWnd, GWL_HWNDPARENT, NULL);
++#endif
++			}
++		}
++		break;
++	} 
++}
++
++void SetDialog(HWND hwnd, int iDlg)
++{
++	switch(iDlg)
++	{
++	case IDD_EVENTS:
++		{
++			SetCheck(hwnd, CHAN_HILIGHT,		CHAN_HILIGHT);
++			SetCheck(hwnd, CHAN_INVITE,			CHAN_INVITE);
++			SetCheck(hwnd, CHAN_TOPIC_CHANGE,	CHAN_TOPIC_CHANGE);
++			SetCheck(hwnd, CHAN_BANNED,			CHAN_BANNED);
++			SetCheck(hwnd, CHAN_KICKED,			CHAN_KICKED);
++			SetCheck(hwnd, CTCP_GENERIC,		CTCP_GENERIC);
++			SetCheck(hwnd, PMSG_RECEIVE,		PMSG_RECEIVE);
++			SetCheck(hwnd, SERV_KILLED,			SERV_KILLED);
++			SetCheck(hwnd, SERV_NOTICE,			SERV_NOTICE);
++			SetCheck(hwnd, SERV_DISCONNECT,		SERV_DISCONNECT);
++		}
++		break;
++	case IDD_SETTINGS:
++		{
++			SetCheck(hwnd, PREF_TOT,	PREF_TOT);
++			SetCheck(hwnd, PREF_MIOC,	PREF_MIOC);
++			SetCheck(hwnd, PREF_AOM,	PREF_AOM);
++			SetCheck(hwnd, PREF_DNSIT,	PREF_DNSIT);
++
++			SetDlgItemText(hwnd, IDC_AWAY_MSG, g_szAway);
++		}
++		break;
++	case IDD_ALERTS:
++		{
++			
++			SetCheck(hwnd, PREF_BLINK,	PREF_BLINK);
++			SetCheck(hwnd, PREF_OSBWM,	PREF_OSBWM);
++			SetCheck(hwnd, PREF_UWIOB,	PREF_UWIOB);
++			SetCheck(hwnd, PREF_KAOI,	PREF_KAOI);
++
++			/**********************************************************/
++			/**********************************************************/
++			/**********************************************************/
++			if(SetCheck(hwnd, PREF_AMAE, PREF_AMAE) == false)
++			{
++				SetToggle(hwnd, PREF_OSBWM,				PREF_AMAE, TRUE);
++				SetToggle(hwnd, PREF_UWIOB,				PREF_AMAE, TRUE);
++				SetToggle(hwnd, PREF_KAOI,				PREF_AMAE, TRUE);
++				SetToggle(hwnd, IDC_ALERT_TIME,			PREF_AMAE, TRUE);
++				SetToggle(hwnd, IDC_ALERT_TIME_TEXT,	PREF_AMAE, TRUE);
++				SetToggle(hwnd, IDC_ALERT_HOTKEY,		PREF_AMAE, TRUE);
++				SetToggle(hwnd, IDC_ALERT_HOTKEY_TEXT,	PREF_AMAE, TRUE);
++			}
++			else
++			{
++
++				SetToggle(hwnd, IDC_ALERT_HOTKEY,		PREF_UWIOB, TRUE);
++				SetToggle(hwnd, IDC_ALERT_HOTKEY_TEXT,	PREF_UWIOB, TRUE);
++				SetToggle(hwnd, IDC_ALERT_TIME,			PREF_KAOI, FALSE);
++				SetToggle(hwnd, IDC_ALERT_TIME_TEXT,	PREF_KAOI, FALSE);
++			}
++
++			/**********************************************************/
++			/**********************************************************/
++			/**********************************************************/
++			TCHAR tTime[255];
++			SendDlgItemMessage(hwnd, IDC_ALERT_TIME,	WM_SETTEXT, 0, (LPARAM)_itot(g_iTime, tTime, 10));
++			SendDlgItemMessage(hwnd, IDC_ALERT_HOTKEY,	HKM_SETHOTKEY, MAKEWORD(g_hHotKey.key, g_hHotKey.mod), 0);
++		}
++		break;
++	}
++}
++
++int SetCheck(HWND hDialog, unsigned int uiCheckBox, unsigned int uiPref)
++{
++	if((g_dwPrefs & (1<<uiPref)))
++	{
++		CheckDlgButton(hDialog, uiCheckBox, BST_CHECKED);
++		return 1;
++	}
++	else
++	{
++		CheckDlgButton(hDialog, uiCheckBox, BST_UNCHECKED);
++		return 0;
++	}
++
++	return 0;
++}
++
++int SetToggle(HWND hDialog, unsigned int uiCheckBox, unsigned int uiTestbox, bool offeqoff)
++{
++	/**************************************************************************************************/
++	/*********************** if(true) then if option is off turn toggle off ***************************/
++	/*********************** if(false) then if option is off turn toggle on ***************************/
++	/**************************************************************************************************/
++	if(offeqoff)
++	{
++		if(IsDlgButtonChecked(hDialog, uiTestbox) == BST_CHECKED)
++		{
++			EnableWindow(GetDlgItem(hDialog, uiCheckBox), TRUE);
++			return 1;
++		}
++		else
++		{
++			EnableWindow(GetDlgItem(hDialog, uiCheckBox), FALSE);
++			return 0;
++		}
++	}
++	else
++	{
++		if(IsDlgButtonChecked(hDialog, uiTestbox) == BST_CHECKED)
++		{
++			EnableWindow(GetDlgItem(hDialog, uiCheckBox), FALSE);
++			return 1;
++		}
++		else
++		{
++			EnableWindow(GetDlgItem(hDialog, uiCheckBox), TRUE);
++			return 0;
++		}
++	}
++
++	return 0;
++}
++
++int SetOption(HWND hDialog, unsigned int uiCheckBox, unsigned int uiPref)
++{
++	if(IsDlgButtonChecked(hDialog, uiCheckBox) == BST_CHECKED)
++	{
++		g_dwPrefs |= (1<<uiPref);
++	}
++	else
++	{
++		g_dwPrefs &= ~(1<<uiPref);
++	}
++
++	return (g_dwPrefs & (1<<uiPref));
++}
++
++int WritePrivateProfileIntA(char *szSection, char *szItem, int iData, char *szPath)
++{
++	char szData[33];
++	itoa(iData, szData, 10);
++	return WritePrivateProfileStringA(szSection, szItem, szData, szPath);
++}
++
++int WritePrivateProfileIntW(wchar_t *wszSection, wchar_t *wszItem, int iData, wchar_t *wszPath)
++{
++	wchar_t wszData[33];
++	_itow(iData, wszData, 10);
++	return WritePrivateProfileStringW(wszSection, wszItem, wszData, wszPath);
++}
++
++// For cleanup ( Closing windows and the such )
++void HoldClose()
++{
++	HANDLE hcThread;
++	DWORD dwThreadID;
++	hcThread = CreateThread(NULL, 0, HoldCloseThread, 0, 0, &dwThreadID);
++}
++
++DWORD WINAPI HoldCloseThread(LPVOID lpParam)
++{
++	Sleep(1000);
++	PostMessage(g_hXchatWnd, WM_CLOSE, 0, 0);
++	return 0;
++}
++
++bool FileExists(TCHAR *file)
++{
++	HANDLE hTemp = CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
++	int nRet = GetLastError();
++	CloseHandle(hTemp);
++
++	if(nRet == 0)
++	{
++		return true;
++	}
++	else
++	{
++		return false;
++	}
++
++	return false;
++}
++
++void ConvertString(const char *in, wchar_t *out, int size)
++{
++	MultiByteToWideChar(CP_UTF8, 0, in,  -1, out, size);
++}
++
++void ConvertString(const wchar_t *in, char *out, int size)
++{
++	WideCharToMultiByte(CP_UTF8, 0, in, (size - 1), out, size, NULL, NULL);
++}
++
++void ConvertString(const char *in, char *out, int size)
++{
++	strncpy(out, in, size);
++}
++
++void ErrorDebug(LPTSTR lpszFunction)
++{ 
++    TCHAR szBuf[80]; 
++    LPVOID lpMsgBuf;
++    DWORD dw = GetLastError(); 
++
++    FormatMessage(
++        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
++        FORMAT_MESSAGE_FROM_SYSTEM,
++        NULL,
++        dw,
++        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
++        (LPTSTR) &lpMsgBuf,
++        0, NULL );
++
++    _stprintf(szBuf, 
++        _T("%s failed with error %d: %s"), 
++        lpszFunction, dw, lpMsgBuf); 
++ 
++    MessageBox(NULL, szBuf, _T("Error"), MB_OK); 
++
++    LocalFree(lpMsgBuf);
++}
++
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/utility.h xchat-wdk/plugins/xtray/utility.h
+--- xchat-wdk.orig/plugins/xtray/utility.h	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/utility.h	2005-05-28 19:44:36 +0200
+@@ -0,0 +1,52 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#ifndef _H_UTILITY_H
++#define _H_UTILITY_H
++
++int						SetOption		(HWND, unsigned int, unsigned int);
++int						SetCheck		(HWND, unsigned int, unsigned int);
++int						SetToggle		(HWND, unsigned int, unsigned int, bool);
++void					ErrorDebug		(LPTSTR lpszFunction);
++void					SetDialog		(HWND, int);
++void					CheckPrefs		(HWND, int);
++bool					FileExists		(TCHAR *);
++DWORD WINAPI			HoldCloseThread	(LPVOID);
++void					SavePrefs		(int);
++void					LoadPrefs		();
++void					HoldClose		();
++
++void ConvertString(const char *in,		wchar_t *out,	int size);
++void ConvertString(const wchar_t *in,	char *out,		int size);
++void ConvertString(const char *in,		char *out,		int size);
++
++int WritePrivateProfileIntA(char *, char *, int, char *);
++int WritePrivateProfileIntW(wchar_t *, wchar_t *, int, wchar_t *);
++
++#ifdef UNICODE
++#define WritePrivateProfileInt WritePrivateProfileIntW
++#else
++#define WritePrivateProfileInt WritePrivateProfileIntA
++#endif
++
++struct HOTKEY
++{
++	WORD key;
++	WORD mod;
++};
++#endif
+\ No newline at end of file
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/xchat.cpp xchat-wdk/plugins/xtray/xchat.cpp
+--- xchat-wdk.orig/plugins/xtray/xchat.cpp	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/xchat.cpp	2005-10-24 19:35:18 +0200
+@@ -0,0 +1,319 @@
++/* X-Tray
++ * Copyright (C) 1998, 2005 Peter Zelezny, Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#include <windows.h>
++#include <vector>
++#include <algorithm>
++#include <stdio.h>
++#include <tchar.h>
++#include "plugin.h"
++#include "xtray.h"
++#include "resource.h"
++#include "xchat.h"
++#include "utility.h"
++
++// from util.c of xchat source code ( slightly modified to fit X-Tray Syntax )
++char *xchat_strip_color (char *text)
++{
++	int nc	= 0;
++	int i	= 0;
++	int col	= 0;
++	int len	= strlen(text);
++	char *new_str = (char *)malloc(len + 2);
++
++	while (len > 0)
++	{
++		if ((col && isdigit(*text) && (nc < 2)) || (col && isdigit(*(text+1)) && (nc < 3) && (*text == ',')))
++		{
++			nc++;
++
++			if(*text == ',')
++			{
++				nc = 0;
++			}
++		}
++		else
++		{
++			col = 0;
++
++			switch (*text)
++			{
++			case '\003':			  /*ATTR_COLOR: */
++				{
++					col = 1;
++					nc = 0;
++				}
++				break;
++			case '\007':			  /*ATTR_BEEP: */
++			case '\017':			  /*ATTR_RESET: */
++			case '\026':			  /*ATTR_REVERSE: */
++			case '\002':			  /*ATTR_BOLD: */
++			case '\037':			  /*ATTR_UNDERLINE: */
++				break;
++			default:
++				{
++					new_str[i] = *text;
++					i++;
++				}
++				break;
++			}
++		}
++
++		text++;
++		len--;
++	}
++
++	new_str[i] = 0;
++
++	return new_str;
++}
++
++void check_special_chars (char *cmd)
++{
++	int occur	= 0;
++	int len		= strlen (cmd);
++	int i = 0, j = 0;
++	char *buf;
++
++	if (!len)
++		return;
++
++	buf = (char *)malloc (len + 1);
++
++	if (buf)
++	{
++		while (cmd[j])
++		{
++			switch (cmd[j])
++			{
++			case '%':
++				{
++					occur++;
++
++					switch (cmd[j + 1])
++					{
++					case 'R':
++						buf[i] = '\026';
++						break;
++					case 'U':
++						buf[i] = '\037';
++						break;
++					case 'B':
++						buf[i] = '\002';
++						break;
++					case 'C':
++						buf[i] = '\003';
++						break;
++					case 'O':
++						buf[i] = '\017';
++						break;
++					case '%':
++						buf[i] = '%';
++						break;
++					default:
++						buf[i] = '%';
++						j--;
++						break;
++					}
++
++					j++;
++				}
++				break;
++			default:
++				{
++					buf[i] = cmd[j];
++				}
++				break;
++			}
++
++			j++;
++			i++;
++		}
++
++		buf[i] = 0;
++
++		if (occur)
++			strcpy (cmd, buf);
++
++		free (buf);
++	}
++}
++
++void xchat_globally_away(TCHAR *tszAway)
++{
++	char szTemp[512];
++	char szAway[512];
++
++	ConvertString(tszAway, szAway, 512);
++	_snprintf(szTemp, 512, "ALLSERV AWAY %s\0", szAway);
++	check_special_chars(szTemp);
++	xchat_exec(szTemp);
++}
++
++void xchat_away(TCHAR *tszAway)
++{
++	char szTemp[512];
++	char szAway[512];
++
++	ConvertString(tszAway, szAway, 512);
++	_snprintf(szTemp, 512, szAway);
++	check_special_chars(szTemp);
++	xchat_commandf(ph, "AWAY %s\0", szTemp);
++}
++
++void xchat_globally_back()
++{
++	std::vector<int> xs;
++	std::vector<int>::iterator xsi;
++	xchat_list *xl = xchat_list_get(ph, "channels");
++
++	if(xl)
++	{
++		while(xchat_list_next(ph, xl))
++		{
++			xsi = std::find(xs.begin(), xs.end(), xchat_list_int(ph, xl, "id"));
++
++			if((xsi == xs.end()) &&
++				((strlen(xchat_list_str(ph, xl, "server")) > 0) || 
++				(strlen(xchat_list_str(ph, xl, "channel")) > 0)))
++			{
++				xs.push_back(xchat_list_int(ph, xl, "id"));
++				xchat_set_context(ph, (xchat_context *)xchat_list_str(ph, xl, "context"));
++				xchat_back();
++			}
++		}
++
++		xchat_list_free(ph, xl);
++	}
++}
++
++
++
++void xchat_back()
++{
++	if(xchat_get_info(ph, "away"))
++	{
++		xchat_command(ph, "BACK");
++	}
++}
++
++HMENU setServerMenu()
++{
++	HMENU sTemp = CreateMenu();
++	TCHAR wszServer[128];
++	TCHAR wszNick[128];
++	TCHAR wszMenuEntry[256];
++
++	std::vector<int> xs;
++	std::vector<int>::iterator xsi;
++	xchat_list *xl = xchat_list_get(ph, "channels");
++
++	AppendMenu(sTemp, MF_STRING, ACT_AWAY, _T("Set Globally Away"));
++	AppendMenu(sTemp, MF_STRING, ACT_BACK, _T("Set Globally Back"));
++	AppendMenu(sTemp, MF_SEPARATOR, 0, NULL);
++
++	if(xl)
++	{
++		while(xchat_list_next(ph, xl))
++		{
++			xsi = std::find(xs.begin(), xs.end(), xchat_list_int(ph, xl, "id"));
++
++			if( (xsi == xs.end()) &&
++				((strlen(xchat_list_str(ph, xl, "server")) > 0) || 
++				(strlen(xchat_list_str(ph, xl, "channel")) > 0)))
++			{
++				xchat_set_context(ph, (xchat_context *)xchat_list_str(ph, xl, "context"));
++				xs.push_back(xchat_list_int(ph, xl, "id"));
++
++				char *network	= _strdup(xchat_list_str(ph, xl, "network"));
++				char *server	= _strdup(xchat_list_str(ph, xl, "server"));
++				char *nick		= _strdup(xchat_get_info(ph, "nick"));
++
++				if(network != NULL)
++				{
++					ConvertString(network, wszServer, 128);
++				}
++				else
++				{
++					ConvertString(server, wszServer, 128);
++				}
++
++				if(server != NULL)
++				{
++					ConvertString(nick, wszNick, 128);
++					_sntprintf(wszMenuEntry, 256, _T("%s @ %s\0"), wszNick, wszServer);
++
++					if(!xchat_get_info(ph, "away"))
++					{
++						AppendMenu(sTemp, MF_STRING, (xchat_list_int(ph, xl, "id") + 1), wszMenuEntry);
++					}
++					else
++					{
++						AppendMenu(sTemp, (MF_CHECKED | MF_STRING), (xchat_list_int(ph, xl, "id") + 1), wszMenuEntry);							
++					}
++				}
++
++				free(network);
++				free(server);
++				free(nick);
++			}
++		}
++
++		xchat_list_free(ph, xl);
++	}
++
++	return sTemp;
++}
++
++struct _xchat_context *xchat_find_server(int find_id)
++{
++	xchat_context *xc;
++	xchat_list *xl = xchat_list_get(ph, "channels");
++	int id;
++
++	if(!xl)
++		return NULL;
++
++	while(xchat_list_next(ph, xl))
++	{
++		id = xchat_list_int(ph, xl, "id");
++		
++		if(id == -1)
++		{
++			return NULL;
++		}
++		else if(id == find_id)
++		{
++			xc = (xchat_context *)xchat_list_str(ph, xl, "context");
++			
++			xchat_list_free(ph, xl);
++
++			return xc;
++		}
++	}
++
++	xchat_list_free(ph, xl);
++
++	return NULL;
++}
++
++void xchat_exec(char *command)
++{
++	xchat_set_context(ph, xchat_find_context(ph, NULL, NULL));
++	xchat_command(ph, command);
++}
+\ No newline at end of file
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/xchat.h xchat-wdk/plugins/xtray/xchat.h
+--- xchat-wdk.orig/plugins/xtray/xchat.h	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/xchat.h	2005-10-24 19:36:42 +0200
+@@ -0,0 +1,32 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#ifndef _H_XCHAT_H
++#define _H_XCHAT_H
++
++void					xchat_exec			(char *);
++char					*xchat_strip_color	(char *);
++void					xchat_parse			(char *);
++struct _xchat_context	*xchat_find_server	(int);
++void					xchat_globally_away	(TCHAR *);
++void					xchat_away			(TCHAR *);
++void					xchat_globally_back	();
++void					xchat_back			();
++HMENU					setServerMenu		();
++
++#endif
+\ No newline at end of file
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/xtray.cpp xchat-wdk/plugins/xtray/xtray.cpp
+--- xchat-wdk.orig/plugins/xtray/xtray.cpp	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/xtray.cpp	2010-03-30 12:41:58 +0200
+@@ -0,0 +1,226 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#define _WIN32_IE 0x0601
++
++#include <windows.h>
++#include <list>
++#include <string>
++#include <shobjidl.h>
++#include "resource.h"
++#include "callbacks.h"
++#include "plugin.h"
++#include "utility.h"
++#include "xtray.h"
++#include "sdTray.h"
++#include "sdAlerts.h"
++#include "plugin.h"
++
++/*****************************************************/
++/**** Don't want to pollute the namespace do we? *****/
++/*****************************************************/
++std::list<xchat_hook *> g_vHooks;
++
++/*****************************************************/
++/************ Global Identifiers *********************/
++/*****************************************************/
++WNDPROC g_hOldProc;
++xchat_plugin *ph;
++
++/*****************************************************/
++/***************** Resources *************************/
++/*****************************************************/
++HWND	g_hXchatWnd;
++HWND	g_hHotkeyWnd;
++HWND	g_hPrefDlg;
++HMENU	g_hTrayMenu;
++HICON	g_hIcons[11];
++HANDLE	g_hInstance;
++/*****************************************************/
++/***************** Preferences ***********************/
++/*****************************************************/
++unsigned int g_dwPrefs;
++TCHAR	g_szAway[512];
++int		g_iTime;
++
++
++BOOL WINAPI DllMain(HANDLE hModule, DWORD fdwReason, LPVOID lpVoid)
++{
++	if((fdwReason == DLL_PROCESS_ATTACH) || (fdwReason == DLL_THREAD_ATTACH))
++	{
++		g_hInstance = hModule;
++	}
++
++	return TRUE;
++}
++
++int xchat_plugin_init(xchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg)
++{
++	ph = plugin_handle;
++
++	*plugin_name	= "X-Tray";
++	*plugin_desc	= "Minimize X-Chat to the windows systemtray";
++	*plugin_version = "1.2.3 PR";
++
++	/***************************************************************************************************************************/
++	/************************* Load our preferances from xTray.ini *************************************************************/
++	/***************************************************************************************************************************/
++	LoadPrefs();
++
++	/***************************************************************************************************************************/
++	/************************* Finds the xChat window and saves it for later use ***********************************************/
++	/***************************************************************************************************************************/
++	g_hXchatWnd = (HWND)xchat_get_info(ph, "win_ptr");
++
++	if(g_hXchatWnd == NULL)
++	{
++		EnumThreadWindows(GetCurrentThreadId(), EnumWindowsProc, 0);
++	}
++
++	g_hOldProc	= (WNDPROC)GetWindowLongPtr(g_hXchatWnd, GWLP_WNDPROC);
++	SetWindowLong(g_hXchatWnd, GWLP_WNDPROC, (long)WindowProc);
++
++	/***************************************************************************************************************************/	
++	/************************* Grab the xChat Icon, Load our menu, create the window to receive the hotkey messages  ***********/
++	/************************* and register the windows message so we know if explorer crashes                       ***********/
++	/***************************************************************************************************************************/
++	g_hTrayMenu		= GetSubMenu(LoadMenu((HINSTANCE)g_hInstance, MAKEINTRESOURCE(IDR_TRAY_MENU)), 0);
++	g_hHotkeyWnd	= CreateDialog((HINSTANCE)g_hInstance, MAKEINTRESOURCE(IDD_ALERT), NULL,		(DLGPROC)HotKeyProc);
++	g_hPrefDlg		= CreateDialog((HINSTANCE)g_hInstance, MAKEINTRESOURCE(IDD_PREF),  g_hXchatWnd, (DLGPROC)PrefProc);
++
++	g_hIcons[0]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_XCHAT),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
++	g_hIcons[1]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_CHANMSG),		IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
++	g_hIcons[2]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_HIGHLIGHT),		IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
++	g_hIcons[5]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_BANNED),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
++	g_hIcons[6]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_KICKED),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
++	g_hIcons[8]	= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_PMSG),			IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
++	g_hIcons[10]= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_SNOTICE),		IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
++	g_hIcons[11]= (HICON)LoadImage((HINSTANCE)g_hInstance, MAKEINTRESOURCE(ICO_DISCONNECTED),	IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
++
++	/***************************************************************************************************************************/
++	/************************* Add our icon to the tray ************************************************************************/
++	/***************************************************************************************************************************/
++	char szVersion[64];
++	_snprintf(szVersion, 64, "X-Chat [%s]", xchat_get_info(ph, "version"));
++	AddIcon(g_hXchatWnd, 1, g_hIcons[0], szVersion, (NIF_ICON | NIF_MESSAGE | NIF_TIP), WM_TRAYMSG);
++
++	/***************************************************************************************************************************/
++	/***************************************************************************************************************************/
++	/***************************************************************************************************************************/
++	if(g_dwPrefs & (1<<PREF_DNSIT))
++	{
++		DWORD dwStyle;
++		dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE);
++		dwStyle |= (1<<WS_CHILD);
++		SetWindowLong(g_hXchatWnd, GWL_STYLE, dwStyle);
++#ifdef _WIN64
++		SetWindowLong(g_hXchatWnd, GWLP_HWNDPARENT, (long)g_hHotkeyWnd);
++#else
++		SetWindowLong(g_hXchatWnd, GWL_HWNDPARENT, (long)g_hHotkeyWnd);
++#endif
++	}
++
++	/***************************************************************************************************************************/
++	/************************* Set our hooks and save them for later so we can unhook them *************************************/
++	/***************************************************************************************************************************/
++	g_vHooks.push_back(xchat_hook_print(ph, "Channel Msg Hilight",			XCHAT_PRI_NORM, event_cb,	(void *)CHAN_HILIGHT));
++	g_vHooks.push_back(xchat_hook_print(ph, "Topic Change",					XCHAT_PRI_NORM, event_cb,	(void *)CHAN_TOPIC_CHANGE));
++	g_vHooks.push_back(xchat_hook_print(ph, "Channel Action Hilight",		XCHAT_PRI_NORM, event_cb,	(void *)CHAN_HILIGHT));
++	g_vHooks.push_back(xchat_hook_print(ph, "Channel INVITE",				XCHAT_PRI_NORM, event_cb,	(void *)CHAN_INVITE));
++	g_vHooks.push_back(xchat_hook_print(ph, "You Kicked",					XCHAT_PRI_NORM, event_cb,	(void *)CHAN_KICKED));
++	g_vHooks.push_back(xchat_hook_print(ph, "Banned",						XCHAT_PRI_NORM, event_cb,	(void *)CHAN_BANNED));
++	g_vHooks.push_back(xchat_hook_print(ph, "CTCP Generic",					XCHAT_PRI_NORM, event_cb,	(void *)CTCP_GENERIC));
++	g_vHooks.push_back(xchat_hook_print(ph, "Private Message",				XCHAT_PRI_NORM, event_cb,	(void *)PMSG_RECEIVE));
++	g_vHooks.push_back(xchat_hook_print(ph, "Private Message to Dialog",	XCHAT_PRI_NORM, event_cb,	(void *)PMSG_RECEIVE));
++	g_vHooks.push_back(xchat_hook_print(ph, "Disconnected",					XCHAT_PRI_NORM, event_cb,	(void *)SERV_DISCONNECT));
++	g_vHooks.push_back(xchat_hook_print(ph, "Killed",						XCHAT_PRI_NORM, event_cb,	(void *)SERV_KILLED));
++	g_vHooks.push_back(xchat_hook_print(ph, "Notice",						XCHAT_PRI_NORM, event_cb,	(void *)SERV_NOTICE));
++	g_vHooks.push_back(xchat_hook_command(ph, "tray_alert",					XCHAT_PRI_NORM, command_cb,	"Create an Alert", NULL));
++
++	return 1;
++}
++
++int xchat_plugin_deinit(xchat_plugin *plugin_handle)
++{
++	/******************************************/
++	/****** Remove the Icon from the tray *****/
++	/******************************************/
++	StopBlink(g_hXchatWnd, 1, g_hIcons[0]);
++	RemoveIcon(g_hXchatWnd, 1);
++	
++	/*******************************************/
++	/*******************************************/
++	/*******************************************/
++	if(g_dwPrefs & (1<<PREF_DNSIT))
++	{
++		DWORD dwStyle;
++		dwStyle = GetWindowLong(g_hXchatWnd, GWL_STYLE);
++		dwStyle &= ~(1<<WS_CHILD);
++		SetWindowLong(g_hXchatWnd, GWL_STYLE, dwStyle);
++#ifdef _WIN64
++		SetWindowLong(g_hXchatWnd, GWLP_HWNDPARENT, NULL);
++#else
++		SetWindowLong(g_hXchatWnd, GWL_HWNDPARENT, NULL);
++#endif
++	}
++
++	/******************************************/
++	/****** Unload our resources **************/
++	/******************************************/
++	DestroyMenu(g_hTrayMenu);
++
++	for(int i = 0; i <= 11; i++)
++	{
++		DestroyIcon(g_hIcons[i]);
++	}
++
++	/******************************************/
++	/****** Remove our window hook ************/
++	/******************************************/
++	SetWindowLong(g_hXchatWnd, GWLP_WNDPROC, (long)g_hOldProc);
++
++	/******************************************/
++	/****** Remove our hotkey, and destroy ****/
++	/****** the window that receives its   ****/
++	/****** messages                       ****/
++	/******************************************/
++	UnregisterHotKey(g_hHotkeyWnd, 1);
++	DestroyWindow(g_hHotkeyWnd);
++	DestroyWindow(g_hPrefDlg);
++
++	/******************************************/
++	/************* Clean up Isle 7 ************/
++	/******************************************/
++	if(sdAlertNum())
++	{
++		sdCloseAlerts();
++	}
++	/******************************************/
++	/****** remove our xchat_hook_*s **********/
++	/******************************************/
++	while(!g_vHooks.empty())
++	{
++		if(g_vHooks.back() != NULL)
++		{
++			xchat_unhook(ph, g_vHooks.back());
++		}
++		g_vHooks.pop_back();
++	}
++
++	return 1;
++}
+diff -ruN --strip-trailing-cr xchat-wdk.orig/plugins/xtray/xtray.h xchat-wdk/plugins/xtray/xtray.h
+--- xchat-wdk.orig/plugins/xtray/xtray.h	1970-01-01 01:00:00 +0100
++++ xchat-wdk/plugins/xtray/xtray.h	2005-05-28 19:49:34 +0200
+@@ -0,0 +1,65 @@
++/* X-Tray
++ * Copyright (C) 2005 Michael Hotaling <Mike.Hotaling@SinisterDevelopments.com>
++ *
++ * X-Tray is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ * 
++ * X-Tray is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ * 
++ * You should have received a copy of the GNU General Public License
++ * along with X-Tray; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
++ */
++
++#ifndef _XTRAY_H
++#define _XTRAY_H
++
++/******************** Globals *************************/
++extern HWND				g_hXchatWnd;
++extern HWND				g_hHotkeyWnd;
++extern HWND				g_hPrefDlg;
++extern HMENU			g_hTrayMenu;
++extern HICON			g_hIcons[11];
++extern HANDLE			g_hInstance;
++extern unsigned int		g_dwPrefs;
++extern TCHAR			g_szAway[512];
++extern int				g_iTime;
++extern WNDPROC			g_hOldProc;
++extern struct _xchat_plugin *ph;
++/******************************************************/
++
++/******************** Messages ************************/
++#define WM_TRAYMSG WM_APP
++/******************************************************/
++
++/********************* Events *************************/
++#define CHAN_HILIGHT			1
++#define CHAN_INVITE				2
++#define CHAN_TOPIC_CHANGE		3
++#define CHAN_BANNED				4
++#define CHAN_KICKED				5
++
++#define CTCP_GENERIC			6
++#define PMSG_RECEIVE			7
++
++#define SERV_KILLED				8
++#define SERV_NOTICE				9
++#define SERV_DISCONNECT			10
++
++#define PREF_AOM				11 // away on minimize
++#define PREF_TOT				12 // Tray on Taskbar
++#define PREF_AMAE				13 // alert me about events
++#define PREF_OSBWM				14 // Only Show Balloon When Minimized
++#define PREF_UWIOB				15 // Use Window Instead of Balloon
++#define PREF_KAOI				16 // Keep alerts open indefinately
++#define PREF_MIOC				17 // Minimize instead of close
++#define PREF_BLINK				18 // blink icon
++#define PREF_CICO				19 // change icon - not implemented
++#define PREF_DNSIT				20 // Do not show in taskbar
++/******************************************************/
++#endif
+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	2009-01-02 06:56:12 +0100
 +++ xchat-wdk/src/common/cfgfiles.c	2010-03-29 12:57:41 +0200
 @@ -17,7 +17,6 @@
@@ -495,7 +3723,7 @@ diff -Naur xchat-wdk.orig/src/common/cfgfiles.c xchat-wdk/src/common/cfgfiles.c
  #include <stdlib.h>
  #include <string.h>
  #include <stdio.h>
-diff -Naur xchat-wdk.orig/src/common/chanopt.c xchat-wdk/src/common/chanopt.c
+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-03-29 12:58:02 +0200
 @@ -3,7 +3,6 @@
@@ -506,7 +3734,7 @@ diff -Naur xchat-wdk.orig/src/common/chanopt.c xchat-wdk/src/common/chanopt.c
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>
-diff -Naur xchat-wdk.orig/src/common/ctcp.c xchat-wdk/src/common/ctcp.c
+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	2006-10-03 06:11:54 +0200
 +++ xchat-wdk/src/common/ctcp.c	2010-03-29 12:57:58 +0200
 @@ -18,7 +18,6 @@
@@ -517,7 +3745,7 @@ diff -Naur xchat-wdk.orig/src/common/ctcp.c xchat-wdk/src/common/ctcp.c
  #include <stdlib.h>
  
  #include "xchat.h"
-diff -Naur xchat-wdk.orig/src/common/dcc.c xchat-wdk/src/common/dcc.c
+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	2007-02-06 05:45:13 +0100
 +++ xchat-wdk/src/common/dcc.c	2010-03-29 13:17:58 +0200
 @@ -31,7 +31,6 @@
@@ -537,7 +3765,7 @@ diff -Naur xchat-wdk.orig/src/common/dcc.c xchat-wdk/src/common/dcc.c
  #else
  	/* this fstat() shouldn't really fail */
  	if ((dcc->fp == -1 ? stat (dcc->destfile_fs, &st_a) : fstat (dcc->fp, &st_a)) == -1)
-diff -Naur xchat-wdk.orig/src/common/dirent.h xchat-wdk/src/common/dirent.h
+diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/dirent.h xchat-wdk/src/common/dirent.h
 --- xchat-wdk.orig/src/common/dirent.h	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/src/common/dirent.h	2009-12-15 23:10:54 +0100
 @@ -0,0 +1,230 @@
@@ -771,7 +3999,7 @@ diff -Naur xchat-wdk.orig/src/common/dirent.h xchat-wdk/src/common/dirent.h
 +
 +
 +#endif /*DIRENT_H*/
-diff -Naur xchat-wdk.orig/src/common/identd.c xchat-wdk/src/common/identd.c
+diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/identd.c xchat-wdk/src/common/identd.c
 --- xchat-wdk.orig/src/common/identd.c	2004-05-24 15:47:58 +0200
 +++ xchat-wdk/src/common/identd.c	2010-03-29 18:04:55 +0200
 @@ -1,6 +1,10 @@
@@ -794,12 +4022,12 @@ diff -Naur xchat-wdk.orig/src/common/identd.c xchat-wdk/src/common/identd.c
  identd_start (char *username)
  {
  	DWORD tid;
-diff -Naur xchat-wdk.orig/src/common/identd.h xchat-wdk/src/common/identd.h
+diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/identd.h xchat-wdk/src/common/identd.h
 --- xchat-wdk.orig/src/common/identd.h	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/src/common/identd.h	2010-03-29 18:05:16 +0200
 @@ -0,0 +1 @@
 +void identd_start (char *username);
-diff -Naur xchat-wdk.orig/src/common/ignore.c xchat-wdk/src/common/ignore.c
+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-03-29 12:58:18 +0200
 @@ -19,7 +19,6 @@
@@ -810,7 +4038,7 @@ diff -Naur xchat-wdk.orig/src/common/ignore.c xchat-wdk/src/common/ignore.c
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>
-diff -Naur xchat-wdk.orig/src/common/inbound.c xchat-wdk/src/common/inbound.c
+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	2008-03-19 05:28:57 +0100
 +++ xchat-wdk/src/common/inbound.c	2010-03-29 12:58:16 +0200
 @@ -21,7 +21,6 @@
@@ -821,7 +4049,7 @@ diff -Naur xchat-wdk.orig/src/common/inbound.c xchat-wdk/src/common/inbound.c
  #include <time.h>
  
  #define WANTARPA
-diff -Naur xchat-wdk.orig/src/common/inet.h xchat-wdk/src/common/inet.h
+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-03-29 15:36:39 +0200
 @@ -24,9 +24,8 @@
@@ -835,7 +4063,7 @@ diff -Naur xchat-wdk.orig/src/common/inet.h xchat-wdk/src/common/inet.h
  #endif
  
  #define set_blocking(sok)	{ \
-diff -Naur xchat-wdk.orig/src/common/makefile.mak xchat-wdk/src/common/makefile.mak
+diff -ruN --strip-trailing-cr xchat-wdk.orig/src/common/makefile.mak xchat-wdk/src/common/makefile.mak
 --- xchat-wdk.orig/src/common/makefile.mak	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/src/common/makefile.mak	2010-03-29 13:02:00 +0200
 @@ -0,0 +1,13 @@
@@ -852,7 +4080,7 @@ diff -Naur xchat-wdk.orig/src/common/makefile.mak xchat-wdk/src/common/makefile.
 +clean:
 +	del *.obj
 +	del xchatcommon.lib
-diff -Naur xchat-wdk.orig/src/common/msproxy.c xchat-wdk/src/common/msproxy.c
+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-03-29 12:58:13 +0200
 @@ -26,7 +26,6 @@
@@ -863,7 +4091,7 @@ diff -Naur xchat-wdk.orig/src/common/msproxy.c xchat-wdk/src/common/msproxy.c
  #include <fcntl.h>
  
  #define WANTSOCKET
-diff -Naur xchat-wdk.orig/src/common/network.c xchat-wdk/src/common/network.c
+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-03-29 12:58:40 +0200
 @@ -21,7 +21,6 @@
@@ -874,7 +4102,7 @@ diff -Naur xchat-wdk.orig/src/common/network.c xchat-wdk/src/common/network.c
  #include <glib.h>
  
  #include "../../config.h"				  /* grab USE_IPV6 and LOOKUPD defines */
-diff -Naur xchat-wdk.orig/src/common/notify.c xchat-wdk/src/common/notify.c
+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-03-29 12:58:37 +0200
 @@ -22,7 +22,6 @@
@@ -885,7 +4113,7 @@ diff -Naur xchat-wdk.orig/src/common/notify.c xchat-wdk/src/common/notify.c
  #include <time.h>
  
  #include "xchat.h"
-diff -Naur xchat-wdk.orig/src/common/outbound.c xchat-wdk/src/common/outbound.c
+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	2009-01-02 06:56:12 +0100
 +++ xchat-wdk/src/common/outbound.c	2010-03-29 12:58:34 +0200
 @@ -32,7 +32,6 @@
@@ -896,7 +4124,7 @@ diff -Naur xchat-wdk.orig/src/common/outbound.c xchat-wdk/src/common/outbound.c
  #include <time.h>
  #include <signal.h>
  #include <sys/stat.h>
-diff -Naur xchat-wdk.orig/src/common/proto-irc.c xchat-wdk/src/common/proto-irc.c
+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	2008-05-25 07:36:25 +0200
 +++ xchat-wdk/src/common/proto-irc.c	2010-03-29 12:58:59 +0200
 @@ -18,7 +18,6 @@
@@ -907,7 +4135,7 @@ diff -Naur xchat-wdk.orig/src/common/proto-irc.c xchat-wdk/src/common/proto-irc.
  #include <string.h>
  #include <stdio.h>
  #include <stdlib.h>
-diff -Naur xchat-wdk.orig/src/common/server.c xchat-wdk/src/common/server.c
+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	2008-02-17 09:54:55 +0100
 +++ xchat-wdk/src/common/server.c	2010-03-29 17:36:30 +0200
 @@ -26,7 +26,6 @@
@@ -949,7 +4177,7 @@ diff -Naur xchat-wdk.orig/src/common/server.c xchat-wdk/src/common/server.c
  
  /* connect() successed */
  
-diff -Naur xchat-wdk.orig/src/common/servlist.c xchat-wdk/src/common/servlist.c
+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	2009-10-25 10:21:58 +0100
 +++ xchat-wdk/src/common/servlist.c	2010-03-29 12:58:54 +0200
 @@ -21,7 +21,6 @@
@@ -960,7 +4188,7 @@ diff -Naur xchat-wdk.orig/src/common/servlist.c xchat-wdk/src/common/servlist.c
  
  #include "xchat.h"
  #include <glib/ghash.h>
-diff -Naur xchat-wdk.orig/src/common/ssl.c xchat-wdk/src/common/ssl.c
+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-03-30 00:55:39 +0200
 @@ -17,6 +17,9 @@
@@ -973,7 +4201,7 @@ diff -Naur xchat-wdk.orig/src/common/ssl.c xchat-wdk/src/common/ssl.c
  #include <openssl/ssl.h>		  /* SSL_() */
  #include <openssl/err.h>		  /* ERR_() */
  #include <time.h>					  /* asctime() */
-diff -Naur xchat-wdk.orig/src/common/text.c xchat-wdk/src/common/text.c
+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	2009-12-31 03:19:50 +0100
 +++ xchat-wdk/src/common/text.c	2010-03-29 15:02:51 +0200
 @@ -19,13 +19,11 @@
@@ -1045,7 +4273,7 @@ diff -Naur xchat-wdk.orig/src/common/text.c xchat-wdk/src/common/text.c
  	close (fh);
  }
  
-diff -Naur xchat-wdk.orig/src/common/util.c xchat-wdk/src/common/util.c
+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-03-30 03:24:31 +0200
 @@ -17,10 +17,11 @@
@@ -1119,7 +4347,7 @@ diff -Naur xchat-wdk.orig/src/common/util.c xchat-wdk/src/common/util.c
  
  	return verbuf;
  }
-diff -Naur xchat-wdk.orig/src/common/xchat.c xchat-wdk/src/common/xchat.c
+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-03-29 12:59:15 +0200
 @@ -22,7 +22,6 @@
@@ -1130,7 +4358,7 @@ diff -Naur xchat-wdk.orig/src/common/xchat.c xchat-wdk/src/common/xchat.c
  
  #define WANTSOCKET
  #include "inet.h"
-diff -Naur xchat-wdk.orig/src/common/xchat.h xchat-wdk/src/common/xchat.h
+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	2008-08-29 12:59:11 +0200
 +++ xchat-wdk/src/common/xchat.h	2010-03-30 03:24:19 +0200
 @@ -12,12 +12,14 @@
@@ -1158,7 +4386,7 @@ diff -Naur xchat-wdk.orig/src/common/xchat.h xchat-wdk/src/common/xchat.h
  #include <direct.h>
  #define	F_OK	0
  #define	X_OK	1
-diff -Naur xchat-wdk.orig/src/fe-gtk/banlist.c xchat-wdk/src/fe-gtk/banlist.c
+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	2008-09-01 11:28:58 +0200
 +++ xchat-wdk/src/fe-gtk/banlist.c	2010-03-29 12:59:40 +0200
 @@ -21,7 +21,6 @@
@@ -1169,7 +4397,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/banlist.c xchat-wdk/src/fe-gtk/banlist.c
  #include <fcntl.h>
  #include <time.h>
  
-diff -Naur xchat-wdk.orig/src/fe-gtk/chanlist.c xchat-wdk/src/fe-gtk/chanlist.c
+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-03-29 12:59:37 +0200
 @@ -19,7 +19,6 @@
@@ -1180,7 +4408,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/chanlist.c xchat-wdk/src/fe-gtk/chanlist.c
  #include <fcntl.h>
  #include <time.h>
  
-diff -Naur xchat-wdk.orig/src/fe-gtk/editlist.c xchat-wdk/src/fe-gtk/editlist.c
+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-03-29 12:59:34 +0200
 @@ -19,7 +19,6 @@
@@ -1191,7 +4419,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/editlist.c xchat-wdk/src/fe-gtk/editlist.c
  #include <fcntl.h>
  #include <sys/types.h>
  #include <sys/stat.h>
-diff -Naur xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/fe-gtk/fe-gtk.c
+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	2008-02-29 03:19:00 +0100
 +++ xchat-wdk/src/fe-gtk/fe-gtk.c	2010-03-30 04:22:55 +0200
 @@ -21,7 +21,6 @@
@@ -1236,7 +4464,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/fe-gtk.c xchat-wdk/src/fe-gtk/fe-gtk.c
  
  	return 0;
  }
-diff -Naur xchat-wdk.orig/src/fe-gtk/fe-gtk.h xchat-wdk/src/fe-gtk/fe-gtk.h
+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	2008-06-08 09:58:58 +0200
 +++ xchat-wdk/src/fe-gtk/fe-gtk.h	2010-03-29 17:52:49 +0200
 @@ -4,7 +4,7 @@
@@ -1248,7 +4476,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/fe-gtk.h xchat-wdk/src/fe-gtk/fe-gtk.h
  #else
  #define DISPLAY_NAME "XChat"
  #endif
-diff -Naur xchat-wdk.orig/src/fe-gtk/fkeys.c xchat-wdk/src/fe-gtk/fkeys.c
+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-03-29 12:59:56 +0200
 @@ -20,7 +20,6 @@
@@ -1259,7 +4487,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/fkeys.c xchat-wdk/src/fe-gtk/fkeys.c
  #include <string.h>
  #include <fcntl.h>
  #include <ctype.h>
-diff -Naur xchat-wdk.orig/src/fe-gtk/gtkutil.c xchat-wdk/src/fe-gtk/gtkutil.c
+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-03-29 12:59:54 +0200
 @@ -22,7 +22,6 @@
@@ -1270,7 +4498,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/gtkutil.c xchat-wdk/src/fe-gtk/gtkutil.c
  #include <fcntl.h>
  #include "fe-gtk.h"
  
-diff -Naur xchat-wdk.orig/src/fe-gtk/joind.c xchat-wdk/src/fe-gtk/joind.c
+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-03-29 13:00:16 +0200
 @@ -9,7 +9,6 @@
@@ -1281,7 +4509,25 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/joind.c xchat-wdk/src/fe-gtk/joind.c
  #include <string.h>
  #include <stdio.h>
  
-diff -Naur xchat-wdk.orig/src/fe-gtk/makefile.mak xchat-wdk/src/fe-gtk/makefile.mak
+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	2008-06-08 09:58:58 +0200
++++ xchat-wdk/src/fe-gtk/maingui.c	2010-03-30 12:57:53 +0200
+@@ -1320,12 +1320,12 @@
+ 	gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1),
+ 										GTK_BUTTONBOX_END);
+ 
+-	if (minimize_button)
++	/*if (minimize_button)
+ 	{
+ 		button = gtk_button_new_with_mnemonic (_("_Minimize to Tray"));
+ 		gtk_widget_show (button);
+ 		gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, 1);
+-	}
++	}*/
+ 
+ 	button = gtk_button_new_from_stock ("gtk-cancel");
+ 	gtk_widget_show (button);
+diff -ruN --strip-trailing-cr xchat-wdk.orig/src/fe-gtk/makefile.mak xchat-wdk/src/fe-gtk/makefile.mak
 --- xchat-wdk.orig/src/fe-gtk/makefile.mak	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/src/fe-gtk/makefile.mak	2010-03-30 07:45:37 +0200
 @@ -0,0 +1,37 @@
@@ -1322,7 +4568,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/makefile.mak xchat-wdk/src/fe-gtk/makefile.
 +	del $(PROG)
 +	del xchat.rc
 +	del xchat.RES
-diff -Naur xchat-wdk.orig/src/fe-gtk/menu.c xchat-wdk/src/fe-gtk/menu.c
+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	2008-06-10 14:05:00 +0200
 +++ xchat-wdk/src/fe-gtk/menu.c	2010-03-29 13:00:13 +0200
 @@ -22,7 +22,6 @@
@@ -1333,7 +4579,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/menu.c xchat-wdk/src/fe-gtk/menu.c
  
  #ifdef WIN32
  #include <windows.h>
-diff -Naur xchat-wdk.orig/src/fe-gtk/palette.c xchat-wdk/src/fe-gtk/palette.c
+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	2006-03-13 09:33:45 +0100
 +++ xchat-wdk/src/fe-gtk/palette.c	2010-03-29 13:00:11 +0200
 @@ -20,7 +20,6 @@
@@ -1344,7 +4590,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/palette.c xchat-wdk/src/fe-gtk/palette.c
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>
-diff -Naur xchat-wdk.orig/src/fe-gtk/plugin-tray.c xchat-wdk/src/fe-gtk/plugin-tray.c
+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	2008-08-29 12:59:11 +0200
 +++ xchat-wdk/src/fe-gtk/plugin-tray.c	2010-03-29 13:00:32 +0200
 @@ -1,7 +1,6 @@
@@ -1355,7 +4601,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/plugin-tray.c xchat-wdk/src/fe-gtk/plugin-t
  #include "../common/xchat-plugin.h"
  #include "../common/xchat.h"
  #include "../common/xchatc.h"
-diff -Naur xchat-wdk.orig/src/fe-gtk/rawlog.c xchat-wdk/src/fe-gtk/rawlog.c
+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	2008-02-24 06:09:34 +0100
 +++ xchat-wdk/src/fe-gtk/rawlog.c	2010-03-29 13:00:30 +0200
 @@ -21,7 +21,6 @@
@@ -1366,7 +4612,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/rawlog.c xchat-wdk/src/fe-gtk/rawlog.c
  #include <stdlib.h>
  
  #include "fe-gtk.h"
-diff -Naur xchat-wdk.orig/src/fe-gtk/sexy-spell-entry.c xchat-wdk/src/fe-gtk/sexy-spell-entry.c
+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-03-29 14:42:33 +0200
 @@ -31,6 +31,20 @@
@@ -1390,7 +4636,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/sexy-spell-entry.c xchat-wdk/src/fe-gtk/sex
  /*
   * 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
-diff -Naur xchat-wdk.orig/src/fe-gtk/xtext.c xchat-wdk/src/fe-gtk/xtext.c
+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-03-29 13:00:27 +0200
 @@ -42,7 +42,6 @@
@@ -1401,7 +4647,7 @@ diff -Naur xchat-wdk.orig/src/fe-gtk/xtext.c xchat-wdk/src/fe-gtk/xtext.c
  #include <gtk/gtkmain.h>
  #include <gtk/gtksignal.h>
  #include <gtk/gtkselection.h>
-diff -Naur xchat-wdk.orig/src/makefile.mak xchat-wdk/src/makefile.mak
+diff -ruN --strip-trailing-cr xchat-wdk.orig/src/makefile.mak xchat-wdk/src/makefile.mak
 --- xchat-wdk.orig/src/makefile.mak	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/src/makefile.mak	2010-03-29 22:22:00 +0200
 @@ -0,0 +1,18 @@
@@ -1423,13 +4669,15 @@ diff -Naur xchat-wdk.orig/src/makefile.mak xchat-wdk/src/makefile.mak
 +	del fe-gtk\xchat.rc
 +	del fe-gtk\xchat.RES
 +	del pixmaps\*.h
-diff -Naur xchat-wdk.orig/src/makeinc.mak xchat-wdk/src/makeinc.mak
+diff -ruN --strip-trailing-cr xchat-wdk.orig/src/makeinc.mak xchat-wdk/src/makeinc.mak
 --- xchat-wdk.orig/src/makeinc.mak	1970-01-01 01:00:00 +0100
-+++ xchat-wdk/src/makeinc.mak	2010-03-30 07:45:32 +0200
-@@ -0,0 +1,125 @@
++++ xchat-wdk/src/makeinc.mak	2010-03-30 12:40:15 +0200
+@@ -0,0 +1,126 @@
 +#uncomment this to have an x64 build
 +#x64 = YES
 +
++CFLAGS = 
++CPPFLAGS = 
 +!ifdef x64
 +#############################################################
 +#x64 config
@@ -1438,6 +4686,7 @@ diff -Naur xchat-wdk.orig/src/makeinc.mak xchat-wdk/src/makeinc.mak
 +LIBS = /libpath:c:/mozilla-build/build/xchat-dev64/lib gtk-win32-2.0.lib gdk-win32-2.0.lib atk-1.0.lib gio-2.0.lib gdk_pixbuf-2.0.lib pangowin32-1.0.lib gdi32.lib pangocairo-1.0.lib pango-1.0.lib cairo.lib gobject-2.0.lib gmodule-2.0.lib glib-2.0.lib intl.lib
 +
 +LDFLAGS = /SUBSYSTEM:WINDOWS /NOLOGO msvcrt_win2003.obj
++CPPFLAGS = $(CPPFLAGS) /D_WIN64
 +
 +PERLPATH = c:\mozilla-build\perl-5.10-x64\lib\CORE
 +PYTHONPATH = c:\mozilla-build\python-2.6-x64
@@ -1471,11 +4720,9 @@ diff -Naur xchat-wdk.orig/src/makeinc.mak xchat-wdk/src/makeinc.mak
 +#OPENSSL = YES
 +IPV6 = YES
 +
-+CFLAGS = /Ox
-+
 +CC = cl
 +LINK = link
-+CFLAGS = $(CFLAGS) -Dstrcasecmp=stricmp -Dstrncasecmp=strnicmp -Dstrtoull=_strtoui64 /MD /nologo /DWIN32 /DG_DISABLE_CAST_CHECKS
++CFLAGS = $(CFLAGS) /Ox -Dstrcasecmp=stricmp -Dstrncasecmp=strnicmp -Dstrtoull=_strtoui64 /MD /nologo /DWIN32 /DG_DISABLE_CAST_CHECKS
 +LIBS = $(LIBS) gdi32.lib shell32.lib user32.lib advapi32.lib imm32.lib ole32.lib winmm.lib
 +
 +!ifdef IPV6
@@ -1552,7 +4799,7 @@ diff -Naur xchat-wdk.orig/src/makeinc.mak xchat-wdk/src/makeinc.mak
 +FEGTK_OBJECTS = $(FEGTK_OBJECTS) mmx_cmod.o
 +CFLAGS = $(CFLAGS) -DUSE_MMX
 +!endif
-diff -Naur xchat-wdk.orig/src/pixmaps/makefile.mak xchat-wdk/src/pixmaps/makefile.mak
+diff -ruN --strip-trailing-cr xchat-wdk.orig/src/pixmaps/makefile.mak xchat-wdk/src/pixmaps/makefile.mak
 --- xchat-wdk.orig/src/pixmaps/makefile.mak	1970-01-01 01:00:00 +0100
 +++ xchat-wdk/src/pixmaps/makefile.mak	2010-03-29 13:15:26 +0200
 @@ -0,0 +1,18 @@