<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -12,10 +12,10 @@ There are always more changes than listed here, these are just the
 highlights. The full CVS log is available at www.xchat.org/cvslog/
 
 ------------------------------------------------------------------------------
- 2.8.x - Dd/Mmm/2007
+ 2.8.4 - 01/Jul/2007
 ------------------------------------------------------------------------------
 
- - Updated translations (cs, de, ko, mk, vi).
+ - Updated translations (cs, de, ko, mk, sv, vi).
  - System-Tray balloons now get the xchat icon instead of a generic one.
  - Fixed the notify-send zombies (released as xc282-fixtrayzombies.diff).
  - Fixed underscore ('_') in real names in the nick-name right-click menu being
@@ -46,6 +46,9 @@ highlights. The full CVS log is available at www.xchat.org/cvslog/
    even on networks that sent a list of channels of only a larger size. In this
    case the Download button will flash to indicate you need to download a new
    list.
+ - Changing the channel switcher type (Tree or Tabs) is also possible in the
+   setup dialog.
+ - The Ban List window now lists exceptions too (mode +e).
  - Script and Plugin related changes:
   * /SETTEXT with no argument now clears the input box.
   * Python: Added a xchat.strip method for stripping IRC attributes and mIRC</diff>
      <filename>ChangeLog</filename>
    </modified>
    <modified>
      <diff>@@ -3,7 +3,7 @@
 #define USE_GMODULE
 #define USE_PLUGIN
 #define PACKAGE_NAME &quot;xchat&quot;
-#define PACKAGE_VERSION &quot;2.8.2-unix&quot;
+#define PACKAGE_VERSION &quot;2.8.4-unix&quot;
 #define XCHATLIBDIR &quot;.&quot;
 #define XCHATSHAREDIR &quot;.&quot;
 #define OLD_PERL</diff>
      <filename>config.h.w32</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT([XChat],[2.8.2],[http://www.xchat.org/],[xchat])
+AC_INIT([XChat],[2.8.4],[http://www.xchat.org/],[xchat])
 
 AC_PREREQ([2.59])
 AC_COPYRIGHT([Copyright (C) 1998-2007 Peter Zelezny])
@@ -802,7 +802,7 @@ else
   echo text backend ........ : xft\	nls/gettext ........... : $USE_NLS
 fi
 echo openssl support ..... : $openssl\	ipv6 support .......... : $ipv6
-echo dbus support ........ : $dbus\	msproxy ntlm \(ISA\) .. : $have_ntlm
+echo dbus support ........ : $dbus\	msproxy ntlm \(ISA\) .... : $have_ntlm
 echo
 echo The binary will be installed in $prefix/bin
 echo</diff>
      <filename>configure.in</filename>
    </modified>
    <modified>
      <diff>@@ -684,7 +684,9 @@ inbound_005 (server * serv, char *word[])
 			/* now wait for numeric 290 */	
 		} else if (strcmp (word[w], &quot;EXCEPTS&quot;) == 0)
 		{
+#ifndef WIN32
 			serv-&gt;have_except = TRUE;
+#endif
 		} else if (strncmp (word[w], &quot;ELIST=&quot;, 6) == 0)
 		{
 			/* supports LIST &gt;&lt; min/max user counts? */</diff>
      <filename>src/common/modes.c</filename>
    </modified>
    <modified>
      <diff>@@ -13,6 +13,9 @@ struct text_event
 	char *def;
 };
 
+void scrollback_close (session *sess);
+void scrollback_load (session *sess);
+
 int text_word_check (char *word, int len);
 void PrintText (session *sess, char *text);
 void PrintTextf (session *sess, char *format, ...);</diff>
      <filename>src/common/text.h</filename>
    </modified>
    <modified>
      <diff>@@ -117,6 +117,10 @@ menu_about (GtkWidget * wid, gpointer sess)
 	(snprintf) (buf, sizeof (buf),
 				&quot;&lt;span size=\&quot;x-large\&quot;&gt;&lt;b&gt;XChat &quot;PACKAGE_VERSION&quot;&lt;/b&gt;&lt;/span&gt;\n\n&quot;
 				&quot;%s\n\n&quot;
+#ifdef WIN32
+				/* leave this message to avoid time wasting bug reports! */
+				&quot;This version is unofficial and comes with no support.\n\n&quot;
+#endif
 				&quot;%s\n&quot;
 				&quot;&lt;b&gt;Charset&lt;/b&gt;: %s &quot;
 #ifdef WIN32 </diff>
      <filename>src/fe-gtk/about.c</filename>
    </modified>
    <modified>
      <diff>@@ -66,18 +66,45 @@ get_store (struct session *sess)
 	return GTK_LIST_STORE (gtk_tree_view_get_model (get_view (sess)));
 }
 
+static gboolean
+supports_exempt (server *serv)
+{
+	char *cm = serv-&gt;chanmodes;
+
+	if (serv-&gt;have_except)
+		return TRUE;
+
+	if (!cm)
+		return FALSE;
+
+	while (*cm)
+	{
+		if (*cm == ',')
+			break;
+		if (*cm == 'e')
+			return TRUE;
+		cm++;
+	}
+
+	return FALSE;
+}
+
 void
 fe_add_ban_list (struct session *sess, char *mask, char *who, char *when, int is_exempt)
 {
 	GtkListStore *store;
 	GtkTreeIter iter;
+	char buf[512];
+
+	store = get_store (sess);
+	gtk_list_store_append (store, &amp;iter);
 
 	if (is_exempt)
 	{
+		snprintf (buf, sizeof (buf), &quot;(EX) %s&quot;, mask);
+		gtk_list_store_set (store, &amp;iter, 0, buf, 1, who, 2, when, -1);
 	} else
 	{
-		store = get_store (sess);
-		gtk_list_store_append (store, &amp;iter);
 		gtk_list_store_set (store, &amp;iter, 0, mask, 1, who, 2, when, -1);
 	}
 }
@@ -109,8 +136,20 @@ banlist_do_refresh (struct session *sess)
 		gtk_list_store_clear (store);
 
 		handle_command (sess, &quot;ban&quot;, FALSE);
+#ifdef WIN32
+		if (0)
+#else
+		if (supports_exempt (sess-&gt;server))
+		{
+#endif
+			snprintf (tbuf, sizeof (tbuf), &quot;quote mode %s +e&quot;, sess-&gt;channel);
+			handle_command (sess, tbuf, FALSE);
+		}
+
 	} else
+	{
 		fe_message (_(&quot;Not connected.&quot;), FE_MSG_ERROR);
+	}
 }
 
 static void
@@ -125,14 +164,14 @@ banlist_refresh (GtkWidget * wid, struct session *sess)
 	banlist_do_refresh (sess);
 }
 
-static void
-banlist_unban (gpointer none, struct session *sess)
+static int
+banlist_unban_inner (gpointer none, struct session *sess, int do_exempts)
 {
 	GtkTreeModel *model;
 	GtkTreeSelection *sel;
 	GtkTreeIter iter;
 	char tbuf[2048];
-	char **masks;
+	char **masks, *tmp, *space;
 	int num_sel, i;
 
 	/* grab the list of selected items */
@@ -150,13 +189,10 @@ banlist_unban (gpointer none, struct session *sess)
 	}
 
 	if (num_sel &lt; 1)
-	{
-		fe_message (_(&quot;You must select some bans.&quot;), FE_MSG_ERROR);
-		return;
-	}
+		return 0;
 
 	/* create an array of all the masks */
-	masks = malloc (num_sel * sizeof (char *));
+	masks = calloc (1, num_sel * sizeof (char *));
 
 	i = 0;
 	gtk_tree_model_get_iter_first (model, &amp;iter);
@@ -165,19 +201,55 @@ banlist_unban (gpointer none, struct session *sess)
 		if (gtk_tree_selection_iter_is_selected (sel, &amp;iter))
 		{
 			gtk_tree_model_get (model, &amp;iter, MASK_COLUMN, &amp;masks[i], -1);
-			i++;
+			space = strchr (masks[i], ' ');
+
+			if (do_exempts)
+			{
+				if (space)
+				{
+					/* remove the &quot;(EX) &quot; */
+					tmp = masks[i];
+					masks[i] = g_strdup (space + 1);
+					g_free (tmp);
+					i++;
+				}
+			} else
+			{
+				if (!space)
+					i++;
+			}
 		}
 	}
 	while (gtk_tree_model_iter_next (model, &amp;iter));
 
 	/* and send to server */
-	send_channel_modes (sess, tbuf, masks, 0, i, '-', 'b', 0);
+	if (do_exempts)
+		send_channel_modes (sess, tbuf, masks, 0, i, '-', 'e', 0);
+	else
+		send_channel_modes (sess, tbuf, masks, 0, i, '-', 'b', 0);
 
 	/* now free everything, and refresh banlist */	
 	for (i=0; i &lt; num_sel; i++)
 		g_free (masks[i]);
 	free (masks);
 
+	return num_sel;
+}
+
+static void
+banlist_unban (GtkWidget * wid, struct session *sess)
+{
+	int num = 0;
+
+	num += banlist_unban_inner (wid, sess, FALSE);
+	num += banlist_unban_inner (wid, sess, TRUE);
+
+	if (num &lt; 1)
+	{
+		fe_message (_(&quot;You must select some bans.&quot;), FE_MSG_ERROR);
+		return;
+	}
+
 	banlist_do_refresh (sess);
 }
 
@@ -334,7 +406,7 @@ banlist_opengui (struct session *sess)
 	gtk_widget_show (bbox);
 
 	gtkutil_button (bbox, GTK_STOCK_REMOVE, 0, banlist_unban, sess,
-	                _(&quot;Unban&quot;));
+	                _(&quot;Remove&quot;));
 	gtkutil_button (bbox, GTK_STOCK_REMOVE, 0, banlist_crop, sess,
 	                _(&quot;Crop&quot;));
 	gtkutil_button (bbox, GTK_STOCK_CLEAR, 0, banlist_clear, sess,</diff>
      <filename>src/fe-gtk/banlist.c</filename>
    </modified>
    <modified>
      <diff>@@ -14,9 +14,10 @@ Comment[sl]=Odjemalec IRC
 Comment[sv]=IRC-klient
 Comment[ro]=Client de IRC
 Comment[zh_TW]=X-Chat &#32842;&#22825;&#31243;&#24335;
-Comment=IRC Client
+Comment=Chat with other people using Internet Relay Chat
 Exec=xchat
 Icon=xchat.png
 Terminal=false
 Type=Application
 Categories=Application;Network;
+StartupNotify=true</diff>
      <filename>xchat.desktop</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,10 @@
-## RPM spec file designed for Fedora Core 4, 5 or 6 ##
-
-# set this to 0 for FC4
-%define fedora5_or_newer 1
+## RPM spec file designed for Fedora Core 5,6,7 ##
 
 Summary: Graphical IRC (chat) client
 Summary(fr): Client IRC (chat) avec interface graphique
 Summary(de): IRC-Client (Chat) mit grafischer Oberfl&#228;che
 Name: xchat
-Version: 2.8.2
+Version: 2.8.4
 Release: 0
 Epoch: 1
 Group: Applications/Internet
@@ -71,7 +68,6 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
 %find_lang %name
 
 %post
-%if %{fedora5_or_newer}
 # Install schema
 export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
 SCHEMAS=&quot;apps_xchat_url_handler.schemas&quot;
@@ -79,7 +75,6 @@ for S in $SCHEMAS; do
   gconftool-2 --makefile-install-rule /etc/gconf/schemas/$S &gt; /dev/null
 done
 unset GCONF_CONFIG_SOURCE
-%endif
 
 %files -f %{name}.lang
 %defattr(-,root,root)
@@ -87,9 +82,7 @@ unset GCONF_CONFIG_SOURCE
 %{_bindir}/xchat
 %{_datadir}/applications/xchat.desktop
 %{_datadir}/pixmaps/xchat.png
-%if %{fedora5_or_newer}
 %{_sysconfdir}/gconf/schemas/apps_xchat_url_handler.schemas
-%endif
 
 %files perl
 %{_libdir}/xchat/plugins/perl.so</diff>
      <filename>xchat.spec</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>04b31d4689a279e8f2b5c242e5065386733daa1d</id>
    </parent>
  </parents>
  <author>
    <name>zed</name>
    <email>zed</email>
  </author>
  <url>http://github.com/tycho/xchat-aqua/commit/58e13c65f5f57b154104b2a4c478e62e3fca2bd4</url>
  <id>58e13c65f5f57b154104b2a4c478e62e3fca2bd4</id>
  <committed-date>2007-06-30T21:32:37-07:00</committed-date>
  <authored-date>2007-06-30T21:32:37-07:00</authored-date>
  <message>=== Bump to 2.8.4 ===</message>
  <tree>7a47d5ca9cd9cddf0a42add3a51d007b987358b5</tree>
  <committer>
    <name>zed</name>
    <email>zed</email>
  </committer>
</commit>
