Index: query.c
===================================================================
--- query.c	(revision 210d1d9cf4366d9933c02383300175e4b573be61)
+++ query.c	(revision b7d3cc34f68dab7b8f7d0777711317b334fc2219)
@@ -1,3 +1,3 @@
-/********************************************************************\
+  /********************************************************************\
   * BitlBee -- An IRC to other IM-networks gateway                     *
   *                                                                    *
@@ -20,6 +20,6 @@
   You should have received a copy of the GNU General Public License with
   the Debian GNU/Linux distribution in /usr/share/common-licenses/GPL;
-  if not, write to the Free Software Foundation, Inc., 51 Franklin St.,
-  Fifth Floor, Boston, MA  02110-1301  USA
+  if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+  Suite 330, Boston, MA  02111-1307  USA
 */
 
@@ -27,171 +27,142 @@
 #include "bitlbee.h"
 
-static void query_display(irc_t *irc, query_t *q);
-static query_t *query_default(irc_t *irc);
+static void query_display( irc_t *irc, query_t *q );
+static query_t *query_default( irc_t *irc );
 
-query_t *query_add(irc_t *irc, struct im_connection *ic, char *question,
-                   query_callback yes, query_callback no, query_callback free,
-                   void *data)
+query_t *query_add( irc_t *irc, struct gaim_connection *gc, char *question, void *yes, void *no, void *data )
 {
-	query_t *q = g_new0(query_t, 1);
-
-	q->ic = ic;
-	q->question = g_strdup(question);
+	query_t *q = g_new0( query_t, 1 );
+	
+	q->gc = gc;
+	q->question = g_strdup( question );
 	q->yes = yes;
 	q->no = no;
-	q->free = free;
 	q->data = data;
-
-	if (strchr(irc->umode, 'b') != NULL) {
-		char *s;
-
-		/* At least for the machine-parseable version, get rid of
-		   newlines to make "parsing" easier. */
-		for (s = q->question; *s; s++) {
-			if (*s == '\r' || *s == '\n') {
-				*s = ' ';
-			}
-		}
+	
+	if( irc->queries )
+	{
+		query_t *l = irc->queries;
+		
+		while( l->next ) l = l->next;
+		l->next = q;
 	}
-
-	if (irc->queries) {
-		query_t *l = irc->queries;
-
-		while (l->next) {
-			l = l->next;
-		}
-		l->next = q;
-	} else {
+	else
+	{
 		irc->queries = q;
 	}
-
-	if (g_strcasecmp(set_getstr(&irc->b->set, "query_order"), "lifo") == 0 || irc->queries == q) {
-		query_display(irc, q);
-	}
-
-	return(q);
+	
+	if( g_strcasecmp( set_getstr( irc, "query_order" ), "lifo" ) == 0 || irc->queries == q )
+		query_display( irc, q );
+	
+	return( q );
 }
 
-void query_del(irc_t *irc, query_t *q)
+void query_del( irc_t *irc, query_t *q )
 {
 	query_t *l;
-
-	if (irc->queries == q) {
+	
+	if( irc->queries == q )
+	{
 		irc->queries = q->next;
-	} else {
-		for (l = irc->queries; l; l = l->next) {
-			if (l->next == q) {
+	}
+	else
+	{
+		for( l = irc->queries; l; l = l->next )
+		{
+			if( l->next == q )
+			{
 				l->next = q->next;
 				break;
 			}
 		}
-
-		if (!l) {
+		
+		if( !l )
 			return; /* Hrmmm... */
-		}
 	}
-
-	g_free(q->question);
-	if (q->free && q->data) {
-		q->free(q->data);
-	}
-	g_free(q);
+	
+	g_free( q->question );
+	if( q->data ) g_free( q->data ); /* Memory leak... */
+	g_free( q );
 }
 
-void query_del_by_conn(irc_t *irc, struct im_connection *ic)
+void query_del_by_gc( irc_t *irc, struct gaim_connection *gc )
 {
 	query_t *q, *n, *def;
 	int count = 0;
-
-	if (!ic) {
-		return;
-	}
-
+	
 	q = irc->queries;
-	def = query_default(irc);
-
-	while (q) {
-		if (q->ic == ic) {
+	def = query_default( irc );
+	
+	while( q )
+	{
+		if( q->gc == gc )
+		{
 			n = q->next;
-			query_del(irc, q);
+			query_del( irc, q );
 			q = n;
-
-			count++;
-		} else {
+			
+			count ++;
+		}
+		else
+		{
 			q = q->next;
 		}
 	}
-
-	if (count > 0) {
-		imcb_log(ic, "Flushed %d unanswered question(s) for this connection.", count);
-	}
-
-	q = query_default(irc);
-	if (q && q != def) {
-		query_display(irc, q);
-	}
+	
+	if( count > 0 )
+		serv_got_crap( gc, "Flushed %d unanswered question(s) for this connection.", count );
+	
+	q = query_default( irc );
+	if( q && q != def )
+		query_display( irc, q );
 }
 
-void query_answer(irc_t *irc, query_t *q, int ans)
+void query_answer( irc_t *irc, query_t *q, int ans )
 {
 	int disp = 0;
-
-	if (!q) {
-		q = query_default(irc);
+	
+	if( !q )
+	{
+		q = query_default( irc );
 		disp = 1;
 	}
-	if (ans) {
-		if (q->ic) {
-			imcb_log(q->ic, "Accepted: %s", q->question);
-		} else {
-			irc_rootmsg(irc, "Accepted: %s", q->question);
-		}
-		if (q->yes) {
-			q->yes(q->data);
-		}
-	} else {
-		if (q->ic) {
-			imcb_log(q->ic, "Rejected: %s", q->question);
-		} else {
-			irc_rootmsg(irc, "Rejected: %s", q->question);
-		}
-		if (q->no) {
-			q->no(q->data);
-		}
+	
+	if( ans )
+	{
+		q->yes( NULL, q->data );
+		irc_usermsg( irc, "Accepted: %s", q->question );
+	}
+	else
+	{
+		q->no( NULL, q->data );
+		irc_usermsg( irc, "Rejected: %s", q->question );
 	}
 	q->data = NULL;
-
-	query_del(irc, q);
-
-	if (disp && (q = query_default(irc))) {
-		query_display(irc, q);
-	}
+	
+	query_del( irc, q );
+	
+	if( disp && ( q = query_default( irc ) ) )
+		query_display( irc, q );
 }
 
-static void query_display(irc_t *irc, query_t *q)
+static void query_display( irc_t *irc, query_t *q )
 {
-	if (q->ic) {
-		imcb_log(q->ic,
-		         "New request: %s\nYou can use the \2yes\2/\2no\2 commands to accept/reject this request.",
-		         q->question);
-	} else {
-		irc_rootmsg(irc,
-		            "New request: %s\nYou can use the \2yes\2/\2no\2 commands to accept/reject this request.",
-		            q->question);
-	}
+	if( q->gc )
+		irc_usermsg( irc, "Question on %s connection (handle %s):", proto_name[q->gc->protocol], q->gc->username );
+	else
+		irc_usermsg( irc, "Question:" );
+	
+	irc_usermsg( irc, "%s\nYou can use the yes/no commands to answer this question.", q->question );
 }
 
-static query_t *query_default(irc_t *irc)
+static query_t *query_default( irc_t *irc )
 {
 	query_t *q;
-
-	if (g_strcasecmp(set_getstr(&irc->b->set, "query_order"), "fifo") == 0) {
+	
+	if( g_strcasecmp( set_getstr( irc, "query_order" ), "fifo" ) == 0 )
 		q = irc->queries;
-	} else {
-		for (q = irc->queries; q && q->next; q = q->next) {
-			;
-		}
-	}
-
-	return(q);
+	else
+		for( q = irc->queries; q && q->next; q = q->next );
+	
+	return( q );
 }
