summary refs log tree commit diff stats
path: root/src/fe-gtk
diff options
context:
space:
mode:
Diffstat (limited to 'src/fe-gtk')
-rw-r--r--src/fe-gtk/fe-gtk-xp.vcxproj2
-rw-r--r--src/fe-gtk/fe-gtk.c87
-rw-r--r--src/fe-gtk/fe-gtk.vcxproj2
-rw-r--r--src/fe-gtk/fkeys.c16
-rw-r--r--src/fe-gtk/gtkutil.c190
-rw-r--r--src/fe-gtk/menu.c4
-rw-r--r--src/fe-gtk/pixmaps.c2
-rw-r--r--src/fe-gtk/plugingui.c16
-rw-r--r--src/fe-gtk/setup.c6
-rw-r--r--src/fe-gtk/urlgrab.c2
10 files changed, 57 insertions, 270 deletions
diff --git a/src/fe-gtk/fe-gtk-xp.vcxproj b/src/fe-gtk/fe-gtk-xp.vcxproj
index e7ddca14..753a71f0 100644
--- a/src/fe-gtk/fe-gtk-xp.vcxproj
+++ b/src/fe-gtk/fe-gtk-xp.vcxproj
@@ -65,6 +65,7 @@
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

+      <DisableSpecificWarnings>4244;4267</DisableSpecificWarnings>

     </ClCompile>

     <Link>

       <SubSystem>Windows</SubSystem>

@@ -86,6 +87,7 @@
       <PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

+      <DisableSpecificWarnings>4244;4267</DisableSpecificWarnings>

     </ClCompile>

     <Link>

       <SubSystem>Windows</SubSystem>

diff --git a/src/fe-gtk/fe-gtk.c b/src/fe-gtk/fe-gtk.c
index 8d6577a6..d1f23002 100644
--- a/src/fe-gtk/fe-gtk.c
+++ b/src/fe-gtk/fe-gtk.c
@@ -162,7 +162,6 @@ fe_args (int argc, char *argv[])
 	GError *error = NULL;
 	GOptionContext *context;
 #ifdef WIN32
-#define ARGBUF_SIZE 2048
 	char *buffer;
 #endif
 
@@ -187,35 +186,26 @@ fe_args (int argc, char *argv[])
 		{
 			if (strstr (error->message, "--help-all") != NULL)
 			{
-				buffer = (char*) malloc (ARGBUF_SIZE);
-				if (snprintf (buffer, ARGBUF_SIZE, g_option_context_get_help (context, FALSE, NULL)))
-				{
-					gtk_init (&argc, &argv);
-					create_msg_dialog ("Long Help", buffer);
-				}
-				free (buffer);
+				buffer = g_strdup_printf (g_option_context_get_help (context, FALSE, NULL));
+				gtk_init (&argc, &argv);
+				create_msg_dialog ("Long Help", buffer);
+				g_free (buffer);
 				return 0;
 			}
 			else if (strstr (error->message, "--help") != NULL || strstr (error->message, "-?") != NULL)
 			{
-				buffer = (char*) malloc (ARGBUF_SIZE);
-				if (snprintf (buffer, ARGBUF_SIZE, g_option_context_get_help (context, TRUE, NULL)))
-				{
-					gtk_init (&argc, &argv);
-					create_msg_dialog ("Help", buffer);
-				}
-				free (buffer);
+				buffer = g_strdup_printf (g_option_context_get_help (context, TRUE, NULL));
+				gtk_init (&argc, &argv);
+				create_msg_dialog ("Help", buffer);
+				g_free (buffer);
 				return 0;
 			}
 			else 
 			{
-				buffer = (char*) malloc (ARGBUF_SIZE);
-				if (snprintf (buffer, ARGBUF_SIZE, "%s\n", error->message))
-				{
-					gtk_init (&argc, &argv);
-					create_msg_dialog ("Error", buffer);
-				}
-				free (buffer);
+				buffer = g_strdup_printf ("%s\n", error->message);
+				gtk_init (&argc, &argv);
+				create_msg_dialog ("Error", buffer);
+				g_free (buffer);
 				return 1;
 			}
 		}
@@ -234,13 +224,10 @@ fe_args (int argc, char *argv[])
 	if (arg_show_version)
 	{
 #ifdef WIN32
-		buffer = (char*) malloc (ARGBUF_SIZE);
-		if (snprintf (buffer, ARGBUF_SIZE, DISPLAY_NAME" "PACKAGE_VERSION"\n"))
-		{
-			gtk_init (&argc, &argv);
-			create_msg_dialog ("Version Information", buffer);
-		}
-		free (buffer);
+		buffer = g_strdup_printf (DISPLAY_NAME " " PACKAGE_VERSION "\n");
+		gtk_init (&argc, &argv);
+		create_msg_dialog ("Version Information", buffer);
+		g_free (buffer);
 #else
 		printf (PACKAGE_TARNAME" "PACKAGE_VERSION"\n");
 #endif
@@ -253,25 +240,20 @@ fe_args (int argc, char *argv[])
 		/* see the chdir() below */
 		char *sl, *exe = strdup (argv[0]);
 		sl = strrchr (exe, '\\');
-		buffer = (char*) malloc (ARGBUF_SIZE);
 		if (sl)
 		{
 			*sl = 0;
-			if (snprintf (buffer, ARGBUF_SIZE, "%s\\plugins\n", exe))
-			{
-				gtk_init (&argc, &argv);
-				create_msg_dialog ("Plugin Auto-load Directory", buffer);
-			}
+			buffer = g_strdup_printf ("%s\\plugins\n", exe);
+			gtk_init (&argc, &argv);
+			create_msg_dialog ("Plugin Auto-load Directory", buffer);
 		}
 		else
 		{
-			if (snprintf (buffer, ARGBUF_SIZE, ".\\plugins\n"))
-			{
-				gtk_init (&argc, &argv);
-				create_msg_dialog ("Plugin Auto-load Directory", buffer);
-			}
+			buffer = g_strdup(".\\plugins\n");
+			gtk_init (&argc, &argv);
+			create_msg_dialog ("Plugin Auto-load Directory", buffer);
 		}
-		free (buffer);
+		g_free (buffer);
 #else
 		printf ("%s\n", HEXCHATLIBDIR"/plugins");
 #endif
@@ -281,15 +263,12 @@ fe_args (int argc, char *argv[])
 	if (arg_show_config)
 	{
 #ifdef WIN32
-		buffer = (char*) malloc (ARGBUF_SIZE);
-		if (snprintf (buffer, ARGBUF_SIZE, "%s\n", get_xdir_fs ()))
-		{
-			gtk_init (&argc, &argv);
-			create_msg_dialog ("User Config Directory", buffer);
-		}
-		free (buffer);
+		buffer = g_strdup_printf ("%s\n", get_xdir ());
+		gtk_init (&argc, &argv);
+		create_msg_dialog ("User Config Directory", buffer);
+		g_free (buffer);
 #else
-		printf ("%s\n", get_xdir_fs ());
+		printf ("%s\n", get_xdir ());
 #endif
 		return 0;
 	}
@@ -313,12 +292,14 @@ fe_args (int argc, char *argv[])
 	}
 #endif
 
-	if (arg_cfgdir)	/* we want filesystem encoding */
+	if (arg_cfgdir)
 	{
-		xdir_fs = strdup (arg_cfgdir);
-		if (xdir_fs[strlen (xdir_fs) - 1] == '/')
+		if (xdir)
+			g_free (xdir);
+		xdir = strdup (arg_cfgdir);
+		if (xdir[strlen (xdir) - 1] == '/')
 		{
-			xdir_fs[strlen (xdir_fs) - 1] = 0;
+			xdir[strlen (xdir) - 1] = 0;
 		}
 		g_free (arg_cfgdir);
 	}
diff --git a/src/fe-gtk/fe-gtk.vcxproj b/src/fe-gtk/fe-gtk.vcxproj
index 3a331374..6963134a 100644
--- a/src/fe-gtk/fe-gtk.vcxproj
+++ b/src/fe-gtk/fe-gtk.vcxproj
@@ -62,6 +62,7 @@
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

+	  <DisableSpecificWarnings>4244;4267</DisableSpecificWarnings>

     </ClCompile>

     <Link>

       <SubSystem>Windows</SubSystem>

@@ -83,6 +84,7 @@
       <PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <AdditionalIncludeDirectories>$(DepsRoot)\include;$(Glib);$(Gtk);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

+	  <DisableSpecificWarnings>4244;4267</DisableSpecificWarnings>

     </ClCompile>

     <Link>

       <SubSystem>Windows</SubSystem>

diff --git a/src/fe-gtk/fkeys.c b/src/fe-gtk/fkeys.c
index f86a59f8..4e0cd4a3 100644
--- a/src/fe-gtk/fkeys.c
+++ b/src/fe-gtk/fkeys.c
@@ -1019,8 +1019,8 @@ key_load_kbs (char *filename)
 				free (ibuf);
 				ibuf = malloc (1024);
 				snprintf (ibuf, 1024,
-							 _("Unknown keyname %s in key bindings config file\nLoad aborted, please fix %s/keybindings.conf\n"),
-							 buf, get_xdir_utf8 ());
+							 _("Unknown keyname %s in key bindings config file\nLoad aborted, please fix %s" G_DIR_SEPARATOR_S "keybindings.conf\n"),
+							 buf, get_xdir ());
 				fe_message (ibuf, FE_MSG_ERROR);
 				free (ibuf);
 				return 2;
@@ -1057,8 +1057,8 @@ key_load_kbs (char *filename)
 				free (ibuf);
 				ibuf = malloc (1024);
 				snprintf (ibuf, 1024,
-							 _("Unknown action %s in key bindings config file\nLoad aborted, Please fix %s/keybindings\n"),
-							 buf, get_xdir_utf8 ());
+							 _("Unknown action %s in key bindings config file\nLoad aborted, Please fix %s" G_DIR_SEPARATOR_S "keybindings\n"),
+							 buf, get_xdir ());
 				fe_message (ibuf, FE_MSG_ERROR);
 				free (ibuf);
 				return 3;
@@ -1078,8 +1078,8 @@ key_load_kbs (char *filename)
 				free (ibuf);
 				ibuf = malloc (1024);
 				snprintf (ibuf, 1024,
-							 _("Expecting Data line (beginning Dx{:|!}) but got:\n%s\n\nLoad aborted, Please fix %s/keybindings\n"),
-							 buf, get_xdir_utf8 ());
+							 _("Expecting Data line (beginning Dx{:|!}) but got:\n%s\n\nLoad aborted, Please fix %s" G_DIR_SEPARATOR_S "keybindings\n"),
+							 buf, get_xdir ());
 				fe_message (ibuf, FE_MSG_ERROR);
 				free (ibuf);
 				return 4;
@@ -1148,8 +1148,8 @@ key_load_kbs (char *filename)
 		abort ();*/
 	snprintf (ibuf, 1024,
 						_("Key bindings config file is corrupt, load aborted\n"
-								 "Please fix %s/keybindings.conf\n"),
-						 get_xdir_utf8 ());
+								 "Please fix %s" G_DIR_SEPARATOR_S "keybindings.conf\n"),
+						 get_xdir ());
 	fe_message (ibuf, FE_MSG_ERROR);
 	free (ibuf);
 	return 5;
diff --git a/src/fe-gtk/gtkutil.c b/src/fe-gtk/gtkutil.c
index e44c3d59..fa88ac79 100644
--- a/src/fe-gtk/gtkutil.c
+++ b/src/fe-gtk/gtkutil.c
@@ -186,192 +186,6 @@ gtkutil_file_req_response (GtkWidget *dialog, gint res, struct file_req *freq)
 	}
 }
 
-#if 0	/* native file dialogs */
-#ifdef WIN32
-static int
-win32_openfile (char *file_buf, int file_buf_len, char *title_text, char *filter,
-			   int multiple)
-{
-	OPENFILENAME o;
-
-	memset (&o, 0, sizeof (o));
-
-	o.lStructSize = sizeof (o);
-	o.lpstrFilter = filter;
-	o.lpstrFile = file_buf;
-	o.nMaxFile = file_buf_len;
-	o.lpstrTitle = title_text;
-	o.Flags = 0x02000000 | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
-				OFN_NOCHANGEDIR | OFN_EXPLORER | OFN_LONGNAMES | OFN_NONETWORKBUTTON;
-	if (multiple)
-	{
-		o.Flags |= OFN_ALLOWMULTISELECT;
-	}
-
-	return GetOpenFileName (&o);
-}
-
-static int
-win32_savefile (char *file_buf, int file_buf_len, char *title_text, char *filter,
-               int multiple)
-{
-	/* we need the filter to get the default filename. it is from fe-gtk.c (fe_confirm);
-	 * but that filter is actually the whole filename, so apply an empty filter and all good.
-	 * in win32_thread2 we copy the filter ( = the filename) after the last dir into our
-	 * LPTSTR file buffer to make it actually work. the docs for this amazingly retard api:
-	 *
-	 * http://msdn.microsoft.com/en-us/library/ms646839%28VS.85%29.aspx
-	 */
-
-	OPENFILENAME o;
-
-	memset (&o, 0, sizeof (o));
-
-	o.lStructSize = sizeof (o);
-	o.lpstrFilter = "All files\0*.*\0\0";
-	o.lpstrFile = file_buf;
-	o.nMaxFile = file_buf_len;
-	o.lpstrTitle = title_text;
-	o.Flags = 0x02000000 | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY |
-				OFN_NOCHANGEDIR | OFN_EXPLORER | OFN_LONGNAMES | OFN_NONETWORKBUTTON;
-	if (multiple)
-	{
-		o.Flags |= OFN_ALLOWMULTISELECT;
-	}
-
-	return GetSaveFileName (&o);
-}
-
-static void *
-win32_thread (struct file_req *freq)
-{
-	char buf[1024 + 32];
-	char file[1024];
-
-	memset (file, 0, sizeof (file));
-	safe_strcpy (file, last_dir, sizeof (file));
-
-	if (win32_openfile (file, sizeof (file), freq->title, freq->filter, freq->multiple))
-	{
-		if (freq->multiple)
-		{
-			char *f = file;
-
-			if (f[strlen (f) + 1] == 0)	/* only selected one file */
-			{
-				snprintf (buf, sizeof (buf), "1\n%s\n", file);
-				write (freq->th->pipe_fd[1], buf, strlen (buf));
-			} else
-			{
-				f += strlen (f) + 1; /* skip first, it's only the dir */
-				while (f[0])
-				{
-					snprintf (buf, sizeof (buf), "1\n%s\\%s\n", /*dir!*/file, f);
-					write (freq->th->pipe_fd[1], buf, strlen (buf));
-					f += strlen (f) + 1;
-				}
-			}
-
-		} else
-		{
-			snprintf (buf, sizeof (buf), "1\n%s\n", file);
-			write (freq->th->pipe_fd[1], buf, strlen (buf));
-		}
-	}
-
-	write (freq->th->pipe_fd[1], "0\n", 2);
-	Sleep (2000);
-
-	return NULL;
-}
-
-static void *
-win32_thread2 (struct file_req *freq)
-{
-	char buf[1024 + 32];
-	char file[1024];
-
-	memset (file, 0, sizeof (file));
-	safe_strcpy (file, last_dir, sizeof (file));
-	safe_strcpy (file, freq->filter, sizeof (file));
-
-	if (win32_savefile (file, sizeof (file), freq->title, NULL, freq->multiple))
-	{
-		if (freq->multiple)
-		{
-			char *f = file;
-
-			if (f[strlen (f) + 1] == 0)    /* only selected one file */
-			{
-				snprintf (buf, sizeof (buf), "1\n%s\n", file);
-				write (freq->th->pipe_fd[1], buf, strlen (buf));
-			} else
-			{
-				f += strlen (f) + 1; /* skip first, it's only the dir */
-				while (f[0])
-				{
-					snprintf (buf, sizeof (buf), "1\n%s\\%s\n", /*dir!*/file, f);
-					write (freq->th->pipe_fd[1], buf, strlen (buf));
-					f += strlen (f) + 1;
-				}
-			}
-
-		} else
-		{
-			snprintf (buf, sizeof (buf), "1\n%s\n", file);
-			write (freq->th->pipe_fd[1], buf, strlen (buf));
-		}
-	}
-
-	write (freq->th->pipe_fd[1], "0\n", 2);
-	Sleep (2000);
-
-	return NULL;
-}
-
-static gboolean
-win32_close_pipe (int fd)
-{
-	close (fd);
-	return 0;
-}
-
-static gboolean
-win32_read_thread (GIOChannel *source, GIOCondition cond, struct file_req *freq)
-{
-	char buf[512];
-	char *file;
-
-	waitline2 (source, buf, sizeof buf);
-
-	switch (buf[0])
-	{
-	case '0':	/* filedialog has closed */
-		freq->callback (freq->userdata, NULL);
-		break;
-
-	case '1':	/* got a filename! */
-		waitline2 (source, buf, sizeof buf);
-		file = g_filename_to_utf8 (buf, -1, 0, 0, 0);
-		freq->callback (freq->userdata, file);
-		g_free (file);
-		return TRUE;
-	}
-
-	/* it doesn't work to close them here, because of the weird
-		way giowin32 works. We must _return_ before closing them */
-	g_timeout_add(3000, (GSourceFunc)win32_close_pipe, freq->th->pipe_fd[0]);
-	g_timeout_add(2000, (GSourceFunc)win32_close_pipe, freq->th->pipe_fd[1]);
-
-	g_free (freq->title);
-	free (freq->th);
-	free (freq);
-
-	return FALSE;
-}
-#endif
-#endif	/* native file dialogs */
-
 void
 gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter, char *extensions,
 						int flags)
@@ -467,7 +281,7 @@ gtkutil_file_req (const char *title, void *callback, void *userdata, char *filte
 		gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), last_dir);
 	if (flags & FRF_ADDFOLDER)
 		gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog),
-														  get_xdir_fs (), NULL);
+														  get_xdir (), NULL);
 	if (flags & FRF_CHOOSEFOLDER)
 	{
 		gtk_file_chooser_set_action (GTK_FILE_CHOOSER (dialog), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
@@ -491,7 +305,7 @@ gtkutil_file_req (const char *title, void *callback, void *userdata, char *filte
 		/* by default, open the config folder */
 		else
 		{
-			gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), get_xdir_fs ());
+			gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), get_xdir ());
 		}
 	}
 
diff --git a/src/fe-gtk/menu.c b/src/fe-gtk/menu.c
index 8b25f4ed..dbdd1997 100644
--- a/src/fe-gtk/menu.c
+++ b/src/fe-gtk/menu.c
@@ -286,8 +286,8 @@ menu_quick_item (char *cmd, char *label, GtkWidget * menu, int flags,
 				img = gtk_image_new_from_file (icon);
 			else
 			{
-				/* try relative to ~/.xchat2 */
-				path = g_strdup_printf ("%s/%s", get_xdir_fs (), icon);
+				/* try relative to <xdir> */
+				path = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "%s", get_xdir (), icon);
 				if (access (path, R_OK) == 0)
 					img = gtk_image_new_from_file (path);
 				else
diff --git a/src/fe-gtk/pixmaps.c b/src/fe-gtk/pixmaps.c
index 1a5add8c..f1b39b02 100644
--- a/src/fe-gtk/pixmaps.c
+++ b/src/fe-gtk/pixmaps.c
@@ -105,7 +105,7 @@ load_pixmap (const char *filename, const char *name, int has_inline)
 	gchar *path;
 	GdkPixbuf *pixbuf;
 
-	path = g_strdup_printf ("%s/icons/%s.png", get_xdir_utf8 (), filename);
+	path = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "icons" G_DIR_SEPARATOR_S "%s.png", get_xdir (), filename);
 	pixbuf = gdk_pixbuf_new_from_file (path, 0);
 	g_free (path);
 
diff --git a/src/fe-gtk/plugingui.c b/src/fe-gtk/plugingui.c
index a488b19e..e344c336 100644
--- a/src/fe-gtk/plugingui.c
+++ b/src/fe-gtk/plugingui.c
@@ -147,30 +147,18 @@ plugingui_load_cb (session *sess, char *file)
 void
 plugingui_load (void)
 {
-	/* let's do it the Perl way */
-	const char *xdir;
 	char *sub_dir;
 
-	xdir = get_xdir_utf8 ();
-	sub_dir = malloc (strlen (xdir) + 8);
-	strcpy (sub_dir, xdir);
-	strcat (sub_dir, "/addons");
+	sub_dir = g_strdup_printf ("%s" G_DIR_SEPARATOR_S "addons", get_xdir());
 
 	gtkutil_file_req (_("Select a Plugin or Script to load"), plugingui_load_cb, current_sess,
-#if 0	/* native file dialogs */
-#ifdef WIN32
-							"Plugins and Scripts\0*.dll;*.lua;*.pl;*.py;*.tcl\0"
-							"All files\0*.*\0\0", 0);
-#else
-#endif
-#endif	/* native file dialogs */
 #ifdef WIN32
 							sub_dir, "*.dll;*.lua;*.pl;*.py;*.tcl", FRF_ADDFOLDER|FRF_FILTERISINITIAL|FRF_EXTENSIONS);
 #else
 							sub_dir, "*.so;*.lua;*.pl;*.py;*.tcl", FRF_ADDFOLDER|FRF_FILTERISINITIAL|FRF_EXTENSIONS);
 #endif
 
-	free (sub_dir);
+	g_free (sub_dir);
 }
 
 static void
diff --git a/src/fe-gtk/setup.c b/src/fe-gtk/setup.c
index 2e5281f7..d3964557 100644
--- a/src/fe-gtk/setup.c
+++ b/src/fe-gtk/setup.c
@@ -1245,7 +1245,7 @@ setup_create_frame (GtkWidget **left, GtkWidget *box)
 static void
 open_data_cb (GtkWidget *button, gpointer data)
 {
-	fe_open_url (get_xdir_utf8 ());
+	fe_open_url (get_xdir ());
 }
 
 static GtkWidget *
@@ -2135,8 +2135,8 @@ setup_apply_real (int new_pix, int do_ulist, int do_layout)
 	unslash (prefs.hex_dcc_dir);
 	unslash (prefs.hex_dcc_completed_dir);
 
-	mkdir_utf8 (prefs.hex_dcc_dir);
-	mkdir_utf8 (prefs.hex_dcc_completed_dir);
+	g_mkdir (prefs.hex_dcc_dir, 0700);
+	g_mkdir (prefs.hex_dcc_completed_dir, 0700);
 
 	if (new_pix)
 	{
diff --git a/src/fe-gtk/urlgrab.c b/src/fe-gtk/urlgrab.c
index 68d796eb..89ea374f 100644
--- a/src/fe-gtk/urlgrab.c
+++ b/src/fe-gtk/urlgrab.c
@@ -147,7 +147,7 @@ static void
 url_button_save (void)
 {
 	gtkutil_file_req (_("Select an output filename"),
-							url_save_callback, NULL, get_xdir_utf8 (), NULL, FRF_WRITE|FRF_FILTERISINITIAL);
+							url_save_callback, NULL, get_xdir (), NULL, FRF_WRITE|FRF_FILTERISINITIAL);
 }
 
 void