SF.net SVN: geany: [2731] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sat Jun 28 08:15:19 UTC 2008


Revision: 2731
          http://geany.svn.sourceforge.net/geany/?rev=2731&view=rev
Author:   eht16
Date:     2008-06-28 01:15:18 -0700 (Sat, 28 Jun 2008)

Log Message:
-----------
When opening files remotely using the socket, handle filename encoding better and try to auto-detect the used encoding as it might be different each time (hopefully closes #2003980).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/socket.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-06-27 17:54:36 UTC (rev 2730)
+++ trunk/ChangeLog	2008-06-28 08:15:18 UTC (rev 2731)
@@ -1,3 +1,11 @@
+2008-06-28  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * src/socket.c:
+   When opening files remotely using the socket, handle filename
+   encoding better and try to auto-detect the used encoding as it
+   might be different each time (hopefully closes #2003980).
+
+
 2008-06-27  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/interface.c, src/callbacks.c, src/callbacks.h, geany.glade:

Modified: trunk/src/socket.c
===================================================================
--- trunk/src/socket.c	2008-06-27 17:54:36 UTC (rev 2730)
+++ trunk/src/socket.c	2008-06-28 08:15:18 UTC (rev 2731)
@@ -77,6 +77,7 @@
 #include "support.h"
 #include "ui_utils.h"
 #include "utils.h"
+#include "encodings.h"
 
 
 
@@ -472,6 +473,35 @@
 #endif
 
 
+static void handle_input_filename(const gchar *buf)
+{
+	gchar *utf8_filename, *locale_filename;
+
+	/* we never know how the input is encoded, so do the best auto detection we can */
+	if (! g_utf8_validate(buf, -1, NULL))
+		utf8_filename = encodings_convert_to_utf8(buf, -1, NULL);
+	else
+		utf8_filename = g_strdup(buf);
+
+	locale_filename = utils_get_locale_from_utf8(utf8_filename);
+
+	if (g_file_test(locale_filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_SYMLINK))
+		document_open_file(locale_filename, FALSE, NULL, NULL);
+	else
+	{	/* create new file if it doesn't exist */
+		GeanyDocument *doc;
+
+		doc = document_new_file(utf8_filename, NULL, NULL);
+		if (doc != NULL)
+			ui_add_recent_file(doc->file_name);
+		else
+			geany_debug("got data from socket, but it does not look like a filename");
+	}
+	g_free(utf8_filename);
+	g_free(locale_filename);
+}
+
+
 gboolean socket_lock_input_cb(GIOChannel *source, GIOCondition condition, gpointer data)
 {
 	gint fd, sock;
@@ -491,20 +521,7 @@
 		{
 			while (socket_fd_gets(sock, buf, sizeof(buf)) != -1 && *buf != '.')
 			{
-				g_strstrip(buf); /* remove \n char */
-
-				if (g_file_test(buf, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_SYMLINK))
-					document_open_file(buf, FALSE, NULL, NULL);
-				else
-				{	/* create new file if it doesn't exist */
-					GeanyDocument *doc;
-
-					doc = document_new_file(buf, NULL, NULL);
-					if (doc != NULL)
-						ui_add_recent_file(doc->file_name);
-					else
-						geany_debug("got data from socket, but it does not look like a filename");
-				}
+				handle_input_filename(g_strstrip(buf));
 			}
 
 #ifdef G_OS_WIN32


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list