OBS User unknown
2008-03-30 10:06:59 +00:00
committed by Git OBS Bridge
parent b0e18ffb86
commit 1c36eb2159
4 changed files with 260 additions and 189 deletions

View File

@@ -1,185 +0,0 @@
http://bugzilla.gnome.org/show_bug.cgi?id=338933
Don't show .desktop files which are specific to other desktop
environments ("OnlyShowIn=foo" where foo != GNOME).
This patch ignores those files at a very low level
(NautilusDirectoryAsync), and for all directories. It should probably
only do it for ~/Desktop: the original bug is about not wanting to
show the .desktop files which KDE drops in your ~/Desktop (those files
do have OnlyShowIn=KDE).
2006-05-22 Federico Mena Quintero <federico@novell.com>
* libnautilus-private/nautilus-directory-async.c
(is_foreign_desktop_file): Argh, check that the OnlyShowIn /
NotShowIn strings exist before testing their contents. Fixes
https://bugzilla.novell.com/show_bug.cgi?id=177777; this was
filtering all .desktop files!
2006-05-16 Federico Mena Quintero <federico@novell.com>
* libnautilus-private/nautilus-directory-async.c
(is_foreign_desktop_file): Split the contents of the OnlyShowIn
key; it can be a list of strings. Also consider the NotShowIn
key. Fixes https://bugzilla.novell.com/show_bug.cgi?id=176123
2006-04-18 Federico Mena Quintero <federico@novell.com>
Skip .desktop files which are specific to other desktop
environments ("OnlyShowIn=foo"). Fixes these bugs:
http://bugzilla.gnome.org/show_bug.cgi?id=338933
https://bugzilla.novell.com/show_bug.cgi?id=158158
* libnautilus-private/nautilus-directory-async.c
(is_foreign_desktop_file): New helper function: returns TRUE if
it gets a .desktop file with "OnlyShowIn=" not for GNOME.
(directory_load_one): Use is_foreign_desktop_file(), and skip
.desktop files which belong to other desktop environments.
* src/nautilus-application.c (remove_desktop_dot_hidden):
Unlink ~/Desktop/.hidden, which was a Suse hack.
(finish_startup): Call remove_desktop_dot_hidden().
================================================================================
--- nautilus-2.15.4/libnautilus-private/nautilus-directory-async.c
+++ nautilus-2.15.4/libnautilus-private/nautilus-directory-async.c
@@ -939,12 +939,79 @@
}
}
+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;
+}
+
+static gboolean
+is_foreign_desktop_file (NautilusDirectory *directory,
+ GnomeVFSFileInfo *info)
+{
+ const char *mime_type;
+ char *uri;
+ GnomeDesktopItem *ditem;
+ gboolean retval;
+
+ if (!(info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_MIME_TYPE)) {
+ return FALSE;
+ }
+
+ mime_type = gnome_vfs_file_info_get_mime_type (info);
+ if (g_ascii_strcasecmp (mime_type, "application/x-desktop") != 0) {
+ return FALSE;
+ }
+
+ uri = nautilus_directory_get_file_uri (directory, info->name);
+
+ /* NULL GError */
+ ditem = gnome_desktop_item_new_from_uri (uri, 0, NULL);
+
+ retval = FALSE;
+
+ if (ditem) {
+ char **only_show_in;
+ char **not_show_in;
+
+ only_show_in = gnome_desktop_item_get_strings (ditem, GNOME_DESKTOP_ITEM_ONLY_SHOW_IN);
+ if (only_show_in && !string_array_contains (only_show_in, "GNOME")) {
+ retval = TRUE;
+ }
+ g_strfreev (only_show_in);
+
+ not_show_in = gnome_desktop_item_get_strings (ditem, "NotShowIn");
+ if (not_show_in && string_array_contains (not_show_in, "GNOME")) {
+ retval = TRUE;
+ }
+ g_strfreev (not_show_in);
+
+ gnome_desktop_item_unref (ditem);
+ }
+
+ g_free (uri);
+
+ return retval;
+}
+
static void
directory_load_one (NautilusDirectory *directory,
GnomeVFSFileInfo *info)
{
if (info == NULL || info->name == NULL ||
- is_dot_or_dot_dot (info->name)) {
+ is_dot_or_dot_dot (info->name) ||
+ is_foreign_desktop_file (directory, info)) {
return;
}
--- nautilus-2.15.4/src/nautilus-application.c
+++ nautilus-2.15.4/src/nautilus-application.c
@@ -384,6 +384,45 @@
nautilus_module_extension_list_free (providers);
}
+/* Suse had a hack in Nautilus (dot-hidden.dif) that would create a
+ * ~/Desktop/hidden file with the following entries, in order to skip
+ * launchers created by KDE:
+ *
+ * myComputer.desktop
+ * Printer.desktop
+ * Network.desktop
+ * SuSE.desktop
+ * MozillaFirefox.desktop
+ * Office.desktop
+ * trash.desktop
+ *
+ * This was a hack around https://bugzilla.novell.com/show_bug.cgi?id=58875, but
+ * it creates problems: people like to drag a MozillaFirefox.desktop to their
+ * desktop, and it would be ignored due to that patch.
+ *
+ * So, now we unlink() the ~/Desktop/.hidden file under the rationale that that
+ * folder is under your complete control --- if you don't want to see a file in
+ * there, you can just delete it.
+ *
+ * The .desktop files for KDE launchers should have "OnlyShowIn=KDE" in them;
+ * now we support this properly. See
+ * https://bugzilla.novell.com/show_bug.cgi?id=158158 for this.
+ */
+static void
+remove_desktop_dot_hidden (void)
+{
+ char *desktop_dir;
+ char *dot_hidden;
+
+ desktop_dir = nautilus_get_desktop_directory ();
+ dot_hidden = g_build_filename (desktop_dir, ".hidden", NULL);
+
+ unlink (dot_hidden);
+
+ g_free (desktop_dir);
+ g_free (dot_hidden);
+}
+
static void
finish_startup (NautilusApplication *application)
{
@@ -401,6 +440,9 @@
/* Make the desktop work with old Nautilus. */
migrate_old_nautilus_files ();
+ /* Remove artifact from the old dot-hidden.dif patch in Suse */
+ remove_desktop_dot_hidden ();
+
/* Initialize the desktop link monitor singleton */
nautilus_desktop_link_monitor_get ();
}

View File

@@ -0,0 +1,242 @@
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,

View File

@@ -1,3 +1,11 @@
-------------------------------------------------------------------
Fri Mar 28 19:13:46 CET 2008 - federico@novell.com
- Removed nautilus-158158-ignore-foreign-desktop-files.diff; it is obsolete.
- Added nautilus-bnc366100-bgo338933-ignore-foreign-desktop-files.diff
to fix https://bugzilla.novell.com/show_bug.cgi?id=366100 - Desktop
links with "OnlyShowIn=KDE" are now ignored.
-------------------------------------------------------------------
Fri Mar 21 19:58:39 CET 2008 - jpr@suse.de

View File

@@ -16,7 +16,7 @@ BuildRequires: cdparanoia eel-devel fdupes gnome-common gnome-desktop-devel gno
License: GPL v2 or later
Group: Productivity/File utilities
Version: 2.22.0
Release: 8
Release: 13
Summary: The GNOME 2.x Desktop File Manager
Source: ftp://ftp.gnome.org/pub/gnome/sources/nautilus/2.20/%{name}-%{version}.tar.bz2
Url: http://www.gnome.org
@@ -37,8 +37,8 @@ Patch8: nautilus-default-thumbnail-size.diff
Patch9: nautilus-146947-rename-bad-parameters-message.diff
# PATCH-NEEDS-REBASE nautilus-mime.patch
Patch10: nautilus-mime.patch
# PATCH-NEEDS-REBASE nautilus-158158-ignore-foreign-desktop-files.diff bgo338933 federico@novell.com
Patch11: nautilus-158158-ignore-foreign-desktop-files.diff
# PATCH-FIX-UPSTREAM nautilus-bnc366100-bgo338933-ignore-foreign-desktop-files.diff bnc366100 bgo338933 federico@novell.com - ignore OnlyShowIn=KDE
Patch11: nautilus-bnc366100-bgo338933-ignore-foreign-desktop-files.diff
# PATCH-FIX-UPSTREAM nautilus-212649-search-bar-visibility.patch bgo368424 federico@novell.com
Patch12: nautilus-212649-search-bar-visibility.patch
# PATCH-NEEDS-REBASE nautilus-6014-network-servers-in-places-sidebar.diff bgo350974 bnc6014 federico@novell.com
@@ -69,6 +69,7 @@ This package contains Nautilus, the advanced file manager for the GNOME
%package devel
License: GPL v2 or later
Summary: Development Package for Nautilus
Group: Development/Libraries/GNOME
Requires: %{name} = %{version} glib2-devel gtk2-devel
@@ -95,7 +96,7 @@ gnome-patch-translation-prepare
### %patch8 -p1
%patch9 -p0
### %patch10
### %patch11 -p1
%patch11 -p1
%patch12
### %patch13 -p1
### %patch15 -p1
@@ -187,6 +188,11 @@ fi
%{_libdir}/pkgconfig/*.pc
%changelog
* Fri Mar 28 2008 federico@novell.com
- Removed nautilus-158158-ignore-foreign-desktop-files.diff; it is obsolete.
- Added nautilus-bnc366100-bgo338933-ignore-foreign-desktop-files.diff
to fix https://bugzilla.novell.com/show_bug.cgi?id=366100 - Desktop
links with "OnlyShowIn=KDE" are now ignored.
* Fri Mar 21 2008 jpr@suse.de
- Add back gtk2-devel to the devel requires
* Fri Mar 21 2008 vuntz@suse.de