summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--src/common/inbound.c7
-rw-r--r--src/common/outbound.c15
-rw-r--r--src/common/outbound.h1
-rw-r--r--src/common/proto-irc.c9
-rw-r--r--src/common/servlist.c2
-rw-r--r--src/common/text.c5
-rw-r--r--src/common/textevents.in6
-rw-r--r--src/fe-gtk/Makefile.am4
-rw-r--r--src/fe-gtk/about.c162
-rw-r--r--src/fe-gtk/about.h25
-rw-r--r--src/fe-gtk/chanlist.c1
-rw-r--r--src/fe-gtk/fe-gtk.vcxproj2
-rw-r--r--src/fe-gtk/fe-gtk.vcxproj.filters6
-rw-r--r--src/fe-gtk/gtkutil.c1
-rw-r--r--src/fe-gtk/maingui.c4
-rw-r--r--src/fe-gtk/menu.c57
-rw-r--r--src/fe-gtk/notifygui.c1
-rw-r--r--win32/installer/hexchat-x64.skel.iss2
-rw-r--r--win32/installer/hexchat-x86.skel.iss2
20 files changed, 100 insertions, 213 deletions
diff --git a/.gitignore b/.gitignore
index d9378370..3b1e882b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,6 +53,7 @@ stamp-h1
 *.gmo
 *.mo
 *.po~
+*.patch
 # Win32 generated files
 plugins/wmpa/wmpa_h.h
 plugins/wmpa/wmpa_i.c
diff --git a/src/common/inbound.c b/src/common/inbound.c
index f57207d1..a8c19504 100644
--- a/src/common/inbound.c
+++ b/src/common/inbound.c
@@ -1450,7 +1450,12 @@ nowindow:
 static int
 inbound_exec_eom_cmd (char *str, void *sess)
 {
-	handle_command (sess, (str[0] == '/') ? str + 1 : str, TRUE);
+	char *cmd;
+
+	cmd = command_insert_vars ((session*)sess, (str[0] == '/') ? str + 1 : str);
+	handle_command ((session*)sess, cmd, TRUE);
+	g_free (cmd);
+
 	return 1;
 }
 
diff --git a/src/common/outbound.c b/src/common/outbound.c
index 21af2940..158b2b16 100644
--- a/src/common/outbound.c
+++ b/src/common/outbound.c
@@ -4584,7 +4584,6 @@ handle_command (session *sess, char *cmd, int check_spch)
 	char tbuf_static[TBUFSIZE];
 	char *pdibuf;
 	char *tbuf;
-	char *cmd_vars;
 	int len;
 	int ret = TRUE;
 
@@ -4596,9 +4595,7 @@ handle_command (session *sess, char *cmd, int check_spch)
 	command_level++;
 	/* anything below MUST DEC command_level before returning */
 
-	cmd_vars = command_insert_vars (sess, cmd);
-
-	len = strlen (cmd_vars);
+	len = strlen (cmd);
 	if (len >= sizeof (pdibuf_static))
 	{
 		pdibuf = malloc (len + 1);
@@ -4618,7 +4615,7 @@ handle_command (session *sess, char *cmd, int check_spch)
 	}
 
 	/* split the text into words and word_eol */
-	process_data_init (pdibuf, cmd_vars, word, word_eol, TRUE, TRUE);
+	process_data_init (pdibuf, cmd, word, word_eol, TRUE, TRUE);
 
 	/* ensure an empty string at index 32 for cmd_deop etc */
 	/* (internal use only, plugins can still only read 1-31). */
@@ -4629,12 +4626,12 @@ handle_command (session *sess, char *cmd, int check_spch)
 	/* redo it without quotes processing, for some commands like /JOIN */
 	if (int_cmd && !int_cmd->handle_quotes)
 	{
-		process_data_init (pdibuf, cmd_vars, word, word_eol, FALSE, FALSE);
+		process_data_init (pdibuf, cmd, word, word_eol, FALSE, FALSE);
 	}
 
 	if (check_spch && prefs.hex_input_perc_color)
 	{
-		check_special_chars (cmd_vars, prefs.hex_input_perc_ascii);
+		check_special_chars (cmd, prefs.hex_input_perc_ascii);
 	}
 
 	if (plugin_emit_command (sess, word[1], word, word_eol))
@@ -4701,7 +4698,7 @@ handle_command (session *sess, char *cmd, int check_spch)
 		}
 		else
 		{
-			sess->server->p_raw (sess->server, cmd_vars);
+			sess->server->p_raw (sess->server, cmd);
 		}
 	}
 
@@ -4718,8 +4715,6 @@ xit:
 		free (tbuf);
 	}
 
-	g_free (cmd_vars);
-
 	return ret;
 }
 
diff --git a/src/common/outbound.h b/src/common/outbound.h
index 7dc1ba97..81a98666 100644
--- a/src/common/outbound.h
+++ b/src/common/outbound.h
@@ -25,6 +25,7 @@ extern GSList *menu_list;
 
 int auto_insert (char *dest, int destlen, unsigned char *src, char *word[], char *word_eol[],
 				 char *a, char *c, char *d, char *e, char *h, char *n, char *s, char *u);
+char *command_insert_vars (session *sess, char *cmd);
 int handle_command (session *sess, char *cmd, int check_spch);
 void process_data_init (char *buf, char *cmd, char *word[], char *word_eol[], gboolean handle_quotes, gboolean allow_escape_quotes);
 void handle_multiline (session *sess, char *cmd, int history, int nocommand);
diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c
index 128c0c85..642cd056 100644
--- a/src/common/proto-irc.c
+++ b/src/common/proto-irc.c
@@ -678,6 +678,15 @@ process_numeric (session * sess, int n,
 		handle_mode (serv, word, word_eol, "", TRUE, tags_data);
 		break;
 
+	case 328: /* channel url */
+		sess = find_channel (serv, word[4]);
+		if (sess)
+		{
+			EMIT_SIGNAL_TIMESTAMP (XP_TE_CHANURL, sess, word[4], word[5] + 1,
+									NULL, NULL, 0, tags_data->timestamp); 
+		}
+		break;
+
 	case 329:
 		sess = find_channel (serv, word[4]);
 		if (sess)
diff --git a/src/common/servlist.c b/src/common/servlist.c
index 51094687..01d66374 100644
--- a/src/common/servlist.c
+++ b/src/common/servlist.c
@@ -256,6 +256,8 @@ static const struct defaultserver def[] =
 	{0,				"chat.freenode.net/+6697"},
 #endif
 	{0,				"chat.freenode.net"},
+	/* irc. points to chat. but many users and urls still reference it */
+	{0,				"irc.freenode.net"},
 
 /*	{"Freeworld",	0},
 	{0,			"kabel.freeworld.nu"},
diff --git a/src/common/text.c b/src/common/text.c
index b825faba..b6ad378d 100644
--- a/src/common/text.c
+++ b/src/common/text.c
@@ -1359,6 +1359,11 @@ static char * const pevt_chanmodes_help[] = {
 	N_("Modes string"),
 };
 
+static char * const pevt_chanurl_help[] = {
+	N_("Channel Name"),
+	N_("URL"),
+};
+
 static char * const pevt_rawmodes_help[] = {
 	N_("Nickname"),
 	N_("Modes string"),
diff --git a/src/common/textevents.in b/src/common/textevents.in
index 1f86d90b..b4242ca7 100644
--- a/src/common/textevents.in
+++ b/src/common/textevents.in
@@ -202,6 +202,12 @@ pevt_chanunquiet_help
 %C22*%O$t%C26$1%O removes quiet on %C18$2%O
 2
 
+Channel Url
+XP_TE_CHANURL
+pevt_chanurl_help
+%C22*%O$tChannel %C22$1%O url: %C24$2
+2
+
 Channel Voice
 XP_TE_CHANVOICE
 pevt_chanvoice_help
diff --git a/src/fe-gtk/Makefile.am b/src/fe-gtk/Makefile.am
index 8bbad35d..c8b099af 100644
--- a/src/fe-gtk/Makefile.am
+++ b/src/fe-gtk/Makefile.am
@@ -7,7 +7,7 @@ AM_CPPFLAGS = $(GUI_CFLAGS) -DLOCALEDIR=\"$(localedir)\"
 hexchat_LDADD = ../common/libhexchatcommon.a $(GUI_LIBS)
 
 EXTRA_DIST = \
-	about.h ascii.h banlist.h chanlist.h chanview.h chanview-tabs.c \
+	ascii.h banlist.h chanlist.h chanview.h chanview-tabs.c \
 	chanview-tree.c custom-list.h editlist.h fe-gtk.h fkeys.h gtkutil.h joind.h \
 	maingui.h menu.h mmx_cmod.S mmx_cmod.h notifygui.h palette.h pixmaps.h \
 	plugin-tray.h plugingui.c plugingui.h rawlog.h search.h sexy-iso-codes.h \
@@ -26,7 +26,7 @@ sexy_spell = \
 	sexy-iso-codes.c sexy-marshal.c sexy-spell-entry.c
 endif
 
-hexchat_SOURCES = about.c ascii.c banlist.c chanlist.c chanview.c custom-list.c \
+hexchat_SOURCES = ascii.c banlist.c chanlist.c chanview.c custom-list.c \
 	dccgui.c editlist.c fe-gtk.c fkeys.c gtkutil.c ignoregui.c joind.c menu.c \
 	maingui.c $(mmx_cmod_S) notifygui.c palette.c pixmaps.c plugin-tray.c $(plugingui_c) \
 	rawlog.c search.c servlistgui.c setup.c $(sexy_spell) textgui.c \
diff --git a/src/fe-gtk/about.c b/src/fe-gtk/about.c
deleted file mode 100644
index c47fba4f..00000000
--- a/src/fe-gtk/about.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* X-Chat
- * Copyright (C) 1998 Peter Zelezny.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "fe-gtk.h"
-
-#ifdef USE_XLIB
-#include <gdk/gdkx.h>
-#endif
-
-#include "../common/hexchat.h"
-#include "../common/util.h"
-#include "../common/hexchatc.h"
-#include "palette.h"
-#include "pixmaps.h"
-#include "gtkutil.h"
-#include "about.h"
-
-static GtkWidget *about = 0;
-
-static int
-about_close (void)
-{
-	about = 0;
-	return 0;
-}
-
-void
-menu_about (GtkWidget * wid, gpointer sess)
-{
-	GtkWidget *vbox;									/* the main vertical box inside the about dialog */
-	GtkWidget *hbox_main;								/* horizontal box for containing text on the left and logo on the right */
-	GtkWidget *vbox_logo;								/* vertical box for our logo */
-	GtkWidget *vbox_text;								/* vertical box for text */
-	GtkWidget *label_title;								/* label for the main title */
-	GtkWidget *label_subtitle;							/* label for the subtitle */
-	GtkWidget *label_info;								/* for the informative text */
-	GtkWidget *label_copyright;							/* for copyright notices */
-	GdkColor color;										/* color buffer for our nice paintings */
-	char buf[512];										/* text buffer for the labels */
-	const char *locale = NULL;
-	extern GtkWindow *parent_window;					/* maingui.c */
-
-	if (about)
-	{
-		gtk_window_present (GTK_WINDOW (about));
-		return;
-	}
-
-	/* general about dialog initialization */
-	about = gtk_dialog_new ();
-	gtk_window_set_position (GTK_WINDOW (about), GTK_WIN_POS_CENTER_ON_PARENT);
-	gtk_window_set_resizable (GTK_WINDOW (about), FALSE);
-	gtk_window_set_title (GTK_WINDOW (about), _("About "DISPLAY_NAME));
-	if (parent_window)
-	{
-		gtk_window_set_transient_for (GTK_WINDOW (about), parent_window);
-	}
-	g_signal_connect (G_OBJECT (about), "destroy", G_CALLBACK (about_close), 0);
-	vbox = GTK_DIALOG (about)->vbox;
-
-	/* main horizontal box, text on the left, logo on the right */
-	hbox_main = gtk_hbox_new (FALSE, 0);
-	gtk_container_add (GTK_CONTAINER (vbox), GTK_WIDGET (hbox_main));
-
-	/* textbox on the left */
-	vbox_text = gtk_vbox_new (FALSE, 0);
-	gtk_box_pack_start (GTK_BOX (hbox_main), vbox_text, 0, 0, 5);
-
-	/* label for title */
-	snprintf (buf, sizeof (buf), "<span size=\"x-large\"><b>"DISPLAY_NAME"</b></span>");
-	label_title = gtk_label_new (NULL);
-	gtk_misc_set_alignment (GTK_MISC (label_title), 0, 0);
-	gtk_box_pack_start (GTK_BOX (vbox_text), label_title, 0, 0, 10);
-	color.red   = 0xd7d7;
-	color.green = 0x4343;
-	color.blue  = 0x0404;
-	gtk_widget_modify_fg (label_title, GTK_STATE_NORMAL, &color);
-	gtk_label_set_markup (GTK_LABEL (label_title), buf);
-
-	/* label for subtitle */
-	snprintf (buf, sizeof (buf), "%s", _("<b>A multiplatform IRC Client</b>"));
-	label_subtitle = gtk_label_new (NULL);
-	gtk_misc_set_alignment (GTK_MISC (label_subtitle), 0, 0);
-	gtk_box_pack_start (GTK_BOX (vbox_text), label_subtitle, 0, 0, 10);
-	color.red   = 0x5555;
-	color.green = 0x5555;
-	color.blue  = 0x5555;
-	gtk_widget_modify_fg (label_subtitle, GTK_STATE_NORMAL, &color);
-	gtk_label_set_markup (GTK_LABEL (label_subtitle), buf);
-
-	/* label for additional info */
-	g_get_charset (&locale);
-	(snprintf) (buf, sizeof (buf),
-				"<b>Version:</b> "PACKAGE_VERSION"\n"
-				"<b>Compiled:</b> "__DATE__"\n"
-#ifdef WIN32
-				"<b>Portable Mode:</b> %s\n"
-				"<b>Build Type:</b> x%d\n"
-#endif
-				"<b>OS:</b> %s\n"
-				"<b>Charset:</b> %s",
-#ifdef WIN32
-				(portable_mode () ? "Yes" : "No"),
-				get_cpu_arch (),
-#endif
-				get_sys_str (0),
-				locale);
-
-	label_info = gtk_label_new (NULL);
-	gtk_misc_set_alignment (GTK_MISC (label_info), 0, 0);
-	gtk_box_pack_start (GTK_BOX (vbox_text), label_info, 0, 0, 10);
-	gtk_label_set_selectable (GTK_LABEL (label_info), TRUE);
-	gtk_label_set_markup (GTK_LABEL (label_info), buf);
-
-	/* label for copyright notices */
-	snprintf (buf, sizeof (buf), "<small>\302\251 1998-2010 Peter \305\275elezn\303\275\n\302\251 2009-2013 Berke Viktor</small>");
-	label_copyright = gtk_label_new (NULL);
-	gtk_misc_set_alignment (GTK_MISC (label_copyright), 0, 0);
-	gtk_box_pack_start (GTK_BOX (vbox_text), label_copyright, 0, 0, 10);
-	gtk_label_set_markup (GTK_LABEL (label_copyright), buf);
-
-	/* imagebox on the right */
-	vbox_logo = gtk_vbox_new (FALSE, 0);
-	gtk_box_pack_start (GTK_BOX (hbox_main), vbox_logo, 0, 0, 10);
-
-	/* the actual image */
-	wid = gtk_image_new_from_pixbuf (pix_hexchat);
-	gtk_box_pack_start (GTK_BOX (vbox_logo), wid, 0, 0, 10);
-
-	/* our close button on the bottom right */
-	wid = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
-	GTK_WIDGET_SET_FLAGS (GTK_WIDGET (wid), GTK_CAN_DEFAULT);
-	gtk_box_pack_end (GTK_BOX (GTK_DIALOG (about)->action_area), wid, 0, 0, 0);
-	gtk_widget_grab_default (wid);
-	g_signal_connect (G_OBJECT (wid), "clicked", G_CALLBACK (gtkutil_destroy), about);
-
-	/* pure white background for the whole about widget*/
-	color.red = color.green = color.blue = 0xffff;
-	gtk_widget_modify_bg (about, GTK_STATE_NORMAL, &color);
-
-	/* show off! */
-	gtk_widget_show_all (about);
-}
diff --git a/src/fe-gtk/about.h b/src/fe-gtk/about.h
deleted file mode 100644
index b4d5cb34..00000000
--- a/src/fe-gtk/about.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* HexChat
- * Copyright (C) 1998-2010 Peter Zelezny.
- * Copyright (C) 2009-2013 Berke Viktor.
- *
- * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#ifndef HEXCHAT_ABOUT_H
-#define HEXCHAT_ABOUT_H
-
-void menu_about (GtkWidget * wid, gpointer sess);
-
-#endif
diff --git a/src/fe-gtk/chanlist.c b/src/fe-gtk/chanlist.c
index 0f0307b7..d0e0ea40 100644
--- a/src/fe-gtk/chanlist.c
+++ b/src/fe-gtk/chanlist.c
@@ -747,6 +747,7 @@ chanlist_opengui (server *serv, int do_refresh)
 	serv->gui->chanlist_window =
 		mg_create_generic_tab ("ChanList", tbuf, FALSE, TRUE, chanlist_closegui,
 								serv, 640, 480, &vbox, serv);
+	gtkutil_destroy_on_esc (serv->gui->chanlist_window);
 
 	gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
 	gtk_box_set_spacing (GTK_BOX (vbox), 12);
diff --git a/src/fe-gtk/fe-gtk.vcxproj b/src/fe-gtk/fe-gtk.vcxproj
index f8c6377a..37630bc9 100644
--- a/src/fe-gtk/fe-gtk.vcxproj
+++ b/src/fe-gtk/fe-gtk.vcxproj
@@ -98,7 +98,6 @@
     </Link>

   </ItemDefinitionGroup>

   <ItemGroup>

-    <ClInclude Include="about.h" />

     <ClInclude Include="ascii.h" />

     <ClInclude Include="banlist.h" />

     <ClInclude Include="chanlist.h" />

@@ -130,7 +129,6 @@
     <ClInclude Include="xtext.h" />

   </ItemGroup>

   <ItemGroup>

-    <ClCompile Include="about.c" />

     <ClCompile Include="ascii.c" />

     <ClCompile Include="banlist.c" />

     <ClCompile Include="chanlist.c" />

diff --git a/src/fe-gtk/fe-gtk.vcxproj.filters b/src/fe-gtk/fe-gtk.vcxproj.filters
index a319babd..d78ca2a9 100644
--- a/src/fe-gtk/fe-gtk.vcxproj.filters
+++ b/src/fe-gtk/fe-gtk.vcxproj.filters
@@ -15,9 +15,6 @@
     </Filter>

   </ItemGroup>

   <ItemGroup>

-    <ClInclude Include="about.h">

-      <Filter>Header Files</Filter>

-    </ClInclude>

     <ClInclude Include="ascii.h">

       <Filter>Header Files</Filter>

     </ClInclude>

@@ -107,9 +104,6 @@
     </ClInclude>

   </ItemGroup>

   <ItemGroup>

-    <ClCompile Include="about.c">

-      <Filter>Source Files</Filter>

-    </ClCompile>

     <ClCompile Include="ascii.c">

       <Filter>Source Files</Filter>

     </ClCompile>

diff --git a/src/fe-gtk/gtkutil.c b/src/fe-gtk/gtkutil.c
index 11206e02..8a3de06f 100644
--- a/src/fe-gtk/gtkutil.c
+++ b/src/fe-gtk/gtkutil.c
@@ -678,6 +678,7 @@ gtkutil_window_new (char *title, char *role, int width, int height, int flags)
 	{
 		gtk_window_set_type_hint (GTK_WINDOW (win), GDK_WINDOW_TYPE_HINT_DIALOG);
 		gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (parent_window));
+		gtk_window_set_destroy_with_parent (GTK_WINDOW (win), TRUE);
 	}
 
 	return win;
diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c
index 2a486b17..84df4b96 100644
--- a/src/fe-gtk/maingui.c
+++ b/src/fe-gtk/maingui.c
@@ -2102,8 +2102,8 @@ mg_create_chanmodebuttons (session_gui *gui, GtkWidget *box)
 	gui->flag_k = mg_create_flagbutton (_("Keyword"), box, "K");
 	gui->key_entry = gtk_entry_new ();
 	gtk_widget_set_name (gui->key_entry, "hexchat-inputbox");
-	gtk_entry_set_max_length (GTK_ENTRY (gui->key_entry), 16);
-	gtk_widget_set_size_request (gui->key_entry, 30, -1);
+	gtk_entry_set_max_length (GTK_ENTRY (gui->key_entry), 23);
+	gtk_widget_set_size_request (gui->key_entry, 115, -1);
 	gtk_box_pack_start (GTK_BOX (box), gui->key_entry, 0, 0, 0);
 	g_signal_connect (G_OBJECT (gui->key_entry), "activate",
 							G_CALLBACK (mg_key_entry_cb), NULL);
diff --git a/src/fe-gtk/menu.c b/src/fe-gtk/menu.c
index 58c28e51..b1f1333d 100644
--- a/src/fe-gtk/menu.c
+++ b/src/fe-gtk/menu.c
@@ -43,7 +43,6 @@
 #include "../common/notify.h"
 #include "../common/util.h"
 #include "xtext.h"
-#include "about.h"
 #include "ascii.h"
 #include "banlist.h"
 #include "chanlist.h"
@@ -1643,6 +1642,62 @@ menu_metres_both (GtkWidget *item, gpointer none)
 	}
 }
 
+static void
+about_dialog_close (GtkDialog *dialog, int response, gpointer data)
+{
+	gtk_widget_destroy (GTK_WIDGET(dialog));
+}
+
+static gboolean
+about_dialog_openurl (GtkAboutDialog *dialog, char *uri, gpointer data)
+{
+	fe_open_url (uri);
+	return TRUE;
+}
+
+static void
+menu_about (GtkWidget *wid, gpointer sess)
+{
+	GtkAboutDialog *dialog = GTK_ABOUT_DIALOG(gtk_about_dialog_new());
+	char comment[512];
+	char *license = "This program is free software; you can redistribute it and/or modify\n" \
+					"it under the terms of the GNU General Public License as published by\n" \
+					"the Free Software Foundation; version 2.\n\n" \
+					"This program is distributed in the hope that it will be useful,\n" \
+					"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" \
+					"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" \
+					"GNU General Public License for more details.\n\n" \
+					"You should have received a copy of the GNU General Public License\n" \
+					"along with this program. If not, see <http://www.gnu.org/licenses/>";
+
+	g_snprintf  (comment, sizeof(comment), "Compiled: "__DATE__"\n"
+#ifdef WIN32
+				"Portable Mode: %s\n"
+				"Build Type: x%d\n"
+#endif
+				"OS: %s",
+#ifdef WIN32
+				(portable_mode () ? "Yes" : "No"),
+				get_cpu_arch (),
+#endif
+				get_sys_str (0));
+
+	gtk_about_dialog_set_name (dialog, DISPLAY_NAME);
+	gtk_about_dialog_set_version (dialog, PACKAGE_VERSION);
+	gtk_about_dialog_set_license (dialog, license); /* gtk3 can use GTK_LICENSE_GPL_2_0 */
+	gtk_about_dialog_set_website (dialog, "http://hexchat.github.io");
+	gtk_about_dialog_set_website_label (dialog, "Website");
+	gtk_about_dialog_set_logo (dialog, pix_hexchat);
+	gtk_about_dialog_set_copyright (dialog, "\302\251 1998-2010 Peter \305\275elezn\303\275\n\302\251 2009-2013 Berke Viktor");
+	gtk_about_dialog_set_comments (dialog, comment);
+
+	gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(parent_window));
+	g_signal_connect (G_OBJECT(dialog), "response", G_CALLBACK(about_dialog_close), NULL);
+	g_signal_connect (G_OBJECT(dialog), "activate-link", G_CALLBACK(about_dialog_openurl), NULL);
+	
+	gtk_widget_show_all (GTK_WIDGET(dialog));
+}
+
 static struct mymenu mymenu[] = {
 	{N_("He_xChat"), 0, 0, M_NEWMENU, 0, 0, 1},
 	{N_("Network Li_st..."), menu_open_server_list, (char *)&pix_book, M_MENUPIX, 0, 0, 1, GDK_s},
diff --git a/src/fe-gtk/notifygui.c b/src/fe-gtk/notifygui.c
index 872fb7ed..c0282ade 100644
--- a/src/fe-gtk/notifygui.c
+++ b/src/fe-gtk/notifygui.c
@@ -60,6 +60,7 @@ static void
 notify_closegui (void)
 {
 	notify_window = 0;
+	notify_save ();
 }
 
 /* Need this to be able to set the foreground colour property of a row
diff --git a/win32/installer/hexchat-x64.skel.iss b/win32/installer/hexchat-x64.skel.iss
index 64b1b2e7..b1681b8c 100644
--- a/win32/installer/hexchat-x64.skel.iss
+++ b/win32/installer/hexchat-x64.skel.iss
@@ -71,7 +71,7 @@ Root: HKCR; Subkey: ".hct\shell\open\command"; ValueType: string; ValueName: "";
 
 [Run]
 Filename: "{app}\hexchat.exe"; Description: "Run HexChat after closing the Wizard"; Flags: nowait postinstall skipifsilent
-Filename: "http://www.microsoft.com/en-us/download/details.aspx?id=30679"; Description: "Download Visual C++ 2012 Update 1 Redistributable"; Flags: shellexec runasoriginaluser postinstall skipifsilent
+Filename: "http://www.microsoft.com/en-us/download/details.aspx?id=30679"; Description: "Download Visual C++ 2012 Redistributable"; Flags: shellexec runasoriginaluser postinstall skipifsilent
 Filename: "http://docs.hexchat.org/en/latest/changelog.html"; Description: "See what's changed"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked
 Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and not langs\python
 Filename: "http://hexchat.org/downloads.html"; Description: "Download Python"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\python and not langs\perl
diff --git a/win32/installer/hexchat-x86.skel.iss b/win32/installer/hexchat-x86.skel.iss
index 10e9d277..535ef138 100644
--- a/win32/installer/hexchat-x86.skel.iss
+++ b/win32/installer/hexchat-x86.skel.iss
@@ -70,7 +70,7 @@ Root: HKCR; Subkey: ".hct\shell\open\command"; ValueType: string; ValueName: "";
 
 [Run]
 Filename: "{app}\hexchat.exe"; Description: "Run HexChat after closing the Wizard"; Flags: nowait postinstall skipifsilent
-Filename: "http://www.microsoft.com/en-us/download/details.aspx?id=30679"; Description: "Download Visual C++ 2012 Update 1 Redistributable"; Flags: shellexec runasoriginaluser postinstall skipifsilent
+Filename: "http://www.microsoft.com/en-us/download/details.aspx?id=30679"; Description: "Download Visual C++ 2012 Redistributable"; Flags: shellexec runasoriginaluser postinstall skipifsilent
 Filename: "http://docs.hexchat.org/en/latest/changelog.html"; Description: "See what's changed"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked
 Filename: "http://hexchat.org/downloads.html"; Description: "Download Perl"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\perl and not langs\python
 Filename: "http://hexchat.org/downloads.html"; Description: "Download Python"; Flags: shellexec runasoriginaluser postinstall skipifsilent unchecked; Components: langs\python and not langs\perl