nautilus r14905 - in trunk: . libnautilus-private src/file-manager



Author: cosimoc
Date: Sat Jan 31 19:06:37 2009
New Revision: 14905
URL: http://svn.gnome.org/viewvc/nautilus?rev=14905&view=rev

Log:
2009-01-31  Cosimo Cecchi  <cosimoc gnome org>

	* libnautilus-private/nautilus-directory-async.c (lacks_link_info),
	(monitor_includes_file), (link_info_done), (link_info_got_data),
	(link_info_start):
	* libnautilus-private/nautilus-file-private.h:
	* libnautilus-private/nautilus-file.c (nautilus_file_clear_info),
	(nautilus_file_should_show),
	(filter_hidden_and_backup_partition_callback),
	(nautilus_file_is_foreign_link):
	* libnautilus-private/nautilus-file.h:
	* libnautilus-private/nautilus-link.c (string_array_contains),
	(nautilus_link_get_link_info_given_file_contents):
	* libnautilus-private/nautilus-link.h:
	* src/file-manager/fm-desktop-icon-view.c
	(fm_desktop_icon_view_init):
	* src/file-manager/fm-directory-view.c (fm_directory_view_init),
	(fm_directory_view_should_show_file),
	(fm_directory_view_set_show_foreign):
	* src/file-manager/fm-directory-view.h:
	* src/file-manager/fm-tree-model.c (should_show_file):
	Follow the "OnlyShowIn" and "NotShowIn" == GNOME keys for
	.desktop files,	when they are put on the desktop.
	Thanks to Federico Mena Quintero and Jared Moore (#338933).


Modified:
   trunk/ChangeLog
   trunk/libnautilus-private/nautilus-directory-async.c
   trunk/libnautilus-private/nautilus-file-private.h
   trunk/libnautilus-private/nautilus-file.c
   trunk/libnautilus-private/nautilus-file.h
   trunk/libnautilus-private/nautilus-link.c
   trunk/libnautilus-private/nautilus-link.h
   trunk/src/file-manager/fm-desktop-icon-view.c
   trunk/src/file-manager/fm-directory-view.c
   trunk/src/file-manager/fm-directory-view.h
   trunk/src/file-manager/fm-tree-model.c

Modified: trunk/libnautilus-private/nautilus-directory-async.c
==============================================================================
--- trunk/libnautilus-private/nautilus-directory-async.c	(original)
+++ trunk/libnautilus-private/nautilus-directory-async.c	Sat Jan 31 19:06:37 2009
@@ -199,7 +199,8 @@
 							       const char             *uri,
 							       const char             *name,
 							       const char             *icon,
-							       gboolean                is_launcher);
+							       gboolean                is_launcher,
+							       gboolean                is_foreign);
 static void     move_file_to_low_priority_queue               (NautilusDirectory      *directory,
 							       NautilusFile           *file);
 static void     move_file_to_extension_queue                  (NautilusDirectory      *directory,
@@ -1733,7 +1734,7 @@
 		if (nautilus_file_is_nautilus_link (file)) {
 			return TRUE;
 		} else {
-			link_info_done (file->details->directory, file, NULL, NULL, NULL, FALSE);
+			link_info_done (file->details->directory, file, NULL, NULL, NULL, FALSE, FALSE);
 			return FALSE;
 		}
 	} else {
@@ -2381,7 +2382,8 @@
 	}
 	return nautilus_file_should_show (file,
 					  monitor->monitor_hidden_files,
-					  monitor->monitor_backup_files);
+					  monitor->monitor_backup_files,
+					  TRUE);
 }
 
 static gboolean
@@ -3575,7 +3577,8 @@
 		const char *uri,
 		const char *name, 
 		const char *icon,
-		gboolean is_launcher)
+		gboolean is_launcher,
+		gboolean is_foreign)
 {
 	file->details->link_info_is_up_to_date = TRUE;
 
@@ -3593,6 +3596,7 @@
 	}
 	file->details->custom_icon = g_strdup (icon);
 	file->details->is_launcher = is_launcher;
+	file->details->is_foreign_link = is_foreign;
 	
 	nautilus_directory_async_state_changed (directory);
 }
@@ -3639,6 +3643,7 @@
 {
 	char *link_uri, *uri, *name, *icon;
 	gboolean is_launcher;
+	gboolean is_foreign;
 
 	nautilus_directory_ref (directory);
 
@@ -3646,19 +3651,20 @@
 	name = NULL;
 	icon = NULL;
 	is_launcher = FALSE;
+	is_foreign = FALSE;
 	
 	/* Handle the case where we read the Nautilus link. */
 	if (result) {
 		link_uri = nautilus_file_get_uri (file);
 		nautilus_link_get_link_info_given_file_contents (file_contents, bytes_read, link_uri,
-								 &uri, &name, &icon, &is_launcher);
+								 &uri, &name, &icon, &is_launcher, &is_foreign);
 		g_free (link_uri);
 	} else {
 		/* FIXME bugzilla.gnome.org 42433: We should report this error to the user. */
 	}
 
 	nautilus_file_ref (file);
-	link_info_done (directory, file, uri, name, icon, is_launcher);
+	link_info_done (directory, file, uri, name, icon, is_launcher, is_foreign);
 	nautilus_file_changed (file);
 	nautilus_file_unref (file);
 	
@@ -3746,7 +3752,7 @@
 	
 	/* If it's not a link we are done. If it is, we need to read it. */
 	if (!nautilus_style_link) {
-		link_info_done (directory, file, NULL, NULL, NULL, FALSE);
+		link_info_done (directory, file, NULL, NULL, NULL, FALSE, FALSE);
 	} else if (should_read_link_info_sync (file)) {
 		result = g_file_load_contents (location, NULL, &file_contents, &file_size, NULL, NULL);
 		link_info_got_data (directory, file, result, file_size, file_contents);

Modified: trunk/libnautilus-private/nautilus-file-private.h
==============================================================================
--- trunk/libnautilus-private/nautilus-file-private.h	(original)
+++ trunk/libnautilus-private/nautilus-file-private.h	Sat Jan 31 19:06:37 2009
@@ -198,6 +198,7 @@
 	eel_boolean_bit has_open_window               : 1;
 
 	eel_boolean_bit is_launcher                   : 1;
+	eel_boolean_bit is_foreign_link               : 1;
 	eel_boolean_bit is_symlink                    : 1;
 	eel_boolean_bit is_mountpoint                 : 1;
 	eel_boolean_bit is_hidden                     : 1;

Modified: trunk/libnautilus-private/nautilus-file.c
==============================================================================
--- trunk/libnautilus-private/nautilus-file.c	(original)
+++ trunk/libnautilus-private/nautilus-file.c	Sat Jan 31 19:06:37 2009
@@ -330,6 +330,7 @@
 	file->details->thumbnailing_failed = FALSE;
 	
 	file->details->is_launcher = FALSE;
+	file->details->is_foreign_link = FALSE;
 	file->details->is_symlink = FALSE;
 	file->details->is_hidden = FALSE;
 	file->details->is_backup = FALSE;
@@ -2790,14 +2791,16 @@
 gboolean 
 nautilus_file_should_show (NautilusFile *file, 
 			   gboolean show_hidden,
-			   gboolean show_backup)
+			   gboolean show_backup,
+			   gboolean show_foreign)
 {
 	/* Never hide any files in trash. */
 	if (nautilus_file_is_in_trash (file)) {
 		return TRUE;
 	} else {
 		return (show_hidden || (!nautilus_file_is_hidden_file (file) && !is_file_hidden (file))) &&
-			(show_backup || !nautilus_file_is_backup_file (file));
+			(show_backup || !nautilus_file_is_backup_file (file)) &&
+			(show_foreign || !(nautilus_file_is_in_desktop (file) && nautilus_file_is_foreign_link (file)));
 	}
 }
 
@@ -2837,7 +2840,8 @@
 
 	return nautilus_file_should_show (file, 
 					  options & SHOW_HIDDEN,
-					  options & SHOW_BACKUP);
+					  options & SHOW_BACKUP,
+					  TRUE);
 }
 
 GList *
@@ -3201,6 +3205,12 @@
 }
 
 gboolean
+nautilus_file_is_foreign_link (NautilusFile *file)
+{
+	return file->details->is_foreign_link;
+}
+
+gboolean
 nautilus_file_has_activation_uri (NautilusFile *file)
 {
 	return file->details->activation_location != NULL;

Modified: trunk/libnautilus-private/nautilus-file.h
==============================================================================
--- trunk/libnautilus-private/nautilus-file.h	(original)
+++ trunk/libnautilus-private/nautilus-file.h	Sat Jan 31 19:06:37 2009
@@ -387,7 +387,8 @@
 gboolean                nautilus_file_is_backup_file                    (NautilusFile                   *file);
 gboolean                nautilus_file_should_show                       (NautilusFile                   *file,
 									 gboolean                        show_hidden,
-									 gboolean                        show_backup);
+									 gboolean                        show_backup,
+									 gboolean                        show_foreign);
 GList                  *nautilus_file_list_filter_hidden_and_backup     (GList                          *files,
 									 gboolean                        show_hidden,
 									 gboolean                        show_backup);
@@ -397,6 +398,7 @@
  * Getting this can require reading the contents of the file.
  */
 gboolean                nautilus_file_is_launcher                       (NautilusFile                   *file);
+gboolean                nautilus_file_is_foreign_link                   (NautilusFile                   *file);
 gboolean                nautilus_file_has_activation_uri                (NautilusFile                   *file);
 char *                  nautilus_file_get_activation_uri                (NautilusFile                   *file);
 GFile *                 nautilus_file_get_activation_location           (NautilusFile                   *file);

Modified: trunk/libnautilus-private/nautilus-link.c
==============================================================================
--- trunk/libnautilus-private/nautilus-link.c	(original)
+++ trunk/libnautilus-private/nautilus-link.c	Sat Jan 31 19:06:37 2009
@@ -502,6 +502,23 @@
 	return retval;
 }
 
+static gboolean
+string_array_contains (char **array,
+		       const char *str)
+{
+	char **p;
+
+	if (!array)
+		return FALSE;
+
+	for (p = array; *p; p++)
+		if (g_ascii_strcasecmp (*p, str) == 0) {
+			return TRUE;
+		}
+
+	return FALSE;
+}
+
 void
 nautilus_link_get_link_info_given_file_contents (const char  *file_contents,
 						 int          link_file_size,
@@ -509,10 +526,13 @@
 						 char       **uri,
 						 char       **name,
 						 char       **icon,
-						 gboolean    *is_launcher)
+						 gboolean    *is_launcher,
+						 gboolean    *is_foreign)
 {
 	GKeyFile *key_file;
 	char *type;
+	char **only_show_in;
+	char **not_show_in;
 
 	if (!is_link_data (file_contents, link_file_size)) {
 		return;
@@ -539,6 +559,21 @@
 		*is_launcher = TRUE;
 	}
 	g_free (type);
-	
+
+	*is_foreign = FALSE;
+	only_show_in = g_key_file_get_string_list (key_file, MAIN_GROUP,
+						   "OnlyShowIn", NULL, NULL);
+	if (only_show_in && !string_array_contains (only_show_in, "GNOME")) {
+		*is_foreign = TRUE;
+	}
+	g_strfreev (only_show_in);
+
+	not_show_in = g_key_file_get_string_list (key_file, MAIN_GROUP,
+						  "NotShowIn", NULL, NULL);
+	if (not_show_in && string_array_contains (not_show_in, "GNOME")) {
+		*is_foreign = TRUE;
+	}
+	g_strfreev (not_show_in);
+
 	g_key_file_free (key_file);
 }

Modified: trunk/libnautilus-private/nautilus-link.h
==============================================================================
--- trunk/libnautilus-private/nautilus-link.h	(original)
+++ trunk/libnautilus-private/nautilus-link.h	Sat Jan 31 19:06:37 2009
@@ -48,6 +48,7 @@
 								  char             **uri,
 								  char             **name,
 								  char             **icon,
-								  gboolean          *is_launcher);
+								  gboolean          *is_launcher,
+								  gboolean          *is_foreign);
 
 #endif /* NAUTILUS_LINK_H */

Modified: trunk/src/file-manager/fm-desktop-icon-view.c
==============================================================================
--- trunk/src/file-manager/fm-desktop-icon-view.c	(original)
+++ trunk/src/file-manager/fm-desktop-icon-view.c	Sat Jan 31 19:06:37 2009
@@ -562,6 +562,9 @@
 
 	fm_directory_view_ignore_hidden_file_preferences
 		(FM_DIRECTORY_VIEW (desktop_icon_view));
+
+	fm_directory_view_set_show_foreign (FM_DIRECTORY_VIEW (desktop_icon_view),
+			                    FALSE);
 	
 	/* Set our default layout mode */
 	nautilus_icon_container_set_layout_mode (icon_container,

Modified: trunk/src/file-manager/fm-directory-view.c
==============================================================================
--- trunk/src/file-manager/fm-directory-view.c	(original)
+++ trunk/src/file-manager/fm-directory-view.c	Sat Jan 31 19:06:37 2009
@@ -233,6 +233,7 @@
 
 	gboolean sort_directories_first;
 
+	gboolean show_foreign_files;
 	gboolean show_hidden_files;
 	gboolean show_backup_files;
 	gboolean ignore_hidden_file_preferences;
@@ -1861,6 +1862,9 @@
 
 	view->details = g_new0 (FMDirectoryViewDetails, 1);
 
+	/* Default to true; desktop-icon-view sets to false */
+	view->details->show_foreign_files = TRUE;
+
 	view->details->non_ready_files =
 		g_hash_table_new_full (file_and_directory_hash,
 				       file_and_directory_equal,
@@ -8891,7 +8895,8 @@
 {
 	return nautilus_file_should_show (file, 
 					  view->details->show_hidden_files, 
-					  view->details->show_backup_files);
+					  view->details->show_backup_files,
+					  view->details->show_foreign_files);
 }
 
 static gboolean
@@ -9007,6 +9012,13 @@
 	view->details->ignore_hidden_file_preferences = TRUE;
 }
 
+void
+fm_directory_view_set_show_foreign (FMDirectoryView *view,
+		                    gboolean show_foreign)
+{
+	view->details->show_foreign_files = show_foreign;
+}
+
 char *
 fm_directory_view_get_uri (FMDirectoryView *view)
 {

Modified: trunk/src/file-manager/fm-directory-view.h
==============================================================================
--- trunk/src/file-manager/fm-directory-view.h	(original)
+++ trunk/src/file-manager/fm-directory-view.h	Sat Jan 31 19:06:37 2009
@@ -436,6 +436,8 @@
 									const char       *parent_uri,
 									NautilusFile     *source);
 void                fm_directory_view_ignore_hidden_file_preferences   (FMDirectoryView  *view);
+void                fm_directory_view_set_show_foreign                 (FMDirectoryView  *view,
+		                                                        gboolean          show_foreign);
 void                fm_directory_view_init_view_iface                  (NautilusViewIface *iface);
 void                fm_directory_view_handle_netscape_url_drop         (FMDirectoryView  *view,
 									const char       *encoded_url,

Modified: trunk/src/file-manager/fm-tree-model.c
==============================================================================
--- trunk/src/file-manager/fm-tree-model.c	(original)
+++ trunk/src/file-manager/fm-tree-model.c	Sat Jan 31 19:06:37 2009
@@ -901,7 +901,8 @@
 
 	should = nautilus_file_should_show (file,
 					    model->details->show_hidden_files,
-					    model->details->show_backup_files);
+					    model->details->show_backup_files,
+					    TRUE);
 
 	if (should
 	    && model->details->show_only_directories



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]