diff -urN src.bak/textview.c src/textview.c
--- src.bak/textview.c	Sun Apr 28 09:55:58 2002
+++ src/textview.c	Mon Apr 29 13:59:52 2002
@@ -1695,7 +1695,9 @@

 	if (event && 
 	    ((event->button == 1 && textview->last_buttonpress == GDK_2BUTTON_PRESS)
-	     || event->button == 2 || event->button == 3)) {
+		 || (event->button ==1 && event->state == GDK_SHIFT_MASK)
+	     || event->button == 2 
+		 || event->button == 3)) {
 		GSList *cur;

 		/* double click seems to set the cursor after the current
@@ -1711,7 +1713,7 @@
 			if (textview->cur_pos >= uri->start &&
 			    textview->cur_pos <  uri->end) {
 				if (!g_strncasecmp(uri->uri, "mailto:", 7)) {
-					if (event->button == 3) {
+					if (event->button == 3 && (!event->state == GDK_SHIFT_MASK)) {
 						gchar *fromname, *fromaddress;
 						GdkEventButton tmpev;	
 						
diff -urN src.bak/compose.c src/compose.c
--- src.bak/compose.c	Sat Apr 27 11:11:10 2002
+++ src/compose.c	Mon Apr 29 12:23:34 2002
@@ -1355,9 +1355,16 @@
 	}
 	header = prefs_common.trans_hdr ? gettext(header) : header;
 #ifdef WIN32
-	locale_to_utf8(&address);
-#endif
+	{
+		gchar *p_address;
+		p_address = g_strdup( address );
+		locale_to_utf8(&p_address);
+		compose_add_header_entry(compose, header, (gchar *)p_address);
+		g_free(p_address);
+	}
+#else
 	compose_add_header_entry(compose, header, (gchar *)address);
+#endif
 }

 static void compose_entries_set(Compose *compose, const gchar *mailto)
diff -urN src.bak/summary_search.c src/summary_search.c
--- src.bak/summary_search.c	Sun Apr 28 15:30:08 2002
+++ src/summary_search.c	Mon Apr 29 11:52:36 2002
@@ -255,9 +255,15 @@
 	else
 		WCSFindFunc = wcscasestr;

+#ifdef WIN32
+	fromwcs = gtkwcs2winwcs( GTK_ENTRY(from_entry)->text );
+	towcs   = gtkwcs2winwcs( GTK_ENTRY(to_entry)->text );
+	subjwcs = gtkwcs2winwcs( GTK_ENTRY(subject_entry)->text );
+#else
 	fromwcs = (wchar_t *)GTK_ENTRY(from_entry)->text;
 	towcs   = (wchar_t *)GTK_ENTRY(to_entry)->text;
 	subjwcs = (wchar_t *)GTK_ENTRY(subject_entry)->text;
+#endif
 	body_str = gtk_entry_get_text(GTK_ENTRY(body_entry));

 	if (search_all) {
diff -urN src.bak/utils.c src/utils.c
--- src.bak/utils.c	Sun Apr 28 19:23:40 2002
+++ src/utils.c	Mon Apr 29 11:59:00 2002
@@ -2754,4 +2754,23 @@
 	return(TRUE);
 }

+//----------------------------------------------------------------------
+/* GTK_ENTRY(any_entry)->text returns a strange wchar_t under win:
+ * every character (as int!) is followed by a \0 (also int).
+ * A hexdump of 'ABC' looks like : 00.40 00.00 00.41 00.00 00.42 00.00
+ * It should be : 00.40 00.41 00.42
+ */
+wchar_t  *gtkwcs2winwcs(wchar_t *gtkwcs) {
+	int i=0;
+	wchar_t *dest;
+	size_t destsize = 0;

+	while( gtkwcs[i] ) { destsize++; i+=2; }
+	dest = g_malloc(destsize+2);
+	for (i=0; i<destsize; i++) { dest[i] = gtkwcs[i*2]; }
+	dest[i] = 0;
+	return( dest );
+}
+//----------------------------------------------------------------------

 #endif
diff -urN src.bak/utils.h src/utils.h
--- src.bak/utils.h	Sun Apr 28 16:56:02 2002
+++ src/utils.h	Mon Apr 29 11:24:26 2002
@@ -380,4 +380,6 @@
 void stop_mswin_helper(void);
 static gint mswin_helper_timeout_cb(gpointer);

+wchar_t  *gtkwcs2winwcs(wchar_t *gtkwcs);

 #endif /* __UTILS_H__ */

