# HG changeset patch
# User Chong Yidong <cyd@stupidchicken.com>
# Date 1180670427 0
# Node ID 721bf3ce5d39a46c5dce8dd690b37b7398231dc7
# Parent  aed6c0c2fab2b39bf6239bf690d2436ed7ae55e8
(x_set_name_internal): Save encoded name before x_encode_text in case
string data is relocated.

diff -r aed6c0c2fab2 -r 721bf3ce5d39 src/xfns.c
--- a/src/xfns.c	Fri Jun 01 04:00:14 2007 +0000
+++ b/src/xfns.c	Fri Jun 01 04:00:27 2007 +0000
@@ -1605,6 +1605,16 @@
 	int bytes, stringp;
         int do_free_icon_value = 0, do_free_text_value = 0;
 	Lisp_Object coding_system;
+#ifdef USE_GTK
+	Lisp_Object encoded_name;
+	struct gcpro gcpro1;
+
+	/* As ENCODE_UTF_8 may cause GC and relocation of string data,
+	   we use it before x_encode_text that may return string data.  */
+	GCPRO1 (name);
+	encoded_name = ENCODE_UTF_8 (name);
+	UNGCPRO;
+#endif
 
 	coding_system = Qcompound_text;
 	/* Note: Encoding strategy
@@ -1645,7 +1655,7 @@
 
 #ifdef USE_GTK
         gtk_window_set_title (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
-                              (char *) SDATA (ENCODE_UTF_8 (name)));
+                              (char *) SDATA (encoded_name));
 #else /* not USE_GTK */
 	XSetWMName (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), &text);
 #endif /* not USE_GTK */