You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
551 lines
13 KiB
551 lines
13 KiB
20 years ago
|
--- gnome-vfs-2.5.5/libgnomevfs/Makefile.am.vfolder-hacks 2004-01-08 03:31:06.000000000 -0500
|
||
|
+++ gnome-vfs-2.5.5/libgnomevfs/Makefile.am 2004-01-29 18:44:53.000000000 -0500
|
||
|
@@ -19,6 +19,7 @@
|
||
|
-DGNOMEVFS_LOCALEDIR=\"$(prefix)/@DATADIRNAME@/locale\" \
|
||
|
-DSYSCONFDIR=\"$(sysconfdir)\" \
|
||
|
-DG_LOG_DOMAIN=\"libgnomevfs\" \
|
||
|
+ -I/usr/kerberos/include \
|
||
|
$(NULL)
|
||
|
|
||
|
libgnomevfs_headers_to_scan_for_enums = \
|
||
|
--- gnome-vfs-2.5.5/modules/vfolder/vfolder-common.c.vfolder-hacks 2003-04-24 11:46:24.000000000 -0400
|
||
|
+++ gnome-vfs-2.5.5/modules/vfolder/vfolder-common.c 2004-01-29 18:44:53.000000000 -0500
|
||
|
@@ -61,7 +61,8 @@
|
||
|
entry->weight = weight;
|
||
|
|
||
|
entry->dirty = TRUE;
|
||
|
-
|
||
|
+ entry->not_shown = FALSE;
|
||
|
+
|
||
|
/*
|
||
|
* Lame-O special case .directory handling, as we don't want them
|
||
|
* showing up for all-applications:///.
|
||
|
@@ -201,7 +202,7 @@
|
||
|
entry_reload_if_needed (Entry *entry)
|
||
|
{
|
||
|
gboolean changed = FALSE;
|
||
|
- gchar *keywords, *deprecates;
|
||
|
+ gchar *keywords, *deprecates, *onlyshowin;
|
||
|
int i;
|
||
|
|
||
|
if (!entry->dirty)
|
||
|
@@ -211,8 +212,17 @@
|
||
|
"Categories",
|
||
|
&keywords,
|
||
|
"Deprecates",
|
||
|
- &deprecates);
|
||
|
-
|
||
|
+ &deprecates,
|
||
|
+ "OnlyShowIn",
|
||
|
+ &onlyshowin);
|
||
|
+
|
||
|
+#if 0
|
||
|
+ g_printerr ("Read cats=%s onlyshowin=%s from entry %s\n",
|
||
|
+ keywords ? keywords : "none",
|
||
|
+ onlyshowin ? onlyshowin : "none",
|
||
|
+ entry->filename);
|
||
|
+#endif
|
||
|
+
|
||
|
/*
|
||
|
* Clear keywords from file, leaving only ones added from
|
||
|
* the directory.
|
||
|
@@ -269,8 +279,28 @@
|
||
|
g_strfreev (parsed);
|
||
|
}
|
||
|
|
||
|
+ if (onlyshowin) {
|
||
|
+ char **parsed = g_strsplit (onlyshowin, ";", -1);
|
||
|
+
|
||
|
+ /* If OnlyShowIn exists, then the default is
|
||
|
+ * that we don't show the entry, unless the
|
||
|
+ * value includes "GNOME"
|
||
|
+ */
|
||
|
+ entry->not_shown = TRUE;
|
||
|
+
|
||
|
+ for (i = 0; parsed[i] != NULL; i++) {
|
||
|
+ if (strcmp (parsed[i], "GNOME") == 0)
|
||
|
+ entry->not_shown = FALSE;
|
||
|
+ }
|
||
|
+
|
||
|
+ /* FIXME do we need to emit some kind of notification here? */
|
||
|
+
|
||
|
+ g_strfreev (parsed);
|
||
|
+ }
|
||
|
+
|
||
|
g_free (keywords);
|
||
|
g_free (deprecates);
|
||
|
+ g_free (onlyshowin);
|
||
|
|
||
|
entry->dirty = FALSE;
|
||
|
}
|
||
|
@@ -380,7 +410,9 @@
|
||
|
const gchar *key1,
|
||
|
gchar **result1,
|
||
|
const gchar *key2,
|
||
|
- gchar **result2)
|
||
|
+ gchar **result2,
|
||
|
+ const gchar *key3,
|
||
|
+ gchar **result3)
|
||
|
{
|
||
|
GnomeVFSHandle *handle;
|
||
|
GnomeVFSFileSize readlen;
|
||
|
@@ -389,7 +421,9 @@
|
||
|
|
||
|
*result1 = NULL;
|
||
|
if (key2)
|
||
|
- *result2 = NULL;
|
||
|
+ *result2 = NULL;
|
||
|
+ if (key3)
|
||
|
+ *result3 = NULL;
|
||
|
|
||
|
if (gnome_vfs_open (&handle,
|
||
|
entry_get_filename (entry),
|
||
|
@@ -416,6 +450,9 @@
|
||
|
if (key2)
|
||
|
entry_key_val_from_string (fullbuf->str, key2, result2);
|
||
|
|
||
|
+ if (key3)
|
||
|
+ entry_key_val_from_string (fullbuf->str, key3, result3);
|
||
|
+
|
||
|
g_string_free (fullbuf, TRUE);
|
||
|
}
|
||
|
|
||
|
@@ -458,7 +495,7 @@
|
||
|
folder->refcnt = 1;
|
||
|
|
||
|
folder->dirty = TRUE;
|
||
|
-
|
||
|
+
|
||
|
return folder;
|
||
|
}
|
||
|
|
||
|
@@ -832,6 +869,10 @@
|
||
|
{
|
||
|
Query *query = folder_get_query (folder);
|
||
|
|
||
|
+#if 0
|
||
|
+ g_printerr ("reading one extended entry %s\n", file_uri ? file_uri : "null");
|
||
|
+#endif
|
||
|
+
|
||
|
if (is_excluded (folder, file_uri, file_info->name))
|
||
|
return FALSE;
|
||
|
|
||
|
@@ -897,6 +938,13 @@
|
||
|
result = gnome_vfs_directory_open (&handle,
|
||
|
extend_uri,
|
||
|
GNOME_VFS_FILE_INFO_DEFAULT);
|
||
|
+
|
||
|
+#if 0
|
||
|
+ g_printerr ("reading extended entries from %s result = %s\n"<
|
||
|
+ extend_uri ? extend_uri : "null",
|
||
|
+ result == GNOME_VFS_OK ? "ok" : "failed");
|
||
|
+#endif
|
||
|
+
|
||
|
if (result != GNOME_VFS_OK)
|
||
|
return FALSE;
|
||
|
|
||
|
@@ -1038,6 +1086,11 @@
|
||
|
{
|
||
|
gboolean changed = FALSE;
|
||
|
|
||
|
+#if 0
|
||
|
+ g_printerr ("folder maybe reload dirty = %d loading = %d\n",
|
||
|
+ folder->dirty, folder->loading);
|
||
|
+#endif
|
||
|
+
|
||
|
if (!folder->dirty || folder->loading)
|
||
|
return;
|
||
|
|
||
|
@@ -1066,6 +1119,11 @@
|
||
|
folder_get_extend_uri (folder),
|
||
|
folder_extend_monitor_cb,
|
||
|
folder);
|
||
|
+ } else {
|
||
|
+#if 0
|
||
|
+ g_printerr ("folder %s has no extend uri, not reading\n",
|
||
|
+ folder->name);
|
||
|
+#endif
|
||
|
}
|
||
|
|
||
|
if (folder_get_query (folder))
|
||
|
@@ -1123,6 +1181,12 @@
|
||
|
void
|
||
|
folder_set_extend_uri (Folder *folder, const gchar *uri)
|
||
|
{
|
||
|
+#if 0
|
||
|
+ g_printerr ("setting extend URI of %s to %s\n",
|
||
|
+ folder->name,
|
||
|
+ uri ? uri : "null");
|
||
|
+#endif
|
||
|
+
|
||
|
g_free (folder->extend_uri);
|
||
|
folder->extend_uri = g_strdup (uri);
|
||
|
|
||
|
@@ -1262,6 +1326,9 @@
|
||
|
if (query && !query_try_match (query, folder, entry))
|
||
|
continue;
|
||
|
|
||
|
+ if (entry->not_shown)
|
||
|
+ continue;
|
||
|
+
|
||
|
g_hash_table_insert (
|
||
|
name_hash,
|
||
|
(gchar *) entry_get_displayname (entry),
|
||
|
@@ -1276,6 +1343,8 @@
|
||
|
"SortOrder",
|
||
|
&sortorder,
|
||
|
NULL,
|
||
|
+ NULL,
|
||
|
+ NULL,
|
||
|
NULL);
|
||
|
if (sortorder) {
|
||
|
list = child_list_prepend_sorted (sortorder,
|
||
|
@@ -1527,6 +1596,9 @@
|
||
|
if (entry_is_allocated (entry))
|
||
|
continue;
|
||
|
|
||
|
+ if (entry->not_shown)
|
||
|
+ continue;
|
||
|
+
|
||
|
if (query && !query_try_match (query, folder, entry))
|
||
|
continue;
|
||
|
|
||
|
@@ -1601,9 +1673,12 @@
|
||
|
{
|
||
|
GSList *li;
|
||
|
|
||
|
+ if (efile->not_shown)
|
||
|
+ return FALSE;
|
||
|
+
|
||
|
if (query == NULL)
|
||
|
return TRUE;
|
||
|
-
|
||
|
+
|
||
|
switch (query->type) {
|
||
|
case QUERY_OR:
|
||
|
for (li = query->val.queries; li != NULL; li = li->next) {
|
||
|
--- gnome-vfs-2.5.5/modules/vfolder/vfolder-common.h.vfolder-hacks 2002-10-25 01:54:43.000000000 -0400
|
||
|
+++ gnome-vfs-2.5.5/modules/vfolder/vfolder-common.h 2004-01-29 18:44:53.000000000 -0500
|
||
|
@@ -82,6 +82,7 @@
|
||
|
|
||
|
guint dirty : 1;
|
||
|
guint user_private : 1;
|
||
|
+ guint not_shown : 1; /* OnlyShowIn=SomeOtherDesktop */
|
||
|
} Entry;
|
||
|
|
||
|
Entry *entry_new (VFolderInfo *info,
|
||
|
@@ -120,7 +121,9 @@
|
||
|
const gchar *key1,
|
||
|
gchar **value1,
|
||
|
const gchar *key2,
|
||
|
- gchar **value2);
|
||
|
+ gchar **value2,
|
||
|
+ const gchar *key3,
|
||
|
+ gchar **value3);
|
||
|
|
||
|
void entry_dump (Entry *entry, int indent);
|
||
|
|
||
|
--- gnome-vfs-2.5.5/modules/vfolder/vfolder-info.c.vfolder-hacks 2003-10-31 06:17:59.000000000 -0500
|
||
|
+++ gnome-vfs-2.5.5/modules/vfolder/vfolder-info.c 2004-01-29 18:52:06.000000000 -0500
|
||
|
@@ -193,12 +193,15 @@
|
||
|
folder_get_name (folder) /* content */);
|
||
|
|
||
|
extend_uri = folder_get_extend_uri (folder);
|
||
|
+#if 0
|
||
|
+ /* this would confuse KDE, just use hardcoded value. */
|
||
|
if (extend_uri) {
|
||
|
xmlNewChild (folder_node /* parent */,
|
||
|
NULL /* ns */,
|
||
|
folder->is_link ? "ParentLink" : "Parent",
|
||
|
extend_uri /* content */);
|
||
|
}
|
||
|
+#endif
|
||
|
|
||
|
if (folder->user_private) {
|
||
|
const gchar *desktop_file;
|
||
|
@@ -274,12 +277,17 @@
|
||
|
NULL /* content */);
|
||
|
doc->xmlRootNode = topnode;
|
||
|
|
||
|
+#if 0
|
||
|
+ /* Never write the WriteDir field, it will
|
||
|
+ * break KDE menus. Just use the hardcoded one.
|
||
|
+ */
|
||
|
if (info->write_dir != NULL) {
|
||
|
xmlNewChild (topnode /* parent */,
|
||
|
NULL /* ns */,
|
||
|
"WriteDir" /* name */,
|
||
|
info->write_dir /* content */);
|
||
|
}
|
||
|
+#endif
|
||
|
|
||
|
/* Deprecated */
|
||
|
if (info->desktop_dir != NULL) {
|
||
|
@@ -539,8 +547,10 @@
|
||
|
gchar *esc_parent;
|
||
|
|
||
|
esc_parent = vfolder_escape_home (parent);
|
||
|
- folder_set_extend_uri (folder, esc_parent);
|
||
|
- folder->is_link = FALSE;
|
||
|
+ if (*esc_parent != '\0') {
|
||
|
+ folder_set_extend_uri (folder, esc_parent);
|
||
|
+ folder->is_link = FALSE;
|
||
|
+ }
|
||
|
|
||
|
xmlFree (parent);
|
||
|
g_free (esc_parent);
|
||
|
@@ -553,8 +563,10 @@
|
||
|
gchar *esc_parent;
|
||
|
|
||
|
esc_parent = vfolder_escape_home (parent);
|
||
|
- folder_set_extend_uri (folder, esc_parent);
|
||
|
- folder->is_link = TRUE;
|
||
|
+ if (*esc_parent != '\0') {
|
||
|
+ folder_set_extend_uri (folder, esc_parent);
|
||
|
+ folder->is_link = TRUE;
|
||
|
+ }
|
||
|
|
||
|
xmlFree (parent);
|
||
|
g_free (esc_parent);
|
||
|
@@ -734,6 +746,53 @@
|
||
|
g_free (itemdir);
|
||
|
}
|
||
|
|
||
|
+static void
|
||
|
+set_hardcoded_extend_uri_recursive (Folder *parent,
|
||
|
+ const char *parent_uri)
|
||
|
+{
|
||
|
+ GSList *subfolders;
|
||
|
+ GSList *tmp;
|
||
|
+
|
||
|
+ /* we set the extend URI unconditionally,
|
||
|
+ * ignoring anything in the file
|
||
|
+ */
|
||
|
+ folder_set_extend_uri (parent, parent_uri);
|
||
|
+
|
||
|
+ subfolders = (GSList*) folder_list_subfolders (parent);
|
||
|
+ tmp = subfolders;
|
||
|
+ while (tmp != NULL) {
|
||
|
+ Folder *sub = tmp->data;
|
||
|
+ char *child_uri;
|
||
|
+
|
||
|
+ child_uri = g_strconcat (parent_uri, folder_get_name (sub),
|
||
|
+ "/", NULL);
|
||
|
+
|
||
|
+ set_hardcoded_extend_uri_recursive (sub, child_uri);
|
||
|
+
|
||
|
+ g_free (child_uri);
|
||
|
+
|
||
|
+ tmp = tmp->next;
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
+set_hardcoded_extend_uri (VFolderInfo *info)
|
||
|
+{
|
||
|
+ gchar *all_user_scheme;
|
||
|
+
|
||
|
+ /*
|
||
|
+ * Set the extend uri for the root folder to the -all-users version of
|
||
|
+ * the scheme, in case the user doesn't have a private .vfolder-info
|
||
|
+ * file yet.
|
||
|
+ */
|
||
|
+ if (!g_str_has_suffix (info->scheme,
|
||
|
+ "-all-users")) {
|
||
|
+ all_user_scheme = g_strconcat (info->scheme, "-all-users:///", NULL);
|
||
|
+ set_hardcoded_extend_uri_recursive (info->root, all_user_scheme);
|
||
|
+ g_free (all_user_scheme);
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
static gboolean
|
||
|
read_vfolder_from_file (VFolderInfo *info,
|
||
|
const gchar *filename,
|
||
|
@@ -829,6 +888,7 @@
|
||
|
folder_unref (info->root);
|
||
|
|
||
|
info->root = folder;
|
||
|
+ set_hardcoded_extend_uri (info);
|
||
|
}
|
||
|
}
|
||
|
else if (g_ascii_strcasecmp (node->name, "ReadOnly") == 0) {
|
||
|
@@ -1723,23 +1783,45 @@
|
||
|
GnomeVFSURI *file_uri;
|
||
|
gboolean exists;
|
||
|
|
||
|
- /*
|
||
|
- * FIXME: load from gconf
|
||
|
+ /* Here we're finding the primary XML file
|
||
|
+ * that this URI will write changes to.
|
||
|
+ * It's the .menu file for -all-users,
|
||
|
+ * and the ~/.gnome2/vfolders/scheme.vfolder-info
|
||
|
+ * file otherwise.
|
||
|
*/
|
||
|
+
|
||
|
+ if (g_str_has_suffix (info->scheme,
|
||
|
+ "-all-users")) {
|
||
|
+ /* The all-users scheme uses the
|
||
|
+ * .menu files
|
||
|
+ */
|
||
|
+ const char *suffix;
|
||
|
+ char *single_scheme;
|
||
|
+
|
||
|
+ suffix = g_strrstr (info->scheme, "-all-users");
|
||
|
+ g_assert (suffix != NULL);
|
||
|
+ single_scheme = g_strndup (info->scheme,
|
||
|
+ suffix - info->scheme);
|
||
|
+
|
||
|
+ info->filename = g_strconcat (SYSCONFDIR,
|
||
|
+ "/X11/desktop-menus/",
|
||
|
+ single_scheme,
|
||
|
+ ".menu",
|
||
|
+ NULL);
|
||
|
+ g_free (single_scheme);
|
||
|
|
||
|
- /*
|
||
|
- * 1st: Try mandatory system-global file located at
|
||
|
- * /etc/gnome-vfs-2.0/vfolders/scheme.vfolder-info. Writability will
|
||
|
- * depend on permissions of this file.
|
||
|
- */
|
||
|
- info->filename = g_strconcat (SYSCONFDIR,
|
||
|
- "/gnome-vfs-2.0/vfolders/",
|
||
|
- scheme, ".vfolder-info",
|
||
|
- NULL);
|
||
|
- file_uri = gnome_vfs_uri_new (info->filename);
|
||
|
+ file_uri = gnome_vfs_uri_new (info->filename);
|
||
|
+
|
||
|
+ exists = gnome_vfs_uri_exists (file_uri);
|
||
|
+ gnome_vfs_uri_unref (file_uri);
|
||
|
|
||
|
- exists = gnome_vfs_uri_exists (file_uri);
|
||
|
- gnome_vfs_uri_unref (file_uri);
|
||
|
+#if 0
|
||
|
+ g_printerr ("all-users filename %s exists = %d\n",
|
||
|
+ info->filename, exists);
|
||
|
+#endif
|
||
|
+ } else {
|
||
|
+ exists = FALSE;
|
||
|
+ }
|
||
|
|
||
|
if (!exists) {
|
||
|
/*
|
||
|
@@ -1751,37 +1833,6 @@
|
||
|
scheme, ".vfolder-info",
|
||
|
NULL);
|
||
|
}
|
||
|
-
|
||
|
- /*
|
||
|
- * Special case for applications-all-users where we want to add any
|
||
|
- * paths specified in $GNOME2_PATH, for people installing in strange
|
||
|
- * places.
|
||
|
- */
|
||
|
- if (!strcmp (scheme, "applications-all-users")) {
|
||
|
- int i;
|
||
|
- const char *path;
|
||
|
- char *dir, **ppath;
|
||
|
- ItemDir *id;
|
||
|
- int weight = 800;
|
||
|
-
|
||
|
- path = g_getenv ("GNOME2_PATH");
|
||
|
- if (path) {
|
||
|
- ppath = g_strsplit (path, ":", -1);
|
||
|
-
|
||
|
- for (i = 0; ppath[i] != NULL; i++) {
|
||
|
- dir = g_build_filename (ppath[i],
|
||
|
- "/share/applications/",
|
||
|
- NULL);
|
||
|
- id = itemdir_new (info,
|
||
|
- dir,
|
||
|
- ITEM_DIR,
|
||
|
- weight--);
|
||
|
- g_free (dir);
|
||
|
- }
|
||
|
-
|
||
|
- g_strfreev (ppath);
|
||
|
- }
|
||
|
- }
|
||
|
}
|
||
|
|
||
|
static gboolean
|
||
|
@@ -1811,25 +1862,16 @@
|
||
|
static gboolean
|
||
|
vfolder_info_init (VFolderInfo *info)
|
||
|
{
|
||
|
- gchar *all_user_scheme;
|
||
|
-
|
||
|
info->loading = TRUE;
|
||
|
info->entries_ht = g_hash_table_new (g_str_case_hash, g_str_case_equal);
|
||
|
info->root = folder_new (info, "Root", TRUE);
|
||
|
|
||
|
+ set_hardcoded_extend_uri (info);
|
||
|
+
|
||
|
/*
|
||
|
- * Set the extend uri for the root folder to the -all-users version of
|
||
|
- * the scheme, in case the user doesn't have a private .vfolder-info
|
||
|
- * file yet.
|
||
|
- */
|
||
|
- all_user_scheme = g_strconcat (info->scheme, "-all-users:///", NULL);
|
||
|
- folder_set_extend_uri (info->root, all_user_scheme);
|
||
|
- g_free (all_user_scheme);
|
||
|
-
|
||
|
- /*
|
||
|
- * Set the default writedir, in case there is no .vfolder-info for this
|
||
|
- * scheme yet. Otherwise this will be overwritten when we read our
|
||
|
- * source.
|
||
|
+ * Set the default writedir, in case there is no .vfolder-info
|
||
|
+ * for this scheme yet. Otherwise this will be overwritten
|
||
|
+ * when we read our source.
|
||
|
*/
|
||
|
info->write_dir = g_strconcat (g_get_home_dir (),
|
||
|
"/" DOT_GNOME "/vfolders/",
|
||
|
@@ -1839,29 +1881,6 @@
|
||
|
/* Figure out which .vfolder-info to read */
|
||
|
vfolder_info_find_filenames (info);
|
||
|
|
||
|
- if (g_getenv ("GNOME_VFS_VFOLDER_INFODIR")) {
|
||
|
- gchar *filename = g_strconcat (info->scheme,
|
||
|
- ".vfolder-info",
|
||
|
- NULL);
|
||
|
-
|
||
|
- g_free (info->filename);
|
||
|
- info->filename =
|
||
|
- vfolder_build_uri (
|
||
|
- g_getenv ("GNOME_VFS_VFOLDER_INFODIR"),
|
||
|
- filename,
|
||
|
- NULL);
|
||
|
- g_free (filename);
|
||
|
- }
|
||
|
-
|
||
|
- if (g_getenv ("GNOME_VFS_VFOLDER_WRITEDIR")) {
|
||
|
- g_free (info->write_dir);
|
||
|
- info->write_dir =
|
||
|
- vfolder_build_uri (
|
||
|
- g_getenv ("GNOME_VFS_VFOLDER_WRITEDIR"),
|
||
|
- info->scheme,
|
||
|
- NULL);
|
||
|
- }
|
||
|
-
|
||
|
info->filename_monitor =
|
||
|
vfolder_monitor_file_new (info->filename,
|
||
|
filename_monitor_cb,
|
||
|
--- gnome-vfs-2.5.5/modules/vfolder/vfolder-util.c.vfolder-hacks 2002-10-10 00:46:29.000000000 -0400
|
||
|
+++ gnome-vfs-2.5.5/modules/vfolder/vfolder-util.c 2004-01-29 18:44:53.000000000 -0500
|
||
|
@@ -207,6 +207,7 @@
|
||
|
{
|
||
|
GnomeVFSResult result;
|
||
|
VFolderMonitor *monitor;
|
||
|
+#if 0
|
||
|
GnomeVFSFileInfo *info;
|
||
|
|
||
|
/* Check the file exists so we don't get a bogus DELETED event */
|
||
|
@@ -218,7 +219,8 @@
|
||
|
|
||
|
if (result != GNOME_VFS_OK)
|
||
|
return NULL;
|
||
|
-
|
||
|
+#endif
|
||
|
+
|
||
|
monitor = g_new0 (VFolderMonitor, 1);
|
||
|
monitor->callback = callback;
|
||
|
monitor->user_data = user_data;
|