SF.net SVN: geany:[4925] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sun May 16 17:44:51 UTC 2010


Revision: 4925
          http://geany.svn.sourceforge.net/geany/?rev=4925&view=rev
Author:   eht16
Date:     2010-05-16 17:44:51 +0000 (Sun, 16 May 2010)

Log Message:
-----------
Implement reading and evaluating hidden file attribute on Windows.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/plugins/filebrowser.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2010-05-16 17:44:40 UTC (rev 4924)
+++ trunk/ChangeLog	2010-05-16 17:44:51 UTC (rev 4925)
@@ -18,6 +18,8 @@
    src/makefile.win32:
    Add new GTK define also for Mingw cross compilation and
    makefile.win32 based Windows builds.
+ * plugins/filebrowser.c:
+   Implement reading and evaluating hidden file attribute on Windows.
 
 
 2010-05-15  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>

Modified: trunk/plugins/filebrowser.c
===================================================================
--- trunk/plugins/filebrowser.c	2010-05-16 17:44:40 UTC (rev 4924)
+++ trunk/plugins/filebrowser.c	2010-05-16 17:44:51 UTC (rev 4925)
@@ -29,6 +29,9 @@
 
 #include <gdk/gdkkeysyms.h>
 
+#ifdef G_OS_WIN32
+# include <windows.h>
+#endif
 
 GeanyPlugin		*geany_plugin;
 GeanyData		*geany_data;
@@ -99,16 +102,35 @@
 };
 
 
+#ifdef G_OS_WIN32
+static gboolean win32_check_hidden(const gchar *filename)
+{
+	DWORD attrs;
+	static wchar_t w_filename[MAX_PATH];
+	MultiByteToWideChar(CP_UTF8, 0, filename, -1, w_filename, sizeof(w_filename));
+	attrs = GetFileAttributesW(w_filename);
+	if (attrs != INVALID_FILE_ATTRIBUTES && attrs & FILE_ATTRIBUTE_HIDDEN)
+		return TRUE;
+	return FALSE;
+}
+#endif
+
+
 /* Returns: whether name should be hidden. */
-static gboolean check_hidden(const gchar *base_name)
+static gboolean check_hidden(const gchar *filename, const gchar *base_name)
 {
 	gsize len;
 
 	if (! NZV(base_name))
 		return FALSE;
 
+#ifdef G_OS_WIN32
+	if (win32_check_hidden(filename))
+		return TRUE;
+#else
 	if (base_name[0] == '.')
 		return TRUE;
+#endif
 
 	len = strlen(base_name);
 	if (base_name[len - 1] == '~')
@@ -154,9 +176,6 @@
 	const gchar *sep;
 	gboolean dir;
 
-	if (! show_hidden_files && check_hidden(name))
-		return;
-
 	sep = (utils_str_equal(current_dir, "/")) ? "" : G_DIR_SEPARATOR_S;
 	fname = g_strconcat(current_dir, sep, name, NULL);
 	dir = g_file_test(fname, G_FILE_TEST_IS_DIR);
@@ -164,6 +183,13 @@
 	utf8_name = utils_get_utf8_from_locale(name);
 	g_free(fname);
 
+	if (! show_hidden_files && check_hidden(utf8_fullname, name))
+	{
+		g_free(utf8_name);
+		g_free(utf8_fullname);
+		return;
+	}
+
 	if (dir)
 	{
 		if (last_dir_iter == NULL)


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