243 lines
9.2 KiB
Diff
243 lines
9.2 KiB
Diff
2008-03-26 Federico Mena Quintero <federico@novell.com>
|
|
|
|
Do not show .desktop files in ~/Desktop which are OnlyShowIn=KDE
|
|
or similar.
|
|
|
|
http://bugzilla.gnome.org/show_bug.cgi?id=338933
|
|
https://bugzilla.novell.com/show_bug.cgi?id=366100
|
|
|
|
* libnautilus-private/nautilus-link.c
|
|
(nautilus_link_get_link_info_given_file_contents): Add a return
|
|
"is_foreign" argument, which says if OnlyShowIn/NotShowIn within
|
|
the .desktop file say that it shouldn't be shown in GNOME.
|
|
|
|
* libnautilus-private/nautilus-directory-async.c
|
|
(link_info_got_data): Use the is_foreign information.
|
|
(link_info_done): Store file->details->is_foreign_link.
|
|
|
|
* libnautilus-private/nautilus-file-private.h (struct
|
|
NautilusFileDetails): Add an is_foreign_link field.
|
|
|
|
* libnautilus-private/nautilus-file.c (nautilus_file_clear_info):
|
|
Initialize is_foreign_link.
|
|
(nautilus_file_is_foreign_link): New public function.
|
|
(nautilus_file_should_show): Don't show foreign links in the
|
|
desktop directory.
|
|
|
|
diff --git a/libnautilus-private/nautilus-directory-async.c b/libnautilus-private/nautilus-directory-async.c
|
|
index c1d0a0a..36eb02f 100644
|
|
--- a/libnautilus-private/nautilus-directory-async.c
|
|
+++ b/libnautilus-private/nautilus-directory-async.c
|
|
@@ -198,7 +198,8 @@ static void link_info_done (NautilusDirectory
|
|
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,
|
|
@@ -1716,7 +1717,7 @@ lacks_link_info (NautilusFile *file)
|
|
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 {
|
|
@@ -3515,7 +3516,8 @@ link_info_done (NautilusDirectory *directory,
|
|
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;
|
|
|
|
@@ -3533,6 +3535,7 @@ link_info_done (NautilusDirectory *directory,
|
|
}
|
|
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);
|
|
}
|
|
@@ -3579,6 +3582,7 @@ link_info_got_data (NautilusDirectory *directory,
|
|
{
|
|
char *uri, *name, *icon;
|
|
gboolean is_launcher;
|
|
+ gboolean is_foreign;
|
|
|
|
nautilus_directory_ref (directory);
|
|
|
|
@@ -3586,17 +3590,18 @@ link_info_got_data (NautilusDirectory *directory,
|
|
name = NULL;
|
|
icon = NULL;
|
|
is_launcher = FALSE;
|
|
+ is_foreign = FALSE;
|
|
|
|
/* Handle the case where we read the Nautilus link. */
|
|
if (result) {
|
|
nautilus_link_get_link_info_given_file_contents (file_contents, bytes_read,
|
|
- &uri, &name, &icon, &is_launcher);
|
|
+ &uri, &name, &icon, &is_launcher, &is_foreign);
|
|
} 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);
|
|
|
|
@@ -3684,7 +3689,7 @@ link_info_start (NautilusDirectory *directory,
|
|
|
|
/* 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);
|
|
diff --git a/libnautilus-private/nautilus-file-private.h b/libnautilus-private/nautilus-file-private.h
|
|
index 8420a7e..2552cf9 100644
|
|
--- a/libnautilus-private/nautilus-file-private.h
|
|
+++ b/libnautilus-private/nautilus-file-private.h
|
|
@@ -190,6 +190,7 @@ struct NautilusFileDetails
|
|
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;
|
|
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
|
|
index 88139eb..23f01df 100644
|
|
--- a/libnautilus-private/nautilus-file.c
|
|
+++ b/libnautilus-private/nautilus-file.c
|
|
@@ -323,6 +323,7 @@ nautilus_file_clear_info (NautilusFile *file)
|
|
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;
|
|
@@ -2705,7 +2706,8 @@ nautilus_file_should_show (NautilusFile *file,
|
|
gboolean show_hidden,
|
|
gboolean show_backup)
|
|
{
|
|
- return (show_hidden || (!nautilus_file_is_hidden_file (file) && !is_file_hidden (file))) &&
|
|
+ return (show_hidden || (!nautilus_file_is_hidden_file (file) && !is_file_hidden (file) &&
|
|
+ !(nautilus_file_is_in_desktop (file) && nautilus_file_is_foreign_link (file)))) &&
|
|
(show_backup || !nautilus_file_is_backup_file (file));
|
|
|
|
}
|
|
@@ -3038,6 +3040,12 @@ nautilus_file_is_launcher (NautilusFile *file)
|
|
}
|
|
|
|
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;
|
|
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
|
|
index 99e0aeb..9db13f9 100644
|
|
--- a/libnautilus-private/nautilus-file.h
|
|
+++ b/libnautilus-private/nautilus-file.h
|
|
@@ -378,6 +378,7 @@ GList *nautilus_file_list_filter_hidden_and_backup (GList
|
|
* 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);
|
|
diff --git a/libnautilus-private/nautilus-link.c b/libnautilus-private/nautilus-link.c
|
|
index abe244a..a6625d7 100644
|
|
--- a/libnautilus-private/nautilus-link.c
|
|
+++ b/libnautilus-private/nautilus-link.c
|
|
@@ -406,16 +406,36 @@ nautilus_link_local_get_link_uri (const char *uri)
|
|
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,
|
|
char **uri,
|
|
char **name,
|
|
char **icon,
|
|
- gboolean *is_launcher)
|
|
+ gboolean *is_launcher,
|
|
+ gboolean *is_foreign)
|
|
{
|
|
GnomeDesktopItem *desktop_file;
|
|
const char *type;
|
|
+ char **only_show_in;
|
|
+ char **not_show_in;
|
|
|
|
if (!is_link_data (file_contents, link_file_size)) {
|
|
return;
|
|
@@ -437,7 +457,20 @@ nautilus_link_get_link_info_given_file_contents (const char *file_contents,
|
|
gnome_desktop_item_get_string (desktop_file, "Exec") != NULL) {
|
|
*is_launcher = TRUE;
|
|
}
|
|
-
|
|
+
|
|
+ *is_foreign = FALSE;
|
|
+ only_show_in = gnome_desktop_item_get_strings (desktop_file, GNOME_DESKTOP_ITEM_ONLY_SHOW_IN);
|
|
+ if (only_show_in && !string_array_contains (only_show_in, "GNOME")) {
|
|
+ *is_foreign = TRUE;
|
|
+ }
|
|
+ g_strfreev (only_show_in);
|
|
+
|
|
+ not_show_in = gnome_desktop_item_get_strings (desktop_file, "NotShowIn"); /* bleh, there isn't GNOME_DESKTOP_ITEM_NO_SHOW_IN */
|
|
+ if (not_show_in && string_array_contains (not_show_in, "GNOME")) {
|
|
+ *is_foreign = TRUE;
|
|
+ }
|
|
+ g_strfreev (not_show_in);
|
|
+
|
|
gnome_desktop_item_unref (desktop_file);
|
|
}
|
|
|
|
diff --git a/libnautilus-private/nautilus-link.h b/libnautilus-private/nautilus-link.h
|
|
index 4a5eb94..aba3103 100644
|
|
--- a/libnautilus-private/nautilus-link.h
|
|
+++ b/libnautilus-private/nautilus-link.h
|
|
@@ -46,7 +46,8 @@ void nautilus_link_get_link_info_given_file_contents (const char
|
|
char **uri,
|
|
char **name,
|
|
char **icon,
|
|
- gboolean *is_launcher);
|
|
+ gboolean *is_launcher,
|
|
+ gboolean *is_foreign);
|
|
void nautilus_link_local_create_from_gnome_entry (GnomeDesktopItem *entry,
|
|
const char *dest_uri,
|
|
const GdkPoint *position,
|